ci(release): pin softprops target_commitish to the release commit#2823
Conversation
softprops/action-gh-release defaults target_commitish to the repo default branch (develop) when unset, so the stable v4.0.2 tag was created on develop's HEAD (off-main) instead of the released commit -- it had to be force-moved manually after the fact (#2819). Pin it to github.sha on the stable Create-GitHub-Release step so the tag always lands on the exact commit built. Stable step only: the snapshot step publishes to wheels-dev/wheels-snapshots, where a wheels-repo SHA wouldn't resolve. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
There was a problem hiding this comment.
Wheels Bot — Reviewer A
TL;DR: Targeted one-line CI fix that pins the softprops/action-gh-release tag to the exact released commit on main, preventing a recurrence of the off-main tag placement that required a manual force-move after v4.0.2 (#2819). The change is correct, narrowly scoped, and well-documented. Approve.
Correctness
The root cause is accurately diagnosed: softprops/action-gh-release uses the repo's default branch as target_commitish when the parameter is omitted, and this repo's default branch is develop, not main. Adding target_commitish: ${{ github.sha }} to the stable step pins the tag to the commit that actually triggered the workflow — the right fix.
A few correctness points confirmed:
- The stable step guard is already present. The step has
if: github.ref == 'refs/heads/main', sogithub.shawill always be a commit onmainwhen this step runs. This holds for both thepushandworkflow_dispatchtriggers. - Snapshot step left untouched — correctly. The snapshot step publishes to
wheels-dev/wheels-snapshotsviarepository:; a SHA fromwheels-dev/wheelswould not resolve in a foreign repo, so omittingtarget_commitishthere is the right call. The inline comment at lines 457–460 documents this asymmetry explicitly. with: |block syntax. TheWandalen/wretry.actionconsumes forwarded inputs as a literal string that GitHub Actions interpolates before passing tosoftprops. All existing parameters (tag_name,name,body_path, etc.) already follow this pattern, so the new entry fits cleanly.
No edge cases left unaddressed: the tag does not pre-exist (it is created by this step), and overwrite_files: true covers idempotent re-runs.
Commits
Single commit ci(release): pin softprops target_commitish to the release commit.
- Type
ciis in the valid-types allowlist. - Scope
releaseis unrestricted percommitlint.config.js. - Header is 60 characters, well under the 100-char limit.
- Body explains the why (v4.0.2 incident,
developas default branch) and the deliberate scope boundary (snapshot exclusion). - DCO
Signed-off-by: Peter Amiri <peter@alurium.com>present.
Tests / Docs
No CFML code changed — cross-engine checks, test coverage requirements, and .ai/wheels/ doc updates do not apply here. The PR checklist item for verifying on the next stable cut is appropriately deferred; there is no practical way to pre-verify CI release mechanics in isolation.
Wheels Bot — Reviewer B (round 1)A's review is clean. The fix is a single-line CI change pinning SycophancyNone detected. A cites concrete reasoning for the approval: the False positivesNone detected. I re-read the diff against A's claims:
Missed issuesNone detected. This is a CI-only change with no CFML code, no test surface, and no Verdict alignmentA's ConvergenceAligned. A's review is accurate and complete; there are no false positives, no missed issues, and the approve verdict is correct. The PR is review-clean for this SHA. |
Summary
Prevents the off-main stable tag from recurring every cut where main has diverged from develop.
softprops/action-gh-releasedefaultstarget_commitishto the repo default branch (develop) when unset — so the v4.0.2 stable tag was created on develop's HEAD (59ff240e3, off-main) instead of the released commit, and had to be force-moved manually post-release (#2819). This pinstarget_commitish: ${{ github.sha }}on the stable Create GitHub Release step so the tag always lands on the exact commit that was built.Stable step only — the snapshot step (
Create Snapshot Pre-Release) publishes towheels-dev/wheels-snapshotsviarepository:, where awheels-repo SHA wouldn't resolve, so it's intentionally left untouched.Test plan
release.ymlvalid YAML;target_commitishpresent once (stable step only)v4.0.3tag lands on main HEAD with no manual move🤖 Generated with Claude Code