How it works
The release pipeline is fully automated via AWS CodePipeline. There is no manual tag creation, no manual approval gate, and no GitHub release step:dev and merge to production. The pipeline handles everything else, including the git tag.
Prerequisites
- Push access to the
productionbranch ofcyshel-platform - The
cyshel-prodAWS profile (for monitoring and rollback) - GitHub CLI (
gh) authenticated, if you want to watch the macOS build
Step 1: bump the version on dev
Editapps/commander/package.json and increment the version:
- Patch (0.26.1): bug fixes only
- Minor (0.27.0): new features, backward compatible
- Major (1.0.0): breaking changes
dev as usual. The version in package.json is the single source of truth — the pipeline reads it to name the tag and the artifacts.
Step 2: merge dev into production
production is the only trigger. The pipeline creates and pushes the commander@X.Y.Z tag itself — do not create tags manually.
Step 3: monitor the pipeline
Step 4: verify the release
- The
commander@0.27.0tag exists on GitHub (created by the pipeline). - The Homebrew tap (
Cyshel/homebrew-tap,Casks/commander.rb) shows the new version and SHA-256. The tap update retries three times and is non-fatal — check it explicitly if it matters for this release.
latest-mac.yml 10 seconds after launch and every 5 minutes thereafter, download the update in the background, and prompt the user to install (with snooze and install-when-idle options).
Rollback
If a bad version ships, restore the previous update manifest:latest-mac.yml from commander/rollback/ and invalidates the CDN. Clients already on the bad version are not downgraded, but no new clients are offered it.
Troubleshooting
Build fails at “Install dependencies”
The GHA workflow runspnpm install --frozen-lockfile, so an out-of-sync pnpm-lock.yaml fails the build. Run pnpm install locally, commit the updated lockfile to dev, and merge to production again.
Retrying a failed stage
You don’t need a new commit — retry the failed stage in place:Promote fails with “Missing artifact” or “Version mismatch”
Promote validates thatlatest-mac.yml, Commander-X.Y.Z-universal.dmg, and Commander-X.Y.Z-universal-mac.zip exist in commander/staging/X.Y.Z/ and that the manifest version matches package.json. A failure here usually means the GHA upload was incomplete — retry the Build stage first, then Promote.
Code signing or notarization fails
Signing uses a certificate imported from theMAC_CERTIFICATE_P12 / MAC_CERTIFICATE_PASSWORD GitHub secrets; notarization uses APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD, and APPLE_TEAM_ID. Check the “Import signing certificate” and “Package & Notarize” steps in the GHA run log.
Pipeline failure notifications
Failures (any stage) publish to the SNS topiccommander-release-failures-production with the execution ID. Subscribe an email or Slack webhook to that topic to be alerted. There are no success notifications.
Quick reference
All AWS commands need
AWS_PROFILE=cyshel-prod.
Architecture
The CDK stack is
infrastructure/lib/stacks/commander-releases-stack.ts; the full reference lives at docs/infrastructure/commander-releases.md.