Files
docker-agent/Taskfile.yml
T
Arnaud Héritier 7d132a8272 ci: skip Go jobs on docs-only PRs, merge queue, timeouts, race on main, zizmor
- `changes` (dorny/paths-filter) marks a PR docs-only when every changed
  file is under docs/; Markdown elsewhere is test data so it still counts as
  code. Go jobs and image need it; lint always runs; gate treats skipped as
  passed. Pushes and merge-queue runs always run everything.
- `merge_group` trigger, with its own concurrency group like main and tags.
- `timeout-minutes` on every job (default was 6 h).
- `test-race` runs `task test-race` (-race -shuffle=on) on main pushes only;
  not part of gate so it never sits on the PR critical path.
- test-windows excludes the workspace, Go caches and TEMP from Defender
  real-time scanning; best effort (continue-on-error).
- zizmor audits workflows and composite actions in lint (min severity low);
  .github/zizmor.yml keeps the deliberate workflow_run trigger of pr-review.
  Its findings fixed here: persist-credentials: false on every checkout.
- Local actions referenced as `$/.github/actions/...` (resolved from the
  running commit, no checkout needed) — also fixes publish, which called a
  ./ action without checking out. actionlint 1.7.12 does not know the syntax
  yet, so that one message is ignored; workflow-lint skips `$/` refs.
- go-licenses pinned to v2.0.1; gate writes a job/result table to the step
  summary; publish no longer creates an unused builder.
2026-09-10 16:04:32 +02:00

183 lines
5.7 KiB
YAML

# https://taskfile.dev
version: "3"
vars:
GIT_TAG:
sh: echo "${GIT_TAG:-$(git describe --tags --exact-match 2>/dev/null || echo dev)}"
GIT_COMMIT:
sh: echo "${GIT_COMMIT:-$(git rev-parse HEAD 2>/dev/null || echo dev)}"
env:
GIT_TAG: "{{.GIT_TAG}}"
GIT_COMMIT: "{{.GIT_COMMIT}}"
tasks:
default:
desc: Run lint, test, and build
aliases: [dev]
deps: [lint, test, build]
build:
desc: Build the application binary
aliases: [b]
sources:
- "**/*.go"
- "**/*.template"
- "**/*.txt"
- "**/*.yml"
- "**/*.yaml"
- go.mod
- go.sum
generates:
- bin/docker-agent
cmds:
- ./scripts/build.sh
clean:
desc: Remove the generated binary
cmds:
- rm -rf ./bin
update-models:
desc: Refresh the embedded models.dev catalog snapshot
cmds:
- go generate ./pkg/modelsdev/...
models-delta:
desc: Show the models.dev catalog delta (HEAD vs the working-tree snapshot by default)
silent: true
cmds:
- bash ./scripts/models-delta.sh {{.CLI_ARGS}}
test-models-delta:
desc: Run the golden-fixture regression test for the models-delta jq scripts
cmds:
- bash ./scripts/models-delta-test.sh
check-models-fresh:
desc: Fail if the embedded models.dev snapshot is stale (run update-models to refresh)
cmds:
- CHECK_MODELS_SNAPSHOT_FRESHNESS=1 go test -run TestSnapshotDateIsFresh ./pkg/modelsdev/
check-models-live:
desc: Validate example model references against the live models.dev API (hits the network; not part of `task test` since drift here is external and must not block PRs — see issue #4134)
cmds:
- CHECK_MODELS_DEV_LIVE=1 go test -count=1 -run TestExamplesAgainstLiveModelsDev ./pkg/config/
check-plan-cross:
desc: Cross-compile the plan storage and host plans packages for every file-lock build-tag variant (plus the plan-consuming CLI and TUI packages on windows)
cmds:
- GOOS=linux GOARCH=amd64 go build ./pkg/tools/builtin/plan/ ./pkg/plans/
- GOOS=windows GOARCH=amd64 go build ./pkg/tools/builtin/plan/ ./pkg/plans/ ./cmd/root/ ./pkg/tui/
- GOOS=js GOARCH=wasm go build ./pkg/tools/builtin/plan/ ./pkg/plans/
- GOOS=wasip1 GOARCH=wasm go build ./pkg/tools/builtin/plan/ ./pkg/plans/
- GOOS=plan9 GOARCH=amd64 go build ./pkg/tools/builtin/plan/ ./pkg/plans/
deploy-local:
desc: Deploy the cli-plugin
aliases: [install]
deps: [build]
cmds:
- mkdir -p "${HOME}/.docker/cli-plugins"
- /bin/ln -sf "$(pwd)/bin/docker-agent" "${HOME}/.docker/cli-plugins/docker-agent"
lint:
desc: Run the linters
sources:
- "**/*.go"
- .golangci.yml
- go.mod
- go.sum
cmds:
- GOLANGCI_LINT_CACHE={{.TASKFILE_DIR}}/.cache/lint golangci-lint run --allow-parallel-runners
- go run ./lint .
- go mod tidy --diff >/dev/null || (echo 'go.mod/go.sum files are not tidy' && exit 1)
format:
desc: Format code
sources:
- "**/*.go"
- .golangci.yml
cmds:
- golangci-lint fmt
test:
desc: Run tests
dotenv: [.env.test]
cmds:
- go test ./...
test-race:
desc: Run tests with the race detector and shuffled order (slow; CI runs it on main only)
dotenv: [.env.test]
cmds:
- go test -race -shuffle=on ./...
test-wasm-providers:
desc: Test explicit provider registration in the WASM demo (requires Node)
cmds:
- task: test-wasm-js
- go test ./e2e -run '^TestWasmProviderDependencies$'
# The GOOS=js half of test-wasm-providers; the e2e check above already runs
# under `task test`, so CI calls this to avoid recompiling the e2e package.
test-wasm-js:
desc: Run the GOOS=js provider registration tests (requires Node)
cmds:
- GOOS=js GOARCH=wasm go test -exec="$(go env GOROOT)/lib/wasm/go_js_wasm_exec" ./cmd/wasm
- GOOS=js GOARCH=wasm go test -exec="$(go env GOROOT)/lib/wasm/go_js_wasm_exec" pkg/model/provider/factory_js_openai_vendor_test.go
test-binary:
desc: Run tests on build binary
deps: [deploy-local]
dotenv: [.env.test]
cmds:
- go test -tags=binary_required ./e2e/binary/...
build-local:
desc: Build binaries for local host platform
cmds:
- docker build --target=local --build-arg GIT_TAG --build-arg GIT_COMMIT --platform local --output=./dist .
- |
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
mv ./dist/docker-agent ./dist/docker-agent.exe
fi
cross:
desc: Build binaries for multiple platforms
cmds:
- docker buildx build --target=cross --build-arg GIT_TAG --build-arg GIT_COMMIT --platform linux/amd64,linux/arm64,darwin/amd64,darwin/arm64,windows/amd64,windows/arm64 --output=./dist .
build-image:
desc: Build Docker image
cmds:
- docker build -t docker/docker-agent --build-arg GIT_TAG --build-arg GIT_COMMIT .
push-image:
desc: Build and Push Docker image
cmds:
- docker buildx build --push --platform linux/amd64,linux/arm64 -t docker/docker-agent --build-arg GIT_TAG --build-arg GIT_COMMIT .
template:
desc: Build the sandbox template image with the locally-built binary
cmds:
- docker buildx build --load --target=template --build-arg GIT_TAG --build-arg GIT_COMMIT -t docker/docker-agent-sbx-templates .
docs-serve:
desc: Preview the documentation site locally with Hugo
dir: docs
cmds:
- docker build -t docker-agent-docs .
- docker run --rm -v $(cd .. && pwd)/docs:/src -p 1313:1313 docker-agent-docs
docs-check-links:
desc: Build the documentation site and check for broken links
dir: docs
cmds:
- ../scripts/docs-check-links.sh
record-demo:
desc: Record demo gif
cmds:
- vhs ./docs/recordings/demo.tape