Repository navigation
ci: add publish-stable job with CircleCI OIDC, rename release.yml to legacy fallback - #464
Merged
soniqua merged 2 commits intoSep 29, 2026
Conversation
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
rrama
marked this pull request as ready for review
September 17, 2026 13:44
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit d4a9b89. Configure here.
Cursor Bugbot correctly flagged that publish-stable's "Create release tag" step's git push origin "$TAG_NAME" would fail on first real run: CircleCI's built-in checkout step installs a read-only SSH deploy key plus a global url.ssh://git@github.com/.insteadOf https://github.com/ rewrite, so any git push -- HTTPS remote or not -- gets routed back over the read-only key. Nothing in this job configured push credentials. This exact mechanism is documented in another internal Snyk repo's CircleCI config. Rather than adding gh auth setup-git plus the insteadOf-unwind, a token-in-URL push, or a gh api .../git/refs call -- three patterns with real prior art elsewhere in the Snyk org -- collapse the two steps: gh release create <tag> --target <sha> creates both the tag and the release via the GitHub REST API, using the same GITHUB_TOKEN already used by the existing release step. No git push, no credential helper setup, no state to unwind. --target "$CIRCLE_SHA1" pins the tag to this pipeline's commit; without it, gh release create defaults to the default branch's HEAD, which would silently tag main instead of the branch's HEAD on the hotfix/release triggers this workflow accepts. Matches how release-legacy.yml has actually been working for 18 successful monthly releases: its own git tag line (with no argument) merely lists tags and never created one -- the tag has always been created implicitly by gh release create, same as here. Adds an explicit GITHUB_TOKEN presence check at the top of the step, mirroring build-sign's KEYSTORE/KEYSTORE_SHA/KEYSTORE_PASS pattern and naming the expected context, so a missing snyk-eclipse-plugin-github-release context surfaces as a clear error rather than a downstream "unauthenticated" from gh. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
PR Reviewer Guide 🔍
|
3 of 15 tasks
soniqua
merged commit Sep 29, 2026
0ab2ada
into
ci/IDE-2483_add-stable-release-workflow
7 checks passed
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.

Description
Milestone 3 (part 2 of 2) of migrating snyk-eclipse-plugin's S3 publishing off static AWS keys onto CircleCI OIDC (IDE-2483). Stacked on #463 (the
stable-releaseworkflow scaffold).This must wait until #463 is merged to
main.build-sign-stablehas already been proven to succeed under a real manual pipeline trigger with no approval gate (verified directly, not just tested on a throwaway branch — see #463's description), so the only remaining gate here is #463 actually merging.What this adds
publish-stablejob: assumes thesnyk-assets-eclipse-writerIAM role via CircleCI OIDC, creates the GitHub release (tagging the commit as a side effect, with the update-site ZIP asset), and uploads the signed p2 repository tos3://snyk-assets/eclipse/stable/. Safe to retry (skips if the release already exists), so a partial failure can just be re-run on the same commit.publish-stableinto thestable-releaseworkflow ci: add stable-release workflow scaffold on CircleCI OIDC [IDE-2483] #463 added, requiring onlybuild-sign-stable— no separate approval gate (the manual pipeline trigger itself is the deliberate act).publish-previewandpublish-stable) into a sharedcommands: verify-oidc-identity:block..github/workflows/release.yml→release-legacy.yml, kept fully functional as a manual fallback (still using the static AWS keys) until milestone 4 deletes it, once CircleCI's stable-release path has cut a real release successfully.RELEASE.md's trigger step to describe the CircleCI UI flow (deliberately UI-only, never the API — a documented discipline choice, not a technical restriction, so a stable release is always a deliberate human action).docs/release.mddocumenting why the two pipelines (CICDandstable-release) are fully independent — no shared jobs, requires-chain, or workspace.Context status
publish-stable'scontext: snyk-eclipse-plugin-github-releasenow exists (ProdSec created it directly) and has a realGITHUB_TOKENset. circleci-infra PR #66 formally defines it in Terraform, still blocked on an unrelated state-drift fix in circleci-infra PR #67 — but that's now approved and doesn't block this PR's own testing, since the context already exists on the CircleCI side regardless of Terraform catching up.Final PR in the stack
#465 (draft, stacked on this one) deletes the GitHub Actions fallback and moves the shared upload script once this PR's path is proven working — see that PR for the full decommissioning runbook.
Checklist
Screenshots / GIFs
N/A — CI config change.
🤖 Generated with Claude Code
PR Stack — Merge Order
flowchart LR main(["main"]) PR1["#460 build-sign\nCircleCI signing"] PR2["#462 publish-preview\nCircleCI OIDC publish"] PR3["#463 stable-release scaffold\nworkflow + build-sign-stable"] PR4["#464 publish-stable ← YOU ARE HERE\nOIDC publish, DO NOT MERGE yet"] PR5["#465 remove legacy workflow\nDO NOT MERGE yet"] main --> PR1 --> PR2 --> PR3 --> PR4 --> PR5 style PR4 fill:#ffd700,color:#000Depends on: #463
Note
Medium Risk
Changes production release mechanics (GitHub tagging, S3 stable channel, OIDC role assumption); mitigated by manual trigger gate and idempotent release step, but not yet proven in a real release.
Overview
Adds a manual stable-release path on CircleCI (OIDC to
snyk-assets-eclipse-writer): newpublish-stablejob creates a timestamped GitHub release/tag with the update-site ZIP, uploads the p2 repo to S3stable, and is wired into thestable-releaseworkflow afterbuild-sign-stablewith thesnyk-eclipse-plugin-github-releasecontext.CI hygiene: shared
verify-oidc-identitycommand replaces duplicated OIDC checks in preview publish;build-signnow persistsupdate-site/target/*.zipfor release assets; GitHub CLI orb supportsgh release createwith idempotent skip on retry.Docs / fallback:
RELEASE.mdpoints releases at CircleCI (run_stable_release=true) instead of GHA; newdocs/release.mdexplains preview vs stable pipelines;.github/workflows/release.ymlis renamed to Release (Legacy) as a manual fallback until CircleCI is proven.Reviewed by Cursor Bugbot for commit ffec5ab. Bugbot is set up for automated code reviews on this repo. Configure here.