Skip to content

Commit da9aba7

Browse files
committed
Add retry or downloading artifacts from Space
## Release Notes N/A
1 parent edae78a commit da9aba7

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Build-Helpers Publish to Maven Local
2+
on:
3+
pull_request:
4+
paths:
5+
- 'ci/build-helpers/**'
6+
- '.github/workflows/build-helpers.yml'
7+
push:
8+
branches:
9+
- master
10+
paths:
11+
- 'ci/build-helpers/**'
12+
- '.github/workflows/build-helpers.yml'
13+
14+
jobs:
15+
build-helpers-publish:
16+
runs-on: ubuntu-24.04
17+
steps:
18+
- name: Checkout Repository
19+
uses: actions/checkout@v5
20+
21+
- name: Setup JDK 21
22+
uses: actions/setup-java@v4
23+
with:
24+
distribution: 'jetbrains'
25+
java-version: '21'
26+
env:
27+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28+
29+
- name: Setup Gradle
30+
uses: gradle/actions/setup-gradle@v4
31+
with:
32+
cache-read-only: ${{ github.ref != 'refs/heads/master' }}
33+
gradle-home-cache-excludes: |
34+
caches/jars-9
35+
caches/transforms-3
36+
37+
- name: Publish to Maven Local
38+
shell: bash
39+
working-directory: ci/build-helpers
40+
run: |
41+
./gradlew --no-daemon --stacktrace publishToMavenLocal

ci/build-helpers/publishing/src/main/kotlin/org/jetbrains/compose/internal/publishing/DownloadFromSpaceTask.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.gradle.api.provider.ListProperty
1111
import org.gradle.api.provider.Property
1212
import org.gradle.api.tasks.Internal
1313
import org.gradle.api.tasks.TaskAction
14+
import org.jetbrains.compose.internal.publishing.utils.retry
1415
import org.jsoup.Jsoup
1516
import java.net.URL
1617

@@ -33,10 +34,11 @@ abstract class DownloadFromSpaceMavenRepoTask : DefaultTask() {
3334
logger.info("Downloading ${module.coordinate}...")
3435
val groupUrl = module.groupId.replace(".", "/")
3536

36-
val filesListingDocument =
37+
val filesListingDocument = retry(logger, count = 5, initialDelay = 1000L, exponentialDelayMultiplier = 3) {
3738
Jsoup.connect("${spaceRepoUrl.get()}/$groupUrl/${module.artifactId}/${module.version}/")
3839
.timeout(180_000)
3940
.get()
41+
}
4042
val downloadableFiles = HashMap<String, URL>()
4143
for (a in filesListingDocument.select("#contents > a")) {
4244
val href = a.attributes().get("href")
@@ -78,6 +80,11 @@ abstract class DownloadFromSpaceMavenRepoTask : DefaultTask() {
7880
DownloadAction(project, this).apply {
7981
src(downloadableFiles.values)
8082
dest(destinationDir)
83+
// it doesn't add delays between retries unfortunately
84+
// https://github.com/michel-kraemer/gradle-download-task/blob/720c9a084759941ebdabb1ad9113fc8fb7994e1d/src/main/java/de/undercouch/gradle/tasks/download/internal/DefaultHttpClientFactory.java#L71
85+
// but it might help avoiding flaky 500 Server error, encountered earlier:
86+
// Server Error (HTTP status code: 500, URL: https://packages.jetbrains.team/maven/p/cmp/dev/org/jetbrains/skiko/skiko-linuxarm64/0.144.1/skiko-linuxarm64-0.144.1-javadoc.jar.sha1
87+
retries(5)
8188
}.execute()
8289
}
8390
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.jetbrains.compose.internal.publishing.utils
2+
3+
import org.gradle.api.logging.Logger
4+
5+
fun <T> retry(
6+
logger: Logger? = null,
7+
count: Int = 5,
8+
initialDelay: Long,
9+
exponentialDelayMultiplier: Int = 3,
10+
block: () -> T
11+
): T {
12+
var retries = 0
13+
var delay = initialDelay
14+
while (true) {
15+
try {
16+
return block()
17+
} catch (e: Exception) {
18+
if (retries >= count) {
19+
throw e
20+
}
21+
retries++
22+
logger?.warn("Operation failed: ${e.message}. Retrying ($retries/$count) in ${delay}ms...")
23+
Thread.sleep(delay)
24+
delay *= exponentialDelayMultiplier
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)