.PHONY: all bootstrap setup check test lint fmt fmt-check build clean deps test-coverage test-integration install release release-snapshot docker hooks # Version number VERSION := 0.1.0-dev # Default target all: bsdaily # Install all development dependencies. bootstrap: @script/bootstrap # Prepare a fresh clone: bootstrap plus pre-commit hook. setup: @script/setup # Combined pre-commit/CI gate: tests, lint, format check. check: @script/check # Run tests only. test: @script/test # Check if code is formatted (read-only). fmt-check: @script/fmt-check # Format code. fmt: @script/fmt # Run linter only. lint: @script/lint # Build binary (pure Go; no CGO required since we use modernc.org/sqlite). bsdaily: internal/*/*.go cmd/bsdaily/*.go CGO_ENABLED=0 go build -o $@ ./cmd/bsdaily # Clean build artifacts. clean: rm -f bsdaily go clean # Install dependencies. deps: go mod download go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest # Run tests with coverage. test-coverage: go test -v -coverprofile=coverage.out ./... go tool cover -html=coverage.out -o coverage.html # Run integration tests. test-integration: go test -v -tags=integration ./... install: bsdaily cp ./bsdaily $(HOME)/bin/ # Build and publish release artifacts via goreleaser. release: goreleaser release --clean # Dry-run a release build without publishing or tagging. release-snapshot: goreleaser release --clean --snapshot # Build Docker image. docker: @script/docker # Install pre-commit hook. hooks: @script/install-precommit