cli/Taskfile.yml
Snider d6345b9f58
build: add release build tasks with linker flags (#239)
* fix(container): prevent data race in State.Get and State.All

Return copies of Container structs instead of pointers to the map
entries. This prevents data races when containers are modified
concurrently by waitForExit and Stop.

Fixes #76

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(updater): resolve PkgVersion duplicate declaration

Remove var PkgVersion from updater.go since go generate creates
const PkgVersion in version.go. Track version.go in git to ensure
builds work without running go generate first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* build: add release build tasks with linker flags for smaller binary

Add -s -w linker flags to strip debug info and symbol table:
- cli:build:release - release build to ./bin/core
- cli:install:release - release install to system PATH

Binary size reduced from 19MB to 14MB (26% reduction).

Fixes #226

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 04:22:00 +00:00

152 lines
3.1 KiB
YAML

version: '3'
vars:
VERSION:
sh: git describe --tags --exact-match 2>/dev/null || echo "dev"
# Base ldflags for version injection
LDFLAGS_BASE: "-X github.com/host-uk/core/pkg/cli.AppVersion={{.VERSION}}"
# 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}}"
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
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