Skip to content

Commit a051289

Browse files
feat!: Different server/client flavors use Swift traits
This required bumping to Swift 6.1
1 parent b33d0ea commit a051289

File tree

17 files changed

+156
-263
lines changed

17 files changed

+156
-263
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ jobs:
1212
xcode-version: latest
1313
- uses: actions/checkout@v4
1414
- name: Darwin build & test
15-
run: swift test --skip IntegrationTests
15+
run: swift test --enable-all-traits --skip IntegrationTests
1616
linux-test:
1717
runs-on: ubuntu-latest
1818
container:
1919
image: swift:latest
2020
steps:
2121
- uses: actions/checkout@v4
2222
- name: Linux build & test
23-
run: swift test --skip IntegrationTests
23+
run: swift test --traits ClientNIO,ServerVapor --skip IntegrationTests

.spi.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,4 @@ builder:
44
- documentation_targets:
55
- "Haystack"
66
- "HaystackClient"
7-
- "HaystackClientDarwin"
8-
- "HaystackClientNIO"
97
- "HaystackServer"
10-
- "HaystackServerVapor"

.swiftformat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--ifdef no-indent

Package.swift

Lines changed: 76 additions & 207 deletions
Original file line numberDiff line numberDiff line change
@@ -1,211 +1,80 @@
1-
// swift-tools-version: 5.7
1+
// swift-tools-version: 6.1
22

33
import PackageDescription
44

5-
#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) || os(visionOS)
6-
let package = Package(
7-
name: "Haystack",
8-
platforms: [
9-
.macOS(.v12),
10-
.iOS(.v15),
11-
.tvOS(.v15),
12-
.watchOS(.v8),
13-
],
14-
products: [
15-
.library(
16-
name: "Haystack",
17-
targets: ["Haystack"]
18-
),
19-
.library(
20-
name: "HaystackClientDarwin",
21-
targets: [
22-
"HaystackClient",
23-
"HaystackClientDarwin",
24-
]
25-
),
26-
.library(
27-
name: "HaystackClientNIO",
28-
targets: [
29-
"HaystackClient",
30-
"HaystackClientNIO",
31-
]
32-
),
33-
.library(
34-
name: "HaystackServer",
35-
targets: [
36-
"HaystackServer",
37-
]
38-
),
39-
.library(
40-
name: "HaystackServerVapor",
41-
targets: [
42-
"HaystackServerVapor",
43-
]
44-
),
45-
],
46-
dependencies: [
47-
.package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "3.0.0"),
48-
.package(url: "https://github.com/swift-server/async-http-client.git", from: "1.9.0"),
49-
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
50-
],
51-
targets: [
52-
.target(
53-
name: "Haystack",
54-
dependencies: []
55-
),
56-
.target(
57-
name: "HaystackClient",
58-
dependencies: [
59-
"Haystack",
60-
.product(name: "Crypto", package: "swift-crypto"),
61-
]
62-
),
63-
.target(
64-
name: "HaystackClientDarwin",
65-
dependencies: [
66-
"Haystack",
67-
"HaystackClient",
68-
]
69-
),
70-
.target(
71-
name: "HaystackClientNIO",
72-
dependencies: [
73-
"Haystack",
74-
"HaystackClient",
75-
.product(name: "AsyncHTTPClient", package: "async-http-client"),
76-
]
77-
),
78-
.target(
79-
name: "HaystackServer",
80-
dependencies: [
81-
"Haystack",
82-
]
83-
),
84-
.target(
85-
name: "HaystackServerVapor",
86-
dependencies: [
87-
"Haystack",
88-
"HaystackServer",
89-
.product(name: "Vapor", package: "vapor"),
90-
]
91-
),
5+
let package = Package(
6+
name: "Haystack",
7+
platforms: [
8+
.macOS(.v12),
9+
.iOS(.v15),
10+
.tvOS(.v15),
11+
.watchOS(.v8),
12+
],
13+
products: [
14+
.library(
15+
name: "Haystack",
16+
targets: ["Haystack"]
17+
),
18+
.library(
19+
name: "HaystackClient",
20+
targets: [
21+
"HaystackClient",
22+
]
23+
),
24+
.library(
25+
name: "HaystackServer",
26+
targets: [
27+
"HaystackServer",
28+
]
29+
),
30+
],
31+
traits: [
32+
"ServerVapor",
33+
"ClientNIO",
34+
"ClientDarwin",
35+
.default(enabledTraits: []),
36+
],
37+
dependencies: [
38+
.package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "3.0.0"),
39+
.package(url: "https://github.com/swift-server/async-http-client.git", from: "1.9.0"),
40+
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
41+
],
42+
targets: [
43+
.target(
44+
name: "Haystack",
45+
dependencies: []
46+
),
47+
.target(
48+
name: "HaystackClient",
49+
dependencies: [
50+
"Haystack",
51+
.product(name: "Crypto", package: "swift-crypto"),
52+
.product(name: "AsyncHTTPClient", package: "async-http-client", condition: .when(traits: ["ClientNIO"])),
53+
]
54+
),
55+
.target(
56+
name: "HaystackServer",
57+
dependencies: [
58+
"Haystack",
59+
.product(name: "Vapor", package: "vapor", condition: .when(traits: ["ServerVapor"])),
60+
]
61+
),
9262

93-
// Tests
94-
.testTarget(
95-
name: "HaystackTests",
96-
dependencies: ["Haystack"]
97-
),
98-
.testTarget(
99-
name: "HaystackClientTests",
100-
dependencies: ["HaystackClient"]
101-
),
102-
.testTarget(
103-
name: "HaystackClientNIOIntegrationTests",
104-
dependencies: ["HaystackClientNIO"]
105-
),
106-
.testTarget(
107-
name: "HaystackClientDarwinIntegrationTests",
108-
dependencies: ["HaystackClientDarwin"]
109-
),
110-
.testTarget(
111-
name: "HaystackServerTests",
112-
dependencies: ["HaystackServer"]
113-
),
114-
.testTarget(
115-
name: "HaystackServerVaporTests",
116-
dependencies: ["HaystackServerVapor", .product(name: "XCTVapor", package: "vapor")]
117-
),
118-
]
119-
)
120-
#else
121-
let package = Package(
122-
name: "Haystack",
123-
products: [
124-
.library(
125-
name: "Haystack",
126-
targets: ["Haystack"]
127-
),
128-
.library(
129-
name: "HaystackClientNIO",
130-
targets: [
131-
"HaystackClient",
132-
"HaystackClientNIO",
133-
]
134-
),
135-
.library(
136-
name: "HaystackServer",
137-
targets: [
138-
"HaystackServer",
139-
]
140-
),
141-
.library(
142-
name: "HaystackServerVapor",
143-
targets: [
144-
"HaystackServerVapor",
145-
]
146-
),
147-
],
148-
dependencies: [
149-
.package(url: "https://github.com/apple/swift-crypto.git", "1.0.0" ..< "3.0.0"),
150-
.package(url: "https://github.com/swift-server/async-http-client.git", from: "1.9.0"),
151-
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
152-
],
153-
targets: [
154-
.target(
155-
name: "Haystack",
156-
dependencies: []
157-
),
158-
.target(
159-
name: "HaystackClient",
160-
dependencies: [
161-
"Haystack",
162-
.product(name: "Crypto", package: "swift-crypto"),
163-
]
164-
),
165-
.target(
166-
name: "HaystackClientNIO",
167-
dependencies: [
168-
"Haystack",
169-
"HaystackClient",
170-
.product(name: "AsyncHTTPClient", package: "async-http-client"),
171-
]
172-
),
173-
.target(
174-
name: "HaystackServer",
175-
dependencies: [
176-
"Haystack",
177-
]
178-
),
179-
.target(
180-
name: "HaystackServerVapor",
181-
dependencies: [
182-
"Haystack",
183-
"HaystackServer",
184-
.product(name: "Vapor", package: "vapor"),
185-
]
186-
),
187-
188-
// Tests
189-
.testTarget(
190-
name: "HaystackTests",
191-
dependencies: ["Haystack"]
192-
),
193-
.testTarget(
194-
name: "HaystackClientTests",
195-
dependencies: ["HaystackClient"]
196-
),
197-
.testTarget(
198-
name: "HaystackClientNIOIntegrationTests",
199-
dependencies: ["HaystackClientNIO"]
200-
),
201-
.testTarget(
202-
name: "HaystackServerTests",
203-
dependencies: ["HaystackServer"]
204-
),
205-
.testTarget(
206-
name: "HaystackServerVaporTests",
207-
dependencies: ["HaystackServerVapor", .product(name: "XCTVapor", package: "vapor")]
208-
),
209-
]
210-
)
211-
#endif
63+
// Tests
64+
.testTarget(
65+
name: "HaystackTests",
66+
dependencies: ["Haystack"]
67+
),
68+
.testTarget(
69+
name: "HaystackClientTests",
70+
dependencies: ["HaystackClient"]
71+
),
72+
.testTarget(
73+
name: "HaystackServerTests",
74+
dependencies: [
75+
"HaystackServer",
76+
.product(name: "XCTVapor", package: "vapor", condition: .when(traits: ["ServerVapor"])),
77+
]
78+
),
79+
]
80+
)

0 commit comments

Comments
 (0)