check / check (push) Waiting to run
The script/ builds pass a new CACHEBUST build argument on every run in place of --no-cache, which also emptied Go's build cache mount. Every Dockerfile stage declares ARG CACHEBUST first, so every RUN step still reruns on an unchanged tree. The canonical Go Dockerfile mounts only Go's build cache, on the steps that compile, so compiled packages survive between check builds; both go test runs carry -count=1, so no test result is reused. golangci-lint's own cache and the module cache are not kept. A repository re-vendors the scripts and adds the ARG lines in one commit: a stage without the line is served from cache with no warning. Unverified: not yet tried on the shared CI runner. Model: opus-5-5
30 lines
1.2 KiB
Bash
Executable File
30 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# script/docker: build the Docker image tagged with the project name.
|
|
# Identical in all repos; the tag comes from script/projectname.
|
|
# A new CACHEBUST value reruns every RUN step, since a cached gate phase
|
|
# is a check 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.
|
|
set -eu
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
|
|
|
|
main() {
|
|
cd "$ROOT"
|
|
# 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 "$@"
|