diff --git a/.github/workflows/release-beta.yml b/.github/workflows/release-beta.yml index af191b4..62c79e4 100644 --- a/.github/workflows/release-beta.yml +++ b/.github/workflows/release-beta.yml @@ -48,10 +48,8 @@ jobs: - name: Update version-beta.json run: | notes=$(cat RELEASE_NOTES.md 2>/dev/null || echo "Beta release ${{ steps.version.outputs.version }}") - base_version="${{ steps.version.outputs.version }}" - base_version="${base_version%%-*}" jq -n \ - --arg version "$base_version" \ + --arg version "${{ steps.version.outputs.version }}" \ --arg url "https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/ClaudeChecker.zip" \ --arg notes "$notes" \ '{version: $version, url: $url, notes: $notes}' > version-beta.json diff --git a/ClaudeChecker/UpdateManager.swift b/ClaudeChecker/UpdateManager.swift index 820ac5e..2b8ab15 100644 --- a/ClaudeChecker/UpdateManager.swift +++ b/ClaudeChecker/UpdateManager.swift @@ -318,13 +318,30 @@ class UpdateManager: ObservableObject { } private func isNewer(_ version: String, than current: String) -> Bool { - let toInts = { (v: String) in v.split(separator: ".").compactMap { Int($0) } } - let a = toInts(version), b = toInts(current) - for i in 0.. (base: [Int], pre: [Int]?) { + let halves = v.split(separator: "-", maxSplits: 1) + let base = halves[0].split(separator: ".").compactMap { Int($0) } + let pre = halves.count > 1 ? String(halves[1]).split(separator: ".").compactMap { Int($0) } : nil + return (base, pre) + } + let a = parse(version), b = parse(current) + // Compare base version numbers + for i in 0.. bv } } + // Base equal: stable beats pre-release + if a.pre == nil && b.pre != nil { return true } + if a.pre != nil && b.pre == nil { return false } + // Both pre-release: compare pre-release numbers + if let ap = a.pre, let bp = b.pre { + for i in 0.. bv } + } + } return false } }