check / check (push) Canceled after 0s
script/lint, script/test, script/cibuild and script/docker pass a new CACHEBUST build argument on every build in place of --no-cache, which empties every cache mount. Every Dockerfile stage declares ARG CACHEBUST first, so every RUN step still runs on every check build. The canonical Go Dockerfile mounts Go's build cache on the steps that compile and runs both go test runs with -count=1, so no test result is reused. REPO_POLICIES.md, both checklists, the Go styleguide and the README say so. A stage without the ARG line is served from cache, so a repository re-vendors the scripts and the ARG lines in one commit. Model: opus-5-5
25 lines
819 B
Bash
Executable File
25 lines
819 B
Bash
Executable File
#!/bin/sh
|
|
# script/lint: run the linter. Linting is a phase of the Dockerfile and
|
|
# this builds that phase alone; the linter is never installed or run on
|
|
# a developer host, where a shared result cache and a host-global lock
|
|
# make its answer untrustworthy.
|
|
#
|
|
# The phase is not the last stage in the file, so it is built only when
|
|
# --target names it. A new CACHEBUST value reruns every RUN step, since
|
|
# a cached lint layer is a lint that did not run; unlike --no-cache, it
|
|
# keeps Go's build cache. --output type=cacheonly writes no image, since
|
|
# nothing uses one.
|
|
set -eu
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
|
|
|
|
main() {
|
|
cd "$ROOT"
|
|
docker build --build-arg CACHEBUST="$(date +%s)-$$" \
|
|
--target lint \
|
|
--output type=cacheonly .
|
|
}
|
|
|
|
main "$@"
|