Skip to content

Add windows/amd64 Node 26.12.1 + linux/arm64 Go support - #163

Merged
gontzess merged 4 commits into
mainfrom
steve.gontzes/locked-tools-windows-node
Oct 22, 2026
Merged

gontzess merged 4 commits into
mainfrom
steve.gontzes/locked-tools-windows-node

Conversation

@gontzess

@gontzess gontzess commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Why

The locked-tools action lacks Windows/amd64 Node and Linux/arm64 Go locks, so consumers requiring either tool/platform pair fail closed on the missing row. This adds both using the existing approved Node 26.12.1 and Go 1.27.3 versions.

What

  • tool-locks.txt: node v26.12.1 windows/amd64 — sha256 b3efd5c7… from the official SHASUMS256.txt, independently re-downloaded and hash-verified (41,901,456 bytes; node-v26.12.1-win-x64/node.exe leaf, MZ header, all 2,398 entries under the package root).
  • tool-locks.txt: go go1.27.3 linux/arm64 — SHA256 a06e99309dbcbdca1a8ccd2282c3ee146e55930886e26b4f1193269587165f49 from official Go release metadata, re-verified by a real archive download (67,076,044 bytes; executable regular go/bin/go leaf, mode 0755, ELF64 AArch64).
  • The existing Go installer is architecture-generic and remains unchanged. Fixtures cover successful linux/arm64 installs for both arm64 and aarch64 uname values, GOROOT/PATH publication, and hash mismatch before extraction.
  • install-tool.ps1: the node case — ported byte-identically from ductone/multipass's gated installer (Get-FileHash before Expand-Archive, nested package-dir leaf check on node.exe, PATH publication; goreleaser-pro → goreleaser.exe mapping untouched).
  • Test fixtures: Windows Node ZIP/layout + action-dispatch coverage (native-Windows fixture skips where pwsh is unavailable); renovate's platform-agnostic Node regex already discovers all three rows (fixture test covers the new row).

Verification

Port the gated Windows Node ZIP installer and add the canonical v26.12.1 windows/amd64 artifact lock, fixture coverage, and platform documentation.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit a45fe8fd7b2a

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 1 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: full
View review run

Review Summary

This PR adds a node v26.12.1 windows/amd64 lock row. It also adds a node case to install-tool.ps1, which:

  • pins the lock URL to https://nodejs.org/dist/$version/node-$version-win-x64.zip
  • checks the SHA-256 before Expand-Archive
  • requires the node.exe leaf under the nested package dir, then publishes that dir to GITHUB_PATH

Docs and test fixtures are updated to match. I scanned the full PR diff for security and correctness. I also checked the unchanged surrounding code:

  • locked-tools.sh already allows node, passes Windows installs to pwsh through cygpath, and validates the lock row per platform.
  • The Renovate regex (?:^|\n)node (v…) picks up the new row, and test-check-image-locks.py checks that against every node line.

$package is only set inside the node switch arm and only read under $Tool -eq 'node', so it works under Set-StrictMode. Go/syft/goreleaser-pro behavior is unchanged. I did not re-download the artifact to confirm the hash; the lock value matches across tool-locks.txt, the docs table, and the PR description. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New (medium confidence) scripts/test-tool-integrity.py:372: test_windows_node_installer_fixture skips unless os.name == "nt", and no workflow runs this suite on Windows. The new PowerShell node branch (URL pin, hash-before-extract, layout check) therefore never runs in CI. The dispatch test only stubs pwsh.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `scripts/test-tool-integrity.py`:
- Around line 372: `test_windows_node_installer_fixture` is skipped unless running on native Windows with pwsh, and no workflow under .github/workflows runs this suite on a Windows runner. So the new `node` branch in `.github/actions/locked-tools/install-tool.ps1` is never exercised in CI. Add a CI job on `windows-latest` (or extend an existing test job with a Windows matrix entry) that runs `python scripts/test-tool-integrity.py` (at least the Windows installer test) so the valid/bad-hash/bad-layout/bad-url controls actually run.

self.assertEqual(self.phase_outputs()["node"], version)
self.assertEqual(json.loads(self.phase_outputs()["versions"]), {"node": version})

@unittest.skipUnless(os.name == "nt" and shutil.which("pwsh"), "requires native Windows PowerShell")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Suggestion (medium confidence): No workflow in .github/workflows/ runs this suite on a Windows runner, so this test always skips in CI. That means the new node branch in install-tool.ps1 (canonical-URL pin, hash before extract, nested node.exe leaf, PATH publication) never actually runs. The dispatch test above stubs pwsh. If a later edit breaks the Windows node path, it would first show up in a consumer's release-windows job. Consider adding a small windows-latest job that runs these negative controls.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 5d95b3e0ed15

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 1 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: full
View review run

Review Summary

This PR adds a node v26.12.1 windows/amd64 lock row. It also adds a node case to install-tool.ps1, which:

  • pins the lock URL to https://nodejs.org/dist/$version/node-$version-win-x64.zip
  • checks the SHA-256 before Expand-Archive
  • requires the node.exe leaf under the nested package dir, then publishes that dir to GITHUB_PATH

Docs and test fixtures are updated to match. I scanned the full PR diff for security and correctness. I also checked the unchanged surrounding code:

  • locked-tools.sh already allows node, passes Windows installs to pwsh through cygpath, and validates the lock row per platform.
  • The Renovate regex (?:^|\n)node (v…) picks up the new row, and test-check-image-locks.py checks that against every node line.

$package is only set inside the node switch arm and only read under $Tool -eq 'node', so it works under Set-StrictMode. Go/syft/goreleaser-pro behavior is unchanged. I did not re-download the artifact to confirm the hash; the lock value matches across tool-locks.txt, the docs table, and the PR description. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New (medium confidence) scripts/test-tool-integrity.py:372: test_windows_node_installer_fixture skips unless os.name == "nt", and no workflow runs this suite on Windows. The new PowerShell node branch (URL pin, hash-before-extract, layout check) therefore never runs in CI. The dispatch test only stubs pwsh.
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `scripts/test-tool-integrity.py`:
- Around line 372: `test_windows_node_installer_fixture` is skipped unless running on native Windows with pwsh, and no workflow under .github/workflows runs this suite on a Windows runner. So the new `node` branch in `.github/actions/locked-tools/install-tool.ps1` is never exercised in CI. Add a CI job on `windows-latest` (or extend an existing test job with a Windows matrix entry) that runs `python scripts/test-tool-integrity.py` (at least the Windows installer test) so the valid/bad-hash/bad-layout/bad-url controls actually run.

Reviewed commit: a45fe8fd7b2a

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No blocking issues found — see the full review report

@gontzess
gontzess marked this pull request as ready for review October 21, 2026 22:57
@gontzess
gontzess requested a review from a team October 21, 2026 22:57
Run only the self-contained installer fixture on windows-latest with read-only permissions, pinned checkout, and no persisted credentials or release secrets.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 5d95b3e0ed15

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 0 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: incremental since a45fe8f
View review run

Review Summary

This PR adds a node v26.12.1 windows/amd64 lock row and a node branch in install-tool.ps1. That branch pins the nodejs.org URL, checks the SHA-256 before Expand-Archive, requires the node.exe file inside the nested package directory, and publishes that directory to PATH. It also adds docs and test fixtures for the new row.

The new commit adds a windows-installer-tests job to .github/workflows/ci.yaml on windows-latest with read-only permissions and no secrets. The job runs IntegrityTests.test_windows_node_installer_fixture natively. A test-ci-workflow.py test pins that job's shape, and the docs mention the native check.

I scanned the full PR diff for security and correctness issues. I checked the Windows-specific test harness paths: CRLF lock rewrites, reading the PATH file as utf-8-sig, the bad-url case failing before download, and the bad-hash case failing before extraction. They look sound. The incremental diff was complete, with no dropped paths. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

None.

Resolved prior findings

  • Fixed: the earlier suggestion that the native Windows Node installer fixture never ran in CI. .github/workflows/ci.yaml:92-109 now runs python scripts/test-tool-integrity.py IntegrityTests.test_windows_node_installer_fixture on windows-latest. A Get-Command pwsh pre-check stops the job from passing quietly because the fixture was skipped. scripts/test-ci-workflow.py:50-59 pins the job's shape.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 12103a792b50

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 0 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: incremental since a45fe8f
View review run

Review Summary

This PR adds a node v26.12.1 windows/amd64 lock row and a node branch in install-tool.ps1. That branch pins the nodejs.org URL, checks the SHA-256 before Expand-Archive, requires the node.exe file inside the nested package directory, and publishes that directory to PATH. It also adds docs and test fixtures for the new row.

The new commit adds a windows-installer-tests job to .github/workflows/ci.yaml on windows-latest with read-only permissions and no secrets. The job runs IntegrityTests.test_windows_node_installer_fixture natively. A test-ci-workflow.py test pins that job's shape, and the docs mention the native check.

I scanned the full PR diff for security and correctness issues. I checked the Windows-specific test harness paths: CRLF lock rewrites, reading the PATH file as utf-8-sig, the bad-url case failing before download, and the bad-hash case failing before extraction. They look sound. The incremental diff was complete, with no dropped paths. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

None.

Resolved prior findings

  • Fixed: the earlier suggestion that the native Windows Node installer fixture never ran in CI. .github/workflows/ci.yaml:92-109 now runs python scripts/test-tool-integrity.py IntegrityTests.test_windows_node_installer_fixture on windows-latest. A Get-Command pwsh pre-check stops the job from passing quietly because the fixture was skipped. scripts/test-ci-workflow.py:50-59 pins the job's shape.

Reviewed commit: 5d95b3e0ed15

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No blocking issues found — see the full review report

Accept equivalent short and long Windows temp paths without weakening archive hash, extraction, leaf, or negative-control checks.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit 12103a792b50

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 0 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: incremental since 5d95b3e
View review run

Review Summary

This PR adds a node v26.12.1 windows/amd64 lock row and a node case to install-tool.ps1. The installer pins the canonical nodejs.org/dist/<v>/node-<v>-win-x64.zip URL, checks the SHA256 before Expand-Archive, checks that the nested node-<v>-win-x64/node.exe is a leaf file, and publishes that package directory to GITHUB_PATH without setting GOROOT. The PR also adds a windows-latest CI job that runs the native installer fixture, plus docs. The one new commit changes only the fixture's PATH assertion: it compares published entries with Path.samefile instead of string equality, because PowerShell can expand the Windows 8.3 short-name temp alias. The new check is still strict. The PATH file is recreated for each subtest, and a missing or mismatched entry still fails the test. I scanned the full PR diff (6 files) for security and correctness. No repo-local criteria loaded, so the base criteria applied. The incremental diff was complete, with no dropped or truncated paths.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

None.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit a75968fb7b12

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 0 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: incremental since 5d95b3e
View review run

Review Summary

This PR adds a node v26.12.1 windows/amd64 lock row and a node case to install-tool.ps1. The installer pins the canonical nodejs.org/dist/<v>/node-<v>-win-x64.zip URL, checks the SHA256 before Expand-Archive, checks that the nested node-<v>-win-x64/node.exe is a leaf file, and publishes that package directory to GITHUB_PATH without setting GOROOT. The PR also adds a windows-latest CI job that runs the native installer fixture, plus docs. The one new commit changes only the fixture's PATH assertion: it compares published entries with Path.samefile instead of string equality, because PowerShell can expand the Windows 8.3 short-name temp alias. The new check is still strict. The PATH file is recreated for each subtest, and a missing or mismatched entry still fails the test. I scanned the full PR diff (6 files) for security and correctness. No repo-local criteria loaded, so the base criteria applied. The incremental diff was complete, with no dropped or truncated paths.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

None.


Reviewed commit: 12103a792b50

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No blocking issues found — see the full review report

Pin Go 1.27.3 linux/arm64 from official release metadata and a real archive download. Exercise both uname aliases and hash-before-extraction failure using the existing architecture-generic installer.

Co-authored-by: c1-squire-dev[bot] <c1-squire-dev[bot]@users.noreply.github.com>
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Superseded — see the current review report for commit a75968fb7b12

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 1 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: incremental since 12103a7
View review run

Review Summary

New in this push: one go go1.27.3 linux/arm64 row in tool-locks.txt, a matching row in the docs table, and two fixture tests (verified install for aarch64/arm64, and a hash mismatch that fails before extraction).

Already in the PR:

  • A Windows amd64 Node lock.
  • A node case in install-tool.ps1: canonical-URL check, Get-FileHash before Expand-Archive, a leaf check for node-<ver>-win-x64/node.exe, and adding that package directory to PATH.
  • A read-only windows-installer-tests CI job.

Coverage: I scanned the full PR diff for security and correctness, and found no partial or dropped paths. Against the source I confirmed:

  • install-tool.sh already maps aarch64/arm64 to arm64 and builds go.dev/dl/${version}.linux-arm64.tar.gz, so the new row is installable and URL-pinned.
  • The Renovate Go/Node regexes don't depend on platform.

I could not verify the upstream SHA-256 values offline. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New — .github/actions/locked-tools/tool-locks.txt:22: The Go linux/arm64 lock is outside the PR's stated scope (Windows Node), and the PR body gives no provenance for its hash. The Windows Node row does have provenance. Add a source note (e.g. the go.dev/dl manifest), or split it into its own PR, so reviewers can audit the pinned hash. (confidence: medium)
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/locked-tools/tool-locks.txt`:
- Around line 22: The `go go1.27.3 linux/arm64` lock row (hash a06e9930...) was added without any provenance in the PR description, and it is outside the PR's stated Windows-Node scope. Update the PR description, or add a comment above the row, saying where the SHA-256 came from (e.g. https://go.dev/dl/?mode=json and the matching linux-arm64 entry), or move this row and its docs/test changes into a separate PR.

# Minisign lock ported verbatim from ductone/multipass PR #953 (release-sign-split); producer/reviewer verified it independently.
minisign 0.12 darwin/arm64 89000b19535765f9cffc65a65d64a820f433ef6db8020667f7570e06bf6aac63 https://github.com/jedisct1/minisign/releases/download/0.12/minisign-0.12-macos.zip
node v26.12.1 windows/amd64 b3efd5c70cba3308ed46e7e699a9b8aac075bbc6b027fcb39c84c31acc25e2b4 https://nodejs.org/dist/v26.12.1/node-v26.12.1-win-x64.zip
go go1.27.3 linux/arm64 a06e99309dbcbdca1a8ccd2282c3ee146e55930886e26b4f1193269587165f49 https://go.dev/dl/go1.27.3.linux-arm64.tar.gz

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Suggestion: This go go1.27.3 linux/arm64 lock goes beyond the PR's stated scope (Windows Node), and the PR body gives no provenance for this hash. The Windows Node row does have provenance. The installer, URL canonicalization, and tests look correct, but this repo can't verify the hash itself. Please add a note on where it came from (e.g. the go.dev/dl JSON manifest), or split it into its own PR. (confidence: medium)

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

General PR Review: locked-tools: add windows/amd64 Node 26.12.1 support

Blocking Issues: 0 | Suggestions: 1 | Threads Resolved: 0
Criteria: Criteria status: none loaded - .claude/skills/ci-review.md was not found at trusted base 99f9b2fc150f.
Review mode: incremental since 12103a7
View review run

Review Summary

New in this push: one go go1.27.3 linux/arm64 row in tool-locks.txt, a matching row in the docs table, and two fixture tests (verified install for aarch64/arm64, and a hash mismatch that fails before extraction).

Already in the PR:

  • A Windows amd64 Node lock.
  • A node case in install-tool.ps1: canonical-URL check, Get-FileHash before Expand-Archive, a leaf check for node-<ver>-win-x64/node.exe, and adding that package directory to PATH.
  • A read-only windows-installer-tests CI job.

Coverage: I scanned the full PR diff for security and correctness, and found no partial or dropped paths. Against the source I confirmed:

  • install-tool.sh already maps aarch64/arm64 to arm64 and builds go.dev/dl/${version}.linux-arm64.tar.gz, so the new row is installable and URL-pinned.
  • The Renovate Go/Node regexes don't depend on platform.

I could not verify the upstream SHA-256 values offline. No repo-local criteria loaded, so only the base criteria were applied.

Security Issues

None found.

Correctness Issues

None found.

Suggestions

  • New — .github/actions/locked-tools/tool-locks.txt:22: The Go linux/arm64 lock is outside the PR's stated scope (Windows Node), and the PR body gives no provenance for its hash. The Windows Node row does have provenance. Add a source note (e.g. the go.dev/dl manifest), or split it into its own PR, so reviewers can audit the pinned hash. (confidence: medium)
Prompt for AI agents
Verify each finding against the current code and only fix it if needed.

## Suggestions

In `.github/actions/locked-tools/tool-locks.txt`:
- Around line 22: The `go go1.27.3 linux/arm64` lock row (hash a06e9930...) was added without any provenance in the PR description, and it is outside the PR's stated Windows-Node scope. Update the PR description, or add a comment above the row, saying where the SHA-256 came from (e.g. https://go.dev/dl/?mode=json and the matching linux-arm64 entry), or move this row and its docs/test changes into a separate PR.

Reviewed commit: a75968fb7b12

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No blocking issues found — see the full review report

@gontzess gontzess changed the title locked-tools: add windows/amd64 Node 26.12.1 support Add windows/amd64 Node 26.12.1 + linux/arm64 Go support Oct 22, 2026
@gontzess
gontzess merged commit 562a1ea into main Oct 22, 2026
7 checks passed
@gontzess
gontzess deleted the steve.gontzes/locked-tools-windows-node branch October 22, 2026 00:34
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