check / check (push) Canceled after 0s
Re-vendors REPO_POLICIES.md, script/cibuild, script/docker, script/lint and script/test from sneak/prompts next at 0653579, on sneak's ruling in sneak/prompts#130. In the lint, test and builder stages of the Dockerfile, the module download, and in builder the apk install, move above ARG CACHEBUST, so Docker keeps those layers until the base image, the install line, go.mod or go.sum changes. golangci-lint run also mounts golangci-lint's cache. Every step that lints, tests or compiles still comes after ARG CACHEBUST, and go test keeps -count=1 and -race. README and TODO.md say the same. Model: opus-5-5
34 lines
1.4 KiB
Bash
Executable File
34 lines
1.4 KiB
Bash
Executable File
#!/bin/sh
|
|
# script/cibuild: run the CI build. It bootstraps first: a CI runner
|
|
# checks out and runs this and nothing else, and script/fmt-check runs
|
|
# the formatter on the host, which a pristine checkout cannot do.
|
|
# A new CACHEBUST value reruns every RUN step after the ARG CACHEBUST
|
|
# line, since a cached gate phase is a check that did not run; unlike
|
|
# --no-cache, it keeps the layers above that line and the cache mounts.
|
|
# This relies on every stage of the Dockerfile declaring ARG CACHEBUST
|
|
# before every step that lints, tests or compiles; a stage without that
|
|
# line is served from cache on an unchanged tree, with no warning.
|
|
set -eu
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
|
|
|
|
main() {
|
|
cd "$ROOT"
|
|
"$SCRIPT_DIR/bootstrap"
|
|
"$SCRIPT_DIR/check"
|
|
# The version and the tag each get their own line: a failing
|
|
# command substitution inside an argument does not trip `set -e`,
|
|
# so the inline form degrades silently to an empty constant. The
|
|
# VERSION build argument takes precedence over the version a build
|
|
# stage derives from the .git in the context.
|
|
version="$(git describe --tags --always --dirty 2>/dev/null || true)"
|
|
[ -n "$version" ] || version="unknown"
|
|
tag="$("$SCRIPT_DIR/projectname")"
|
|
docker build --build-arg CACHEBUST="$(date +%s)-$$" \
|
|
--build-arg VERSION="$version" \
|
|
-t "$tag" .
|
|
}
|
|
|
|
main "$@"
|