check / check (pull_request) Waiting to run
A plain `docker build .` stamped `dev`: `.dockerignore` left out `.git` and the Dockerfile defaulted VERSION to `dev`. `.dockerignore` is now the canonical one plus this repo's entries, sending `.git` without `.git/config`. Given no build arguments, the builder stamps `git describe --tags --always` and the commit and date from git, and fails if `.git` is present but yields no version. The empty CHECK_EPOCH refusal is gone so the plain build succeeds; the scripts still pass an epoch. `script/version` now prints `git describe --tags --always --dirty`, so make, the scripts and a plain build agree. Model: opus-5-5
46 lines
1.9 KiB
Bash
Executable File
46 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
# script/docker: build the Docker image tagged with the project name.
|
|
# The tag comes from script/projectname. Unlike the canonical copy in
|
|
# sneak/prompts, it passes a fresh CHECK_EPOCH instead of --no-cache, and
|
|
# COMMIT and COMMIT_DATE as well as VERSION.
|
|
#
|
|
# This builds the PRODUCT image only, and the product Dockerfile has no
|
|
# lint stage: linting lives in Dockerfile.lint and is run by
|
|
# script/lint. So a green here means `make fmt-check` and `make test`
|
|
# passed and the image built -- it says nothing about lint. The gates
|
|
# are script/check (which runs script/lint) and script/cibuild (which
|
|
# builds both files).
|
|
set -eu
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
|
|
ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"
|
|
|
|
main() {
|
|
cd "$ROOT"
|
|
# Same CHECK_EPOCH contract as script/cibuild, for the same reason
|
|
# and with the same bare-assignment and `$$` requirements -- see the
|
|
# comments there. This script is not the CI gate, but a local build
|
|
# is almost always warm, so without this it would report a green the
|
|
# tree had not earned and the two entrypoints would disagree about
|
|
# whether the tree is clean.
|
|
epoch="$(date +%s%N)$$"
|
|
|
|
# Version, commit and build date are computed here on the host and
|
|
# passed into the build, where they take precedence over what the
|
|
# build would derive from the .git in its context. VERSION comes
|
|
# from script/version, as in the Makefile, so the image reports the
|
|
# same string, -dirty included, that a local build of the same tree
|
|
# would.
|
|
version="$("$SCRIPT_DIR/version")"
|
|
commit="$(git rev-parse HEAD 2>/dev/null || echo unknown)"
|
|
commit_date="$(git show -s --format=%cs HEAD 2>/dev/null || echo unknown)"
|
|
|
|
docker build --build-arg CHECK_EPOCH="$epoch" \
|
|
--build-arg VERSION="$version" \
|
|
--build-arg COMMIT="$commit" \
|
|
--build-arg COMMIT_DATE="$commit_date" \
|
|
-t "$("$SCRIPT_DIR/projectname")" .
|
|
}
|
|
|
|
main "$@"
|