Skip to content

Commit 63726d2

Browse files
2witstudiosclaude
andcommitted
fix: Use monotonic build number for Sparkle version comparison
The release workflow split semver tags incorrectly: v0.2.0 became sparkle:version=0 (just the patch). Since v0.1.1 had version=1, Sparkle saw v0.2.0 as a downgrade and wouldn't offer the update. Now converts MAJOR.MINOR.PATCH → MAJOR*10000 + MINOR*100 + PATCH, so v0.2.0 → 200 (beats old v0.1.1 build number of 1). Also fixes MARKETING_VERSION defaults from 1.0 to 0.2.0 in the Xcode project. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent cde1110 commit 63726d2

2 files changed

Lines changed: 21 additions & 23 deletions

File tree

.github/workflows/release.yml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,11 @@ jobs:
2727
run: |
2828
TAG="${{ github.event.inputs.tag || github.ref_name }}"
2929
TAG="${TAG#v}"
30-
MARKETING="${TAG%.*}"
31-
BUILD="${TAG##*.}"
30+
IFS='.' read -r MAJOR MINOR PATCH <<< "$TAG"
31+
BUILD_NUMBER=$(( MAJOR * 10000 + MINOR * 100 + PATCH ))
3232
echo "raw=${TAG}" >> "$GITHUB_OUTPUT"
33-
echo "marketing=${MARKETING}" >> "$GITHUB_OUTPUT"
34-
echo "build=${BUILD}" >> "$GITHUB_OUTPUT"
35-
echo "Version: ${TAG} (marketing=${MARKETING}, build=${BUILD})"
33+
echo "build_number=${BUILD_NUMBER}" >> "$GITHUB_OUTPUT"
34+
echo "Version: ${TAG} (build_number=${BUILD_NUMBER})"
3635
3736
- name: Checkout
3837
uses: actions/checkout@v4
@@ -80,8 +79,8 @@ jobs:
8079
CODE_SIGN_STYLE=Manual \
8180
CODE_SIGN_IDENTITY="Developer ID Application" \
8281
DEVELOPMENT_TEAM="${{ secrets.APPLE_TEAM_ID }}" \
83-
MARKETING_VERSION="${{ steps.version.outputs.marketing }}" \
84-
CURRENT_PROJECT_VERSION="${{ steps.version.outputs.build }}"
82+
MARKETING_VERSION="${{ steps.version.outputs.raw }}" \
83+
CURRENT_PROJECT_VERSION="${{ steps.version.outputs.build_number }}"
8584
8685
- name: Export archive
8786
run: |
@@ -182,8 +181,7 @@ jobs:
182181
GH_TOKEN: ${{ github.token }}
183182
run: |
184183
VERSION="${{ steps.version.outputs.raw }}"
185-
MARKETING="${{ steps.version.outputs.marketing }}"
186-
BUILD="${{ steps.version.outputs.build }}"
184+
BUILD_NUMBER="${{ steps.version.outputs.build_number }}"
187185
DMG_URL="https://github.com/2witstudios/purepoint/releases/download/v${VERSION}/PurePoint-${VERSION}.dmg"
188186
ED_SIGNATURE="${{ steps.sparkle_sign.outputs.ed_signature }}"
189187
LENGTH="${{ steps.sparkle_sign.outputs.length }}"
@@ -197,8 +195,8 @@ jobs:
197195
<item>
198196
<title>PurePoint v${VERSION}</title>
199197
<pubDate>${PUB_DATE}</pubDate>
200-
<sparkle:version>${BUILD}</sparkle:version>
201-
<sparkle:shortVersionString>${MARKETING}</sparkle:shortVersionString>
198+
<sparkle:version>${BUILD_NUMBER}</sparkle:version>
199+
<sparkle:shortVersionString>${VERSION}</sparkle:shortVersionString>
202200
<enclosure url="${DMG_URL}" sparkle:edSignature="${ED_SIGNATURE}" length="${LENGTH}" type="application/octet-stream" />
203201
</item>
204202
</channel>

apps/purepoint-macos/purepoint-macos.xcodeproj/project.pbxproj

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@
443443
CODE_SIGN_ENTITLEMENTS = "purepoint-macos/PurePoint.entitlements";
444444
CODE_SIGN_STYLE = Automatic;
445445
COMBINE_HIDPI_IMAGES = YES;
446-
CURRENT_PROJECT_VERSION = 1;
446+
CURRENT_PROJECT_VERSION = 200;
447447
DEAD_CODE_STRIPPING = YES;
448448
DEVELOPMENT_TEAM = M96WTV3CKX;
449449
ENABLE_APP_SANDBOX = NO;
@@ -458,7 +458,7 @@
458458
"$(inherited)",
459459
"@executable_path/../Frameworks",
460460
);
461-
MARKETING_VERSION = 1.0;
461+
MARKETING_VERSION = 0.2.0;
462462
PRODUCT_BUNDLE_IDENTIFIER = com.2witstudios.PurePoint;
463463
PRODUCT_NAME = PurePoint;
464464
REGISTER_APP_GROUPS = YES;
@@ -479,7 +479,7 @@
479479
CODE_SIGN_ENTITLEMENTS = "purepoint-macos/PurePoint.entitlements";
480480
CODE_SIGN_STYLE = Automatic;
481481
COMBINE_HIDPI_IMAGES = YES;
482-
CURRENT_PROJECT_VERSION = 1;
482+
CURRENT_PROJECT_VERSION = 200;
483483
DEAD_CODE_STRIPPING = YES;
484484
DEVELOPMENT_TEAM = M96WTV3CKX;
485485
ENABLE_APP_SANDBOX = NO;
@@ -494,7 +494,7 @@
494494
"$(inherited)",
495495
"@executable_path/../Frameworks",
496496
);
497-
MARKETING_VERSION = 1.0;
497+
MARKETING_VERSION = 0.2.0;
498498
PRODUCT_BUNDLE_IDENTIFIER = com.2witstudios.PurePoint;
499499
PRODUCT_NAME = PurePoint;
500500
REGISTER_APP_GROUPS = YES;
@@ -512,12 +512,12 @@
512512
buildSettings = {
513513
BUNDLE_LOADER = "$(TEST_HOST)";
514514
CODE_SIGN_STYLE = Automatic;
515-
CURRENT_PROJECT_VERSION = 1;
515+
CURRENT_PROJECT_VERSION = 200;
516516
DEAD_CODE_STRIPPING = YES;
517517
DEVELOPMENT_TEAM = M96WTV3CKX;
518518
GENERATE_INFOPLIST_FILE = YES;
519519
MACOSX_DEPLOYMENT_TARGET = 26.1;
520-
MARKETING_VERSION = 1.0;
520+
MARKETING_VERSION = 0.2.0;
521521
PRODUCT_BUNDLE_IDENTIFIER = com.2witstudios.PurePoint.Tests;
522522
PRODUCT_NAME = "$(TARGET_NAME)";
523523
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -534,12 +534,12 @@
534534
buildSettings = {
535535
BUNDLE_LOADER = "$(TEST_HOST)";
536536
CODE_SIGN_STYLE = Automatic;
537-
CURRENT_PROJECT_VERSION = 1;
537+
CURRENT_PROJECT_VERSION = 200;
538538
DEAD_CODE_STRIPPING = YES;
539539
DEVELOPMENT_TEAM = M96WTV3CKX;
540540
GENERATE_INFOPLIST_FILE = YES;
541541
MACOSX_DEPLOYMENT_TARGET = 26.1;
542-
MARKETING_VERSION = 1.0;
542+
MARKETING_VERSION = 0.2.0;
543543
PRODUCT_BUNDLE_IDENTIFIER = com.2witstudios.PurePoint.Tests;
544544
PRODUCT_NAME = "$(TARGET_NAME)";
545545
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -555,11 +555,11 @@
555555
isa = XCBuildConfiguration;
556556
buildSettings = {
557557
CODE_SIGN_STYLE = Automatic;
558-
CURRENT_PROJECT_VERSION = 1;
558+
CURRENT_PROJECT_VERSION = 200;
559559
DEAD_CODE_STRIPPING = YES;
560560
DEVELOPMENT_TEAM = M96WTV3CKX;
561561
GENERATE_INFOPLIST_FILE = YES;
562-
MARKETING_VERSION = 1.0;
562+
MARKETING_VERSION = 0.2.0;
563563
PRODUCT_BUNDLE_IDENTIFIER = com.2witstudios.PurePoint.UITests;
564564
PRODUCT_NAME = "$(TARGET_NAME)";
565565
STRING_CATALOG_GENERATE_SYMBOLS = NO;
@@ -575,11 +575,11 @@
575575
isa = XCBuildConfiguration;
576576
buildSettings = {
577577
CODE_SIGN_STYLE = Automatic;
578-
CURRENT_PROJECT_VERSION = 1;
578+
CURRENT_PROJECT_VERSION = 200;
579579
DEAD_CODE_STRIPPING = YES;
580580
DEVELOPMENT_TEAM = M96WTV3CKX;
581581
GENERATE_INFOPLIST_FILE = YES;
582-
MARKETING_VERSION = 1.0;
582+
MARKETING_VERSION = 0.2.0;
583583
PRODUCT_BUNDLE_IDENTIFIER = com.2witstudios.PurePoint.UITests;
584584
PRODUCT_NAME = "$(TARGET_NAME)";
585585
STRING_CATALOG_GENERATE_SYMBOLS = NO;

0 commit comments

Comments
 (0)