Skip to content

Commit

Permalink
Merge pull request #518 from 417-72KI/add-platform
Browse files Browse the repository at this point in the history
Add platform requirements on `danger-swift edit`
  • Loading branch information
417-72KI committed May 28, 2022
2 parents afbcf7e + 6240b06 commit dbb3a6a
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 12 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@

## Master

- Add platform requirements on `danger-swift edit` [@417-72KI][] - [#518](https://github.com/danger/swift/pull/518)
- Notify a new release on running danger-swift [@417-72KI][] - [#505](https://github.com/danger/swift/pull/505)
- Remove `swift-doc` from dependencies treee [@417-72KI][] - [#509](https://github.com/danger/swift/pull/509)
- Remove `swift-doc` from dependencies tree [@417-72KI][] - [#509](https://github.com/danger/swift/pull/509)
- Generate docker image with swift 5.5.2 [@f-meloni][] - [#501](https://github.com/danger/swift/pull/501)
- Extract dev dependencies to switch development and release easily [@417-72KI][] - [#491](https://github.com/danger/swift/pull/491)

Expand Down
19 changes: 17 additions & 2 deletions Sources/DangerDependenciesResolver/PackageGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,17 @@ struct PackageGenerator {
}
}

func generateMasterPackageDescription(forSwiftToolsVersion toolsVersion: Version) throws {
func generateMasterPackageDescription(forSwiftToolsVersion toolsVersion: Version,
macOSVersion: Version) throws {
let header = makePackageDescriptionHeader(forSwiftToolsVersion: toolsVersion)
let packages = packageListMaker.makePackageList()
let platform = makeSupportedPlatform(forMacOSVersion: macOSVersion)

var description = "\(header)\n\n" +
"import PackageDescription\n\n" +
"let package = Package(\n" +
" name: \"\(masterPackageName)\",\n" +
(platform.isEmpty ? "" : " platforms: [\(platform)],\n") +
" products: [.library(name: \"DangerDependencies\", " +
"type: .dynamic, targets: [\"\(masterPackageName)\"])]," +
"\n" +
Expand Down Expand Up @@ -69,9 +72,21 @@ struct PackageGenerator {

func makePackageDescriptionHeader(forSwiftToolsVersion toolsVersion: Version) -> String {
let swiftVersion = "\(toolsVersion.major).\(toolsVersion.minor)"
let generationVersion = 1
let generationVersion = 2

return "// swift-tools-version:\(swiftVersion)\n" +
"// danger-dependency-generator-version:\(generationVersion)"
}

func makeSupportedPlatform(forMacOSVersion macOSVersion: Version) -> String {
if case .null = macOSVersion { return "" }
switch macOSVersion.major {
case 10 where (10...15).contains(macOSVersion.minor):
return ".macOS(.v10_\(macOSVersion.minor))"
case 11...:
return ".macOS(.v\(macOSVersion.major))"
default:
return ""
}
}
}
27 changes: 25 additions & 2 deletions Sources/DangerDependenciesResolver/PackageManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,11 @@ public struct PackageManager {
let toolsVersion = try resolveSwiftToolsVersion(executor: ShellExecutor(), onFolder: generatedFolder)
let expectedHeader = packageGenerator.makePackageDescriptionHeader(forSwiftToolsVersion: toolsVersion)

let macOSVersion = resolveMacOSVersion(executor: ShellExecutor())

guard masterDescription.hasPrefix(expectedHeader) else {
try packageGenerator.generateMasterPackageDescription(forSwiftToolsVersion: toolsVersion)
try packageGenerator.generateMasterPackageDescription(forSwiftToolsVersion: toolsVersion,
macOSVersion: macOSVersion)
return try makePackageDescription(for: script)
}

Expand All @@ -160,10 +163,11 @@ public struct PackageManager {
let executor = ShellExecutor()

let toolsVersion = try resolveSwiftToolsVersion(executor: executor, onFolder: generatedFolder)
let macOSVersion = resolveMacOSVersion(executor: executor)
try generatedFolder.createSubfolderIfNeeded(withName: "Sources/\(masterPackageName)")
fileCreator.createFile(atPath: generatedFolder.appendingPath("Sources/\(masterPackageName)").appendingPath(fakeFile),
contents: Data())
try packageGenerator.generateMasterPackageDescription(forSwiftToolsVersion: toolsVersion)
try packageGenerator.generateMasterPackageDescription(forSwiftToolsVersion: toolsVersion, macOSVersion: macOSVersion)
try executeSwiftCommand("package update", onFolder: generatedFolder, arguments: [], executor: executor)
try generatedFolder.createSubfolderIfNeeded(withName: "Packages")
} catch {
Expand All @@ -179,6 +183,25 @@ public struct PackageManager {
versionString = versionString?.onlyNumbersAndDots
return Version(versionString ?? "") ?? .null
}

private func resolveMacOSVersion(executor: ShellExecutor) -> Version {
#if os(macOS)
var versionString = executor.execute("sw_vers",
arguments: ["-productVersion"])
versionString = versionString.onlyNumbersAndDots ?? versionString
switch versionString.components(separatedBy: ".").count {
case 1:
versionString += ".0.0"
case 2:
versionString += ".0"
default:
break
}
return Version(versionString) ?? .null
#else
return .null
#endif
}
}

extension String {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ final class PackageGeneratorTests: XCTestCase {
packageListMaker: packageListMaker,
fileCreator: spyFileCreator)

try generator.generateMasterPackageDescription(forSwiftToolsVersion: .init(5, 0, 0))
try generator.generateMasterPackageDescription(forSwiftToolsVersion: .init(5, 0, 0), macOSVersion: .init(12, 0, 0))

assertSnapshot(matching: String(data: spyFileCreator.receivedContents!, encoding: .utf8)!, as: .lines)
}
Expand All @@ -34,7 +34,7 @@ final class PackageGeneratorTests: XCTestCase {
packageListMaker: packageListMaker,
fileCreator: spyFileCreator)

try generator.generateMasterPackageDescription(forSwiftToolsVersion: .init(5, 0, 0))
try generator.generateMasterPackageDescription(forSwiftToolsVersion: .init(5, 0, 0), macOSVersion: .init(12, 0, 0))

assertSnapshot(matching: String(data: spyFileCreator.receivedContents!, encoding: .utf8)!, as: .lines)
}
Expand All @@ -51,7 +51,7 @@ final class PackageGeneratorTests: XCTestCase {
packageListMaker: packageListMaker,
fileCreator: spyFileCreator)

try generator.generateMasterPackageDescription(forSwiftToolsVersion: .init(5, 2, 0))
try generator.generateMasterPackageDescription(forSwiftToolsVersion: .init(5, 2, 0), macOSVersion: .init(12, 0, 0))

assertSnapshot(matching: String(data: spyFileCreator.receivedContents!, encoding: .utf8)!, as: .lines)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// swift-tools-version:4.2
// danger-dependency-generator-version:1
// danger-dependency-generator-version:2
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
// swift-tools-version:5.0
// danger-dependency-generator-version:1
// danger-dependency-generator-version:2

import PackageDescription

let package = Package(
name: "PACKAGES",
platforms: [.macOS(.v12)],
products: [.library(name: "DangerDependencies", type: .dynamic, targets: ["PACKAGES"])],
dependencies: [
.package(url: "https://github.com/danger/dependency1", from: "1.0.0"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
// swift-tools-version:5.2
// danger-dependency-generator-version:1
// danger-dependency-generator-version:2

import PackageDescription

let package = Package(
name: "PACKAGES",
platforms: [.macOS(.v12)],
products: [.library(name: "DangerDependencies", type: .dynamic, targets: ["PACKAGES"])],
dependencies: [
.package(name: "Dependency1", url: "https://github.com/danger/dependency1", from: "1.0.0"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
// swift-tools-version:5.0
// danger-dependency-generator-version:1
// danger-dependency-generator-version:2

import PackageDescription

let package = Package(
name: "PACKAGES",
platforms: [.macOS(.v12)],
products: [.library(name: "DangerDependencies", type: .dynamic, targets: ["PACKAGES"])],
dependencies: [

Expand Down

0 comments on commit dbb3a6a

Please sign in to comment.