more Sparkle tests

This commit is contained in:
Micha
2025-11-25 17:59:58 +01:00
parent 69904c07ce
commit 3f849d0db6
5 changed files with 65 additions and 6 deletions

View File

@@ -79,6 +79,16 @@ Preferences expose Sparkles built-in toggles for “Automatically check” an
> Build settings include `INFOPLIST_KEY_SUFeedURL` and `INFOPLIST_KEY_SUPublicEDKey`. Make sure to fill both before shipping a build so Sparkle knows where to fetch updates and how to verify them. > Build settings include `INFOPLIST_KEY_SUFeedURL` and `INFOPLIST_KEY_SUPublicEDKey`. Make sure to fill both before shipping a build so Sparkle knows where to fetch updates and how to verify them.
### Automated release push
If you want `git push origin master` to build/sign/notarize/upload automatically, enable the provided pre-push hook:
```bash
git config core.hooksPath hooks
```
The hook (see `hooks/pre-push`) watches for pushes that include `refs/heads/master`, runs `scripts/build_release.sh`, and automatically commits the updated `Sparkle/appcast.xml` so it travels with your release. To skip the automation temporarily, prepend `SKIP_RELEASE=1` to your `git push` command.
### Versioning workflow ### Versioning workflow
- The canonical marketing version lives in `version.json` and follows the format `YY.major.minor` (example: `26.1.2`). Update that file manually whenever you cut a new release branch. - The canonical marketing version lives in `version.json` and follows the format `YY.major.minor` (example: `26.1.2`). Update that file manually whenever you cut a new release branch.

8
Sparkle/appcast.xml vendored
View File

@@ -2,6 +2,14 @@
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0"> <rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
<channel> <channel>
<title>iKeyMon</title> <title>iKeyMon</title>
<item>
<title>26.0.15</title>
<pubDate>Tue, 25 Nov 2025 17:42:56 +0100</pubDate>
<sparkle:version>34</sparkle:version>
<sparkle:shortVersionString>26.0.15</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>15.2</sparkle:minimumSystemVersion>
<enclosure url="https://git.24unix.net/tracer/iKeyMon/releases/download/iKeyMon-26.0.15.zip" length="4800821" type="application/octet-stream" sparkle:edSignature="bojJ638CY0n+34POoJX3OBrXRAiPOYPiDTfgJOS9fCslw8YGKZLviJvcExC2PKh1HDt0Raabo0FJUJrAFUMmBQ=="/>
</item>
<item> <item>
<title>26.0.13</title> <title>26.0.13</title>
<pubDate>Tue, 25 Nov 2025 00:05:46 +0100</pubDate> <pubDate>Tue, 25 Nov 2025 00:05:46 +0100</pubDate>

41
hooks/pre-push Executable file
View File

@@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
if [[ -n "${SKIP_RELEASE:-}" ]]; then
echo "⚙️ SKIP_RELEASE set — skipping automated release build."
exit 0
fi
should_release=false
while read -r local_ref local_sha remote_ref remote_sha; do
[[ -z "${local_ref:-}" ]] && continue
if [[ "$local_ref" == "refs/heads/master" || "$remote_ref" == "refs/heads/master" ]]; then
should_release=true
break
fi
done
if [[ "$should_release" != true ]]; then
exit 0
fi
echo "🚀 Pre-push hook detected master — running release build..."
"$ROOT_DIR/scripts/build_release.sh"
APPCAST_PATH="$ROOT_DIR/Sparkle/appcast.xml"
if ! git -C "$ROOT_DIR" diff --quiet "$APPCAST_PATH"; then
git -C "$ROOT_DIR" add "$APPCAST_PATH"
VERSION="$(python3 - "$ROOT_DIR/version.json" <<'PY'
import json, sys
with open(sys.argv[1], "r", encoding="utf-8") as handle:
data = json.load(handle)
print(data.get("marketing_version", "dev"))
PY
)"
git -C "$ROOT_DIR" commit -m "chore: update Sparkle appcast for ${VERSION}" >/dev/null
echo "📝 Committed updated Sparkle appcast for ${VERSION}."
fi
echo "✅ Release build complete — continuing push."

View File

@@ -310,7 +310,7 @@
CODE_SIGN_ENTITLEMENTS = iKeyMon.entitlements; CODE_SIGN_ENTITLEMENTS = iKeyMon.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 32; CURRENT_PROJECT_VERSION = 34;
DEVELOPMENT_ASSET_PATHS = "\"Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"Preview Content\"";
DEVELOPMENT_TEAM = Q5486ZVAFT; DEVELOPMENT_TEAM = Q5486ZVAFT;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
@@ -325,7 +325,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MARKETING_VERSION = 26.0.13; MARKETING_VERSION = 26.0.15;
PRODUCT_BUNDLE_IDENTIFIER = net.24unix.iKeyMon; PRODUCT_BUNDLE_IDENTIFIER = net.24unix.iKeyMon;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;
@@ -341,7 +341,7 @@
CODE_SIGN_ENTITLEMENTS = iKeyMon.entitlements; CODE_SIGN_ENTITLEMENTS = iKeyMon.entitlements;
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 32; CURRENT_PROJECT_VERSION = 34;
DEVELOPMENT_ASSET_PATHS = "\"Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"Preview Content\"";
DEVELOPMENT_TEAM = Q5486ZVAFT; DEVELOPMENT_TEAM = Q5486ZVAFT;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
@@ -356,7 +356,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MARKETING_VERSION = 26.0.13; MARKETING_VERSION = 26.0.15;
PRODUCT_BUNDLE_IDENTIFIER = net.24unix.iKeyMon; PRODUCT_BUNDLE_IDENTIFIER = net.24unix.iKeyMon;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;

View File

@@ -1,3 +1,3 @@
{ {
"marketing_version": "26.0.13" "marketing_version": "26.0.15"
} }