Skip to content

Commit a5045f6

Browse files
committed
Updated publication scripts
1 parent efc9524 commit a5045f6

File tree

2 files changed

+56
-13
lines changed

2 files changed

+56
-13
lines changed

.github/workflows/publish.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,21 @@ jobs:
1414
uses: actions/setup-java@v1
1515
with:
1616
java-version: 17
17-
- name: Build
18-
run: ./gradlew publishToMavenLocal
17+
- name: Drop open repositories
18+
env:
19+
SONATYPE_AUTH_BASE64: ${{ secrets.SONATYPE_AUTH_BASE64 }}
20+
run: ./gradlew dropOpenSonatypeRepositories
1921
- name: Publish
2022
env:
2123
SONATYPE_USER_NAME: ${{ secrets.SONATYPE_USER_NAME }}
2224
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
2325
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
2426
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
25-
run: ./gradlew publish --no-configuration-cache --no-parallel --debug
27+
run: ./gradlew publish
2628
- name: Close staging repository
27-
run: 'curl -H "Authorization: Bearer ${{ secrets.SONATYPE_AUTH_BASE64 }}" -X POST https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/com.arkivanov.decompose'
29+
env:
30+
SONATYPE_AUTH_BASE64: ${{ secrets.SONATYPE_AUTH_BASE64 }}
31+
run: ./gradlew closeSonatypeRepositories
2832
- name: Check publication
2933
env:
3034
SONATYPE_AUTH_BASE64: ${{ secrets.SONATYPE_AUTH_BASE64 }}

build.gradle.kts

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
import com.arkivanov.gradle.AndroidConfig
2-
import com.arkivanov.gradle.BinaryCompatibilityValidatorConfig
3-
import com.arkivanov.gradle.PublicationConfig
4-
import com.arkivanov.gradle.ensureUnreachableTasksDisabled
5-
import com.arkivanov.gradle.iosCompat
6-
import com.arkivanov.gradle.macosCompat
7-
import com.arkivanov.gradle.setupDefaults
8-
import com.arkivanov.gradle.tvosCompat
9-
import com.arkivanov.gradle.watchosCompat
1+
import com.arkivanov.gradle.*
2+
import groovy.json.JsonSlurper
3+
import java.net.HttpURLConnection
4+
import java.net.URL
105

116
buildscript {
127
repositories {
@@ -79,3 +74,47 @@ allprojects {
7974
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
8075
}
8176
}
77+
78+
private val sonatypeBaseUrl = "https://ossrh-staging-api.central.sonatype.com"
79+
80+
tasks.register("dropOpenSonatypeRepositories") {
81+
getOpenSonatypeRepositoryKeys().forEach { key ->
82+
requestDelete("/manual/drop/repository/$key")
83+
}
84+
}
85+
86+
tasks.register("closeSonatypeRespositories") {
87+
getOpenSonatypeRepositoryKeys().forEach { key ->
88+
requestPost("/manual/upload/repository/$key")
89+
}
90+
}
91+
92+
fun getOpenSonatypeRepositoryKeys(): List<String> {
93+
val jsonBytes = requestGet("/manual/search/repositories?ip=any&profile_id=com.arkivanov.decompose")
94+
val json = JsonSlurper().parse(jsonBytes) as Map<*, *>
95+
val repositories = json["repositories"] as List<*>
96+
97+
return repositories.filterIsInstance<Map<*, *>>()
98+
.filter { it["state"] == "open" }
99+
.map { it["key"] as String }
100+
}
101+
102+
fun requestGet(url: String): ByteArray =
103+
startRequest(url = url, method = "GET").inputStream.readAllBytes()
104+
105+
fun requestDelete(url: String) {
106+
startRequest(url = url, method = "DELETE")
107+
}
108+
109+
fun requestPost(url: String) {
110+
startRequest(url = url, method = "POST")
111+
}
112+
113+
fun startRequest(url: String, method: String): HttpURLConnection {
114+
val connection = URL("$sonatypeBaseUrl$url").openConnection() as HttpURLConnection
115+
connection.setRequestProperty("Authorization", "Bearer ${System.getenv("SONATYPE_AUTH_BASE64")}")
116+
connection.requestMethod = method
117+
check(connection.responseCode in 200..299) { "Invalid response code: ${connection.responseCode}" }
118+
119+
return connection
120+
}

0 commit comments

Comments
 (0)