Skip to content

Commit 364be8c

Browse files
committed
More readable package.swift
1 parent ac53ae6 commit 364be8c

File tree

1 file changed

+98
-70
lines changed

1 file changed

+98
-70
lines changed

Package.swift

Lines changed: 98 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,6 @@
44
import PackageDescription
55
import Foundation
66

7-
// let isBuildingCode = ProcessInfo.processInfo.environment["BUILD_CODE"] == "true"
8-
let isBuildingCode = true
9-
let isBuildingDocC = ProcessInfo.processInfo.environment["GITHUB_PAGES"] == "true"
10-
11-
let package = Package(
12-
name: "GitHubRestAPISwiftOpenAPI",
13-
platforms: [.macOS(.v10_15)],
14-
products: GitHubRestAPIOpenAPITag.allCases.map(\.library),
15-
dependencies: [
16-
.package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.0.0"),
17-
.package(url: "https://github.com/apple/swift-openapi-urlsession", from: "1.0.0"),
18-
],
19-
targets: GitHubRestAPIOpenAPITag.allCases.map(\.target)
20-
+ GitHubRestAPIOpenAPITag.allCases.compactMap(\.testTarget)
21-
)
22-
23-
// dependencies is needed for package users
24-
if !isBuildingCode {
25-
package.targets += [
26-
GitHubRestAPIOpenAPITag.dependenciesTarget
27-
]
28-
}
29-
30-
// swift-docs is not needed for package users
31-
if isBuildingDocC {
32-
package.dependencies += [
33-
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.3.0"),
34-
]
35-
}
36-
377
/// The generator supports filtering the OpenAPI document prior to generation,
388
/// which can be useful when generating client code for a subset of a large API,
399
/// or splitting an implementation of a server across multiple modules.
@@ -76,64 +46,67 @@ enum GitHubRestAPIOpenAPITag: String, CaseIterable {
7646
case classroom
7747
case desktop
7848

79-
var library: PackageDescription.Product {
80-
let targetName = targetName
81-
if isBuildingCode {
82-
return .library(
83-
name: targetName,
84-
targets: [targetName]
85-
)
86-
} else {
87-
return .library(
88-
name: targetName,
89-
targets: [targetName, Self.dependenciesTarget.name]
90-
)
91-
}
92-
}
93-
94-
private var targetName: String {
49+
var targetName: String {
9550
let name = rawValue.replacingOccurrences(of: "-", with: "_").capitalized
9651
return "GitHubRestAPI\(name)"
9752
}
98-
99-
var target: PackageDescription.Target {
100-
let targetName = targetName
101-
if isBuildingCode {
53+
54+
var sourcePath: String { "Sources/\(rawValue)" }
55+
56+
}
57+
58+
protocol PackageConfigSpec {
59+
var libraries: [PackageDescription.Product] { get }
60+
var targets: [PackageDescription.Target] { get }
61+
}
62+
63+
struct SourceCodePackageConfigSpec: PackageConfigSpec {
64+
let allCases = GitHubRestAPIOpenAPITag.allCases
65+
66+
var libraries: [PackageDescription.Product] {
67+
return allCases.map(\.targetName).map { targetName in
68+
.library(name: targetName, targets: [targetName])
69+
}
70+
}
71+
72+
var targets: [PackageDescription.Target] {
73+
return allCases.map { aCase in
74+
let (targetName, sourcePath) = (aCase.targetName, aCase.sourcePath)
10275
return .target(
10376
name: targetName,
10477
dependencies: [
10578
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
10679
.product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession"),
10780
],
108-
path: "Sources/\(rawValue)",
81+
path: sourcePath,
10982
exclude: [
11083
"openapi-generator-config.yml",
11184
"openapi.yml",
11285
]
11386
)
114-
} else {
115-
return .binaryTarget(
116-
name: targetName,
117-
path: "XCFrameworks/\(targetName).zip")
118-
}
87+
} + testTargets
11988
}
120-
121-
var testTarget: PackageDescription.Target? {
122-
guard self == .users else { return nil }
123-
let dependencies: [Target.Dependency] = [
124-
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
125-
.product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession"),
89+
90+
private var testTargets: [PackageDescription.Target] {
91+
let targetName = GitHubRestAPIOpenAPITag.users.targetName
92+
return [
93+
.testTarget(
94+
name: "UserTests",
95+
dependencies: [
96+
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
97+
.product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession"),
98+
.target(name: targetName),
99+
]
100+
)
126101
]
127-
let targetName = targetName
128-
return .testTarget(
129-
name: "UserTests",
130-
dependencies: dependencies + [
131-
.target(name: targetName)
132-
]
133-
)
134102
}
135103

136-
static var dependenciesTarget: PackageDescription.Target = .target(
104+
}
105+
106+
struct XCFrameworkPackageConfigSpec: PackageConfigSpec {
107+
let allCases = GitHubRestAPIOpenAPITag.allCases
108+
109+
var dependenciesTarget: PackageDescription.Target = .target(
137110
name: "DependenciesTarget",
138111
dependencies: [
139112
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
@@ -142,4 +115,59 @@ enum GitHubRestAPIOpenAPITag: String, CaseIterable {
142115
path: "XCFrameworks/DependenciesTarget"
143116
)
144117

118+
var libraries: [PackageDescription.Product] {
119+
return allCases.map(\.targetName).map { targetName in
120+
.library(name: targetName, targets: [targetName, dependenciesTarget.name])
121+
}
122+
}
123+
124+
var targets: [PackageDescription.Target] {
125+
return allCases.map(\.targetName).map { targetName in
126+
return .binaryTarget(name: targetName, path: "XCFrameworks/\(targetName).zip")
127+
} + testTargets + [dependenciesTarget]
128+
}
129+
130+
private var testTargets: [PackageDescription.Target] {
131+
let targetName = GitHubRestAPIOpenAPITag.users.targetName
132+
return [
133+
.testTarget(
134+
name: "UserTests",
135+
dependencies: [
136+
.product(name: "OpenAPIRuntime", package: "swift-openapi-runtime"),
137+
.product(name: "OpenAPIURLSession", package: "swift-openapi-urlsession"),
138+
.target(name: targetName),
139+
]
140+
)
141+
]
142+
}
143+
144+
}
145+
146+
let config: PackageConfigSpec = {
147+
/// Currently Disabled XCFrameworkPackageConfig
148+
let isSourceCodePackageConfigSpec = true
149+
if isSourceCodePackageConfigSpec {
150+
return SourceCodePackageConfigSpec()
151+
} else {
152+
return XCFrameworkPackageConfigSpec()
153+
}
154+
}()
155+
156+
let package = Package(
157+
name: "GitHubRestAPISwiftOpenAPI",
158+
platforms: [.macOS(.v10_15)],
159+
products: config.libraries,
160+
dependencies: [
161+
.package(url: "https://github.com/apple/swift-openapi-runtime", from: "1.0.0"),
162+
.package(url: "https://github.com/apple/swift-openapi-urlsession", from: "1.0.0"),
163+
],
164+
targets: config.targets
165+
)
166+
167+
let isBuildingDocC = ProcessInfo.processInfo.environment["GITHUB_PAGES"] == "true"
168+
// swift-docs is not needed for package users
169+
if isBuildingDocC {
170+
package.dependencies += [
171+
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.3.0"),
172+
]
145173
}

0 commit comments

Comments
 (0)