Skip to content

ci: add stable-release workflow scaffold on CircleCI OIDC [IDE-2483] - #463

Merged
rrama merged 3 commits into
mainfrom
ci/IDE-2483_add-stable-release-workflow
Oct 12, 2026
Merged

rrama merged 3 commits into
mainfrom
ci/IDE-2483_add-stable-release-workflow

Conversation

@rrama

@rrama rrama commented Sep 15, 2026 •

Copy link
Copy Markdown
Contributor

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 existing CICD workflow, 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 CICD as before; stable-release does not schedule at all until a human explicitly sets the parameter to true via CircleCI's Trigger Pipeline UI or the API. This mirrors release.yml's current workflow_dispatch trigger 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) and build-sign-stable, reusing the existing build-sign job definition under a name: override — no duplicated script, same job body as CICD's own build-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 on main and build-sign-stable succeeds under a real manual trigger.

No approval gate on stable-release — the manual pipeline trigger itself is the deliberate act, same as release.yml's workflow_dispatch today. The existing CICD workflow's Approve preview release gate is unchanged. CICD gains a when: not: << pipeline.parameters.run_stable_release >> guard so it doesn't also run in parallel whenever stable-release is manually triggered — its jobs, requires, and filters are otherwise untouched.

Verified on a real pushed branch: CI ran only CICD's normal jobs — stable-release correctly 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 set run_stable_release: true. The resulting run shows stable-release scheduling correctly, the full test matrix passing, and build-sign-stable succeeding end to end (Decode signing keystore and Maven verify with sign profile both green) — using the restricted snyk-eclipse-plugin-signing context, 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

  • Read and understood the Code of Conduct and Contributing Guidelines.
  • Tests added and all succeed — N/A, CI-config-only change; verified via the real CI run linked above
  • Linted
  • CHANGELOG.md updated
  • README.md updated, if user-facing

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:#000
Loading

Depends 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 (default false), aligned with allowed branches main, release/*, and hotfix/*.

CICD now skips when that parameter is true so routine preview CI does not run alongside a stable release trigger. A new stable-release workflow runs the full test matrix, security scans, and build-sign-stable (reusing the existing build-sign job) 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-branch workflow fails fast if run_stable_release is 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.

@rrama rrama added the depends-on-462 Depends on PR #462 label Sep 15, 2026
@snyk-io

snyk-io Bot commented Sep 15, 2026 •

Copy link
Copy Markdown

✅ Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
✅ Open Source Security 0 0 0 0 0 issues
✅ Licenses 0 0 0 0 0 issues
✅ Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@rrama
rrama marked this pull request as ready for review September 17, 2026 13:44
@rrama
rrama requested a review from a team as a code owner September 17, 2026 13:44
@snyk-pr-review-bot

This comment has been minimized.

@rrama

rrama commented Sep 25, 2026

Copy link
Copy Markdown
Contributor Author

[AI reply] False positive on this one. CircleCI's own docs show not accepting a bare parameter reference, no nested equal/and/or required:

- when:
    condition:
      not: "<< parameters.foo >>"

(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 not argument.

Verified two more ways:

No change needed.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ 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.

Comment thread .circleci/config.yml Resolved
@snyk-pr-review-bot

This comment has been minimized.

@rrama
rrama force-pushed the ci/IDE-2483_add-stable-release-workflow branch from 0ab2ada to c4d98e0 Compare September 30, 2026 10:03
@snyk-pr-review-bot

This comment has been minimized.

@rrama

rrama commented Sep 30, 2026

Copy link
Copy Markdown
Contributor Author

[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.

@rrama
rrama force-pushed the ci/IDE-2483_add-preview-publish-job branch from 4ccb3ab to 8a46930 Compare September 30, 2026 14:21
@rrama
rrama requested a review from a team as a code owner September 30, 2026 14:21
@rrama
rrama force-pushed the ci/IDE-2483_add-stable-release-workflow branch from c4d98e0 to 0cc687b Compare September 30, 2026 14:22
@snyk-pr-review-bot

This comment has been minimized.

@snyk-pr-review-bot

This comment has been minimized.

@nick-y-snyk nick-y-snyk 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.

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=true on a branch outside main, release/* and hotfix/* 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].

@rrama
rrama force-pushed the ci/IDE-2483_add-stable-release-workflow branch from 0cc687b to 82bc733 Compare October 5, 2026 13:43
@rrama rrama changed the title ci: add stable-release workflow scaffold on CircleCI OIDC ci: add stable-release workflow scaffold on CircleCI OIDC [IDE-2483] Oct 5, 2026
@snyk-pr-review-bot

This comment has been minimized.

@snyk-pr-review-bot

This comment has been minimized.

@rrama

rrama commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor Author

Triggering with run_stable_release=true on a branch outside main, release/* and hotfix/* 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.

Good call. Done.

The title is missing IDE-2483.

🙈 Added.

@snyk-io

snyk-io Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

✅ Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
✅ Open Source Security 0 0 0 0 0 issues
✅ Licenses 0 0 0 0 0 issues
✅ Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@rrama
rrama force-pushed the ci/IDE-2483_add-stable-release-workflow branch from dac3256 to d726b7d Compare October 12, 2026 13:19
@rrama
rrama force-pushed the ci/IDE-2483_add-preview-publish-job branch from 5b1f53b to 3d64ae3 Compare October 12, 2026 13:19
@snyk-pr-review-bot

This comment has been minimized.

@snyk-pr-review-bot

This comment has been minimized.

1 similar comment
@snyk-pr-review-bot

This comment has been minimized.

@rrama
rrama force-pushed the ci/IDE-2483_add-stable-release-workflow branch from d726b7d to 6e71eb7 Compare October 12, 2026 13:47
@rrama
rrama force-pushed the ci/IDE-2483_add-preview-publish-job branch from 3d64ae3 to 323d056 Compare October 12, 2026 13:47
@snyk-pr-review-bot

This comment has been minimized.

1 similar comment
@snyk-pr-review-bot

This comment has been minimized.

Base automatically changed from ci/IDE-2483_add-preview-publish-job to main October 12, 2026 14:09
rrama and others added 3 commits October 12, 2026 15:10
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>
@rrama
rrama force-pushed the ci/IDE-2483_add-stable-release-workflow branch from 6e71eb7 to 2832e94 Compare October 12, 2026 14:11
@snyk-pr-review-bot

Copy link
Copy Markdown

PR Reviewer Guide 🔍

🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected
📚 Repository Context Analyzed

This review considered 1 relevant code sections from 1 files (average relevance: 0.79)

🤖 Repository instructions applied (from AGENTS.md)

@rrama
rrama merged commit 9bfcc84 into main Oct 12, 2026
12 checks passed
@rrama
rrama deleted the ci/IDE-2483_add-stable-release-workflow branch October 12, 2026 14:18
rrama added a commit that referenced this pull request Oct 12, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

depends-on-462 Depends on PR #462

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants