diff --git a/appcast.xml b/appcast.xml index 067ef64..2dd92aa 100644 --- a/appcast.xml +++ b/appcast.xml @@ -4,11 +4,11 @@ Meetingnotes 1.0.1 - Mon, 14 Jul 2025 18:29:29 -0400 + Mon, 14 Jul 2025 18:59:45 -0400 6 1.0.1 14.0 - + 1.0.0 diff --git a/releases/Meetingnotes-1.0.1.dmg b/releases/Meetingnotes-1.0.1.dmg index 53c0bbc..7a909ef 100644 Binary files a/releases/Meetingnotes-1.0.1.dmg and b/releases/Meetingnotes-1.0.1.dmg differ diff --git a/releases/Meetingnotes-1.0.1.zip b/releases/Meetingnotes-1.0.1.zip new file mode 100644 index 0000000..d8e95c4 Binary files /dev/null and b/releases/Meetingnotes-1.0.1.zip differ diff --git a/scripts/build_release.sh b/scripts/build_release.sh index 1def27f..349e33e 100755 --- a/scripts/build_release.sh +++ b/scripts/build_release.sh @@ -173,6 +173,19 @@ create-dmg \ echo "✅ DMG created: $RELEASES_DIR/$DMG_NAME" +# 🔖 ------------------------------------------------- +# NEW: Create a ZIP archive for Sparkle auto-updates +# -------------------------------------------------- +ZIP_NAME="${APP_NAME}-${VERSION}.zip" + +echo "📦 Creating ZIP archive for Sparkle auto-updates..." +# Keep parent so the archive extracts directly to the app bundle +# ditto preserves resource forks and extended attributes that Gatekeeper expects + +ditto -c -k --keepParent "$APP_PATH" "$RELEASES_DIR/$ZIP_NAME" + +echo "✅ ZIP created: $RELEASES_DIR/$ZIP_NAME" + # 📡 Notarization (required for all production builds) echo "📡 Starting notarization process..." @@ -198,24 +211,25 @@ else fi # Generate appcast with signatures - only process current version to avoid URL corruption -echo "📡 Generating appcast with EdDSA signatures..." +# ----------------------------------------------------------------------------- +# We only want the .zip in our appcast. Move DMGs out temporarily so they are +# not picked up by generate_appcast. -# Temporarily move old DMGs to avoid URL corruption -echo "📦 Temporarily moving old DMGs to preserve their URLs..." -mkdir -p "$RELEASES_DIR/temp_old" -find "$RELEASES_DIR" -name "*.dmg" ! -name "$DMG_NAME" -exec mv {} "$RELEASES_DIR/temp_old/" \; +echo "📡 Generating appcast with EdDSA signatures (ZIP only)..." + +echo "📦 Temporarily moving DMGs so generate_appcast only sees ZIP archives..." +mkdir -p "$RELEASES_DIR/temp_dmg" +find "$RELEASES_DIR" -name "*.dmg" -exec mv {} "$RELEASES_DIR/temp_dmg/" \; -# Generate appcast (will only see current DMG + existing appcast.xml) /opt/homebrew/Caskroom/sparkle/2.7.1/bin/generate_appcast "$RELEASES_DIR" \ --download-url-prefix "https://github.com/owengretzinger/meetingnotes/releases/download/v${VERSION}/" \ -o "appcast.xml" -# Move old DMGs back -echo "📦 Restoring old DMGs..." -if [ -d "$RELEASES_DIR/temp_old" ] && [ "$(ls -A "$RELEASES_DIR/temp_old")" ]; then - mv "$RELEASES_DIR/temp_old"/* "$RELEASES_DIR/" +echo "📦 Restoring DMGs..." +if [ -d "$RELEASES_DIR/temp_dmg" ] && [ "$(ls -A "$RELEASES_DIR/temp_dmg")" ]; then + mv "$RELEASES_DIR/temp_dmg"/* "$RELEASES_DIR/" fi -rmdir "$RELEASES_DIR/temp_old" +rmdir "$RELEASES_DIR/temp_dmg" echo "📝 Note: Make sure to upload the DMG to GitHub releases with the correct tag (v${VERSION})" @@ -225,10 +239,11 @@ echo "✅ Appcast generated: appcast.xml" echo "" echo "📊 Release Summary:" echo " Version: $VERSION" +echo " ZIP: $ZIP_NAME ($(du -h "$RELEASES_DIR/$ZIP_NAME" | cut -f1))" echo " DMG: $DMG_NAME ($(du -h "$RELEASES_DIR/$DMG_NAME" | cut -f1))" -echo " Location: $RELEASES_DIR/$DMG_NAME" +echo " Location: $RELEASES_DIR" echo " Code Signing: ✅ Production (Owen's Developer ID)" -echo " Notarization: ✅ Complete" +echo " Notarization (DMG): ✅ Complete" echo "" echo "🎉 Production release ready! Next steps:" echo " 1. Test the DMG on another Mac"