From 3526af23a1fa9d43b43f79a6f889bdb87251d652 Mon Sep 17 00:00:00 2001 From: Max Howell Date: Wed, 7 Oct 2026 09:20:09 -0400 Subject: [PATCH] Preserve prerelease case when matching release assets --- AppUpdater.swift | 3 +-- Tests/AppUpdaterTests/AppUpdaterTests.swift | 12 ++++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/AppUpdater.swift b/AppUpdater.swift index 1c9fbb9..b0452bf 100644 --- a/AppUpdater.swift +++ b/AppUpdater.swift @@ -762,8 +762,7 @@ struct Release: Decodable, Comparable { let prefix = "\(repo.lowercased())-" return assets.first { asset in let name = (asset.name as NSString).deletingPathExtension - .lowercased() - guard asset.contentType == .dmg, name.hasPrefix(prefix) else { + guard asset.contentType == .dmg, name.lowercased().hasPrefix(prefix) else { return false } return Version(tolerant: name.dropFirst(prefix.count)) == tagName diff --git a/Tests/AppUpdaterTests/AppUpdaterTests.swift b/Tests/AppUpdaterTests/AppUpdaterTests.swift index 56bb186..df9f735 100644 --- a/Tests/AppUpdaterTests/AppUpdaterTests.swift +++ b/Tests/AppUpdaterTests/AppUpdaterTests.swift @@ -356,6 +356,18 @@ final class AppUpdaterTests: XCTestCase { } } + func testViableAssetPreservesPrereleaseCase() throws { + let matching = try release( + "v2.0.0-RC.1", prerelease: true, assetName: "APPUPDATER-2.0.0-RC.1.dmg" + ) + XCTAssertEqual(matching.viableAsset(forRepo: "AppUpdater")?.name, "APPUPDATER-2.0.0-RC.1.dmg") + + let mismatched = try release( + "v2.0.0-rc.1", prerelease: true, assetName: "AppUpdater-2.0.0-RC.1.dmg" + ) + XCTAssertNil(mismatched.viableAsset(forRepo: "AppUpdater")) + } + @MainActor func testCheckMatchesAssetNamedWithShortVersion() async throws { let releases = try [