mirror of
https://github.com/docker/docker-agent.git
synced 2026-11-04 10:02:15 +00:00
- `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.
183 lines
5.7 KiB
YAML
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
|