diff --git a/Derived/InfoPlists/VibeTunnel-Info.plist b/Derived/InfoPlists/VibeTunnel-Info.plist new file mode 100644 index 00000000..ae6e1f45 --- /dev/null +++ b/Derived/InfoPlists/VibeTunnel-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright ©. All rights reserved. + + diff --git a/Derived/InfoPlists/VibeTunnelTests-Info.plist b/Derived/InfoPlists/VibeTunnelTests-Info.plist new file mode 100644 index 00000000..f1d34193 --- /dev/null +++ b/Derived/InfoPlists/VibeTunnelTests-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright ©. All rights reserved. + + diff --git a/VibeTunnel/version.xcconfig b/VibeTunnel/version.xcconfig index 55ae5856..5a15e8c1 100644 --- a/VibeTunnel/version.xcconfig +++ b/VibeTunnel/version.xcconfig @@ -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 diff --git a/Workspace.xcworkspace/.tuist-generated b/Workspace.xcworkspace/.tuist-generated new file mode 100644 index 00000000..e69de29b diff --git a/Workspace.xcworkspace/contents.xcworkspacedata b/Workspace.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..76996b6a --- /dev/null +++ b/Workspace.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Workspace.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Workspace.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..08de0be8 --- /dev/null +++ b/Workspace.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + + diff --git a/docs/RELEASE.md b/docs/RELEASE.md index f5c512cc..4db11beb 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -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 diff --git a/scripts/release.sh b/scripts/release.sh index a6cb438f..dd313c84 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -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