version: "3"

# Quality gate for Tapir. `task check` is THE gate referenced by ADR-009 and the
# CI workflow. Run it before every push (TBD: commit directly to main).

tasks:
  default:
    cmds:
      - task: check

  check:
    desc: Full quality gate — fmt check, vet, lint, test.
    cmds:
      - task: fmt-check
      - task: vet
      - task: lint
      - task: test

  fmt:
    desc: Format all Go code.
    cmds:
      - gofmt -w .

  fmt-check:
    desc: Fail if any file is not gofmt-clean.
    cmds:
      - "test -z \"$(gofmt -l .)\" || { echo 'gofmt: files need formatting:'; gofmt -l .; exit 1; }"

  vet:
    desc: go vet.
    cmds:
      - go vet ./...

  lint:
    desc: golangci-lint (installed by CI; skipped locally if absent).
    cmds:
      - 'command -v golangci-lint >/dev/null 2>&1 && golangci-lint run ./... || echo "golangci-lint not installed — skipping (CI installs it)"'

  test:
    desc: Run all tests. -p 1 serializes packages so the embedded-postgres tests
      (store, web, oidc) don't race on the shared ~/.embedded-postgres-go data dir.
    cmds:
      - go test -p 1 ./...

  generate:
    desc: Regenerate Templ components (*_templ.go) from *.templ sources.
    cmds:
      - 'command -v templ >/dev/null 2>&1 && templ generate || go run github.com/a-h/templ/cmd/templ@latest generate'

  build:
    desc: Compile the binary.
    cmds:
      - go build -o bin/tapir ./cmd/tapir

  skills:
    desc: Wire the engineering skills library into this repo (symlinks, gitignored).
    cmds:
      - curl -fsSL https://gitea.d-ma.be/mathias/skills/raw/branch/main/install.sh | bash
