ci(security): SHA-pin GitHub Actions in publish.yml (SEC-06) - #5
Conversation
|
Warning Review limit reached
More reviews will be available in 18 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ 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 |
This is a
uses:-SHA-value-only pin of the three GitHub Actions in.github/workflows/publish.yml— no version bump, no trigger/if:/with:/env:/needs:/step-order changes. Each@v4ref is replaced by its commit SHA with a trailing# v4 (vX.Y.Z)comment. Part of GSD phase 28 batch-2 (SEC-06 SHA-pin cohort).Diff (3 lines changed, 3 insertions / 3 deletions — all on
uses:lines):actions/checkout@v4→actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 (v4.3.1)actions/setup-java@v4→actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4 (v4.8.0)actions/setup-node@v4→actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 (v4.4.0)UltiLogin C1–C6 Verdict Block (from 28-03 no-release proof artifact)
Module: UltiLogin (SEC-06, Archetype C)
uses:lines re-confirmed@v4onorigin/masterthis plan — L22actions/checkout@v4, L27actions/setup-java@v4, L94actions/setup-node@v4— plus an optional trailing# v4 (vX.Y.Z)comment, pasting the 26-02 §2c pin strings verbatim. It MUST add/remove/modify noon:/trigger, noif:, nowith:, noenv:, noneeds:, and no step ordering or job logic. Pre-state (the three current@v4lines onorigin/master):22: - uses: actions/checkout@v4/27: uses: actions/setup-java@v4/94: uses: actions/setup-node@v4. (Re-verified againstgit diff origin/masterin Task 3, gated behind the Task 2 token.)on: push: branches: [master](withpaths-ignore, L6) +workflow_dispatch(L10). 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 (26-01 §0 — the condition forcing the config-only method;grep -c pull_requestonorigin/master= 0).release-and-publish(L17,permissions: contents: writeL19–20). Stepcheck(Check if release exists, L48) runsif gh release view "v${{ steps.version.outputs.VERSION }}" > /dev/null 2>&1; then EXISTS=true ... else EXISTS=false(L53/54/57). Every subsequent publish step is gatedif: steps.check.outputs.EXISTS == 'false'(L61, L76, L80, L84, L93, L99, L104).EXISTSguard (C3/C5) are byte-identical pre/post pin. The set of conditions under which any publish step runs is therefore unchanged. The pin cannot alterpom.xml<version>nor the release state, so it cannot flipEXISTS.${VERSION}=1.0.0(fromgit show origin/master:pom.xmlproject<version>, L9 — read-only, no Maven build).gh release view "v1.0.0" --repo UltiKits/UltiLogin→ exit0; payload{"createdAt":"2026-02-15T01:52:26Z","isDraft":false,"isPrerelease":false,"name":"v1.0.0","tagName":"v1.0.0"}.EXISTS=true— releasev1.0.0is published (not draft, not prerelease). TheEXISTS=truebranch short-circuits every publish step unconditionally; a SHA-only pin on a feature branch cannot flipEXISTS.PASS — config-only pin, unreachable-to-publish. Master base refa655e23c9010ef17c81ead1f6569ac49cdd02d96;publish.ymlmaster sha25636728f8498b903237d1fdb3ee4d84c5e8f0cd6c3e6a3254f0a743d70f0d85998(pre == post; master fingerprint re-captured this plan on theorigin/masterbase, D-03). Shares the 28-01 seed sha256 (byte-identical publish.yml).v1.0.0(Latest); remote tag set =040c552da30f2c1cdef18159e2df571a2c3f74f1 refs/tags/v1.0.0.EXISTS=true evidence (proof-before-edit, D-04)
gh release view v1.0.0 --repo UltiKits/UltiLoginreturns a published release (not draft, not prerelease):<version>=1.0.0→ guard evaluatesgh release view v1.0.0→ exit 0 →EXISTS=true→ every publish step short-circuits.v1.0.0(Latest) only.refs/tags/v1.0.0only.Must NOT be merged until the maintainer's per-PR token with proof PASS + CI confirming no release/tag/publish fired.