script/fmt and script/fmt-check now run prettier over all Markdown after the Go step. The prettier config, package.json, yarn.lock and the node and yarn steps of script/bootstrap are copied from sneak/prompts with the same pinned versions. script/bootstrap also installs curl when missing: script/install-go needs it, so a host with only docker and git stopped there. Model: opus-5-5
49 lines
1.6 KiB
Bash
Executable File
49 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
# script/fmt-check: check formatting (read-only). Fails instead of
|
|
# writing. It checks every Go file outside .tool, which is more than
|
|
# script/fmt formats: `go fmt ./...` skips `testdata` directories and
|
|
# files and directories whose names start with `.` or `_`. Fix a file
|
|
# only this reports with `gofmt -w`. Markdown is checked with prettier.
|
|
set -eu
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
|
|
|
# Must match the pin in script/bootstrap.
|
|
NODE_VERSION="22.17.0"
|
|
|
|
# script/bootstrap installs node and yarn under nvm and leaves neither
|
|
# on the PATH of the shell that called it, so resolve the pinned
|
|
# toolchain here the way bootstrap's own install step does. nvm is a
|
|
# bash script, hence the subshell.
|
|
run_yarn() {
|
|
if command -v yarn >/dev/null 2>&1; then
|
|
exec yarn "$@"
|
|
fi
|
|
if [ ! -s "$HOME/.nvm/nvm.sh" ]; then
|
|
echo "fmt-check: no yarn; run script/bootstrap first" >&2
|
|
exit 1
|
|
fi
|
|
exec bash -c '. "$HOME/.nvm/nvm.sh" && nvm use "$1" >/dev/null &&
|
|
shift && exec yarn "$@"' bash "$NODE_VERSION" "$@"
|
|
}
|
|
|
|
main() {
|
|
cd "$ROOT"
|
|
# Where script/bootstrap installs Go when the host has none.
|
|
PATH="$PATH:$ROOT/.tool/go/bin"
|
|
# .tool/go holds that toolchain's own sources, which are not ours.
|
|
if ! unformatted="$(find . -path ./.tool -prune -o -name '*.go' -type f \
|
|
-exec gofmt -l {} +)"; then
|
|
echo "fmt-check: gofmt failed" >&2
|
|
exit 1
|
|
fi
|
|
if [ -n "$unformatted" ]; then
|
|
echo "Files not formatted:" >&2
|
|
echo "$unformatted" >&2
|
|
exit 1
|
|
fi
|
|
run_yarn run prettier --check '**/*.md' --tab-width 4 --prose-wrap always
|
|
}
|
|
|
|
main "$@"
|