Add comprehensive release guide with troubleshooting

- Quick reference commands for releases
- Pre-release checklist with all version files
- Troubleshooting section for common issues
- Documentation of new tools (progress monitor, health check)
- Best practices based on beta.13 experience
- Manual recovery procedures
This commit is contained in:
Peter Steinberger 2025-07-19 02:31:51 +02:00
parent 9e825ff21e
commit 754f06afb8

220
mac/docs/RELEASE_GUIDE.md Normal file
View file

@ -0,0 +1,220 @@
# VibeTunnel Release Guide - Quick Reference
This guide provides a streamlined release process based on lessons learned from beta.13.
## 🚀 Quick Release Commands
```bash
# 1. Pre-release health check
./scripts/release-health-check.sh
# 2. Set environment variables
export SPARKLE_ACCOUNT="VibeTunnel"
export CI=false
export SKIP_NODE_CHECK=false
# 3. Run the release
./scripts/release.sh beta 14 # For next beta
# 4. Monitor progress in another terminal
./scripts/release-progress.sh
# 5. If interrupted, resume
./scripts/release.sh --resume
```
## 📋 Pre-Release Checklist
Before starting any release:
### 1. Version Numbers
- [ ] Update `mac/VibeTunnel/version.xcconfig`:
- `MARKETING_VERSION = 1.0.0-beta.14`
- `CURRENT_PROJECT_VERSION = 203` (increment from last)
- [ ] Update `web/package.json` to match
- [ ] Update `web/package.npm.json` to match
- [ ] Update `CHANGELOG.md` with release notes
### 2. Environment Setup
```bash
# Required environment variables
export SPARKLE_ACCOUNT="VibeTunnel"
export CI=false
export SKIP_NODE_CHECK=false
# Notarization credentials (if not already set)
export APP_STORE_CONNECT_KEY_ID="your_key_id"
export APP_STORE_CONNECT_ISSUER_ID="your_issuer_id"
export APP_STORE_CONNECT_API_KEY_P8="-----BEGIN PRIVATE KEY-----
your_private_key_content
-----END PRIVATE KEY-----"
```
### 3. Clean State
```bash
# Ensure clean git state
git status # Should be clean
git pull --rebase origin main
# Run health check
./scripts/release-health-check.sh
```
## 🔧 Troubleshooting
### Node.js Detection Issues
If the build fails with "Node.js is required":
```bash
# Test Node.js detection
./scripts/check-node-simple.sh
# If using nvm, ensure it's loaded
source ~/.nvm/nvm.sh
nvm use 20 # or your version
# Create symlinks if needed (requires sudo)
sudo ln -s $(which node) /usr/local/bin/node
sudo ln -s $(which pnpm) /usr/local/bin/pnpm
```
### Release Script Timeouts
The release process can take 20-30 minutes:
- Build: 2-5 minutes
- Notarization: 5-15 minutes
- DMG creation: 1-2 minutes
If it times out:
```bash
# Check current status
./scripts/release-progress.sh
# Resume from last step
./scripts/release.sh --resume
```
### Manual Recovery
If the release script fails after notarization:
```bash
# 1. Create GitHub release manually
./scripts/generate-release-notes.sh 1.0.0-beta.14 > notes.md
gh release create "v1.0.0-beta.14" \
--title "VibeTunnel 1.0.0-beta.14" \
--notes-file notes.md \
--prerelease \
build/VibeTunnel-*.dmg \
build/VibeTunnel-*.zip
# 2. Sign DMG for Sparkle
sign_update -f private/sparkle_ed_private_key \
build/VibeTunnel-1.0.0-beta.14.dmg \
--account VibeTunnel
# 3. Update appcast manually
# Add the signature to appcast-prerelease.xml
# Then commit and push
git add ../appcast-prerelease.xml
git commit -m "Update appcast for v1.0.0-beta.14"
git push
```
## 📊 New Tools
### Release Progress Monitor
Shows real-time release progress with visual indicators:
```bash
./scripts/release-progress.sh
```
Features:
- Step-by-step progress tracking
- Duration for each step
- Idle time warnings
- Artifact status
### Release Health Check
Comprehensive pre-release validation:
```bash
./scripts/release-health-check.sh
```
Checks:
- Git status and branch
- Environment variables
- Build tools availability
- Code signing certificates
- Version synchronization
- Disk space
- Appcast validity
### Simplified Node.js Check
More robust Node.js detection:
```bash
./scripts/check-node-simple.sh
```
## 🎯 Best Practices
1. **Always run health check first** - Catches issues before they cause failures
2. **Use progress monitor** - Keep track of long-running operations
3. **Set all environment variables** - Prevents mid-release failures
4. **Keep versions synchronized** - Update all version files before starting
5. **Document in CHANGELOG.md** - Required for release notes generation
6. **Don't run in background** - Use screen/tmux if needed, but keep foreground
## 📝 Version Management
### Version Files to Update
1. `mac/VibeTunnel/version.xcconfig` - Source of truth
2. `web/package.json` - Must match macOS version
3. `web/package.npm.json` - For npm package release
4. `CHANGELOG.md` - Release notes
### Build Number Rules
- Must increment for EVERY release
- Must be unique across all releases
- Sparkle uses build numbers, not version strings
- Check existing: `grep '<sparkle:version>' ../appcast*.xml`
## 🚨 Common Issues
### "Uncommitted changes detected"
- Commit all changes before releasing
- Or stash temporarily: `git stash`
### "Build number already exists"
- Increment CURRENT_PROJECT_VERSION in version.xcconfig
- Must be higher than all previous releases
### "Version mismatch"
- Ensure web/package.json matches mac version
- Run health check to verify
### DMG stuck volumes
```bash
# List stuck volumes
ls /Volumes/VibeTunnel*
# Force unmount
for vol in /Volumes/VibeTunnel*; do
hdiutil detach "$vol" -force
done
```
## 📚 Summary
The improved release process provides:
- Better error handling with environment variable defaults
- Visual progress tracking
- Comprehensive pre-flight validation
- Clear recovery procedures
- Simplified troubleshooting
For the smoothest release experience:
1. Run health check
2. Set environment variables
3. Use the standard release script
4. Monitor with progress tool
5. Resume if interrupted
The release should complete in 20-30 minutes with clear visibility into each step.