Root cause: update-homebrew.yml triggered on release:published, which fires before softprops/action-gh-release finishes uploading assets. The workflow downloaded a 404 page instead of the DMG and committed its SHA. Fix: - Change trigger from release:published to workflow_run (fires after the release workflow completes, guaranteeing assets are uploaded) - Add download validation with retries and file size checks - Add SHA verification step before committing to the cask - Add homebrew cask update to build-sign-upload.sh for local releases - Add regression test (tests/test_homebrew_sha.sh) - Update /release and /release-local skills with homebrew verification steps Fixes #110
4.1 KiB
4.1 KiB
Release
Prepare a new release for cmux. This command updates the changelog, bumps the version, creates a PR, monitors CI, and then merges and tags.
Steps
-
Determine the new version number
- Get the current version from
GhosttyTabs.xcodeproj/project.pbxproj(look forMARKETING_VERSION) - Bump the minor version unless the user specifies otherwise (e.g., 0.12.0 → 0.13.0)
- Get the current version from
-
Create a release branch
- Create branch:
git checkout -b release/vX.Y.Z
- Create branch:
-
Gather changes since the last release
- Find the most recent git tag:
git describe --tags --abbrev=0 - Get commits since that tag:
git log --oneline <last-tag>..HEAD --no-merges - Filter for end-user visible changes only - ignore developer tooling, CI, docs, tests
- Categorize changes into: Added, Changed, Fixed, Removed
- Find the most recent git tag:
-
Update the changelog
- Add a new section at the top of
CHANGELOG.mdwith the new version and today's date - Only include changes that affect the end-user experience - things users will see, feel, or interact with
- Write clear, user-facing descriptions (not raw commit messages)
- Also update
docs-site/content/docs/changelog.mdxwith the same content - If there are no user-facing changes, ask the user if they still want to release
- Add a new section at the top of
-
Bump the version in Xcode project
- Update all occurrences of
MARKETING_VERSIONinGhosttyTabs.xcodeproj/project.pbxproj - There are typically 4 occurrences (Debug/Release for main app and CLI)
- Update all occurrences of
-
Commit and push the release branch
- Stage:
CHANGELOG.md,docs-site/content/docs/changelog.mdx,GhosttyTabs.xcodeproj/project.pbxproj - Commit message:
Bump version to X.Y.Z - Push:
git push -u origin release/vX.Y.Z
- Stage:
-
Create a pull request
- Create PR:
gh pr create --title "Release vX.Y.Z" --body "...changelog summary..." - Include the changelog entries in the PR body
- Create PR:
-
Monitor CI
- Watch the CI workflow:
gh pr checks --watch - If CI fails, fix the issues and push again
- Wait for all checks to pass before proceeding
- Watch the CI workflow:
-
Merge the PR
- Merge:
gh pr merge --squash --delete-branch - Switch back to main:
git checkout main && git pull
- Merge:
-
Create and push the tag
- Create tag:
git tag vX.Y.Z - Push tag:
git push origin vX.Y.Z
- Create tag:
-
Monitor the release workflow
- Watch:
gh run watch --repo manaflow-ai/cmux - Verify the release appears at: https://github.com/manaflow-ai/cmux/releases
- Check that the DMG is attached to the release
- Watch:
-
Verify homebrew cask update
- The "Update Homebrew Cask" workflow triggers automatically after the release workflow completes
- Watch:
gh run list --workflow=update-homebrew.yml --limit=1andgh run watch - Verify:
cd homebrew-cmux && git pull && grep version Casks/cmux.rb - Run
bash tests/test_homebrew_sha.shto confirm the SHA matches
-
Notify
- On success:
say "cmux release complete" - On failure:
say "cmux release failed"
- On success:
Changelog Guidelines
Include only end-user visible changes:
- New features users can see or interact with
- Bug fixes users would notice (crashes, UI glitches, incorrect behavior)
- Performance improvements users would feel
- UI/UX changes
- Breaking changes or removed features
Exclude internal/developer changes:
- Setup scripts, build scripts, reload scripts
- CI/workflow changes
- Documentation updates (README, CONTRIBUTING, CLAUDE.md)
- Test additions or fixes
- Internal refactoring with no user-visible effect
- Dependency updates (unless they fix a user-facing bug)
Writing style:
- Use present tense ("Add feature" not "Added feature")
- Group by category: Added, Changed, Fixed, Removed
- Be concise but descriptive
- Focus on what the user experiences, not how it was implemented
- Link to issues/PRs if relevant
Example Changelog Entry
## [0.13.0] - 2025-01-30
### Added
- New keyboard shortcut for quick tab switching
### Fixed
- Memory leak when closing split panes
- Notification badges not clearing properly
### Changed
- Improved terminal rendering performance