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)

Aperta Adatta ai principianti
#652 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.