|
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 |
10 | 5 |
|
11 | 6 | buildscript { |
12 | 7 | repositories { |
@@ -79,3 +74,47 @@ allprojects { |
79 | 74 | maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") |
80 | 75 | } |
81 | 76 | } |
| 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