Files
prompts/script/fmt
T
sneak 42af5e06e1
check / check (push) Canceled after 0s
Install the pinned node when the installed one is another major version (closes #118)
script/bootstrap used whatever node was installed, so on the CI runner
image, which ships node 24, the pinned yarn 1.22.22 ran under node 24
and printed the deprecation warning DEP0169 on every bootstrap. It now
uses the installed node only when its major version is the pinned one,
and otherwise installs the pinned node with nvm, as it already did when
node was missing, with yarn and the packages under it. Only the major is
compared because the Dockerfile stages use a node 22 alpine image that
nvm cannot replace. script/fmt and script/fmt-check run yarn under nvm's
pinned node when nvm has it installed, and otherwise the yarn on PATH.

Model: opus-5-5
2026-10-08 00:33:44 +00:00

33 lines
985 B
Bash
Executable File

#!/bin/sh
# script/fmt: format all files (writes).
set -eu
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
# Must match the pin in script/bootstrap.
NODE_VERSION="22.17.0"
# When the installed node is not the pinned major version,
# script/bootstrap installs the pinned node and yarn under nvm and
# leaves neither on the PATH of the shell that called it. So yarn runs
# under nvm's pinned node when nvm has it installed, and otherwise is
# the yarn on PATH. nvm is a bash script, hence the subshell.
run_yarn() {
if [ -d "$HOME/.nvm/versions/node/v$NODE_VERSION" ]; then
exec bash -c '. "$HOME/.nvm/nvm.sh" && nvm use "$1" >/dev/null &&
shift && exec yarn "$@"' bash "$NODE_VERSION" "$@"
fi
if ! command -v yarn >/dev/null 2>&1; then
echo "fmt: no yarn; run script/bootstrap first" >&2
exit 1
fi
exec yarn "$@"
}
main() {
cd "$ROOT"
run_yarn run prettier --write '**/*.md' --tab-width 4 --prose-wrap always
}
main "$@"