| name | create-release |
| description | Create a new release for SSMSx. Use when the user says "create a release", "new release", "cut a release", "ship it", or asks to publish SSMSx. |
Create Release
Create a stable or beta GitHub release for SSMSx with the versioning and release workflow this repo expects.
Preconditions
- The release must target
main.
- The working tree must be clean.
- All release secrets must exist in the GitHub
prod environment, not as repo-level secrets:
APPLE_ID
APPLE_TEAM_ID
APPLE_APP_PASSWORD
DEVELOPER_ID_CERTIFICATE
DEVELOPER_ID_PASSWORD
HOMEBREW_TAP_DEPLOY_KEY
- The published release triggers the
Build and Test workflow. Do not create a draft release if the user expects the pipeline to run immediately.
Steps
-
Pull latest:
but clean --pull
-
Confirm the local checkout is clean:
but status -fv
Stop if there are uncommitted or unapplied changes that are not part of the release.
-
Check existing releases:
gh release list --repo GordonBeeming/ssmsx --limit 10
-
Determine the next version.
- Stable tags must be
v{major}.{minor}.
- Beta tags must be
v{major}.{minor}-beta.{n}.
- The release workflow rejects tags without the leading
v.
- The release workflow writes
{major}.{minor}.{github_run_number} for stable releases, or {major}.{minor}.{github_run_number}-beta.{n} for beta releases, into package.json, src-tauri/tauri.conf.json, src-tauri/Cargo.toml, and sidecar/Directory.Build.props during the CI build.
- If there are no releases yet, use
v0.1-beta.1 for beta or v0.1 for stable unless Gordon asks for another version.
- For normal feature releases, bump the minor version.
- Do not use patch numbers in release tags.
-
Gather changes since the last release:
LAST_TAG=$(gh release list --repo GordonBeeming/ssmsx --limit 1 --json tagName --jq '.[0].tagName')
git log "${LAST_TAG}..HEAD" --oneline
If there is no prior release, use:
git log --oneline
-
Create the release on main.
Use a published release, not a draft, when the user wants the pipeline to start now:
gh release create v{major}.{minor} \
--repo GordonBeeming/ssmsx \
--target main \
--title "v{major}.{minor} - {short description}" \
--notes "$(cat <<'EOF'
# SSMSx v{major}.{minor} - {short description}
## What's new
- {list changes since the last release using git log}
## Install
```bash
brew upgrade --cask gordonbeeming/tap/ssmsx
```
Or download the DMG from the assets below after the release workflow completes.
EOF
)"
For beta releases, use the beta tag and mark the GitHub release as a prerelease:
gh release create v{major}.{minor}-beta.{n} \
--repo GordonBeeming/ssmsx \
--target main \
--prerelease \
--title "v{major}.{minor}-beta.{n} - {short description}" \
--notes "$(cat <<'EOF'
# SSMSx v{major}.{minor}-beta.{n} - {short description}
## What's new
- {list changes since the last release using git log}
## Install
```bash
brew upgrade --cask gordonbeeming/tap/ssmsx
```
Or download the DMG from the assets below after the release workflow completes.
EOF
)"
-
The release pipeline will automatically:
- Run the verification suite
- Build the .NET sidecar for macOS arm64
- Build the Tauri app bundle
- Sign with Developer ID
- Notarize and staple the app bundle
- Create and sign
ssmsx-{tag without v}-aarch64.dmg
- Notarize the DMG with Apple
- Staple and validate the notarization ticket
- Upload the DMG to the release
- Update
GordonBeeming/homebrew-tap at Casks/ssmsx.rb
-
Watch the workflow:
gh run list --repo GordonBeeming/ssmsx --workflow "Build and Test" --limit 5
For the relevant run:
gh run watch <run-id> --repo GordonBeeming/ssmsx --exit-status
-
Report the release URL, workflow run URL, Homebrew cask update status, and any required manual follow-up.
Version Format
- Stable release tag:
v{major}.{minor} (example: v0.2)
- Beta release tag:
v{major}.{minor}-beta.{n} (example: v0.2-beta.1)
- Stable app/package/sidecar version during CI:
{major}.{minor}.{github_run_number}
- Beta app/package/sidecar version during CI:
{major}.{minor}.{github_run_number}-beta.{n}
- Homebrew cask version: the release tag without the leading
v
- DMG asset:
ssmsx-{tag without v}-aarch64.dmg
- Homebrew URL generated by CI:
https://github.com/gordonbeeming/ssmsx/releases/download/v{tag without v}/ssmsx-{tag without v}-aarch64.dmg
Important
- Never reuse, delete, or overwrite an existing release tag.
- Do not use a tag without the
v prefix.
- Do not use patch numbers in release tags.
- Do not create repo-level secrets. Release credentials belong in the GitHub
prod environment only.
- If signing fails because
DEVELOPER_ID_CERTIFICATE or DEVELOPER_ID_PASSWORD is missing, report that exact missing secret rather than trying to work around signing.
- Wait for the release workflow to complete before telling the user to run
brew upgrade.