Skip to content

chore(ci): bump jactionlint to 2.3.0 and address its new rules - #7287

Merged
kanadgupta merged 22 commits into
kanad-claude/mise-bun-actions-optimize-a0c03bfrom
kanad-claude/jactionlint-v2
Oct 23, 2026
Merged

kanadgupta merged 22 commits into
kanad-claude/mise-bun-actions-optimize-a0c03bfrom
kanad-claude/jactionlint-v2

Conversation

@kanadgupta

Copy link
Copy Markdown
Member

Stacked on #7285.

Bump

  • jactionlint moves from 1.8.2 to 2.3.0 ("2" in mise.toml, pinned in mise.lock).
  • The config's deprecated require-commit-hash key becomes rules: unpinned-uses: error, the vendored .repos/** submodules are excluded, and the missing-timeout and concurrency-limits policy rules are turned off.

Fixes, one commit per rule

  • excessive-permissions: single-job workflows grant their write scopes on the job instead of the workflow. contribution-gate grants both jobs the scopes its script needs. release-smoke-test's caller job keeps the four scopes release-shared's job tree declares.
  • github-app: the three release-notes App tokens request only the permissions their jobs use, confirmed against GitHub's REST permission tables.
  • superfluous-actions: both softprops/action-gh-release steps become gh release create, skipping when the release already exists and verifying the tag the earlier step pushed.
  • pipeline-without-pipefail, github-env, artipacked, unused-job-output: small mechanical fixes.

Accepted findings, one commit per rule

Each carries an inline # jactionlint ignore= comment with a plain-English reason: dangerous-triggers, adhoc-packages, unverified-download, cache-poisoning (run-scoped key), unpinned-images (smoke-test container), bot-conditions (the author check is already present), and issues: write on reopen-stale-issue.

🤖 Generated with Claude Code

@kanadgupta kanadgupta added the run-ci Run full develop CI (tests) on drafts and non-develop PRs. label Oct 23, 2026
@kanadgupta
kanadgupta marked this pull request as ready for review October 23, 2026 01:10
@kanadgupta
kanadgupta requested review from a team and supabase-oss as code owners October 23, 2026 01:10

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🤖 AI Review

Both independent reviews were available. Code inspection confirmed Claude's single cleanup nit; Codex reported no findings. No additional issues were identified. jactionlint validation was not run because the executable was unavailable.

Findings

Severity Location Category Sources Claim
⚪ NIT .github/scripts/ai-review/resolve.ts:377 dead-code claude Removing the resolve job's head_ref output leaves an unused resolver output and a stale workflow comment referencing the removed job output.

Findings outside the diff

  • ⚪ NIT .github/scripts/ai-review/resolve.ts:377 — Removing the resolve job's head_ref output leaves an unused resolver output and a stale workflow comment referencing the removed job output.

Stats

Claude findings: 1 · Codex findings: 0 · Confirmed: 1 · Refuted: 0 · Uncertain: 0


Models: claude-opus-5-5 + gpt-6.1-sol · Trigger: auto · Workflow run

This review runs once per PR. A maintainer can request another with a /ai-review comment.

Comment thread .github/workflows/apply-release-notes.yml Outdated
@kanadgupta
kanadgupta added this pull request to stack #7305 October 23, 2026 14:34
kanadgupta and others added 22 commits October 23, 2026 07:34
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Single-job workflows move their write scopes under the job, so a job added
later starts with no token access. contribution-gate grants both jobs the
scopes the script needs to comment on and close pull requests.
release-smoke-test's caller job keeps the four scopes release-shared's job
tree declares: contents and id-token for publish, pull-requests for the
notes proposal, actions for the live-e2e gate.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
The authorize job reads a team membership and comments on the pull
request. The apply job edits the release, comments, and closes the pull
request with its branch; workflows write covers a release whose tagged
commit changed a workflow file, as release-shared already requests. The
propose job pushes a branch, creates a label, and opens the pull request.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Both steps skip when the release already exists, which action-gh-release
handled by updating it, and verify the tag the earlier step pushed. The
config release stays off "latest" and the CLI release stays a draft for
the asset upload steps that follow.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
The gate script talks to the API with its own token and never runs git.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
The default run shell is bash -e without pipefail, so a failing go, jq,
pnpm or docker command at the head of a pipeline was hidden by the exit
status of the command after it.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
The sync workflows run on workflow_run with secrets, where a value written
to GITHUB_ENV reaches every later step. A step output reaches only the
three steps that start Claude.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Each workflow exists to react to the event it is flagged for, and each one
already runs only trusted-checkout code under that event.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Creating the label works with pull-requests write; the only other issue
access is Claude reading linked issues.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
The apply job runs the notes script from the pull request's checkout, so
its token must not be able to change workflow files. Releases for tags on
main are already created and edited with the workflow token, which can
never hold that scope, so editing the notes does not need it either.

Generated with AI

Co-Authored-By: Claude <noreply@anthropic.com>
@kanadgupta
kanadgupta force-pushed the kanad-claude/jactionlint-v2 branch from 305f1f2 to f4d989f Compare October 23, 2026 14:34
@kanadgupta
kanadgupta enabled stacked auto-merge October 23, 2026 14:34
@kanadgupta
kanadgupta added this pull request to the merge queue Oct 23, 2026
Merged via the queue into develop with commit e125d0f Oct 23, 2026
77 checks passed
@kanadgupta
kanadgupta deleted the kanad-claude/jactionlint-v2 branch October 23, 2026 14:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run-ci Run full develop CI (tests) on drafts and non-develop PRs.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants