| name | publish-release |
| description | Publish the draft GitHub release for swift-mocking after the changelog PR has been merged. Creates the git tag and makes the release public. Run only after /prepare-release and the changelog PR is merged. |
Publish Release
Publishes the draft GitHub release prepared by /prepare-release. Run this after the changelog PR is merged.
1. Identify the draft release
gh release list --repo fetch-rewards/swift-mocking
If a draft exists: note its version (e.g. 0.3.0) and continue to step 2.
If no draft exists: fetch main and check whether the topmost (most recent) version entry in CHANGELOG.md has a corresponding git tag:
git fetch origin
git show origin/main:CHANGELOG.md
git tag --sort=-version:refname
Only look at the single topmost version in CHANGELOG.md. If that version has no corresponding git tag (i.e. the changelog PR merged but the draft was lost), recreate the draft. Extract the release notes from that version's section — everything between its header and the next version's header, excluding the version header line itself. The assembled notes body looks like:
### ✨ Features
- Example entry ([#NNN](https://github.com/fetch-rewards/swift-mocking/pull/NNN))
[Full Changelog](https://github.com/fetch-rewards/swift-mocking/compare/<previous_version>...<version>)
where <previous_version> is the version entry directly below it in CHANGELOG.md. The extracted content already ends with a blank line; append just the full-changelog link directly. Write the assembled body to a temp file and create the draft:
gh release create <version> --repo fetch-rewards/swift-mocking --draft --title "Version <version>" --notes-file <path>
The draft is now recreated. Continue to step 2 using the <version> just determined from CHANGELOG.md.
If the topmost CHANGELOG.md version already has a corresponding git tag (i.e. it is already released), stop and tell the user to run /prepare-release first.
2. Validate the changelog is in place
Fetch the latest main and check that CHANGELOG.md contains a version entry matching the draft release version:
git fetch origin
git show origin/main:CHANGELOG.md | grep "Version <version>"
If the version is not found, stop and tell the user the changelog PR for <version> has not been merged into main yet.
3. Publish the release
gh release edit <version> --repo fetch-rewards/swift-mocking --draft=false
This creates the <version> git tag pointing to the current HEAD of main and makes the release public.
4. Confirm
Report the published release URL to the user.