# Release Process ## Quick Checklist ```bash # 1. Update version ./scripts/update-version.sh 1.0.0 # 2. Run tests ./scripts/test-all.sh # 3. Build release ./scripts/release.sh 1.0.0 # 4. Create GitHub release gh release create v1.0.0 dist/VibeTunnel-1.0.0.dmg # 5. Update Sparkle feed ./scripts/update-sparkle.sh ``` ## Detailed Steps ### 1. Pre-Release **Version Update** ```bash # Updates all version files ./scripts/update-version.sh NEW_VERSION # Files modified: # - mac/VibeTunnel/version.xcconfig # - web/package.json # - ios/VibeTunnel/Info.plist ``` **Changelog** ```markdown ## [1.0.0] - 2024-01-01 ### Added - New feature X - Support for Y ### Fixed - Bug Z ### Changed - Improved performance ``` ### 2. Testing **Run Test Suite** ```bash # All platforms ./scripts/test-all.sh # Individual cd mac && xcodebuild test cd ios && ./scripts/test-with-coverage.sh cd web && pnpm test ``` **Manual Testing** - [ ] Fresh install on clean macOS - [ ] Upgrade from previous version - [ ] Test on minimum macOS version - [ ] iOS app connectivity - [ ] Web UI on Safari/Chrome/Firefox ### 3. Build **Release Build** ```bash # Complete release ./scripts/release.sh VERSION # Steps performed: # 1. Clean build directories # 2. Build web assets # 3. Build Mac app (signed) # 4. Create DMG # 5. Notarize with Apple # 6. Generate Sparkle appcast ``` **Verification** ```bash # Check signature codesign -dv --verbose=4 dist/VibeTunnel.app # Verify notarization spctl -a -v dist/VibeTunnel.app ``` ### 4. Distribution **GitHub Release** ```bash # Create release gh release create v$VERSION \ --title "VibeTunnel $VERSION" \ --notes-file RELEASE_NOTES.md \ dist/VibeTunnel-$VERSION.dmg # Upload additional assets gh release upload v$VERSION dist/checksums.txt ``` **Sparkle Update** ```xml Version 1.0.0 Mon, 01 Jan 2024 00:00:00 +0000 1.0.0 1.0.0 14.0 ``` ### 5. Post-Release **Documentation** - [ ] Update README with new version - [ ] Update docs with new features - [ ] Post release notes **Monitoring** - [ ] Check Sparkle update stats - [ ] Monitor crash reports - [ ] Review user feedback ## Version Scheme ``` MAJOR.MINOR.PATCH[-PRERELEASE] 1.0.0 - Stable release 1.0.0-beta.1 - Beta release 1.0.0-rc.1 - Release candidate ``` ## Build Configurations | Config | Use Case | Signing | |--------|----------|---------| | Debug | Development | No | | Release | Distribution | Yes | | AppStore | Mac App Store | Yes | ## Code Signing **Requirements** - Apple Developer account - Developer ID certificate - Notarization credentials **Setup** ```bash # Store credentials xcrun notarytool store-credentials "VT_NOTARY" \ --apple-id "your@email.com" \ --team-id "TEAMID" \ --password "app-specific-password" ``` ## Troubleshooting | Issue | Solution | |-------|----------| | Notarization fails | Check entitlements, wait 5 min | | Sparkle not updating | Verify appcast URL, signature | | DMG corrupted | Re-run with clean build | | Version mismatch | Run update-version.sh | ## Rollback ```bash # Revert release gh release delete v$VERSION git revert git tag -d v$VERSION git push origin :refs/tags/v$VERSION # Update Sparkle feed to previous version ./scripts/rollback-sparkle.sh $PREVIOUS_VERSION ``` ## CI/CD Pipeline ```yaml # .github/workflows/release.yml on: push: tags: - 'v*' jobs: release: runs-on: macos-14 steps: - uses: actions/checkout@v4 - run: ./scripts/test-all.sh - run: ./scripts/release.sh ${{ github.ref_name }} - uses: softprops/action-gh-release@v1 with: files: dist/*.dmg ``` ## See Also - [Build System](../guides/development.md#build-system) - [Testing Guide](../guides/testing.md) - [Changelog](../../CHANGELOG.md)