#!/bin/sh # script/fmt-check: check formatting (read-only). Same tools and scope # as script/fmt, but fails instead of writing and names what it would # change: the Go on the host, the markdown with prettier in the # Dockerfile's fmt-check stage. # # --no-cache because a cached check layer is a check that did not run. # The tag makes each build replace the previous image instead of leaving # a dangling one behind. set -eu SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)" ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)" # goimports v0.42.0, 2026-08-07. Must match script/fmt. GOIMPORTS_REF="golang.org/x/tools/cmd/goimports@009367f5c17a8d4c45a961a3a509277190a9a6f0" main() { cd "$ROOT" files="$(gofmt -s -l .)" if [ -n "$files" ]; then echo "gofmt: files not formatted:" >&2 echo "$files" >&2 exit 1 fi files="$(go run "$GOIMPORTS_REF" -l .)" if [ -n "$files" ]; then echo "goimports: files not formatted:" >&2 echo "$files" >&2 exit 1 fi docker build --no-cache \ --target fmt-check \ -t "$("$SCRIPT_DIR/projectname")-fmt-check" . } main "$@"