From 240247927eae96504b59fb3e59888371e2299004 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 4 May 2023 09:55:24 +0000 Subject: [PATCH 1/2] Support Ubuntu 22.04 for toolchain download --- Sources/SwiftToolchain/ToolchainManagement.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/SwiftToolchain/ToolchainManagement.swift b/Sources/SwiftToolchain/ToolchainManagement.swift index 3beeb829..d149ec17 100644 --- a/Sources/SwiftToolchain/ToolchainManagement.swift +++ b/Sources/SwiftToolchain/ToolchainManagement.swift @@ -195,6 +195,8 @@ public class ToolchainSystem { ubuntuSuffix = "ubuntu18.04" } else if releaseData.contains("DISTRIB_RELEASE=20.04") { ubuntuSuffix = "ubuntu20.04" + } else if releaseData.contains("DISTRIB_RELEASE=22.04") { + ubuntuSuffix = "ubuntu22.04" } else { throw ToolchainError.unsupportedOperatingSystem } From 657ca1b1923f73c78fd61e42e67523916b86345a Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Thu, 4 May 2023 10:19:26 +0000 Subject: [PATCH 2/2] Support amazonlinux2 for toolchain install --- .../SwiftToolchain/ToolchainManagement.swift | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/Sources/SwiftToolchain/ToolchainManagement.swift b/Sources/SwiftToolchain/ToolchainManagement.swift index d149ec17..89986cf9 100644 --- a/Sources/SwiftToolchain/ToolchainManagement.swift +++ b/Sources/SwiftToolchain/ToolchainManagement.swift @@ -184,24 +184,7 @@ public class ToolchainSystem { #if os(macOS) let platformSuffixes = ["osx", "catalina", "macos"] #elseif os(Linux) - let releaseFile = AbsolutePath("/etc").appending(component: "lsb-release") - guard fileSystem.isFile(releaseFile) else { - throw ToolchainError.unsupportedOperatingSystem - } - - let releaseData = try fileSystem.readFileContents(releaseFile).description - let ubuntuSuffix: String - if releaseData.contains("DISTRIB_RELEASE=18.04") { - ubuntuSuffix = "ubuntu18.04" - } else if releaseData.contains("DISTRIB_RELEASE=20.04") { - ubuntuSuffix = "ubuntu20.04" - } else if releaseData.contains("DISTRIB_RELEASE=22.04") { - ubuntuSuffix = "ubuntu22.04" - } else { - throw ToolchainError.unsupportedOperatingSystem - } - - let platformSuffixes = ["linux", ubuntuSuffix] + let platformSuffixes = ["linux", try self.inferLinuxDistributionSuffix()] #endif terminal.logLookup( @@ -214,6 +197,28 @@ public class ToolchainSystem { }.first } + private func inferLinuxDistributionSuffix() throws -> String { + guard let releaseFile = [ + AbsolutePath.root.appending(components: "etc", "lsb-release"), + AbsolutePath.root.appending(components: "etc", "os-release"), + ].first(where: fileSystem.isFile) else { + throw ToolchainError.unsupportedOperatingSystem + } + + let releaseData = try fileSystem.readFileContents(releaseFile).description + if releaseData.contains("DISTRIB_RELEASE=18.04") { + return "ubuntu18.04" + } else if releaseData.contains("DISTRIB_RELEASE=20.04") { + return "ubuntu20.04" + } else if releaseData.contains("DISTRIB_RELEASE=22.04") { + return "ubuntu22.04" + } else if releaseData.contains(#"PRETTY_NAME="Amazon Linux 2""#) { + return "amazonlinux2" + } else { + throw ToolchainError.unsupportedOperatingSystem + } + } + /** Infer `swift` binary path matching a given version if any is present, or infer the version from the `.swift-version` file. If neither version is installed, download it. */