Repository navigation
ci: add stable-release workflow scaffold on CircleCI OIDC [IDE-2483] - #463
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. |
This comment has been minimized.
This comment has been minimized.
|
[AI reply] False positive on this one. CircleCI's own docs show (https://github.com/CircleCI-Public/pipeline-preview-docs/blob/master/docs/complex_when.md) — a logic statement is cast to boolean via truthiness rules, so a scalar pipeline-parameter reference is a valid Verified two more ways:
No change needed. |
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 0ab2ada. Configure here.
This comment has been minimized.
This comment has been minimized.
0ab2ada to
c4d98e0
Compare
This comment has been minimized.
This comment has been minimized.
|
[AI reply] Leaving this as is — the collision (two different commits producing the identical second-precision tag name) is judged negligible for what's a manually-triggered, human-monitored release process. If it ever did happen, it's easy to spot and fix by hand: delete the bad release/tag on GitHub and re-trigger the pipeline. |
4ccb3ab to
8a46930
Compare
c4d98e0 to
0cc687b
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
nick-y-snyk
left a comment
There was a problem hiding this comment.
Looks good. Reusing build-sign under a new name: keeps a single job body, and the when guards were tested both ways on real runs.
Nits:
- Triggering with
run_stable_release=trueon a branch outsidemain,release/*andhotfix/*matches neither workflow. The pipeline runs nothing and doesn't tell the user the branch isn't allowed. A small workflow that fails with that message would make it obvious. Optional. - The title is missing
[IDE-2483].
0cc687b to
82bc733
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Good call. Done.
🙈 Added. |
✅ 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. |
dac3256 to
d726b7d
Compare
5b1f53b to
3d64ae3
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
1 similar comment
This comment has been minimized.
This comment has been minimized.
d726b7d to
6e71eb7
Compare
3d64ae3 to
323d056
Compare
This comment has been minimized.
This comment has been minimized.
1 similar comment
This comment has been minimized.
This comment has been minimized.
Adds a second, fully independent CircleCI workflow (`stable-release`) in
.circleci/config.yml, gated by a top-level pipeline parameter
run_stable_release (default false) plus a branch check matching main,
release/*, and hotfix/* — the same three patterns the
snyk-assets-eclipse-writer IAM role's trust policy allows. A normal push
runs only the existing CICD workflow; stable-release does not schedule
at all until a human explicitly sets the parameter true via CircleCI's
Trigger Pipeline UI or the API. This mirrors release.yml's current
workflow_dispatch trigger shape exactly, but scoped to the branches the
trust policy actually allows rather than main-only.
This PR adds only the workflow scaffold: the full test matrix
(test-{linux,macos,windows}-stable, security-scans-stable, secrets scan)
and build-sign-stable, reusing existing M1/M2 job definitions under
name: overrides. No OIDC role assumption, no S3 upload, no GitHub
release yet — that lands in a follow-up stacked PR (M3b) once this
scaffold is proven to trigger correctly and build-sign-stable succeeds
under a manually-triggered pipeline (the empirically open question of
whether restricted-context authorization works without an approval gate
for a manual trigger gets answered here, before any publish code exists).
No approval gate: the manual pipeline trigger itself is the deliberate
act, matching how release.yml's workflow_dispatch has always worked.
The existing CICD workflow's Approve preview release gate is unchanged.
Also adds a `when: not: << pipeline.parameters.run_stable_release >>`
guard to the existing CICD workflow. Without it, CICD (previously
unconditional) would also schedule in parallel whenever stable-release
is manually triggered, duplicating the full test matrix and surfacing
the unrelated preview-approval gate. The parameter defaults to false,
so `not: false` evaluates true and CICD continues to run on every
normal push exactly as before; only an explicit run_stable_release=true
trigger suppresses it. This is the only change to the CICD workflow
block in this commit — its jobs, requires, and filters are otherwise
untouched.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…rience Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6e71eb7 to
2832e94
Compare
PR Reviewer Guide 🔍
|
…legacy fallback [IDE-2483] (#468) Milestone 3 (part 2 of 2) of migrating snyk-eclipse-plugin's S3 publishing off static AWS keys onto CircleCI OIDC (IDE-2483). Adds the `publish-stable` job: assumes `snyk-assets-eclipse-writer` via CircleCI OIDC, creates the GitHub release (`gh release create --target "$CIRCLE_SHA1"`, idempotent retry), and uploads the signed p2 repository to `s3://snyk-assets/eclipse/stable/`. Wires it into the `stable-release` workflow #463 added. Renames `.github/workflows/release.yml` to `release-legacy.yml`, kept as a manual fallback until #465 deletes it. Rewrites RELEASE.md and adds docs/release.md. Verified end-to-end on a real manual `run_stable_release=true` run on main (pipeline #2114) — all jobs green, including `security-scans-stable` on its renamed context. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>


Description
Milestone 3 (part 1 of 2) of migrating snyk-eclipse-plugin's S3 publishing off static AWS keys onto CircleCI OIDC (IDE-2483). Stacked on #462 (milestone 2,
publish-preview).Adds a second, fully independent CircleCI workflow (
stable-release) alongside the existingCICDworkflow, gated by a top-level pipeline parameterrun_stable_release(defaultfalse) plus a branch check matchingmain,release/*, andhotfix/*— the same three patterns thesnyk-assets-eclipse-writerIAM role's trust policy allows. A normal push runs onlyCICDas before;stable-releasedoes not schedule at all until a human explicitly sets the parameter totruevia CircleCI's Trigger Pipeline UI or the API. This mirrorsrelease.yml's currentworkflow_dispatchtrigger shape — manual, deliberate, decoupled from any specific push — rather than tying a stable release to routine CI approvals.This PR adds only the workflow scaffold: the full test matrix (
test-{linux,macos,windows}-stable,security-scans-stable, secrets scan) andbuild-sign-stable, reusing the existingbuild-signjob definition under aname:override — no duplicated script, same job body asCICD's ownbuild-sign. No OIDC role assumption, no S3 upload, no GitHub release yet — that lands in a follow-up stacked PR (M3b) once this scaffold is confirmed to trigger correctly onmainandbuild-sign-stablesucceeds under a real manual trigger.No approval gate on
stable-release— the manual pipeline trigger itself is the deliberate act, same asrelease.yml'sworkflow_dispatchtoday. The existingCICDworkflow'sApprove preview releasegate is unchanged.CICDgains awhen: not: << pipeline.parameters.run_stable_release >>guard so it doesn't also run in parallel wheneverstable-releaseis manually triggered — its jobs, requires, and filters are otherwise untouched.Verified on a real pushed branch: CI ran only
CICD's normal jobs —stable-releasecorrectly did not schedule at all, confirming the guard works both ways.Verified with a real manual trigger: renamed this branch to a temporary
hotfix/*name and used CircleCI's Trigger Pipeline UI to setrun_stable_release: true. The resulting run showsstable-releasescheduling correctly, the full test matrix passing, andbuild-sign-stablesucceeding end to end (Decode signing keystoreandMaven verify with sign profileboth green) — using the restrictedsnyk-eclipse-plugin-signingcontext, with no approval gate at all. This confirms CircleCI's restricted-context authorization works correctly for a manually-triggered pipeline: the triggering user's own permission is sufficient, no gate needed.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 ← YOU ARE HERE\nworkflow + build-sign-stable"] PR4["#468 publish-stable\nOIDC publish, DO NOT MERGE yet"] PR5["#465 remove legacy workflow\nDO NOT MERGE yet"] main --> PR1 --> PR2 --> PR3 --> PR4 --> PR5 style PR3 fill:#ffd700,color:#000Depends on: #462
Note
Low Risk
CI workflow wiring only; no application, auth, or publish logic changes in this PR.
Overview
Introduces a manually triggered stable release path on CircleCI via pipeline parameter
run_stable_release(defaultfalse), aligned with allowed branchesmain,release/*, andhotfix/*.CICDnow skips when that parameter is true so routine preview CI does not run alongside a stable release trigger. A newstable-releaseworkflow runs the full test matrix, security scans, andbuild-sign-stable(reusing the existingbuild-signjob) when the parameter is set and the branch is allowed—no S3 publish or OIDC publish steps yet (follow-up PR).An
invalid-stable-release-branchworkflow fails fast ifrun_stable_releaseis true on an unsupported branch.Reviewed by Cursor Bugbot for commit 2832e94. Bugbot is set up for automated code reviews on this repo. Configure here.