Re-vendor the canonical files from sneak/prompts at e3f79c4 (closes #95)
check / check (push) Waiting to run
check / check (push) Waiting to run
Every vendored file, REPO_POLICIES.md and every model script is the copy at sneak/prompts e3f79c4, with this repository's own entries kept after the canonical content. Lint and test are phases of the Dockerfile that write no image. Every build in script/ passes a new CACHEBUST value, which every stage declares first, so every RUN step runs again; the steps that compile keep Go's build cache, and both go test runs pass -count=1. make test runs the suite under the race detector as nobody. Dockerfile.lint, script/verify-lint-image-pin and make test-race are gone. Prettier runs on the host. .claude/settings.json is deleted. Deviation: the set comes from e3f79c4 on next rather than dd4027b. Judgement call: the test phase mounts the cache at nobody's /tmp/.cache/go-build, owned by nobody. Model: opus-5-5
This commit is contained in:
+16
-18
@@ -1,28 +1,26 @@
|
||||
#!/bin/sh
|
||||
# script/lint: run the linter. golangci-lint is never installed on a
|
||||
# host: this builds Dockerfile.lint, which copies the repo into the
|
||||
# digest-pinned golangci-lint image and lints as a build step, so a
|
||||
# successful build is a clean lint. A cold cache needs the network to
|
||||
# pull the image and for `go mod download`; once warm this runs offline
|
||||
# until go.mod or go.sum changes.
|
||||
# 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.
|
||||
#
|
||||
# Without a fresh CHECK_EPOCH docker serves the gate layers from cache
|
||||
# on an unchanged tree and this exits 0 having run no linter. The PID is
|
||||
# in the value because two lint runs land inside the same second easily.
|
||||
#
|
||||
# The image is never used, so --output=type=cacheonly writes none;
|
||||
# without it every run leaves an untagged image behind.
|
||||
# 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. This relies on every stage of the Dockerfile
|
||||
# declaring ARG CACHEBUST first; a stage without that line is served
|
||||
# from cache on an unchanged tree, with no warning.
|
||||
# --output type=cacheonly writes no image, since nothing uses one.
|
||||
set -eu
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
||||
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
|
||||
|
||||
main() {
|
||||
cd "$ROOT"
|
||||
docker build \
|
||||
--build-arg CHECK_EPOCH="$(date +%s)-$$" \
|
||||
--output=type=cacheonly \
|
||||
-f Dockerfile.lint \
|
||||
.
|
||||
docker build --build-arg CACHEBUST="$(date +%s)-$$" \
|
||||
--target lint \
|
||||
--output type=cacheonly .
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user