[II-X] Harden Toolchain#23
Open
ooaklee wants to merge 3 commits into
Open
Conversation
Pin the repository toolchain to Node.js 24.16.0, Yarn 1.22.22, and Go 1.26.4, and update the JavaScript action runtime to node24. Replace the vulnerable action-docs dependency chain with a local README input-table generator, refresh the lockfile, and keep the generated README table in sync with action.yml. Upgrade Go dependencies to current safe compatible versions, record the Go 1.26 toolchain, document the accepted go.yaml.in/yaml/v3 provenance, and rebuild the checked-in Linux AMD64 and ARM64 action binaries. Harden invoke-binary.js so unsupported runners, spawn failures, signals, and missing statuses fail explicitly instead of silently succeeding. Correct action metadata for optional Slack and Discord notifier inputs, fix the default notifications channel spelling, validate positive timeout values, and add focused regression coverage. Add clearer documentation comments for action entrypoints, runner flow, portal handlers, notifier methods, and the full interactive field YAML shape. Move Husky to the v9 pre-commit hook layout, add ADR documentation for the toolchain decision, and update maintainer docs to use the pinned asdf toolchain.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
Interactive Inputs ships as a GitHub Action with a JavaScript entrypoint, checked-in Go binaries, generated README input documentation, and a small Go web portal. The repository needed a current, reproducible toolchain baseline so maintainers can rebuild the action with known language versions and safer dependency provenance.
The previous dependency graph also included the old
action-docspackage chain, which brought in vulnerable transitive packages for a task that this repository can perform locally fromaction.yml. At the same time, the action wrapper and field-definition comments needed clearer behaviour and maintenance guidance for future template users.What Changed
.tool-versions.node24.action-docswith a local README input-table generator and refreshedyarn.lock.go.modandgo.sum, and documented the acceptedgo.yaml.in/yaml/v3provenance.invoke-binary.jsso unsupported platforms, unsupported architectures, spawn failures, signals, and missing process statuses fail explicitly.Why
This keeps the action template easier to maintain and safer to consume. Pinning the toolchain reduces ambiguity when rebuilding binaries or regenerating docs, while removing the vulnerable documentation dependency chain avoids carrying unnecessary package risk.
The wrapper hardening makes runner failures visible instead of silently succeeding, and the action metadata fixes make generated docs and GitHub Action inputs match the intended optional notifier behaviour.
The expanded comments and ADRs should also make the repository more useful as a template for future Go-backed JavaScript actions.
Scope Notes
This PR focuses on the action template, toolchain, dependency baseline, generated documentation, and validation behaviour. It does not redesign the interactive input portal or change the submitted form payload shape.
The user-visible behaviour change is that invalid non-positive timeout values now fail validation instead of being accepted. The Slack notifications channel default is also corrected from the misspelled value to
#notifications.The checked-in
dist/action-amd64anddist/action-arm64binaries are intentionally updated so consumers can run the action without rebuilding it during workflow execution.How To Test
Requires the pinned asdf toolchain from
.tool-versions.asdf installasdf exec yarn install --frozen-lockfile --check-filesasdf exec yarn check --integrityasdf exec yarn auditnpm audit signaturesasdf exec yarn testasdf exec yarn packageasdf exec yarn readme --updateasdf exec yarn prettier --check action.yml package.json invoke-binary.js scripts/update-readme.js docs/adr/_adr000-template.md docs/adr/adr001-modernise-interactive-inputs-toolchain.md gettting-started.md .github/workflows/test-interactive-input.yaml .github/workflows/test-interactive-input-pr.yamlasdf exec go run golang.org/x/vuln/cmd/govulncheck@latest ./...git diff --checkRollout Notes
After merge, maintainers should run
asdf installbefore rebuilding binaries or regenerating README input documentation. The root.tool-versionsfile is now the source of truth for local toolchain versions.Consumers should receive the rebuilt Linux action binaries from the repository as before. If a workflow pins older runner assumptions, verify that it is compatible with the
node24GitHub Action runtime before rolling forward.Future dependency updates should keep the local README generator unless a replacement documentation tool has a smaller and cleanly audited dependency graph.