diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 4ff503c3..bb868554 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -28,13 +28,10 @@ jobs: name: Build, Test, and Lint - # GitHub provided runners (in case we need to switch back) + # https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners - # runs-on: macos-latest - - # https://docs.github.com/en/actions/hosting-your-own-runners/using-self-hosted-runners-in-a-workflow - # https://github.com/mas-cli/mas/settings/actions/runners - runs-on: [self-hosted, macOS] + # https://github.com/mas-cli/mas/actions/runners + runs-on: macos-14 steps: # https://github.com/actions/checkout#usage diff --git a/Package.swift b/Package.swift index 4ac61564..f730174e 100644 --- a/Package.swift +++ b/Package.swift @@ -71,7 +71,11 @@ let package = Package( ) // https://github.com/apple/swift-format#matching-swift-format-to-your-swift-version-swift-57-and-earlier -#if compiler(>=5.7) +#if compiler(>=5.8) + package.dependencies += [ + .package(url: "https://github.com/apple/swift-format", .branch("release/5.9")) + ] +#elseif compiler(>=5.7) package.dependencies += [ .package(url: "https://github.com/apple/swift-format", .branch("release/5.7")) ] diff --git a/Sources/MasKit/AppStore/Downloader.swift b/Sources/MasKit/AppStore/Downloader.swift index 650229dd..ca6530ce 100644 --- a/Sources/MasKit/AppStore/Downloader.swift +++ b/Sources/MasKit/AppStore/Downloader.swift @@ -81,12 +81,12 @@ private func download(_ appID: UInt64, purchase: Bool = false) -> Promise return Promise { seal in let purchase = SSPurchase(adamId: appID, account: storeAccount, purchase: purchase) purchase.perform { purchase, _, error, response in - if let error = error { + if let error { seal.reject(MASError.purchaseFailed(error: error as NSError?)) return } - guard response?.downloads.isEmpty == false, let purchase = purchase else { + guard response?.downloads.isEmpty == false, let purchase else { print("No downloads") seal.reject(MASError.noDownloads) return diff --git a/Sources/MasKit/AppStore/SSPurchase.swift b/Sources/MasKit/AppStore/SSPurchase.swift index 75ba2494..c3d3dcb9 100644 --- a/Sources/MasKit/AppStore/SSPurchase.swift +++ b/Sources/MasKit/AppStore/SSPurchase.swift @@ -41,7 +41,7 @@ extension SSPurchase { itemIdentifier = adamId - if let account = account { + if let account { accountIdentifier = account.dsID appleID = account.identifier } diff --git a/Sources/MasKit/Commands/Outdated.swift b/Sources/MasKit/Commands/Outdated.swift index fbb1aa70..e433d78f 100644 --- a/Sources/MasKit/Commands/Outdated.swift +++ b/Sources/MasKit/Commands/Outdated.swift @@ -41,7 +41,7 @@ public struct OutdatedCommand: CommandProtocol { firstly { storeSearch.lookup(app: installedApp.itemIdentifier.intValue) }.done { storeApp in - guard let storeApp = storeApp else { + guard let storeApp else { if options.verbose { printWarning( """ diff --git a/Sources/MasKit/Commands/Uninstall.swift b/Sources/MasKit/Commands/Uninstall.swift index ebf0111a..97d37671 100644 --- a/Sources/MasKit/Commands/Uninstall.swift +++ b/Sources/MasKit/Commands/Uninstall.swift @@ -1,5 +1,5 @@ // -// Upgrade.swift +// Uninstall.swift // mas-cli // // Created by Ben Chatelain on 2018-12-27. diff --git a/Sources/MasKit/Controllers/MasStoreSearch.swift b/Sources/MasKit/Controllers/MasStoreSearch.swift index feb9d37d..2f145751 100644 --- a/Sources/MasKit/Controllers/MasStoreSearch.swift +++ b/Sources/MasKit/Controllers/MasStoreSearch.swift @@ -76,7 +76,7 @@ class MasStoreSearch: StoreSearch { return firstly { self.scrapeVersionFromPage(pageUrl) }.done { pageVersion in - if let pageVersion = pageVersion, pageVersion > searchVersion { + if let pageVersion, pageVersion > searchVersion { results[index].version = pageVersion.description } } diff --git a/Sources/MasKit/Controllers/StoreSearch.swift b/Sources/MasKit/Controllers/StoreSearch.swift index 4fcb5a21..37795a46 100644 --- a/Sources/MasKit/Controllers/StoreSearch.swift +++ b/Sources/MasKit/Controllers/StoreSearch.swift @@ -32,7 +32,7 @@ extension StoreSearch { URLQueryItem(name: "term", value: appName), ] - if let country = country { + if let country { components.queryItems!.append(country) } @@ -50,7 +50,7 @@ extension StoreSearch { components.queryItems = [URLQueryItem(name: "id", value: "\(appId)")] - if let country = country { + if let country { components.queryItems!.append(country) } diff --git a/Sources/MasKit/Errors/MASError.swift b/Sources/MasKit/Errors/MASError.swift index 8217f8b8..4fc06483 100644 --- a/Sources/MasKit/Errors/MASError.swift +++ b/Sources/MasKit/Errors/MASError.swift @@ -1,5 +1,5 @@ // -// MAError.swift +// MASError.swift // mas-cli // // Created by Andrew Naylor on 21/08/2015. @@ -47,7 +47,7 @@ extension MASError: CustomStringConvertible { """ case .signInFailed(let error): - if let error = error { + if let error { return "Sign in failed: \(error.localizedDescription)" } else { return "Sign in failed" @@ -57,14 +57,14 @@ extension MASError: CustomStringConvertible { return "Already signed in" case .purchaseFailed(let error): - if let error = error { + if let error { return "Download request failed: \(error.localizedDescription)" } else { return "Download request failed" } case .downloadFailed(let error): - if let error = error { + if let error { return "Download failed: \(error.localizedDescription)" } else { return "Download failed" diff --git a/Sources/MasKit/Formatters/AppInfoFormatter.swift b/Sources/MasKit/Formatters/AppInfoFormatter.swift index 91fefd01..6810cfd2 100644 --- a/Sources/MasKit/Formatters/AppInfoFormatter.swift +++ b/Sources/MasKit/Formatters/AppInfoFormatter.swift @@ -9,7 +9,7 @@ import Foundation /// Formats text output for the info command. -struct AppInfoFormatter { +enum AppInfoFormatter { /// Formats text output with app info. /// /// - Parameter app: Search result with app data. diff --git a/Sources/MasKit/Formatters/AppListFormatter.swift b/Sources/MasKit/Formatters/AppListFormatter.swift index 158d7fc3..e147595a 100644 --- a/Sources/MasKit/Formatters/AppListFormatter.swift +++ b/Sources/MasKit/Formatters/AppListFormatter.swift @@ -9,7 +9,7 @@ import Foundation /// Formats text output for the search command. -struct AppListFormatter { +enum AppListFormatter { static let idColumnMinWidth = 10 static let nameColumnMinWidth = 50 diff --git a/Sources/MasKit/Formatters/SearchResultFormatter.swift b/Sources/MasKit/Formatters/SearchResultFormatter.swift index d3e279cd..03160cfd 100644 --- a/Sources/MasKit/Formatters/SearchResultFormatter.swift +++ b/Sources/MasKit/Formatters/SearchResultFormatter.swift @@ -9,7 +9,7 @@ import Foundation /// Formats text output for the search command. -struct SearchResultFormatter { +enum SearchResultFormatter { /// Formats text output with search results. /// /// - Parameter results: Search results with app data diff --git a/Sources/MasKit/Formatters/Utilities.swift b/Sources/MasKit/Formatters/Utilities.swift index f76a8e64..33f3b67f 100644 --- a/Sources/MasKit/Formatters/Utilities.swift +++ b/Sources/MasKit/Formatters/Utilities.swift @@ -43,12 +43,12 @@ let csi = "\u{001B}[" Swift.print(terminator, terminator: "") } - func print( + func print( _ items: Any..., separator: String = " ", terminator: String = "\n", - to output: inout Target - ) where Target: TextOutputStream { + to output: inout some TextOutputStream + ) { if let observer = printObserver { let output = items diff --git a/Sources/MasKit/Network/URLSession+NetworkSession.swift b/Sources/MasKit/Network/URLSession+NetworkSession.swift index d1e95704..7c15df02 100644 --- a/Sources/MasKit/Network/URLSession+NetworkSession.swift +++ b/Sources/MasKit/Network/URLSession+NetworkSession.swift @@ -13,9 +13,9 @@ extension URLSession: NetworkSession { public func loadData(from url: URL) -> Promise { Promise { seal in dataTask(with: url) { data, _, error in - if let data = data { + if let data { seal.fulfill(data) - } else if let error = error { + } else if let error { seal.reject(error) } else { seal.reject(MASError.noData) diff --git a/Tests/MasKitTests/Network/NetworkSessionMock.swift b/Tests/MasKitTests/Network/NetworkSessionMock.swift index 87158587..4be4b1be 100644 --- a/Tests/MasKitTests/Network/NetworkSessionMock.swift +++ b/Tests/MasKitTests/Network/NetworkSessionMock.swift @@ -24,7 +24,7 @@ class NetworkSessionMock: NetworkSession { /// - url: unused /// - completionHandler: Closure which is delivered either data or an error. func loadData(from _: URL) -> Promise { - guard let data = data else { + guard let data else { return Promise(error: error ?? MASError.noData) } diff --git a/Tests/MasKitTests/Nimble/ResultPredicates.swift b/Tests/MasKitTests/Nimble/ResultPredicates.swift index 4a9c1da9..209a3f65 100644 --- a/Tests/MasKitTests/Nimble/ResultPredicates.swift +++ b/Tests/MasKitTests/Nimble/ResultPredicates.swift @@ -1,5 +1,5 @@ // -// ResultPreticates.swift +// ResultPredicates.swift // MasKitTests // // Created by Ben Chatelain on 12/27/18.