2026-02-12 09:20:55 +03:00
|
|
|
.PHONY: lint test build clean
|
|
|
|
|
|
|
|
|
|
# Lint all shell scripts with shellcheck
|
|
|
|
|
lint:
|
|
|
|
|
@echo "Running shellcheck..."
|
|
|
|
|
shellcheck -x lib/*.sh bin/josh-sync
|
|
|
|
|
@echo "All checks passed."
|
|
|
|
|
|
|
|
|
|
# Run bats-core unit tests
|
|
|
|
|
test:
|
|
|
|
|
@echo "Running tests..."
|
|
|
|
|
bats tests/unit/
|
|
|
|
|
@echo "All tests passed."
|
|
|
|
|
|
|
|
|
|
# Bundle into a single self-contained script
|
|
|
|
|
build: dist/josh-sync
|
|
|
|
|
|
|
|
|
|
dist/josh-sync: bin/josh-sync lib/*.sh VERSION
|
|
|
|
|
@mkdir -p dist
|
|
|
|
|
@echo "Bundling josh-sync..."
|
|
|
|
|
@echo '#!/usr/bin/env bash' > dist/josh-sync
|
|
|
|
|
@echo "# josh-sync $(cat VERSION) — bundled distribution" >> dist/josh-sync
|
|
|
|
|
@echo '# Generated by: make build' >> dist/josh-sync
|
|
|
|
|
@echo '' >> dist/josh-sync
|
|
|
|
|
@# Inline all library modules (strip shebangs and source directives)
|
2026-02-13 18:38:07 +03:00
|
|
|
@for f in lib/core.sh lib/config.sh lib/auth.sh lib/state.sh lib/sync.sh lib/onboard.sh; do \
|
2026-02-12 09:20:55 +03:00
|
|
|
echo "# --- $$f ---" >> dist/josh-sync; \
|
|
|
|
|
grep -v '^#!/' "$$f" | grep -v '^# shellcheck source=' >> dist/josh-sync; \
|
|
|
|
|
echo '' >> dist/josh-sync; \
|
|
|
|
|
done
|
|
|
|
|
@# Append CLI (strip shebangs, source directives, and source commands)
|
|
|
|
|
@echo '# --- bin/josh-sync ---' >> dist/josh-sync
|
|
|
|
|
@grep -v '^#!/' bin/josh-sync \
|
|
|
|
|
| grep -v '^# shellcheck source=' \
|
|
|
|
|
| grep -v '^source "\$${JOSH_LIB_DIR}/' \
|
|
|
|
|
| sed '/^JOSH_LIB_DIR=/,/^source/d' \
|
|
|
|
|
>> dist/josh-sync
|
|
|
|
|
@chmod +x dist/josh-sync
|
|
|
|
|
@echo "Built: dist/josh-sync ($(wc -l < dist/josh-sync) lines)"
|
|
|
|
|
|
|
|
|
|
clean:
|
|
|
|
|
rm -rf dist/
|