ci(security): SHA-pin GitHub Actions in publish.yml (SEC-06) - #3
Conversation
Pin actions/checkout, actions/setup-java, actions/setup-node to immutable commit SHAs per 26-02 §2c. Config-only change; no-release proof recorded in 28-04 (C1-C6 PASS, EXISTS=true). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Warning Review limit reached
More reviews will be available in 59 minutes and 2 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more credits in the billing tab to continue. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
SHA-pin GitHub Actions in
publish.yml(SEC-06)This PR applies a
uses:-SHA-value-only pin to the three GitHub Actions in.github/workflows/publish.yml— pasting the canonical SHA values for the actions already referenced at@v4. No version bump (still# v4), no trigger /if:/with:/env:/needs:/ step-order change. Part of GSD phase 28 (batch-3 cohort, proof artifact 28-04).actions/checkout@v434e114876b0b11c390a56381ad16ebd13914f8d5# v4 (v4.3.1)actions/setup-java@v4c1e323688fd81a25caa38c78aa6df2d33d3e20d9# v4 (v4.8.0)actions/setup-node@v449933ea5288caeca8642d1e84afbd3f7d6820020# v4 (v4.4.0)Before → after pin lines
L22 - uses: actions/checkout@v4→- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 (v4.3.1)L27 uses: actions/setup-java@v4→uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 (v4.8.0)L94 uses: actions/setup-node@v4→uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 (v4.4.0)UltiWorlds — C1–C6 no-release proof verdict (Archetype C, SEC-06)
uses:lines confirmed@v4onorigin/master— L22actions/checkout@v4, L27actions/setup-java@v4, L94actions/setup-node@v4— plus a trailing# v4 (vX.Y.Z)comment, pasting the 26-02 §2c pin strings verbatim. Noon:/trigger,if:,with:,env:,needs:, or step-ordering/job-logic change. PASS.on: push: branches: [master](+paths-ignore) +workflow_dispatch. Neither event is produced by the pin edit itself: a SHA-pin commit on a feature branch targetingmastervia PR does not trigger thepush: branches: [master]path until merge, and at merge the existing-version guard (C5) intercepts before any publish step. Nopull_requesttrigger. PASS.release-and-publish(permissions: contents: write). Stepcheck(Check if release exists) runsif gh release view "v${VERSION}" > /dev/null 2>&1; then EXISTS=true … else EXISTS=false. Every subsequent publish step is gatedif: steps.check.outputs.EXISTS == 'false'. PASS.EXISTSguard (C3/C5) are byte-identical pre/post pin. The conditions under which any publish step runs are unchanged. The pin cannot alterpom.xml<version>nor the release state, so it cannot flipEXISTS. PASS.v1.0.0exists (tagv1.0.0→6b19c983…, not draft, not prerelease).${VERSION}resolves to the published release, so the guard resolvesEXISTS=trueand short-circuits every publish step unconditionally; a SHA-only pin on a feature branch cannot flipEXISTS. PASS.PASS — config-only pin, unreachable-to-publish. Master HEAD8edb768;publish.ymlmaster sha25636728f84…(pre == post). PASS.EXISTS=true evidence
v1.0.0is published onUltiKits/UltiWorlds(tagv1.0.0→6b19c983…), not a draft or prerelease.publish.ymlis present onmaster(EXISTS=true), sha25636728f84….8edb768(origin/master).EXISTS=trueand short-circuits every publish step.Reference: 28-04 proof artifact (C1–C6 PASS recorded in Task 1).
Must NOT be merged until the maintainer's per-PR token with proof PASS + CI confirming no release/tag/publish fired.