diff --git a/Sources/SwiftlyCore/HTTPClient+GitHubAPI.swift b/Sources/SwiftlyCore/HTTPClient+GitHubAPI.swift index ab2a84de..d5fe6380 100644 --- a/Sources/SwiftlyCore/HTTPClient+GitHubAPI.swift +++ b/Sources/SwiftlyCore/HTTPClient+GitHubAPI.swift @@ -4,6 +4,10 @@ import Foundation public struct SwiftlyGitHubRelease: Codable { public let tag: String + + enum CodingKeys: String, CodingKey { + case tag = "tag_name" + } } extension SwiftlyHTTPClient { diff --git a/Tests/SwiftlyTests/SelfUpdateTests.swift b/Tests/SwiftlyTests/SelfUpdateTests.swift index 18f82a8e..79edec36 100644 --- a/Tests/SwiftlyTests/SelfUpdateTests.swift +++ b/Tests/SwiftlyTests/SelfUpdateTests.swift @@ -59,14 +59,25 @@ final class SelfUpdateTests: SwiftlyTests { } } - /// Verify updating the most up-to-date toolchain has no effect. func testSelfUpdate() async throws { try await self.runSelfUpdateTest(latestVersion: Self.newPatchVersion) try await self.runSelfUpdateTest(latestVersion: Self.newMinorVersion) try await self.runSelfUpdateTest(latestVersion: Self.newMajorVersion) } + /// Verify updating the most up-to-date toolchain has no effect. func testSelfUpdateAlreadyUpToDate() async throws { try await self.runSelfUpdateTest(latestVersion: String(describing: SwiftlyCore.version), shouldUpdate: false) } + + /// Tests that attempting to self-update using the actual GitHub API works as expected. + func testSelfUpdateIntegration() async throws { + try await self.withTestHome { + let swiftlyURL = Swiftly.currentPlatform.swiftlyBinDir.appendingPathComponent("swiftly", isDirectory: false) + try "old".data(using: .utf8)!.write(to: swiftlyURL) + + var update = try self.parseCommand(SelfUpdate.self, ["self-update"]) + try await update.run() + } + } }