#!/bin/sh # script/gofumpt: run gofumpt over this repo's Go files. # # Takes exactly one mode argument, --write or --check, and runs the same # gofumpt version over the same files in both modes. script/fmt and # script/fmt-check both go through here, and so does the Docker lint # stage, so what gets formatted and what gets verified cannot drift # apart. set -eu ROOT="$(cd "$(dirname "$0")/.." && pwd -P)" # gofumpt v0.12.0, 2026-10-04. `go run` fetches and builds exactly this # version, so neither a developer machine nor the lint image needs # gofumpt installed. GOFUMPT="mvdan.cc/gofumpt@v0.12.0" usage() { echo "usage: script/gofumpt --write|--check" >&2 exit 2 } main() { [ "$#" -eq 1 ] || usage cd "$ROOT" # Every Go file in the repo. gofumpt holds generated files, such as # mfer/mf.pb.go, to gofmt's rules only. case "$1" in --write) go run "$GOFUMPT" -l -w . ;; --check) # Own line: a failing command inside `[ -n "$(...)" ]` does # not trip `set -e`, so a gofumpt that never ran would pass. unformatted="$(go run "$GOFUMPT" -l .)" if [ -n "$unformatted" ]; then echo "gofumpt: files need formatting (run make fmt):" >&2 echo "$unformatted" >&2 exit 1 fi ;; *) usage ;; esac } main "$@"