add Sparkle appcast
This commit is contained in:
@@ -8,6 +8,67 @@ SCHEME="iKeyMon"
|
||||
PROJECT="iKeyMon.xcodeproj"
|
||||
CREDENTIALS_FILE="$ROOT_DIR/.signing.env"
|
||||
VERSION_FILE="$ROOT_DIR/version.json"
|
||||
DERIVED_DATA_ROOT="${DERIVED_DATA_ROOT:-$HOME/Library/Developer/Xcode/DerivedData}"
|
||||
|
||||
find_generate_appcast() {
|
||||
if [[ -n "${SPARKLE_GENERATE_APPCAST:-}" && -x "${SPARKLE_GENERATE_APPCAST}" ]]; then
|
||||
echo "$SPARKLE_GENERATE_APPCAST"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ -d "$DERIVED_DATA_ROOT" ]]; then
|
||||
local candidate
|
||||
candidate="$(find "$DERIVED_DATA_ROOT" -path "*/SourcePackages/artifacts/sparkle/Sparkle/bin/generate_appcast" -type f 2>/dev/null | head -n 1 || true)"
|
||||
if [[ -n "$candidate" ]]; then
|
||||
echo "$candidate"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
generate_appcast() {
|
||||
local generator
|
||||
generator="$(find_generate_appcast)"
|
||||
local download_prefix=""
|
||||
if [[ -n "${SPARKLE_DOWNLOAD_BASE_TEMPLATE:-}" ]]; then
|
||||
download_prefix="${SPARKLE_DOWNLOAD_BASE_TEMPLATE//\{\{VERSION\}\}/$VERSION}"
|
||||
else
|
||||
download_prefix="${SPARKLE_DOWNLOAD_BASE_URL:-}"
|
||||
fi
|
||||
|
||||
if [[ -z "$generator" || -z "${SPARKLE_EDDSA_KEY_FILE:-}" || -z "$download_prefix" ]]; then
|
||||
echo "ℹ️ Skipping Sparkle appcast generation (generator/key/download prefix not configured)."
|
||||
return
|
||||
fi
|
||||
|
||||
local output="$SPARKLE_APPCAST_OUTPUT"
|
||||
mkdir -p "$(dirname "$output")"
|
||||
local staging_dir
|
||||
staging_dir="$(mktemp -d)"
|
||||
cp "$ARTIFACTS_DIR"/*.zip "$staging_dir"/ 2>/dev/null || true
|
||||
echo "🧾 Generating Sparkle appcast at $output"
|
||||
if ! "$generator" \
|
||||
--download-url-prefix "$download_prefix" \
|
||||
--ed-key-file "$SPARKLE_EDDSA_KEY_FILE" \
|
||||
-o "$output" \
|
||||
"$staging_dir"; then
|
||||
echo "⚠️ Sparkle appcast generation failed."
|
||||
fi
|
||||
rm -rf "$staging_dir"
|
||||
}
|
||||
|
||||
sign_update_artifacts() {
|
||||
local signer
|
||||
signer="$(find "$DERIVED_DATA_ROOT" -path "*/SourcePackages/artifacts/sparkle/Sparkle/bin/sign_update" -type f 2>/dev/null | head -n 1 || true)"
|
||||
if [[ -z "$signer" || -z "${SPARKLE_EDDSA_KEY_FILE:-}" ]]; then
|
||||
echo "ℹ️ Skipping Sparkle signing (sign_update or SPARKLE_EDDSA_KEY_FILE missing)."
|
||||
return
|
||||
fi
|
||||
echo "🔑 Signing ${ZIP_NAME} for Sparkle feed"
|
||||
if ! "$signer" "${ARTIFACTS_DIR}/${ZIP_NAME}" --ed-key-file "${SPARKLE_EDDSA_KEY_FILE}"; then
|
||||
echo "⚠️ sign_update failed (continuing without signature)"
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ -f "$CREDENTIALS_FILE" ]]; then
|
||||
set -a
|
||||
@@ -16,6 +77,9 @@ if [[ -f "$CREDENTIALS_FILE" ]]; then
|
||||
set +a
|
||||
fi
|
||||
|
||||
: "${SPARKLE_APPCAST_OUTPUT:=$ROOT_DIR/Sparkle/appcast.xml}"
|
||||
export SPARKLE_APPCAST_OUTPUT
|
||||
|
||||
"$ROOT_DIR/scripts/sync_version.sh"
|
||||
|
||||
rm -rf "$BUILD_DIR" "$ARTIFACTS_DIR"
|
||||
@@ -71,6 +135,8 @@ popd >/dev/null
|
||||
DMG_NAME="iKeyMon-${VERSION}.dmg"
|
||||
hdiutil create -volname "iKeyMon" -srcfolder "$STAGING_DIR" -ov -format UDZO "$ARTIFACTS_DIR/$DMG_NAME"
|
||||
|
||||
sign_update_artifacts
|
||||
|
||||
if [[ -n "${NOTARY_APPLE_ID:-}" && -n "${NOTARY_TEAM_ID:-}" && -n "${NOTARY_PASSWORD:-}" ]]; then
|
||||
echo "📝 Submitting DMG for notarization..."
|
||||
xcrun notarytool submit "$ARTIFACTS_DIR/$DMG_NAME" \
|
||||
@@ -84,6 +150,8 @@ else
|
||||
fi
|
||||
rm -rf "$STAGING_DIR"
|
||||
|
||||
generate_appcast
|
||||
|
||||
if [[ -n "${GITEA_TOKEN:-}" && -n "${GITEA_OWNER:-}" && -n "${GITEA_REPO:-}" ]]; then
|
||||
"$ROOT_DIR/scripts/publish_release.sh" "$VERSION" "$ARTIFACTS_DIR/$ZIP_NAME" "$ARTIFACTS_DIR/$DMG_NAME"
|
||||
else
|
||||
|
||||
@@ -78,4 +78,8 @@ upload_asset() {
|
||||
upload_asset "$ZIP_PATH"
|
||||
upload_asset "$DMG_PATH"
|
||||
|
||||
if [[ -n "${SPARKLE_APPCAST_OUTPUT:-}" && -f "${SPARKLE_APPCAST_OUTPUT}" ]]; then
|
||||
upload_asset "$SPARKLE_APPCAST_OUTPUT"
|
||||
fi
|
||||
|
||||
echo "🎉 Release ${RELEASE_TAG} assets uploaded."
|
||||
|
||||
Reference in New Issue
Block a user