Fix release process: prevent double beta suffix and improve documentation

- Updated release.sh to detect if version already contains suffix
- Added critical pre-release checklist to RELEASE.md
- Fixed version back to 1.0.0-beta.2 (removed double suffix)
- Improved documentation about version handling in release process
This commit is contained in:
Peter Steinberger 2025-06-19 03:26:40 +02:00
parent 72229af0a5
commit c91c84191a
8 changed files with 185 additions and 11 deletions

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright ©. All rights reserved.</string>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright ©. All rights reserved.</string>
</dict>
</plist>

View file

@ -1,7 +1,7 @@
// VibeTunnel Version Configuration
// This file contains the version and build number for the app
MARKETING_VERSION = 1.0.0-beta.2-beta.2
MARKETING_VERSION = 1.0.0-beta.2
CURRENT_PROJECT_VERSION = 104
// Domain and GitHub configuration

View file

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:VibeTunnel.xcodeproj">
</FileRef>
<Group
location = "container:"
name = "Dependencies">
<FileRef
location = "group:.build/tuist-derived/async-http-client/async-http-client.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/hummingbird/hummingbird.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-algorithms/swift-algorithms.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-async-algorithms/swift-async-algorithms.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-atomics/swift-atomics.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-collections/swift-collections.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-distributed-tracing/swift-distributed-tracing.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-http-types/swift-http-types.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-log/swift-log.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-metrics/swift-metrics.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-nio-extras/swift-nio-extras.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-nio-http2/swift-nio-http2.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-nio-ssl/swift-nio-ssl.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-nio-transport-services/swift-nio-transport-services.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-nio/swift-nio.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-numerics/swift-numerics.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-service-context/swift-service-context.xcodeproj">
</FileRef>
<FileRef
location = "group:.build/tuist-derived/swift-service-lifecycle/swift-service-lifecycle.xcodeproj">
</FileRef>
</Group>
</Workspace>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
<false/>
</dict>
</plist>

View file

@ -13,13 +13,57 @@ VibeTunnel uses an automated release process that handles all the complexity of:
## 🚀 Creating a Release
### 📋 Pre-Release Checklist (MUST DO FIRST!)
Before running ANY release commands, verify these items:
- [ ] **Version in version.xcconfig is correct**
```bash
grep MARKETING_VERSION VibeTunnel/version.xcconfig
# For beta.2 should show: MARKETING_VERSION = 1.0.0-beta.2
# NOT: MARKETING_VERSION = 1.0.0
```
- [ ] **Build number is incremented**
```bash
grep CURRENT_PROJECT_VERSION VibeTunnel/version.xcconfig
# Must be higher than the last release
```
- [ ] **CHANGELOG.md has entry for this version**
```bash
grep "## \[1.0.0-beta.2\]" CHANGELOG.md
# Must exist with release notes
```
- [ ] **Run Tuist generate if build number was changed**
```bash
tuist generate
git add VibeTunnel.xcodeproj/project.pbxproj
git commit -m "Update Xcode project for build XXX"
```
### Step 1: Pre-flight Check
```bash
./scripts/preflight-check.sh
```
This validates your environment is ready for release.
### Step 2: Create/Update CHANGELOG.md
### Step 2: CRITICAL Pre-Release Version Check
**IMPORTANT**: Before running the release script, ensure your version.xcconfig is set correctly:
1. For beta releases: The MARKETING_VERSION should already include the suffix (e.g., `1.0.0-beta.2`)
2. The release script will NOT add additional suffixes - it uses the version as-is
3. Always verify the version before proceeding:
```bash
grep MARKETING_VERSION VibeTunnel/version.xcconfig
# Should show: MARKETING_VERSION = 1.0.0-beta.2
```
**Common Mistake**: If the version is already `1.0.0-beta.2` and you run `./scripts/release.sh beta 2`,
it will create `1.0.0-beta.2-beta.2` which is wrong!
### Step 3: Create/Update CHANGELOG.md
Before creating any release, ensure the CHANGELOG.md file exists and contains a proper section for the version being released. If this is your first release, create a CHANGELOG.md file in the project root:
```markdown
@ -27,7 +71,7 @@ Before creating any release, ensure the CHANGELOG.md file exists and contains a
All notable changes to VibeTunnel will be documented in this file.
## [1.1.0] - 2025-06-10
## [1.0.0-beta.2] - 2025-06-19
### 🎨 UI Improvements
- **Enhanced feature** - Description of the improvement
@ -36,15 +80,15 @@ All notable changes to VibeTunnel will be documented in this file.
**CRITICAL**: The appcast generation relies on the local CHANGELOG.md file, NOT the GitHub release description. The changelog must be added to CHANGELOG.md BEFORE running the release script.
### Step 3: Create the Release
### Step 4: Create the Release
```bash
# For stable releases:
./scripts/release.sh stable
# For pre-releases (beta, alpha, rc):
./scripts/release.sh beta 1 # Creates version-beta.1
./scripts/release.sh alpha 2 # Creates version-alpha.2
./scripts/release.sh rc 1 # Creates version-rc.1
# IMPORTANT: The release type parameter is only used for tagging!
# The actual version comes from version.xcconfig
# Example: If version.xcconfig has "1.0.0-beta.2", then:
./scripts/release.sh beta 2 # Creates tag v1.0.0-beta.2 (NOT v1.0.0-beta.2-beta.2!)
```
**IMPORTANT**: The release script does NOT automatically increment build numbers. You must manually update the build number in VibeTunnel.xcodeproj before running the script, or it will fail the pre-flight check.
@ -57,7 +101,7 @@ The script will:
5. Update the appcast files with EdDSA signatures
6. Commit and push all changes
### Step 4: Verify Success
### Step 5: Verify Success
- Check the GitHub releases page
- Verify the appcast was updated correctly with proper changelog content
- Test updating from a previous version

View file

@ -137,7 +137,15 @@ if [[ "$RELEASE_TYPE" == "stable" ]]; then
RELEASE_VERSION="$MARKETING_VERSION"
TAG_NAME="v$RELEASE_VERSION"
else
RELEASE_VERSION="$MARKETING_VERSION-$RELEASE_TYPE.$PRERELEASE_NUMBER"
# Check if MARKETING_VERSION already contains the pre-release suffix
EXPECTED_SUFFIX="$RELEASE_TYPE.$PRERELEASE_NUMBER"
if [[ "$MARKETING_VERSION" == *"-$EXPECTED_SUFFIX" ]]; then
# Version already has the correct suffix, use as-is
RELEASE_VERSION="$MARKETING_VERSION"
else
# Add the suffix
RELEASE_VERSION="$MARKETING_VERSION-$RELEASE_TYPE.$PRERELEASE_NUMBER"
fi
TAG_NAME="v$RELEASE_VERSION"
fi
@ -170,7 +178,8 @@ if [[ "$RELEASE_TYPE" == "stable" ]]; then
BASE_VERSION=$(echo "$MARKETING_VERSION" | sed 's/-.*$//')
VERSION_TO_SET="$BASE_VERSION"
else
# For pre-releases, set the full version with suffix
# For pre-releases, use the RELEASE_VERSION we calculated above
# (which already handles whether to add suffix or not)
VERSION_TO_SET="$RELEASE_VERSION"
fi