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: "forge.lthn.ai/core/go/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 ./... # --- Core IDE (Wails v3) --- ide:dev: desc: "Run Core IDE in Wails dev mode" dir: cmd/core-ide cmds: - cd frontend && npm install && npm run build - wails3 dev ide:build: desc: "Build Core IDE production binary" dir: cmd/core-ide cmds: - cd frontend && npm install && npm run build - wails3 build ide:frontend: desc: "Build Core IDE frontend only" dir: cmd/core-ide/frontend cmds: - npm install - npm run build # --- Core App (FrankenPHP + Wails v3) --- app:setup: desc: "Install PHP-ZTS build dependency for Core App" cmds: - brew tap shivammathur/php 2>/dev/null || true - brew install shivammathur/php/php@8.4-zts app:composer: desc: "Install Laravel dependencies for Core App" dir: cmd/core-app/laravel cmds: - composer install --no-dev --optimize-autoloader --no-interaction app:build: desc: "Build Core App (FrankenPHP + Laravel desktop binary)" dir: cmd/core-app env: CGO_ENABLED: "1" CGO_CFLAGS: sh: /opt/homebrew/opt/php@8.4-zts/bin/php-config --includes CGO_LDFLAGS: sh: "echo -L/opt/homebrew/opt/php@8.4-zts/lib $(/opt/homebrew/opt/php@8.4-zts/bin/php-config --ldflags) $(/opt/homebrew/opt/php@8.4-zts/bin/php-config --libs)" cmds: - go build -tags nowatcher -o ../../bin/core-app . app:dev: desc: "Build and run Core App" dir: cmd/core-app env: CGO_ENABLED: "1" CGO_CFLAGS: sh: /opt/homebrew/opt/php@8.4-zts/bin/php-config --includes CGO_LDFLAGS: sh: "echo -L/opt/homebrew/opt/php@8.4-zts/lib $(/opt/homebrew/opt/php@8.4-zts/bin/php-config --ldflags) $(/opt/homebrew/opt/php@8.4-zts/bin/php-config --libs)" DYLD_LIBRARY_PATH: "/opt/homebrew/opt/php@8.4-zts/lib" cmds: - go build -tags nowatcher -o ../../bin/core-app . - ../../bin/core-app # --- BugSETI (Wails v3 System Tray) --- bugseti:dev: desc: "Build and run BugSETI (production binary with embedded frontend)" dir: cmd/bugseti cmds: - cd frontend && npm install && npm run build - go build -buildvcs=false -o ../../bin/bugseti . - ../../bin/bugseti bugseti:build: desc: "Build BugSETI production binary" dir: cmd/bugseti cmds: - cd frontend && npm install && npm run build - go build -trimpath -buildvcs=false -ldflags="-w -s" -o ../../bin/bugseti . bugseti:frontend: desc: "Build BugSETI frontend only" dir: cmd/bugseti/frontend cmds: - npm install - npm run build # --- 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