feat: add auto-update functionality and release scripts
This commit is contained in:
Executable
+81
@@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Build and Release Script for Notetaker
|
||||
# This script builds the app, creates a DMG, and generates the appcast
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# Configuration
|
||||
APP_NAME="Notetaker"
|
||||
BUNDLE_ID="owen.notetaker"
|
||||
VERSION=$(grep -m1 "MARKETING_VERSION" notetaker.xcodeproj/project.pbxproj | sed 's/.*= \(.*\);/\1/')
|
||||
|
||||
if [ -z "$VERSION" ]; then
|
||||
echo "❌ Could not determine version from project file"
|
||||
echo " Make sure notetaker.xcodeproj/project.pbxproj exists and contains MARKETING_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
BUILD_DIR="$(pwd)/build"
|
||||
RELEASES_DIR="$(pwd)/releases"
|
||||
DMG_NAME="${APP_NAME}-${VERSION}.dmg"
|
||||
|
||||
echo "🚀 Building ${APP_NAME} v${VERSION}..."
|
||||
|
||||
# Clean and build
|
||||
echo "📦 Building app..."
|
||||
xcodebuild -project notetaker.xcodeproj -scheme notetaker -configuration Release -derivedDataPath "${BUILD_DIR}" clean build
|
||||
|
||||
# Find the built app
|
||||
APP_PATH="${BUILD_DIR}/Build/Products/Release/${APP_NAME}.app"
|
||||
|
||||
if [ ! -d "$APP_PATH" ]; then
|
||||
echo "❌ App not found at $APP_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ App built successfully at $APP_PATH"
|
||||
|
||||
# Create DMG
|
||||
echo "📀 Creating DMG..."
|
||||
mkdir -p "$RELEASES_DIR"
|
||||
|
||||
# Remove old DMG if it exists
|
||||
if [ -f "$RELEASES_DIR/$DMG_NAME" ]; then
|
||||
rm "$RELEASES_DIR/$DMG_NAME"
|
||||
fi
|
||||
|
||||
# Create DMG using create-dmg
|
||||
create-dmg \
|
||||
--volname "$APP_NAME" \
|
||||
--window-pos 200 120 \
|
||||
--window-size 800 400 \
|
||||
--icon-size 100 \
|
||||
--icon "$APP_NAME.app" 200 190 \
|
||||
--hide-extension "$APP_NAME.app" \
|
||||
--app-drop-link 600 185 \
|
||||
"$RELEASES_DIR/$DMG_NAME" \
|
||||
"$APP_PATH"
|
||||
|
||||
echo "✅ DMG created: $RELEASES_DIR/$DMG_NAME"
|
||||
|
||||
# Generate appcast
|
||||
echo "📡 Generating appcast..."
|
||||
/opt/homebrew/Caskroom/sparkle/2.7.1/bin/generate_appcast "$RELEASES_DIR" \
|
||||
--download-url-prefix "https://github.com/owengretzinger/notetaker/releases/download/v${VERSION}/" \
|
||||
-o "appcast.xml"
|
||||
|
||||
echo "✅ Appcast generated: appcast.xml"
|
||||
|
||||
# Show file sizes
|
||||
echo ""
|
||||
echo "📊 Release Summary:"
|
||||
echo " Version: $VERSION"
|
||||
echo " DMG: $DMG_NAME ($(du -h "$RELEASES_DIR/$DMG_NAME" | cut -f1))"
|
||||
echo " Location: $RELEASES_DIR/$DMG_NAME"
|
||||
echo ""
|
||||
echo "🎉 Release ready! Next steps:"
|
||||
echo " 1. Test the DMG on another Mac"
|
||||
echo " 2. Create a GitHub release with tag v${VERSION}"
|
||||
echo " 3. Upload the DMG to the GitHub release"
|
||||
echo " 4. Commit and push the appcast.xml file"
|
||||
echo " 5. Your users will get auto-update notifications!"
|
||||
Executable
+110
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Version Update Script for Notetaker
|
||||
# Usage: ./update_version.sh [major|minor|patch|build] [custom_version]
|
||||
|
||||
set -e
|
||||
|
||||
PROJECT_FILE="notetaker.xcodeproj/project.pbxproj"
|
||||
CURRENT_MARKETING_VERSION=$(grep -m1 "MARKETING_VERSION" "$PROJECT_FILE" | sed 's/.*= \(.*\);/\1/')
|
||||
CURRENT_BUILD_VERSION=$(grep -m1 "CURRENT_PROJECT_VERSION" "$PROJECT_FILE" | sed 's/.*= \(.*\);/\1/')
|
||||
|
||||
if [ -z "$CURRENT_MARKETING_VERSION" ] || [ -z "$CURRENT_BUILD_VERSION" ]; then
|
||||
echo "❌ Could not determine current version from project file"
|
||||
echo " Make sure $PROJECT_FILE exists and contains MARKETING_VERSION and CURRENT_PROJECT_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📋 Current Version Info:"
|
||||
echo " Marketing Version: $CURRENT_MARKETING_VERSION"
|
||||
echo " Build Version: $CURRENT_BUILD_VERSION"
|
||||
echo ""
|
||||
|
||||
# Function to increment version
|
||||
increment_version() {
|
||||
local version=$1
|
||||
local type=$2
|
||||
|
||||
IFS='.' read -ra VERSION_PARTS <<< "$version"
|
||||
local major=${VERSION_PARTS[0]:-0}
|
||||
local minor=${VERSION_PARTS[1]:-0}
|
||||
local patch=${VERSION_PARTS[2]:-0}
|
||||
|
||||
case $type in
|
||||
"major")
|
||||
major=$((major + 1))
|
||||
minor=0
|
||||
patch=0
|
||||
;;
|
||||
"minor")
|
||||
minor=$((minor + 1))
|
||||
patch=0
|
||||
;;
|
||||
"patch")
|
||||
patch=$((patch + 1))
|
||||
;;
|
||||
*)
|
||||
echo "❌ Invalid increment type: $type"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${major}.${minor}.${patch}"
|
||||
}
|
||||
|
||||
# Function to update version in project file
|
||||
update_project_version() {
|
||||
local new_marketing_version=$1
|
||||
local new_build_version=$2
|
||||
|
||||
# Update marketing version
|
||||
sed -i '' "s/MARKETING_VERSION = .*;/MARKETING_VERSION = $new_marketing_version;/g" "$PROJECT_FILE"
|
||||
|
||||
# Update build version
|
||||
sed -i '' "s/CURRENT_PROJECT_VERSION = .*;/CURRENT_PROJECT_VERSION = $new_build_version;/g" "$PROJECT_FILE"
|
||||
|
||||
echo "✅ Updated project file:"
|
||||
echo " Marketing Version: $CURRENT_MARKETING_VERSION → $new_marketing_version"
|
||||
echo " Build Version: $CURRENT_BUILD_VERSION → $new_build_version"
|
||||
}
|
||||
|
||||
# Main logic
|
||||
case $1 in
|
||||
"major"|"minor"|"patch")
|
||||
NEW_MARKETING_VERSION=$(increment_version "$CURRENT_MARKETING_VERSION" "$1")
|
||||
NEW_BUILD_VERSION=$((CURRENT_BUILD_VERSION + 1))
|
||||
update_project_version "$NEW_MARKETING_VERSION" "$NEW_BUILD_VERSION"
|
||||
;;
|
||||
"build")
|
||||
NEW_BUILD_VERSION=$((CURRENT_BUILD_VERSION + 1))
|
||||
update_project_version "$CURRENT_MARKETING_VERSION" "$NEW_BUILD_VERSION"
|
||||
;;
|
||||
"custom")
|
||||
if [ -z "$2" ]; then
|
||||
echo "❌ Please provide a custom version number"
|
||||
echo "Usage: ./update_version.sh custom 1.2.0"
|
||||
exit 1
|
||||
fi
|
||||
NEW_BUILD_VERSION=$((CURRENT_BUILD_VERSION + 1))
|
||||
update_project_version "$2" "$NEW_BUILD_VERSION"
|
||||
;;
|
||||
*)
|
||||
echo "🔢 Version Update Script"
|
||||
echo ""
|
||||
echo "Usage:"
|
||||
echo " ./update_version.sh major # 1.0 → 2.0"
|
||||
echo " ./update_version.sh minor # 1.0 → 1.1"
|
||||
echo " ./update_version.sh patch # 1.0 → 1.0.1"
|
||||
echo " ./update_version.sh build # Keep version, increment build"
|
||||
echo " ./update_version.sh custom 1.2.0 # Set specific version"
|
||||
echo ""
|
||||
echo "Current version: $CURRENT_MARKETING_VERSION (build $CURRENT_BUILD_VERSION)"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo "🎯 Next steps:"
|
||||
echo " 1. Test the app to make sure everything works"
|
||||
echo " 2. Run ./build_release.sh to create a release"
|
||||
echo " 3. The new version will be: $(grep -m1 "MARKETING_VERSION" "$PROJECT_FILE" | sed 's/.*= \(.*\);/\1/')"
|
||||
Reference in New Issue
Block a user