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)
- Ngôn ngữ chính
- TypeScript
- Star
- 143
- Fork
- 46
- Merge trung bình
- 3 ngày 10 giờ
- Pull request đã merge (30 ngày)
- 24
Mô tả
## 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.
Hướng dẫn đóng góp
Hướng nghiên cứu
Xác định cấu hình pre-commit chứa mục docs-astro-check và so sánh cấu hình đó với các hook eslint và agent hiện có được thêm tiền tố mise. Tái hiện lỗi trong môi trường Node v20 chưa được kích hoạt, sau đó xác minh rằng hook sử dụng Node 22 được ghim và một commit thông thường có thay đổi docs sẽ thành công.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- bash, node.js
- Lĩnh vực
- build-system, tooling
- Loại issue
- Lỗi
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 78/100