version: '3' vars: # SemVer 2.0.0 build variables SEMVER_TAG: sh: git describe --tags --abbrev=0 2>/dev/null || echo "0.0.0" SEMVER_VERSION: sh: echo "{{.SEMVER_TAG}}" | sed 's/^v//' SEMVER_COMMITS: sh: git rev-list {{.SEMVER_TAG}}..HEAD --count 2>/dev/null || echo "0" SEMVER_COMMIT: sh: git rev-parse --short HEAD 2>/dev/null || echo "unknown" SEMVER_DATE: sh: date -u +%Y%m%d SEMVER_PRERELEASE: sh: '[ "{{.SEMVER_COMMITS}}" = "0" ] && echo "" || echo "dev.{{.SEMVER_COMMITS}}"' # ldflags PKG: "github.com/host-uk/core/pkg/cli" LDFLAGS_BASE: >- -X {{.PKG}}.AppVersion={{.SEMVER_VERSION}} -X {{.PKG}}.BuildCommit={{.SEMVER_COMMIT}} -X {{.PKG}}.BuildDate={{.SEMVER_DATE}} -X {{.PKG}}.BuildPreRelease={{.SEMVER_PRERELEASE}} # Development build: includes debug info LDFLAGS: "{{.LDFLAGS_BASE}}" # Release build: strips debug info and symbol table for smaller binary LDFLAGS_RELEASE: "-s -w {{.LDFLAGS_BASE}}" # Compat alias VERSION: sh: git describe --tags --exact-match 2>/dev/null || echo "dev" tasks: # --- CLI Management --- cli:build: desc: "Build core CLI to ./bin/core (dev build with debug info)" cmds: - go build -ldflags '{{.LDFLAGS}}' -o ./bin/core . cli:build:release: desc: "Build core CLI for release (smaller binary, no debug info)" cmds: - go build -ldflags '{{.LDFLAGS_RELEASE}}' -o ./bin/core . cli:install: desc: "Install core CLI to system PATH (dev build)" cmds: - go install -ldflags '{{.LDFLAGS}}' . cli:install:release: desc: "Install core CLI for release (smaller binary)" cmds: - go install -ldflags '{{.LDFLAGS_RELEASE}}' . # --- Development --- test: desc: "Run all tests" cmds: - core test test:verbose: desc: "Run all tests with verbose output" cmds: - core test --verbose test:run: desc: "Run specific test (use: task test:run -- TestName)" cmds: - core test --run {{.CLI_ARGS}} cov: desc: "Run tests with coverage report" cmds: - core go cov cov-view: desc: "Open HTML coverage report" cmds: - core go cov --open fmt: desc: "Format Go code" cmds: - core go fmt lint: desc: "Run linter" cmds: - core go lint mod:tidy: desc: "Run go mod tidy" cmds: - core go mod tidy # --- Quality Assurance --- qa: desc: "Run QA: fmt, vet, lint, test" cmds: - core go qa qa:quick: desc: "Quick QA: fmt, vet, lint only" cmds: - core go qa quick qa:full: desc: "Full QA: + race, vuln, security" cmds: - core go qa full qa:fix: desc: "QA with auto-fix" cmds: - core go qa --fix # --- Build --- build: desc: "Build project with auto-detection" cmds: - core build build:ci: desc: "Build for CI (all targets, checksums)" cmds: - core build --ci # --- Environment --- doctor: desc: "Check development environment" cmds: - core doctor doctor:verbose: desc: "Check environment with details" cmds: - core doctor --verbose # --- Code Review --- review: desc: "Run CodeRabbit review" cmds: - coderabbit review --prompt-only check: desc: "Tidy, test, and review" cmds: - task: mod:tidy - task: test - task: review # --- i18n --- i18n:generate: desc: "Regenerate i18n key constants" cmds: - go generate ./pkg/i18n/... i18n:validate: desc: "Validate i18n key usage" cmds: - go run ./internal/tools/i18n-validate ./... # --- Multi-repo (when in workspace) --- dev:health: desc: "Check health of all repos" cmds: - core dev health dev:work: desc: "Full workflow: status, commit, push" cmds: - core dev work dev:status: desc: "Show status of all repos" cmds: - core dev work --status