Skip to content

chore: consolidate git hooks on prek and fix all pre-commit checks#705

Open
HagegeR wants to merge 20 commits intoNVIDIA:mainfrom
HagegeR:fix/pre-commit-hooks-pass
Open

chore: consolidate git hooks on prek and fix all pre-commit checks#705
HagegeR wants to merge 20 commits intoNVIDIA:mainfrom
HagegeR:fix/pre-commit-hooks-pass

Conversation

@HagegeR
Copy link
Contributor

@HagegeR HagegeR commented Mar 23, 2026

Summary

Replace Husky + lint-staged with prek as the sole git hook runner, add a comprehensive .pre-commit-config.yaml, wire it into CI, and fix every pre-existing lint failure so the repo passes npx prek run --all-files cleanly.

Changes

  • Hook runner migration: Remove .husky/ directory, scripts/husky-env.sh, and lint-staged dependency. All hook logic now lives in .pre-commit-config.yaml with default_install_hook_types for pre-commit, commit-msg, and pre-push.
  • .pre-commit-config.yaml: Prioritized hooks — file fixers (P0), formatters: shfmt, ruff format, prettier (P5), auto-fix linters: ruff --fix, eslint --fix (P6), read-only checks: shellcheck, hadolint-docker, gitleaks, SPDX headers, merge-conflict, large-file, yaml/toml/json (P10), project tests: Vitest (P20). Commit-msg via alessandrojcm/commitlint-pre-commit-hook. Pre-push: tsc --noEmit, pyright.
  • CI pr.yaml: Replace make check with npx prek run --all-files + npx prek run --all-files --stage pre-push. make check now delegates to prek as well.
  • Pre-existing lint fixes: Trailing whitespace and missing EOF newlines across docs/skills/scripts. Executable bits on scripts with shebangs. Shellcheck SC2206 in install.sh, unused variable in setup-spark.sh. Hadolint ignore pragmas in test Dockerfiles. Missing SPDX headers in 5 files.
  • shfmt formatting: All shell scripts reformatted with shfmt -i 2 -ci -bn.
  • Ruff fixes: Removed unused current_indent variable and renamed ambiguous l to line in docs-to-skills.py.
  • PR template: Updated to reference npx prek run --all-files as the primary check command.
  • CONTRIBUTING.md: Documents prek workflow and migration from Husky (git config --unset core.hooksPath).
  • Vitest: Unified into a single root vitest.config.ts workspace with cli and plugin projects.
  • Security: Pin Dockerfile base image by sha256 digest, validate endpoint URLs (SSRF), mask API keys from ps output, prevent TOCTOU in cloudflared install, weekly Dockerfile digest freshness check.
  • Docs: Workspace file persistence and backup/restore documentation.

Type of Change

  • [] Code change for a new feature, bug fix, or refactor.
  • Code change with doc updates.
  • Doc only. Prose changes without code sample modifications.
  • Doc only. Includes code sample changes.

Testing

  • npx prek run --all-files passes (or equivalently make check).
  • npm test passes.
  • make docs builds without warnings. (for doc-only changes)

Checklist

General

Code Changes

  • Formatters applied — npx prek run --all-files auto-fixes formatting (or make format for targeted runs).
  • Tests added or updated for new or changed behavior.
  • No secrets, API keys, or credentials committed.
  • Doc pages updated for any user-facing behavior changes (new commands, changed defaults, new features, bug fixes that contradict existing docs).

Doc Changes

  • Follows the style guide. Try running the update-docs agent skill to draft changes while complying with the style guide. For example, prompt your agent with "/update-docs catch up the docs for the new changes I made in this PR."
  • New pages include SPDX license header and frontmatter, if creating a new page.
  • Cross-references and links verified.

Migration

Contributors with a previous Husky setup should run once:

git config --unset core.hooksPath
npm install

Summary by CodeRabbit

  • Documentation

    • Trailing-newline and minor formatting fixes across docs; PR template and contributing guidance clarified.
  • Developer Experience

    • Unified full-repo check command (npx prek run --all-files); simplified pre-commit hook installation and hook behavior.
  • Build & Infrastructure

    • CI workflow action versions and lint/test steps updated; Docker runtime install step consolidated.
  • Code Quality

    • SPDX/license and hadolint directives added; extensive script formatting/robustness tweaks and safer temp-file handling; .gitignore extended.

HagegeR added 13 commits March 23, 2026 09:02
uv run --with pyright omitted optional dev deps; pytest was unresolved in
orchestrator/test_endpoint_validation.py. Align pre-push and pre-commit
with nemoclaw-blueprint Makefile (uv run --extra dev --with pyright).
- husky-env: shellcheck shell=bash for SC2148
- Dockerfile: hadolint pragmas and merged pip install with pyyaml pin
- vitest pre-commit: use repo-root node_modules vitest (avoid broken npx)
Husky sets core.hooksPath; prek refuses to install in that case.
Still run prek install for clones without hooksPath.
- Add default_install_hook_types (pre-commit, commit-msg, pre-push) to .pre-commit-config.yaml
- Simplify npm prepare to run prek install without repeated --hook-type flags
- Align backup-workspace, brev-setup, and install-openshell with shfmt/shellcheck style
Remove .husky/ directory, scripts/husky-env.sh, and the lint-staged
dependency. All hook logic now lives in .pre-commit-config.yaml:

  - pre-commit: formatters, linters, Vitest (unchanged)
  - commit-msg: commitlint (unchanged)
  - pre-push: tsc, pyright, plus prek-push-range which re-runs
    pre-commit hooks on the outgoing commit range

The prepare script unconditionally runs `prek install` (no more
core.hooksPath guard). Contributors with a stale Husky hooksPath
should run: git config --unset core.hooksPath
Replace the ad-hoc make check (eslint + prettier + tsc + ruff) with
npx prek run --all-files, which covers every hook in
.pre-commit-config.yaml (shfmt, shellcheck, hadolint, gitleaks, SPDX
headers, etc.) in addition to the existing linters.

Pre-push stage hooks (tsc --noEmit, pyright) run in a second step
with --skip prek-push-range to avoid recursion.

make check now delegates to prek as well.
- Fix trailing whitespace and missing final newlines in docs, skills,
  CODE_OF_CONDUCT.md, and scripts/debug.sh.
- Set executable bits on scripts with shebangs: install.sh,
  smoke-macos-install.sh, test-full-e2e.sh, lib/runtime.sh,
  migrations/snapshot.py.
- Fix shellcheck SC2206 in install.sh (safe IFS+read -ra for version
  parsing) and remove unused SCRIPT_DIR in setup-spark.sh.
- Add hadolint ignore pragmas to test Dockerfiles (DL3008, DL3013,
  DL3042, DL3059, DL4006 — test images don't need version pinning).
- Add SPDX license headers to __init__.py, test-double-onboard.sh,
  test-inference-local.sh, test-inference.sh, test-full-e2e.sh.
prek already runs pre-commit-stage hooks during pre-push, so the
prek-push-range hook caused a duplicate pass. Remove it.

Also fix: test-full-e2e.sh exec bit, hadolint SC2086/SC2038 ignores
in test Dockerfiles.
prek's system hook couldn't resolve npx. Use the repo-local
node_modules/.bin/commitlint directly via git rev-parse.
commitlint, tsc-check, and pyright-check were missing priority.
Set all three to priority 10 (validation tier).
@coderabbitai
Copy link

coderabbitai bot commented Mar 23, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR applies widespread non-functional edits: normalizing trailing newlines, standardizing shell/redirection formatting, adding SPDX headers, consolidating a Docker install layer, switching CI/pre-commit tooling to use prek (npx prek run --all-files), and updating GitHub Action versions and workflow steps.

Changes

Cohort / File(s) Summary
Markdown newline & minor doc fixes
\.agents/skills/docs/.../how-it-works.md, .../overview.md, .../release-notes.md, .../SKILL.md, .../architecture.md, .../commands.md, .../inference-profiles.md, .../network-policies.md, .../troubleshooting.md, docs/about/overview.md, docs/about/release-notes.md, CODE_OF_CONDUCT.md
Added trailing newlines and normalized EOF formatting; reinstated an existing reference entry; removed stray trailing whitespace. No content changes.
CI / workflows & npm/make changes
.github/workflows/pr.yaml, .github/workflows/commit-lint.yaml, .github/workflows/docker-pin-check.yaml, .github/workflows/docs-preview-pr.yaml, .github/workflows/docs.yaml, .github/workflows/nightly-e2e.yaml, .github/PULL_REQUEST_TEMPLATE.md, Makefile, package.json
Upgraded several GitHub Action versions, increased lint timeout, switched lint/test/format flow to npx prek run --all-files (replaced make check), updated prepare script and Makefile targets, and adjusted workflow install/test steps.
Pre-commit config & hooks
.pre-commit-config.yaml, package.json
Changed default hook install types, replaced hadolint hook with a local system hook, switched commitlint to a repo hook rev, adjusted vitest/tsc/pyright hook commands/priorities and hook behavior.
Dockerfiles
Dockerfile, test/Dockerfile.sandbox, test/e2e/Dockerfile.full-e2e
Combined PyYAML with global OpenClaw CLI install in a single RUN layer and added hadolint ignore directives in test Dockerfiles.
Shell scripts — formatting, redirection, SPDX headers, temp-file handling
install.sh, uninstall.sh, setup.sh, setup-spark.sh, brev-setup.sh, nemoclaw-start.sh, walkthrough.sh, start-services.sh, debug.sh, scripts/backup-workspace.sh, scripts/check-spdx-headers.sh, scripts/fix-coredns.sh, scripts/install-openshell.sh, scripts/lib/runtime.sh, scripts/setup-spark.sh, scripts/install.sh, scripts/smoke-macos-install.sh, scripts/start-services.sh, scripts/test-inference-local.sh, scripts/test-inference.sh, scripts/backup-workspace.sh, scripts/fix-coredns.sh, scripts/install-openshell.sh, scripts/docs-to-skills.py, scripts/backup-workspace.sh, scripts/..., test/e2e/*.sh, test/e2e/test-double-onboard.sh, test/e2e/test-full-e2e.sh, test/e2e/Dockerfile.full-e2e, scripts/setup-spark.sh
Standardized function bodies (many fail/info/warn converted to multi-line), normalized redirection and here-string spacing (>/dev/null, <<<), added SPDX headers to several scripts, replaced fixed temp files with mktemp in inference tests, and made numerous whitespace/formatting-only edits while preserving behavior.
Docs tooling script
scripts/docs-to-skills.py
Refactored slicing, parsing, and string-handling for readability; no public API/signature changes.
Repository docs & contributing
CONTRIBUTING.md
Added guidance to unset legacy core.hooksPath and re-run npm install to re-register hooks; wording and newline fixes.
SPDX header insertion
nemoclaw-blueprint/orchestrator/__init__.py, test/e2e/*.sh, scripts/test-inference.sh, scripts/test-inference-local.sh
Added SPDX copyright/license header comments to specified files.
.gitignore
.gitignore
Added *.tsbuildinfo to ignore TypeScript build-info artifacts.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 Hopping through diffs with nimble feet,

Newlines tucked in tidy and neat,
Prek hums the hooks, SPDX crowns the shells,
Docker layers merged where installation dwells,
A rabbit cheers — the repo's trim and sweet.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 22.95% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main objective: consolidating git hooks on prek (replacing Husky) and fixing all pre-commit checks to pass. It is concise and specific.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
scripts/walkthrough.sh (1)

67-77: ⚠️ Potential issue | 🟠 Major

Avoid echoing the live API key in fallback instructions.

Line 75 currently expands and prints the real NVIDIA_API_KEY. Use a literal placeholder to prevent accidental secret disclosure.

🔐 Proposed fix
-  echo "    export NVIDIA_API_KEY=$NVIDIA_API_KEY"
+  echo "    export NVIDIA_API_KEY=nvapi-..."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/walkthrough.sh` around lines 67 - 77, The fallback instructions
currently expand and print the real NVIDIA_API_KEY (see the echo line that
contains export NVIDIA_API_KEY=$NVIDIA_API_KEY); change that echo so the dollar
sign is not expanded (e.g., use single quotes or escape the $) and print a
literal placeholder like $NVIDIA_API_KEY or <NVIDIA_API_KEY> instead, ensuring
the tmux fallback block (the if ! command -v tmux ... echo lines) never exposes
the live secret.
🧹 Nitpick comments (4)
test/e2e/test-double-onboard.sh (1)

32-50: Optional: centralize E2E helper functions to reduce duplication.

pass(), fail(), skip(), and section() are now near-identical to helpers in test/e2e/test-full-e2e.sh; consider sourcing a shared helper script to keep output logic in one place.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/e2e/test-double-onboard.sh` around lines 32 - 50, The test scripts
duplicate the helper functions pass(), fail(), skip(), and section()—extract
these into a single shared helper script (e.g., test/e2e/e2e-helpers.sh) and
update test/e2e/test-double-onboard.sh to source that file instead of redefining
pass, fail, skip, and section; ensure the shared script exports any variables it
needs (PASS, FAIL, SKIP, TOTAL) or documents they must be defined by the caller
and keep function names unchanged so existing calls in test-double-onboard.sh
and test-full-e2e.sh continue to work.
uninstall.sh (1)

67-68: Same pattern as install.sh — consider consistent refactor.

This wait/status pattern matches install.sh. The same optional refactor suggestion applies: declare local status before the conditional for clarity.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@uninstall.sh` around lines 67 - 68, The wait/exit-status handling in
uninstall.sh uses "wait \"$pid\"" followed by "local status=$?" which mirrors
install.sh; declare "local status" before using it and initialize it (e.g.,
local status=0) so the variable is clearly scoped prior to the conditional that
checks it — update the block around the "wait \"$pid\"" and "local status=$?"
lines to declare "local status" earlier (and assign from $? after wait) for
consistency with the refactor applied in install.sh.
install.sh (1)

172-176: Verify local variable scope inside conditional branches.

The pattern here declares status as local inside both if and else branches. While Bash allows this, it's slightly unconventional. The local declaration in each branch means status is function-scoped (not branch-scoped), so it works correctly, but for clarity consider declaring once before the conditional.

♻️ Optional: Declare status before the conditional
-  if wait "$pid"; then
-    local status=0
-  else
-    local status=$?
-  fi
+  local status
+  if wait "$pid"; then
+    status=0
+  else
+    status=$?
+  fi
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@install.sh` around lines 172 - 176, The code declares the local variable
"status" inside both branches after calling wait "$pid"; instead declare "local
status" once before the conditional and then assign to it inside the branches
(e.g., status=0 or status=$?) so that the scope is clear; update the wait "$pid"
block around the "status" variable to use the predeclared local variable and
leave the rest unchanged.
Makefile (1)

7-13: Consider documenting or removing orphaned lint-ts and lint-py targets.

With lint now depending solely on check, the lint-ts and lint-py targets are no longer part of the main dependency chain. If they're intentionally kept for manual/targeted invocation, a brief comment would help future maintainers understand their purpose. Otherwise, they could be removed to reduce confusion.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` around lines 7 - 13, The Makefile contains orphaned targets lint-ts
and lint-py that are no longer used by the lint target; either remove these
targets to avoid confusion or add a short inline comment above each (lint-ts,
lint-py) explaining they are retained for manual/targeted invocation (e.g., runs
TypeScript and Python checks in subprojects) and update the lint dependency if
you want them re-integrated into the main lint chain; modify the Makefile
accordingly to either delete the lint-ts/lint-py blocks or add the explanatory
comments and adjust the lint target to depend on them if intended.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@scripts/test-inference-local.sh`:
- Around line 6-7: The script uses a predictable /tmp/req.json which creates a
TOCTOU/race condition and never cleans up; replace the hardcoded path by
creating a secure temporary file via mktemp (e.g., TMPFILE=$(mktemp)), write the
payload into that TMPFILE, call curl -d @"$TMPFILE", and ensure you register a
trap to remove the TMPFILE on EXIT to avoid leakage; apply the same change to
scripts/test-inference.sh and test/e2e-test.sh and remove any remaining
references to /tmp/req.json.

In `@scripts/test-inference.sh`:
- Around line 6-7: The script writes to a predictable /tmp/req.json which
creates a TOCTOU/race condition; replace the hardcoded filename with a secure
temporary file via mktemp, write the JSON into that temp file (use a variable
like TMPFILE=$(mktemp)), set restrictive permissions (chmod 600 "$TMPFILE"),
update the curl invocation to use -d @"$TMPFILE", and ensure the temp is removed
on exit by installing a trap (trap 'rm -f "$TMPFILE"' EXIT) so the temp file is
cleaned up even on errors.

---

Outside diff comments:
In `@scripts/walkthrough.sh`:
- Around line 67-77: The fallback instructions currently expand and print the
real NVIDIA_API_KEY (see the echo line that contains export
NVIDIA_API_KEY=$NVIDIA_API_KEY); change that echo so the dollar sign is not
expanded (e.g., use single quotes or escape the $) and print a literal
placeholder like $NVIDIA_API_KEY or <NVIDIA_API_KEY> instead, ensuring the tmux
fallback block (the if ! command -v tmux ... echo lines) never exposes the live
secret.

---

Nitpick comments:
In `@install.sh`:
- Around line 172-176: The code declares the local variable "status" inside both
branches after calling wait "$pid"; instead declare "local status" once before
the conditional and then assign to it inside the branches (e.g., status=0 or
status=$?) so that the scope is clear; update the wait "$pid" block around the
"status" variable to use the predeclared local variable and leave the rest
unchanged.

In `@Makefile`:
- Around line 7-13: The Makefile contains orphaned targets lint-ts and lint-py
that are no longer used by the lint target; either remove these targets to avoid
confusion or add a short inline comment above each (lint-ts, lint-py) explaining
they are retained for manual/targeted invocation (e.g., runs TypeScript and
Python checks in subprojects) and update the lint dependency if you want them
re-integrated into the main lint chain; modify the Makefile accordingly to
either delete the lint-ts/lint-py blocks or add the explanatory comments and
adjust the lint target to depend on them if intended.

In `@test/e2e/test-double-onboard.sh`:
- Around line 32-50: The test scripts duplicate the helper functions pass(),
fail(), skip(), and section()—extract these into a single shared helper script
(e.g., test/e2e/e2e-helpers.sh) and update test/e2e/test-double-onboard.sh to
source that file instead of redefining pass, fail, skip, and section; ensure the
shared script exports any variables it needs (PASS, FAIL, SKIP, TOTAL) or
documents they must be defined by the caller and keep function names unchanged
so existing calls in test-double-onboard.sh and test-full-e2e.sh continue to
work.

In `@uninstall.sh`:
- Around line 67-68: The wait/exit-status handling in uninstall.sh uses "wait
\"$pid\"" followed by "local status=$?" which mirrors install.sh; declare "local
status" before using it and initialize it (e.g., local status=0) so the variable
is clearly scoped prior to the conditional that checks it — update the block
around the "wait \"$pid\"" and "local status=$?" lines to declare "local status"
earlier (and assign from $? after wait) for consistency with the refactor
applied in install.sh.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 51c2aae6-9f36-4e80-bae1-7298cd27549b

📥 Commits

Reviewing files that changed from the base of the PR and between c55a309 and 7438119.

📒 Files selected for processing (45)
  • .agents/skills/docs/nemoclaw-overview/references/how-it-works.md
  • .agents/skills/docs/nemoclaw-overview/references/overview.md
  • .agents/skills/docs/nemoclaw-overview/references/release-notes.md
  • .agents/skills/docs/nemoclaw-reference/SKILL.md
  • .agents/skills/docs/nemoclaw-reference/references/architecture.md
  • .agents/skills/docs/nemoclaw-reference/references/commands.md
  • .agents/skills/docs/nemoclaw-reference/references/inference-profiles.md
  • .agents/skills/docs/nemoclaw-reference/references/network-policies.md
  • .agents/skills/docs/nemoclaw-reference/references/troubleshooting.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/workflows/pr.yaml
  • .pre-commit-config.yaml
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • Dockerfile
  • Makefile
  • docs/about/overview.md
  • docs/about/release-notes.md
  • install.sh
  • nemoclaw-blueprint/migrations/snapshot.py
  • nemoclaw-blueprint/orchestrator/__init__.py
  • package.json
  • scripts/backup-workspace.sh
  • scripts/brev-setup.sh
  • scripts/check-spdx-headers.sh
  • scripts/debug.sh
  • scripts/docs-to-skills.py
  • scripts/fix-coredns.sh
  • scripts/install-openshell.sh
  • scripts/install.sh
  • scripts/lib/runtime.sh
  • scripts/nemoclaw-start.sh
  • scripts/setup-spark.sh
  • scripts/setup.sh
  • scripts/smoke-macos-install.sh
  • scripts/start-services.sh
  • scripts/test-inference-local.sh
  • scripts/test-inference.sh
  • scripts/walkthrough.sh
  • test/Dockerfile.sandbox
  • test/e2e-test.sh
  • test/e2e/Dockerfile.full-e2e
  • test/e2e/test-double-onboard.sh
  • test/e2e/test-full-e2e.sh
  • uninstall.sh

HagegeR added 3 commits March 23, 2026 10:36
Auto-formatted by shfmt -i 2 -ci -bn to pass the prek shfmt hook.
No logic changes — indentation and spacing only.
…kthrough

- test-inference-local.sh, test-inference.sh: replace hardcoded
  /tmp/req.json with mktemp + trap cleanup (TOCTOU fix).
- walkthrough.sh: print a placeholder instead of expanding the real
  NVIDIA_API_KEY in the tmux-fallback instructions.
- Makefile: add comment clarifying lint-ts/lint-py are for targeted runs.
@HagegeR HagegeR force-pushed the fix/pre-commit-hooks-pass branch from 9901a29 to 1c2e0a7 Compare March 23, 2026 08:37
hadolint-docker times out pulling ghcr.io images in CI. Use a local
system hook with the binary installed via curl in the workflow.
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/pr.yaml:
- Around line 39-43: The workflow step "Install hadolint" downloads a binary
without integrity checks; update that step to fetch and verify the SHA256
checksum before making the binary executable. Specifically: download the
corresponding SHA256 (or .sha256sum) for the same release URL used for
"hadolint-Linux-x86_64", compute the downloaded file's SHA256, compare it
against the expected checksum, and fail the job if they don't match; only run
chmod +x /usr/local/bin/hadolint after a successful verification. Ensure the
verification step clearly references the hadolint release URL used in the step
so the checksum and binary align.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 43d405ce-e930-4ead-865b-243deda188df

📥 Commits

Reviewing files that changed from the base of the PR and between 9901a29 and 1c2e0a7.

📒 Files selected for processing (17)
  • .github/workflows/pr.yaml
  • .pre-commit-config.yaml
  • Makefile
  • nemoclaw-blueprint/migrations/snapshot.py
  • scripts/check-spdx-headers.sh
  • scripts/fix-coredns.sh
  • scripts/install.sh
  • scripts/lib/runtime.sh
  • scripts/nemoclaw-start.sh
  • scripts/setup.sh
  • scripts/smoke-macos-install.sh
  • scripts/start-services.sh
  • scripts/test-inference-local.sh
  • scripts/test-inference.sh
  • scripts/walkthrough.sh
  • test/e2e-test.sh
  • uninstall.sh
✅ Files skipped from review due to trivial changes (10)
  • scripts/fix-coredns.sh
  • scripts/check-spdx-headers.sh
  • test/e2e-test.sh
  • scripts/test-inference.sh
  • scripts/nemoclaw-start.sh
  • scripts/start-services.sh
  • scripts/setup.sh
  • scripts/smoke-macos-install.sh
  • scripts/install.sh
  • uninstall.sh
🚧 Files skipped from review as they are similar to previous changes (4)
  • scripts/walkthrough.sh
  • Makefile
  • scripts/lib/runtime.sh
  • scripts/test-inference-local.sh

@HagegeR HagegeR force-pushed the fix/pre-commit-hooks-pass branch from 1c2e0a7 to 36f36ba Compare March 23, 2026 08:45
HagegeR added 2 commits March 23, 2026 10:47
Add --incremental to tsc --noEmit so subsequent type-checks reuse
the .tsbuildinfo cache (supported since TS 4.0). Gitignore the cache
file. See: https://thoughtspile.github.io/2021/06/14/faster-pre-commit/
- actions/checkout v4 → v6
- actions/setup-node v4 → v6
- actions/setup-python v5 → v6
- astral-sh/setup-uv v4 → v7
- actions/upload-artifact stays at v4 (latest)
- rossjrw/pr-preview-action stays at v1 (latest)
@HagegeR HagegeR force-pushed the fix/pre-commit-hooks-pass branch from 36f36ba to c689f09 Compare March 23, 2026 08:49
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.pre-commit-config.yaml:
- Around line 136-144: Update the CONTRIBUTING.md prerequisites to document that
hadolint must be installed for local development (since .pre-commit-config.yaml
uses the hadolint hook with language: system and hook id/name hadolint), and
include a short install command or link (matching CI setup in pr.yaml where
hadolint is installed before running pre-commit) so developers running npm/npx
prek won't hit "hadolint: command not found".

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d307f57d-c5e4-415a-baf7-c5fb331266b9

📥 Commits

Reviewing files that changed from the base of the PR and between 36f36ba and c689f09.

📒 Files selected for processing (8)
  • .github/workflows/commit-lint.yaml
  • .github/workflows/docker-pin-check.yaml
  • .github/workflows/docs-preview-pr.yaml
  • .github/workflows/docs.yaml
  • .github/workflows/nightly-e2e.yaml
  • .github/workflows/pr.yaml
  • .gitignore
  • .pre-commit-config.yaml
✅ Files skipped from review due to trivial changes (6)
  • .github/workflows/nightly-e2e.yaml
  • .github/workflows/docker-pin-check.yaml
  • .github/workflows/docs-preview-pr.yaml
  • .gitignore
  • .github/workflows/commit-lint.yaml
  • .github/workflows/docs.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/pr.yaml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant