Restore Markdown formatting in fmt/fmt-check and pin prettier (closes #19)
script/fmt and script/fmt-check now run gofmt for Go and prettier for Markdown; fmt-check reports each independently. prettier is pinned at 3.8.1 by package.json/yarn.lock (integrity hash); .prettierrc and .prettierignore are the house settings copied from the prompts repo. script/bootstrap installs node and yarn from the host package manager and runs `yarn install --frozen-lockfile`. The Markdown check runs in CI via the Dockerfile build stage, where bootstrap provides prettier; it is removed from the lint stage because the golangci-lint image has no node. JS manifests are copied before bootstrap so the yarn layer caches, and node_modules is dockerignored. node is an unpinned host runtime like git/make/go: nvm's glibc node does not run on the musl/Alpine build image, so the canonical nvm route is not usable here; prettier is the hash-pinned formatter. The wholesale Markdown reformat follows in the next commit. Model: opus-4-8
This commit is contained in:
@@ -11,6 +11,12 @@ set -eu
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||
|
||||
# yarn provides prettier, which formats Markdown. yarn is a tool, like
|
||||
# node/git/make/go below; the reference that governs formatting output is
|
||||
# prettier, pinned by yarn.lock's integrity hash and installed by
|
||||
# `yarn install --frozen-lockfile`.
|
||||
YARN_VERSION="1.22.22"
|
||||
|
||||
PKGMGR=""
|
||||
SUDO=""
|
||||
APT_UPDATED=""
|
||||
@@ -58,6 +64,21 @@ missing() {
|
||||
! command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
ensure_node() {
|
||||
if ! missing node; then return 0; fi
|
||||
pkg_install nodejs nodejs node nodejs
|
||||
}
|
||||
|
||||
ensure_yarn() {
|
||||
if ! missing yarn; then return 0; fi
|
||||
if ! missing corepack; then
|
||||
corepack enable >/dev/null 2>&1 || true
|
||||
corepack prepare "yarn@$YARN_VERSION" --activate
|
||||
else
|
||||
pkg_install yarn yarn yarn yarn
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
cd "$ROOT"
|
||||
|
||||
@@ -71,6 +92,16 @@ main() {
|
||||
if missing make; then pkg_install gnumake make make make; fi
|
||||
if missing go; then pkg_install go golang go go; fi
|
||||
|
||||
# node runs prettier and is an unpinned host tool for the same reason
|
||||
# git/make/go are: it comes from the host package manager, whatever
|
||||
# version it ships. It is not installed via nvm the way the canonical
|
||||
# template does, because nvm's prebuilt node is glibc-linked and does
|
||||
# not run on this repo's musl/Alpine build image. prettier — the tool
|
||||
# whose version affects formatting output — is pinned by yarn.lock.
|
||||
ensure_node
|
||||
ensure_yarn
|
||||
yarn install --frozen-lockfile
|
||||
|
||||
# Linting runs via docker only (script/lint), so docker is a lint
|
||||
# prerequisite rather than something bootstrap installs. Warn, do
|
||||
# not fail: everything except `make lint` — and, through it,
|
||||
|
||||
+12
-1
@@ -1,12 +1,23 @@
|
||||
#!/bin/sh
|
||||
# script/fmt: format all files (writes).
|
||||
# script/fmt: format all files (writes). gofmt for Go, prettier for
|
||||
# Markdown. prettier is the pinned devDependency in package.json/
|
||||
# yarn.lock; script/bootstrap installs it (see run_prettier).
|
||||
set -eu
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||
|
||||
run_prettier() {
|
||||
if ! command -v yarn >/dev/null 2>&1; then
|
||||
echo "fmt: yarn not found; run script/bootstrap first" >&2
|
||||
exit 1
|
||||
fi
|
||||
yarn run prettier "$@"
|
||||
}
|
||||
|
||||
main() {
|
||||
cd "$ROOT"
|
||||
gofmt -s -w .
|
||||
run_prettier --write '**/*.md' --tab-width 4 --prose-wrap always
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
+21
-2
@@ -1,18 +1,37 @@
|
||||
#!/bin/sh
|
||||
# script/fmt-check: check formatting (read-only). Same scope as
|
||||
# script/fmt, but fails instead of writing.
|
||||
# script/fmt: gofmt for Go, prettier for Markdown. Both run every time
|
||||
# and each reports independently, so a failure names which formatter is
|
||||
# unhappy; the script exits non-zero if either found unformatted files.
|
||||
set -eu
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"
|
||||
|
||||
run_prettier() {
|
||||
if ! command -v yarn >/dev/null 2>&1; then
|
||||
echo "fmt-check: yarn not found; run script/bootstrap first" >&2
|
||||
exit 1
|
||||
fi
|
||||
yarn run prettier "$@"
|
||||
}
|
||||
|
||||
main() {
|
||||
cd "$ROOT"
|
||||
rc=0
|
||||
|
||||
files="$(gofmt -s -l .)"
|
||||
if [ -n "$files" ]; then
|
||||
echo "gofmt: files not formatted:" >&2
|
||||
echo "$files" >&2
|
||||
exit 1
|
||||
rc=1
|
||||
fi
|
||||
|
||||
if ! run_prettier --check '**/*.md' --tab-width 4 --prose-wrap always; then
|
||||
echo "prettier: Markdown not formatted; run make fmt" >&2
|
||||
rc=1
|
||||
fi
|
||||
|
||||
exit "$rc"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user