Skip to content

Commit 82a5e87

Browse files
committed
Unify the package definitions
1 parent 5653576 commit 82a5e87

File tree

1 file changed

+88
-152
lines changed

1 file changed

+88
-152
lines changed

Package.swift

Lines changed: 88 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
import PackageDescription
44

5+
extension Year {
6+
static var year2015: Year { Year("2015") }
7+
static var year2016: Year { Year("2016") }
8+
static var year2018: Year { Year("2018") }
9+
static var year2019: Year { Year("2019") }
10+
static var year2020: Year { Year("2020") }
11+
static var year2021: Year { Year("2021") }
12+
static var year2022: Year { Year("2022") }
13+
static var year2023: Year { Year("2023") }
14+
static var year2024: Year { Year("2024") }
15+
}
16+
517
let package = Package(
618
name: "Advent of Code",
719
platforms: [
@@ -10,15 +22,15 @@ let package = Package(
1022
],
1123
products: [
1224
.library(name: "Advent", targets: ["Advent"]),
13-
.library(name: "Year2015", targets: ["Year2015"]),
14-
.library(name: "Year2016", targets: ["Year2016"]),
15-
.library(name: "Year2018", targets: ["Year2018"]),
16-
.library(name: "Year2019", targets: ["Year2019"]),
17-
.library(name: "Year2020", targets: ["Year2020"]),
18-
.library(name: "Year2021", targets: ["Year2021"]),
19-
.library(name: "Year2022", targets: ["Year2022"]),
20-
.library(name: "Year2023", targets: ["Year2023"]),
21-
.library(name: "Year2024", targets: ["Year2024"]),
25+
.library(.year2015),
26+
.library(.year2016),
27+
.library(.year2018),
28+
.library(.year2019),
29+
.library(.year2020),
30+
.library(.year2021),
31+
.library(.year2022),
32+
.library(.year2023),
33+
.library(.year2024),
2234
.executable(name: "aoc", targets: ["AdventTool"]),
2335
.executable(name: "intcode", targets: ["IntcodeComputer tool"]),
2436
],
@@ -71,79 +83,23 @@ let package = Package(
7183

7284
// MARK: - Year2015
7385

74-
.target(
75-
name: "Year2015",
76-
dependencies: ["Advent"],
77-
path: "Year2015/Sources",
78-
swiftSettings: [
79-
.unsafeFlags(["-enable-bare-slash-regex"]),
80-
]),
81-
82-
.testTarget(
83-
name: "Year2015Tests",
84-
dependencies: ["Advent", "Year2015"],
85-
path: "Year2015/Tests",
86-
resources: [.copy("Inputs")],
87-
swiftSettings: [
88-
.unsafeFlags(["-enable-bare-slash-regex"]),
89-
]),
86+
.target(.year2015),
87+
.testTarget(.year2015),
9088

9189
// MARK: - Year2016
9290

93-
.target(
94-
name: "Year2016",
95-
dependencies: ["Advent"],
96-
path: "Year2016/Sources",
97-
swiftSettings: [
98-
.unsafeFlags(["-enable-bare-slash-regex"]),
99-
]),
100-
101-
.testTarget(
102-
name: "Year2016Tests",
103-
dependencies: ["Advent", "Year2016"],
104-
path: "Year2016/Tests",
105-
resources: [.copy("Inputs")],
106-
swiftSettings: [
107-
.unsafeFlags(["-enable-bare-slash-regex"]),
108-
]),
91+
.target(.year2016),
92+
.testTarget(.year2016),
10993

11094
// MARK: - Year2018
11195

112-
.target(
113-
name: "Year2018",
114-
dependencies: ["Advent"],
115-
path: "Year2018/Sources",
116-
swiftSettings: [
117-
.unsafeFlags(["-enable-bare-slash-regex"]),
118-
]),
119-
120-
.testTarget(
121-
name: "Year2018Tests",
122-
dependencies: ["Advent", "Year2018"],
123-
path: "Year2018/Tests",
124-
resources: [.copy("Inputs")],
125-
swiftSettings: [
126-
.unsafeFlags(["-enable-bare-slash-regex"]),
127-
]),
96+
.target(.year2018),
97+
.testTarget(.year2018),
12898

12999
// MARK: - Year2019
130100

131-
.target(
132-
name: "Year2019",
133-
dependencies: ["Advent"],
134-
path: "Year2019/Sources",
135-
swiftSettings: [
136-
.unsafeFlags(["-enable-bare-slash-regex"]),
137-
]),
138-
139-
.testTarget(
140-
name: "Year2019Tests",
141-
dependencies: ["Advent", "Year2019"],
142-
path: "Year2019/Tests",
143-
resources: [.copy("Inputs")],
144-
swiftSettings: [
145-
.unsafeFlags(["-enable-bare-slash-regex"]),
146-
]),
101+
.target(.year2019),
102+
.testTarget(.year2019),
147103

148104
.executableTarget(
149105
name: "IntcodeComputer tool",
@@ -159,99 +115,79 @@ let package = Package(
159115

160116
// MARK: - Year2020
161117

162-
.target(
163-
name: "Year2020",
164-
dependencies: ["Advent"],
165-
path: "Year2020/Sources",
166-
swiftSettings: [
167-
.unsafeFlags(["-enable-bare-slash-regex"]),
168-
]),
169-
170-
.testTarget(
171-
name: "Year2020Tests",
172-
dependencies: ["Advent", "Year2020"],
173-
path: "Year2020/Tests",
174-
resources: [.copy("Inputs")],
175-
swiftSettings: [
176-
.unsafeFlags(["-enable-bare-slash-regex"]),
177-
]),
118+
.target(.year2020),
119+
.testTarget(.year2020),
178120

179121
// MARK: - Year2021
180122

181-
.target(
182-
name: "Year2021",
183-
dependencies: ["Advent"],
184-
path: "Year2021/Sources",
185-
swiftSettings: [
186-
.unsafeFlags(["-enable-bare-slash-regex"]),
187-
]),
188-
189-
.testTarget(
190-
name: "Year2021Tests",
191-
dependencies: ["Advent", "Year2019", "Year2021"],
192-
path: "Year2021/Tests",
193-
resources: [.copy("Inputs")],
194-
swiftSettings: [
195-
.unsafeFlags(["-enable-bare-slash-regex"]),
196-
]),
123+
.target(.year2021),
124+
.testTarget(.year2021, dependencies: ["Year2019"]),
197125

198126
// MARK: - Year2022
199127

200-
.target(
201-
name: "Year2022",
202-
dependencies: ["Advent"],
203-
path: "Year2022/Sources",
204-
swiftSettings: [
205-
.unsafeFlags(["-enable-bare-slash-regex"]),
206-
]),
207-
208-
.testTarget(
209-
name: "Year2022Tests",
210-
dependencies: ["Advent", "Year2022"],
211-
path: "Year2022/Tests",
212-
resources: [.copy("Inputs")],
213-
swiftSettings: [
214-
.unsafeFlags(["-enable-bare-slash-regex"]),
215-
]),
128+
.target(.year2022),
129+
.testTarget(.year2022),
216130

217131
// MARK: - Year2023
218132

219-
.target(
220-
name: "Year2023",
221-
dependencies: ["Advent"],
222-
path: "Year2023/Sources",
223-
swiftSettings: [
224-
.unsafeFlags(["-enable-bare-slash-regex"]),
225-
]),
226-
227-
.testTarget(
228-
name: "Year2023Tests",
229-
dependencies: ["Advent", "Year2023"],
230-
path: "Year2023/Tests",
231-
resources: [.copy("Inputs")],
232-
swiftSettings: [
233-
.unsafeFlags(["-enable-bare-slash-regex"]),
234-
]),
133+
.target(.year2023),
134+
.testTarget(.year2023),
235135

236136
// MARK: - Year2024
237137

238-
.target(
239-
name: "Year2024",
240-
dependencies: ["Advent"],
241-
path: "Year2024/Sources",
138+
.target(.year2024),
139+
.testTarget(.year2024),
140+
],
141+
swiftLanguageVersions: [.v5]
142+
)
143+
144+
struct Year {
145+
let name: String
146+
init(_ year: String) {
147+
name = "Year\(year)"
148+
}
149+
}
150+
151+
extension Product {
152+
static func library(_ year: Year) -> Product {
153+
library(name: year.name, targets: [year.name])
154+
}
155+
}
156+
157+
extension Target {
158+
static func target(_ year: Year) -> Target {
159+
target(
160+
name: year.name,
161+
dependencies: [
162+
"Advent",
163+
.product(name: "Algorithms", package: "swift-algorithms"),
164+
.product(name: "Crypto", package: "swift-crypto"),
165+
],
166+
path: "\(year.name)/Sources",
242167
swiftSettings: [
243168
.unsafeFlags(["-enable-bare-slash-regex"]),
244-
]),
169+
]
170+
)
171+
}
245172

246-
.testTarget(
247-
name: "Year2024Tests",
248-
dependencies: ["Advent", "Year2024"],
249-
path: "Year2024/Tests",
250-
resources: [.copy("Inputs")],
173+
static func testTarget(
174+
_ year: Year,
175+
dependencies: [Target.Dependency] = []
176+
) -> Target {
177+
testTarget(
178+
name: "\(year.name)Tests",
179+
dependencies: [
180+
"Advent",
181+
.byName(name: year.name),
182+
.product(name: "Algorithms", package: "swift-algorithms"),
183+
.product(name: "Crypto", package: "swift-crypto"),
184+
] + dependencies,
185+
path: "\(year.name)/Tests",
186+
resources: [
187+
.copy("Inputs"),
188+
],
251189
swiftSettings: [
252190
.unsafeFlags(["-enable-bare-slash-regex"]),
253-
]),
254-
255-
],
256-
swiftLanguageVersions: [.v5]
257-
)
191+
])
192+
}
193+
}

0 commit comments

Comments
 (0)