16
16
17
17
package org .scalasteward .core .forge .gitlab
18
18
19
+ import cats .effect .Temporal
19
20
import cats .{MonadThrow , Parallel }
20
21
import cats .syntax .all ._
21
22
import io .circe ._
@@ -31,6 +32,8 @@ import org.scalasteward.core.util.uri.uriDecoder
31
32
import org .scalasteward .core .util .{intellijThisImportIsUsed , HttpJsonClient , UnexpectedResponse }
32
33
import org .typelevel .log4cats .Logger
33
34
35
+ import scala .concurrent .duration .{Duration , DurationInt }
36
+
34
37
final private [gitlab] case class ForkPayload (id : String , namespace : String )
35
38
final private [gitlab] case class MergeRequestPayload (
36
39
id : String ,
@@ -162,7 +165,8 @@ final class GitLabApiAlg[F[_]: Parallel](
162
165
)(implicit
163
166
client : HttpJsonClient [F ],
164
167
logger : Logger [F ],
165
- F : MonadThrow [F ]
168
+ F : MonadThrow [F ],
169
+ temporal : Temporal [F ]
166
170
) extends ForgeApiAlg [F ] {
167
171
import GitLabJsonCodec ._
168
172
@@ -205,14 +209,26 @@ final class GitLabApiAlg[F[_]: Parallel](
205
209
206
210
def waitForMergeRequestStatus (
207
211
number : PullRequestNumber ,
208
- retries : Int = 10
212
+ retries : Int = 10 ,
213
+ initialDelay : Duration = 100 .milliseconds,
214
+ backoffMultiplier : Double = 2.0
209
215
): F [MergeRequestOut ] =
210
216
client
211
217
.get[MergeRequestOut ](url.existingMergeRequest(repo, number), modify(repo))
212
218
.flatMap {
213
219
case mr if mr.mergeStatus =!= GitLabMergeStatus .Checking => F .pure(mr)
214
- case _ if retries > 0 => waitForMergeRequestStatus(number, retries - 1 )
215
- case other => F .pure(other)
220
+ case _ if retries > 0 =>
221
+ temporal.sleep(initialDelay) >> waitForMergeRequestStatus(
222
+ number,
223
+ retries - 1 ,
224
+ initialDelay * backoffMultiplier
225
+ )
226
+ case other =>
227
+ logger
228
+ .warn(
229
+ s " Exhausted all retires while waiting for merge request status. Last known status is ${other.mergeStatus}"
230
+ )
231
+ .as(other)
216
232
}
217
233
218
234
val updatedMergeRequest =
0 commit comments