check / check (push) Failing after 3s
gofumpt and protoc-gen-go are tools of a separate Go module in bin/tools, so `go tool` builds them from source checked against bin/tools/go.sum and mfer's own module gains no dependencies. script/bootstrap downloads that module, and unpacks protoc 33.4 into bin/protoc from its release archive after checking the sha256 it holds for the platform. script/generate runs that protoc with the pinned plugin, so mfer/mf.go and its go:generate line go. script/prettier runs only the node_modules prettier, fails when it differs from the package.json pin, finds the node bootstrap installed through nvm by the version in .nvmrc, and runs prettier once. Comment and package.json fixes. Model: opus-5-5
70 lines
2.4 KiB
Bash
Executable File
70 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
# script/prettier: run prettier over this repo's canonical file set.
|
|
#
|
|
# Takes exactly one mode argument, --write or --check, and applies the
|
|
# same patterns in both modes. script/fmt and script/fmt-check both go
|
|
# through here, so the set of files that get formatted and the set that
|
|
# get verified cannot drift apart.
|
|
#
|
|
# Failures are never swallowed: a missing prettier is an error, not a
|
|
# silent skip. A formatter that quietly does nothing is worse than one
|
|
# that fails loudly.
|
|
set -eu
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
|
|
|
usage() {
|
|
echo "usage: script/prettier --write|--check" >&2
|
|
exit 2
|
|
}
|
|
|
|
# Only the prettier yarn installed from yarn.lock, never one on PATH: a
|
|
# different version formats differently.
|
|
PRETTIER="$ROOT/node_modules/.bin/prettier"
|
|
|
|
main() {
|
|
[ "$#" -eq 1 ] || usage
|
|
case "$1" in
|
|
--write | --check) mode="$1" ;;
|
|
*) usage ;;
|
|
esac
|
|
|
|
cd "$ROOT"
|
|
|
|
# Where there is no node on PATH, script/bootstrap installs the version
|
|
# .nvmrc names through nvm, which keeps it in this directory.
|
|
if ! command -v node >/dev/null 2>&1; then
|
|
PATH="$HOME/.nvm/versions/node/v$(cat .nvmrc)/bin:$PATH"
|
|
fi
|
|
if ! command -v node >/dev/null 2>&1; then
|
|
echo "prettier: node is missing; run script/bootstrap" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# node_modules keeps the old prettier after package.json moves to a new
|
|
# one, until script/bootstrap runs again, so compare the two.
|
|
if ! installed="$("$PRETTIER" --version 2>/dev/null)"; then
|
|
echo "prettier: not installed; run script/bootstrap" >&2
|
|
exit 1
|
|
fi
|
|
pinned="$(node -p 'require("./package.json").devDependencies.prettier')"
|
|
if [ "$installed" != "$pinned" ]; then
|
|
echo "prettier: package.json pins $pinned but $installed is" \
|
|
"installed; run script/bootstrap" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Markdown and JSON, repo-wide rather than root-only, so files in
|
|
# subdirectories (docs/, once it exists) are covered too. Exclusions
|
|
# live in .prettierignore; REPO_POLICIES.md is excluded there because
|
|
# it is a verbatim copy of an upstream document.
|
|
#
|
|
# --no-error-on-unmatched-pattern is deliberately NOT used: both
|
|
# patterns always match at least one tracked file (README.md,
|
|
# package.json), so an empty match means the glob broke, and prettier
|
|
# erroring out is exactly what we want rather than a vacuous pass.
|
|
"$PRETTIER" "$mode" "**/*.md" "**/*.json"
|
|
}
|
|
|
|
main "$@"
|