aws-samples / aws-samples/sample-autonomous-cloud-coding-agents
(tooling): astro check pre-commit hook fails under bare Node v20 (not mise-pinned Node 22)
- Lingua principale
- TypeScript
- Stelle
- 143
- Fork
- 46
- Merge medio
- 3g 9h
- PR unite (30g)
- 20
Descrizione
## Component
Documentation — repo tooling (prek `astro check` hook)
## Describe the bug
The `docs-astro-check` pre-commit hook invokes `./node_modules/.bin/astro check` via a bare `bash -lc`, which resolves `node` from the login shell's `PATH`. When mise's shell hook isn't active in that shell (non-interactive shells, spawned/agent shells, and any environment where mise activation hasn't run), `node` is an older system version (e.g. v20), and the hook fails:
```
astro check (docs)....Failed
- hook id: docs-astro-check
- exit code: 1
Node.js v20.20.2 is not supported by Astro!
Please upgrade Node.js to a supported version: ">=22.12.0"
```
The repo pins Node 22 via mise (`node = "22"` in the root and `docs/mise.toml`), so the _intended_ Node is fine — the hook just doesn't guarantee it's the one on `PATH` at commit time.
## Expected behavior
`git commit` runs the `astro check` hook with the mise-pinned Node 22 regardless of whether the invoking shell has mise activated, so it passes in CI, interactive, and non-interactive/agent shells alike.
## Current behavior
The hook:
```yaml
entry: bash -lc 'cd "$(git rev-parse --show-toplevel)/docs" && ./node_modules/.bin/astro check'
```
`bash -lc` sources the login profile but does not necessarily activate mise (mise activation is a shell hook, not part of every profile). So the `node` that runs `astro check` is whatever's first on `PATH` — system v20 in a plain shell — and Astro rejects it (`>=22.12.0` required). Committing succeeds only when the invoking process already has mise's Node 22 on `PATH` (e.g. running the commit through `mise exec -- git commit`).
## Reproduction steps
1. In a shell **without** mise activation (or `node -v` showing v20), from the repo (or a worktree):
2. Edit any file under `docs/` so the hook's `files: ^docs/` pattern matches, and `git add` it.
3. `git commit -m "docs: test"`.
4. Observe the `astro check` hook fail with `Node.js v20.x is not supported by Astro`.
5. Compare: `mise exec -- git commit -m "docs: test"` passes the same hook (Node 22 on `PATH`).
## Possible solution
Pin the hook to the mise-managed Node so it doesn't depend on ambient shell activation, e.g. run the command under `mise exec` (mirroring how the eslint/agent hooks already invoke `mise` tasks):
```yaml
entry: bash -lc 'cd "$(git rev-parse --show-toplevel)/docs" && mise exec -- ./node_modules/.bin/astro check'
```
or route it through a mise task (e.g. `mise //docs:astro-check`) as the other language-specific hooks do (`mise //cli:eslint`, `mise run quality`). The eslint and agent hooks already prefix with `mise`, so this is a consistency gap in the docs hooks specifically.
## Node version
System `node` v20.20.2 (bare shell); mise-pinned v22.23.1 when activated.
## mise version
2026.7.13
## Additional context
Surfaced while committing from a worktree via the standard `AGENTS.md` workflow. The `docs-sync` hook in the same repo has a separate worktree-specific failure (filed separately). Both mean a plain `git commit` touching `docs/` currently needs `mise exec --` to succeed.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Individua la configurazione pre-commit contenente la voce docs-astro-check e confrontala con gli hook eslint e agent esistenti con prefisso mise. Riproduci il problema con un ambiente Node v20 non attivato, quindi verifica che l’hook utilizzi il Node 22 fissato e che un semplice commit che modifica docs vada a buon fine.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- bash, node.js
- Ambito
- build-system, tooling
- Tipo di issue
- Bug
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Tranquilla
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 78/100