Skip to content

Commit 2e93388

Browse files
committed
Support 5.8, 5.7
1 parent a9c7e68 commit 2e93388

File tree

2 files changed

+65
-8
lines changed

2 files changed

+65
-8
lines changed

Makefile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
OPENAPI_PATH := Submodule/github/rest-api-description/descriptions/api.github.com/api.github.com.yaml
88
FILTERED_NAMES := $(shell yq -r '.tags[].name' $(OPENAPI_PATH))
99
SOURCE_DIRS := $(addprefix Sources/, $(FILTERED_NAMES))
10+
PACKAGE_PATHS := Package.swift Package@swift-5.8.swift Package@swift-5.7.swift
1011

1112
# Helper
1213
.SILENT: commit
@@ -46,11 +47,11 @@ endif
4647

4748
# Update Package.swift
4849
.DELETE_ON_ERROR: $(SOURCE_DIRS)
49-
Package.swift: $(SOURCE_DIRS)
50-
swift Scripts/PackageBuilder.swift
50+
$(PACKAGE_PATHS): $(SOURCE_DIRS)
51+
swift Scripts/PackageBuilder.swift "$@"
5152
@$(MAKE) commit file="$@"
5253

5354
# Install
5455
.PHONY: Submodule
55-
install: Submodule Package.swift
56+
install: Submodule $(PACKAGE_PATHS)
5657

Scripts/PackageBuilder.swift

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,59 @@ struct SourcesBuilder {
7474
}
7575

7676
struct PackageBuilder {
77-
func getTemplate() throws -> String {
77+
78+
enum SwiftVersion: String, CaseIterable {
79+
case v5_9 = "5.9"
80+
case v5_8 = "5.8"
81+
case v5_7 = "5.7.1"
82+
83+
init?(rawValue: String) {
84+
switch rawValue {
85+
case SwiftVersion.v5_9.fileName: self = .v5_9
86+
case SwiftVersion.v5_8.fileName: self = .v5_8
87+
case SwiftVersion.v5_7.fileName: self = .v5_7
88+
default: return nil
89+
}
90+
}
91+
92+
var fileName: String {
93+
switch self {
94+
case .v5_9: return "Package.swift"
95+
case .v5_8: return "Package@swift-5.8.swift"
96+
case .v5_7: return "Package@swift-5.7.swift"
97+
}
98+
}
99+
100+
var platformsString: String {
101+
switch self {
102+
case .v5_9:
103+
#"""
104+
.macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6), .visionOS(.v1),
105+
"""#
106+
case .v5_8, .v5_7:
107+
#"""
108+
.macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6),
109+
"""#
110+
}
111+
}
112+
}
113+
114+
private let version: PackageBuilder.SwiftVersion
115+
116+
init(version string: String) throws {
117+
if let version = PackageBuilder.SwiftVersion(rawValue: string) {
118+
self.version = version
119+
} else {
120+
throw ErrorMessage(message: "Convert string value `\(string)` to Type SwiftVersion failure.")
121+
}
122+
}
123+
124+
private func getTemplate() throws -> String {
78125
let sources = try SourcesBuilder().sources
79126
let productsString: String = sources.map(\.productString).joined(separator: "\n")
80127
let targetsString: String = sources.map(\.targetString).joined(separator: "\n")
81128
return #"""
82-
// swift-tools-version: 5.9
129+
// swift-tools-version: \#(version.rawValue)
83130
// The swift-tools-version declares the minimum version of Swift required to build this package.
84131
85132
import PackageDescription
@@ -88,7 +135,7 @@ struct PackageBuilder {
88135
let package = Package(
89136
name: "GitHubRestAPISwiftOpenAPI",
90137
platforms: [
91-
.macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6), .visionOS(.v1),
138+
\#(version.platformsString)
92139
],
93140
products: [
94141
\#(productsString)
@@ -115,7 +162,7 @@ struct PackageBuilder {
115162
}
116163
func write() throws {
117164
let fileURL = URL(fileURLWithPath: FileManager.default.currentDirectoryPath)
118-
.appending(path: "Package.swift")
165+
.appending(path: version.fileName)
119166
let fileContent = try getTemplate()
120167
guard let data = fileContent.data(using: .utf8) else {
121168
throw ErrorMessage(message: "Variable data not found.")
@@ -125,7 +172,16 @@ struct PackageBuilder {
125172

126173
}
127174

128-
try PackageBuilder().write()
175+
if let argVersion = CommandLine.arguments[1]
176+
.split(whereSeparator: \.isNewline)
177+
.first {
178+
let version = String(argVersion)
179+
try PackageBuilder(version: version).write()
180+
} else {
181+
throw ErrorMessage(message: "No tag not found.")
182+
}
183+
184+
129185

130186

131187

0 commit comments

Comments
 (0)