Skip to content

Commit c12b470

Browse files
committed
Convert Gitlab and related ELFs to a/a
1 parent d31547e commit c12b470

File tree

9 files changed

+290
-299
lines changed

9 files changed

+290
-299
lines changed

Sources/App/Commands/Swift6Trigger.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ extension Swift6TriggerCommand {
181181
if force {
182182
Current.logger().info("Skipping pending pipeline check")
183183
} else {
184-
let pendingJobs = try await Current.getStatusCount(client, .pending).get()
184+
let pendingJobs = try await Current.getStatusCount(client, .pending)
185185
guard pendingJobs + triggers.count < Current.gitlabPipelineLimit() else {
186186
Current.logger().info("too many pending pipelines (\(pendingJobs))")
187187
return

Sources/App/Commands/TriggerBuilds.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ func triggerBuilds(on database: Database,
191191
}
192192
}
193193

194-
async let pendingJobsTask = Current.getStatusCount(client, .pending).get()
195-
async let runningJobsTask = Current.getStatusCount(client, .running).get()
194+
async let pendingJobsTask = Current.getStatusCount(client, .pending)
195+
async let runningJobsTask = Current.getStatusCount(client, .running)
196196
let pendingJobs = try await pendingJobsTask
197197
let runningJobs = try await runningJobsTask
198198

@@ -270,7 +270,7 @@ func triggerBuildsUnchecked(on database: Database,
270270
isDocBuild: trigger.docPairs.contains(pair),
271271
platform: pair.platform,
272272
swiftVersion: pair.swiftVersion,
273-
versionId: trigger.versionId).get()
273+
versionId: trigger.versionId)
274274
guard [HTTPStatus.ok, .created].contains(response.status),
275275
let jobUrl = response.webUrl
276276
else { return }

Sources/App/Core/AppEnvironment.swift

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ struct AppEnvironment: Sendable {
5151
var fetchReadme: @Sendable (_ client: Client, _ owner: String, _ repository: String) async -> Github.Readme?
5252
var fetchS3Readme: @Sendable (_ client: Client, _ owner: String, _ repository: String) async throws -> String
5353
var fileManager: FileManager
54-
var getStatusCount: @Sendable (_ client: Client,
55-
_ status: Gitlab.Builder.Status) -> EventLoopFuture<Int>
54+
var getStatusCount: @Sendable (_ client: Client, _ status: Gitlab.Builder.Status) async throws -> Int
5655
var git: Git
5756
var githubToken: @Sendable () -> String?
5857
var gitlabApiToken: @Sendable () -> String?
@@ -87,7 +86,7 @@ struct AppEnvironment: Sendable {
8786
_ platform: Build.Platform,
8887
_ reference: Reference,
8988
_ swiftVersion: SwiftVersion,
90-
_ versionID: Version.Id) -> EventLoopFuture<Build.TriggerResponse>
89+
_ versionID: Version.Id) async throws -> Build.TriggerResponse
9190
}
9291

9392

@@ -176,12 +175,11 @@ extension AppEnvironment {
176175
fetchS3Readme: { client, owner, repo in try await S3Store.fetchReadme(client:client, owner: owner, repository: repo) },
177176
fileManager: .live,
178177
getStatusCount: { client, status in
179-
Gitlab.Builder.getStatusCount(
180-
client: client,
181-
status: status,
182-
page: 1,
183-
pageSize: 100,
184-
maxPageCount: 5)
178+
try await Gitlab.Builder.getStatusCount(client: client,
179+
status: status,
180+
page: 1,
181+
pageSize: 100,
182+
maxPageCount: 5)
185183
},
186184
git: .live,
187185
githubToken: { Environment.get("GITHUB_TOKEN") },
@@ -224,14 +222,14 @@ extension AppEnvironment {
224222
storeS3ReadmeImages: { client, images in try await S3Store.storeReadmeImages(client: client, imagesToCache: images) },
225223
timeZone: { .current },
226224
triggerBuild: { client, buildId, cloneURL, isDocBuild, platform, ref, swiftVersion, versionID in
227-
Gitlab.Builder.triggerBuild(client: client,
228-
buildId: buildId,
229-
cloneURL: cloneURL,
230-
isDocBuild: isDocBuild,
231-
platform: platform,
232-
reference: ref,
233-
swiftVersion: swiftVersion,
234-
versionID: versionID)
225+
try await Gitlab.Builder.triggerBuild(client: client,
226+
buildId: buildId,
227+
cloneURL: cloneURL,
228+
isDocBuild: isDocBuild,
229+
platform: platform,
230+
reference: ref,
231+
swiftVersion: swiftVersion,
232+
versionID: versionID)
235233
}
236234
)
237235
}

Sources/App/Core/Gitlab.swift

Lines changed: 34 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,17 @@ extension Gitlab.Builder {
7575
platform: Build.Platform,
7676
reference: Reference,
7777
swiftVersion: SwiftVersion,
78-
versionID: Version.Id) -> EventLoopFuture<Build.TriggerResponse> {
78+
versionID: Version.Id) async throws -> Build.TriggerResponse {
7979
guard let pipelineToken = Current.gitlabPipelineToken(),
8080
let builderToken = Current.builderToken()
81-
else { return client.eventLoop.future(error: Gitlab.Error.missingToken) }
81+
else { throw Gitlab.Error.missingToken }
8282
guard let awsDocsBucket = Current.awsDocsBucket() else {
83-
return client.eventLoop.future(error: Gitlab.Error.missingConfiguration("AWS_DOCS_BUCKET"))
83+
throw Gitlab.Error.missingConfiguration("AWS_DOCS_BUCKET")
8484
}
8585
let timeout = Current.buildTimeout() + (isDocBuild ? 5 : 0)
8686

8787
let uri: URI = .init(string: "\(projectURL)/trigger/pipeline")
88-
let req = client
88+
let response = try await client
8989
.post(uri) { req in
9090
let data = PostDTO(
9191
token: pipelineToken,
@@ -104,19 +104,17 @@ extension Gitlab.Builder {
104104
])
105105
try req.query.encode(data)
106106
}
107-
return req.map { response in
108-
do {
109-
let res = Build.TriggerResponse(
110-
status: response.status,
111-
webUrl: try response.content.decode(Response.self).webUrl
112-
)
113-
Current.logger().info("Triggered build: \(res.webUrl)")
114-
return res
115-
} catch {
116-
let body = response.body?.asString() ?? "nil"
117-
Current.logger().error("Trigger failed: \(cloneURL) @ \(reference), \(platform) / \(swiftVersion), \(versionID), status: \(response.status), body: \(body)")
118-
return .init(status: response.status, webUrl: nil)
119-
}
107+
do {
108+
let res = Build.TriggerResponse(
109+
status: response.status,
110+
webUrl: try response.content.decode(Response.self).webUrl
111+
)
112+
Current.logger().info("Triggered build: \(res.webUrl)")
113+
return res
114+
} catch {
115+
let body = response.body?.asString() ?? "nil"
116+
Current.logger().error("Trigger failed: \(cloneURL) @ \(reference), \(platform) / \(swiftVersion), \(versionID), status: \(response.status), body: \(body)")
117+
return .init(status: response.status, webUrl: nil)
120118
}
121119
}
122120

@@ -155,45 +153,33 @@ extension Gitlab.Builder {
155153
static func fetchPipelines(client: Client,
156154
status: Status,
157155
page: Int,
158-
pageSize: Int = 20) -> EventLoopFuture<[Pipeline]> {
159-
guard let apiToken = Current.gitlabApiToken()
160-
else { return client.eventLoop.future(error: Gitlab.Error.missingToken) }
156+
pageSize: Int = 20) async throws -> [Pipeline] {
157+
guard let apiToken = Current.gitlabApiToken() else { throw Gitlab.Error.missingToken }
161158

162159
let uri: URI = .init(string: "\(projectURL)/pipelines?status=\(status)&page=\(page)&per_page=\(pageSize)")
163-
return client
164-
.get(uri, headers: HTTPHeaders([("Authorization", "Bearer \(apiToken)")]))
165-
.flatMap { response -> EventLoopFuture<[Pipeline]> in
166-
guard response.status == .ok else {
167-
return client.eventLoop.future(error: Gitlab.Error.requestFailed(response.status, uri))
168-
}
169-
do {
170-
let res = try response.content.decode([Pipeline].self, using: Gitlab.decoder)
171-
return client.eventLoop.future(res)
172-
} catch {
173-
return client.eventLoop.future(error: error)
174-
}
175-
}
160+
let response = try await client.get(uri, headers: HTTPHeaders([("Authorization", "Bearer \(apiToken)")]))
161+
162+
guard response.status == .ok else { throw Gitlab.Error.requestFailed(response.status, uri) }
163+
164+
return try response.content.decode([Pipeline].self, using: Gitlab.decoder)
176165
}
177166

178167
static func getStatusCount(client: Client,
179168
status: Status,
180169
page: Int = 1,
181170
pageSize: Int = 20,
182-
maxPageCount: Int = 5) -> EventLoopFuture<Int> {
183-
fetchPipelines(client: client, status: status, page: page, pageSize: pageSize)
184-
.map(\.count)
185-
.flatMap { count -> EventLoopFuture<Int> in
186-
if count == pageSize && page < maxPageCount {
187-
return getStatusCount(client: client,
188-
status: status,
189-
page: page + 1,
190-
pageSize: pageSize,
191-
maxPageCount: maxPageCount)
192-
.map { count + $0 }
193-
} else {
194-
return client.eventLoop.future(count)
195-
}
196-
}
171+
maxPageCount: Int = 5) async throws -> Int {
172+
let count = try await fetchPipelines(client: client, status: status, page: page, pageSize: pageSize).count
173+
if count == pageSize && page < maxPageCount {
174+
let statusCount = try await getStatusCount(client: client,
175+
status: status,
176+
page: page + 1,
177+
pageSize: pageSize,
178+
maxPageCount: maxPageCount)
179+
return count + statusCount
180+
} else {
181+
return count
182+
}
197183
}
198184

199185
}

Sources/App/Models/Build.swift

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -179,23 +179,21 @@ extension Build {
179179
isDocBuild: Bool,
180180
platform: Build.Platform,
181181
swiftVersion: SwiftVersion,
182-
versionId: Version.Id) -> EventLoopFuture<TriggerResponse> {
183-
let version: EventLoopFuture<Version> = Version
182+
versionId: Version.Id) async throws -> TriggerResponse {
183+
let version = try await Version
184184
.query(on: database)
185185
.filter(\.$id == versionId)
186186
.with(\.$package)
187187
.first()
188188
.unwrap(or: Abort(.notFound))
189-
return version.flatMap {
190-
return Current.triggerBuild(client,
191-
buildId,
192-
$0.package.url,
193-
isDocBuild,
194-
platform,
195-
$0.reference,
196-
swiftVersion,
197-
versionId)
198-
}
189+
return try await Current.triggerBuild(client,
190+
buildId,
191+
version.package.url,
192+
isDocBuild,
193+
platform,
194+
version.reference,
195+
swiftVersion,
196+
versionId)
199197
}
200198

201199
}

0 commit comments

Comments
 (0)