@@ -75,17 +75,17 @@ extension Gitlab.Builder {
75
75
platform: Build . Platform ,
76
76
reference: Reference ,
77
77
swiftVersion: SwiftVersion ,
78
- versionID: Version . Id ) -> EventLoopFuture < Build . TriggerResponse > {
78
+ versionID: Version . Id ) async throws -> Build . TriggerResponse {
79
79
guard let pipelineToken = Current . gitlabPipelineToken ( ) ,
80
80
let builderToken = Current . builderToken ( )
81
- else { return client . eventLoop . future ( error : Gitlab . Error. missingToken) }
81
+ else { throw Gitlab . Error. missingToken }
82
82
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 " )
84
84
}
85
85
let timeout = Current . buildTimeout ( ) + ( isDocBuild ? 5 : 0 )
86
86
87
87
let uri : URI = . init( string: " \( projectURL) /trigger/pipeline " )
88
- let req = client
88
+ let response = try await client
89
89
. post ( uri) { req in
90
90
let data = PostDTO (
91
91
token: pipelineToken,
@@ -104,19 +104,17 @@ extension Gitlab.Builder {
104
104
] )
105
105
try req. query. encode ( data)
106
106
}
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 )
120
118
}
121
119
}
122
120
@@ -155,45 +153,33 @@ extension Gitlab.Builder {
155
153
static func fetchPipelines( client: Client ,
156
154
status: Status ,
157
155
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 }
161
158
162
159
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)
176
165
}
177
166
178
167
static func getStatusCount( client: Client ,
179
168
status: Status ,
180
169
page: Int = 1 ,
181
170
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
+ }
197
183
}
198
184
199
185
}
0 commit comments