From 78d9ce8d19f302f401f69b190ce45dd4073a3620 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Sun, 8 Jun 2025 18:52:40 +0600 Subject: [PATCH] add nmcp --- build.gradle | 15 +++++++++ gradle.properties | 2 +- gradle/libs.versions.toml | 2 ++ gradle/templates/mpp_publish.gradle | 50 ----------------------------- gradle/templates/mpp_publish.kpsb | 2 +- publish_all_script | 25 --------------- 6 files changed, 19 insertions(+), 77 deletions(-) delete mode 100755 publish_all_script diff --git a/build.gradle b/build.gradle index 5c9e0d55c2..be8faa1661 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,21 @@ plugins { alias(libs.plugins.kotlin.dokka) alias(libs.plugins.versions) alias(libs.plugins.validator) + alias(libs.plugins.nmcp.aggregation) +} + + +if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { + nmcpAggregation { + centralPortal { + username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER') + password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD') + verificationTimeout = Duration.ofSeconds(0) + publishingType = "USER_MANAGED" + } + + publishAllProjectsProbablyBreakingProjectIsolation() + } } // temporal crutch until legacy tests will be stabled or legacy target will be removed diff --git a/gradle.properties b/gradle.properties index f76aa4a978..8072049608 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,4 +6,4 @@ kotlin.incremental=true kotlin.incremental.js=true library_group=dev.inmo -library_version=25.0.0 +library_version=25.0.0-test-nmcp diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1ebbdc756d..296093f33f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -22,6 +22,7 @@ github-release-plugin = "2.5.2" dokka = "2.0.0" validator = "0.17.0" +nmcp = "0.1.5" [libraries] @@ -86,3 +87,4 @@ kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", versi kotlin-dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } versions = { id = "com.github.ben-manes.versions", version.ref = "versions" } validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "validator" } +nmcp-aggregation = { id = "com.gradleup.nmcp.aggregation", version.ref = "nmcp" } diff --git a/gradle/templates/mpp_publish.gradle b/gradle/templates/mpp_publish.gradle index c764d19f0b..d19054d881 100644 --- a/gradle/templates/mpp_publish.gradle +++ b/gradle/templates/mpp_publish.gradle @@ -1,54 +1,4 @@ -import java.nio.charset.StandardCharsets -import java.net.http.HttpClient -import java.net.http.HttpRequest -import java.net.http.HttpResponse - apply plugin: 'maven-publish' -// This script work based on https://ossrh-staging-api.central.sonatype.com/swagger-ui/#/default/manual_upload_repository -// and getting available open repos and just uploading them -def uploadTaskName = "uploadSonatypePublication" -String getBearer() { - def username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER') - def password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD') - return Base64.getEncoder().encodeToString("$username:$password".getBytes(StandardCharsets.UTF_8)) -} -if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { - if (rootProject.tasks.names.contains(uploadTaskName) == false) { - rootProject.tasks.register(uploadTaskName) { - doLast { - def bearer = getBearer() - - def client = HttpClient.newHttpClient() - def request = HttpRequest.newBuilder() - .uri(URI.create("https://ossrh-staging-api.central.sonatype.com/manual/search/repositories?state=open")) - .GET() - .header("Content-Type", "application/json") - .header("Authorization", "Bearer $bearer") - .build() - - def response = client.send(request, HttpResponse.BodyHandlers.ofString()) - def keys = new ArrayList() - response.body().findAll("\"key\"[\\s]*:[\\s]*\"[^\"]+\"").forEach { - def key = it.find("[^\"]+\"\$").find("[^\"]+") - keys.add(key) - } - keys.forEach { - println("Start uploading $it") - def uploadRequest = HttpRequest.newBuilder() - .uri(URI.create("https://ossrh-staging-api.central.sonatype.com/manual/upload/repository/$it?publishing_type=user_managed")) - .POST(HttpRequest.BodyPublishers.ofString("")) - .header("Content-Type", "application/json") - .header("Authorization", "Bearer $bearer") - .build() - def uploadResponse = client.send(uploadRequest, HttpResponse.BodyHandlers.ofString()) - if (uploadResponse.statusCode() != 200) { - println("Faced error of uploading for repo with key $it. Response: $uploadResponse. Check https://central.sonatype.com/publishing/deployments for info or repo with key $it. Response: $uploadResponse") - } - } - } - } - } -} task javadocsJar(type: Jar) { archiveClassifier = 'javadoc' diff --git a/gradle/templates/mpp_publish.kpsb b/gradle/templates/mpp_publish.kpsb index 9c801c7bfc..27ad554d7a 100644 --- a/gradle/templates/mpp_publish.kpsb +++ b/gradle/templates/mpp_publish.kpsb @@ -1 +1 @@ -{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE"}],"mavenConfig":{"name":"${project.name}","description":"${project.description}","url":"https://insanusmokrassar.github.io/TelegramBotAPI/TelegramBotAPI","vcsUrl":"https://github.com/insanusmokrassar/TelegramBotAPI.git","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/ktgbotapi","credsType":{"type":"dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository.CredentialsType.UsernameAndPassword","usernameProperty":"GITHUB_USER","passwordProperty":"GITHUB_TOKEN"}},{"name":"InmoNexus","url":"https://nexus.inmo.dev/repository/maven-releases/"},{"name":"sonatype","url":"https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"},"includeCentralSonatypeUploadingScript":true}} \ No newline at end of file +{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/TelegramBotAPI/blob/master/LICENSE"}],"mavenConfig":{"name":"${project.name}","description":"${project.description}","url":"https://insanusmokrassar.github.io/TelegramBotAPI/TelegramBotAPI","vcsUrl":"https://github.com/insanusmokrassar/TelegramBotAPI.git","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/ktgbotapi","credsType":{"type":"dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository.CredentialsType.UsernameAndPassword","usernameProperty":"GITHUB_USER","passwordProperty":"GITHUB_TOKEN"}},{"name":"InmoNexus","url":"https://nexus.inmo.dev/repository/maven-releases/"},{"name":"sonatype","url":"https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"},"includeCentralSonatypeUploadingScript":false}} \ No newline at end of file diff --git a/publish_all_script b/publish_all_script deleted file mode 100755 index a4bfc4ea40..0000000000 --- a/publish_all_script +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -function send_notification() { - echo "$1" -} - -function assert_success() { - "${@}" - local status=${?} - if [ ${status} -ne 0 ]; then - send_notification "### Error ${status} at: ${BASH_LINENO[*]} ###" - exit ${status} - fi -} - -readarray -t projects <<< "`./gradlew getPublishableModules --quiet`" -for project in "${projects[@]}"; do - echo "Start publishing of $project" - assert_success ./gradlew "$project:publishAllPublicationsToSonatypeRepository" --no-parallel --quiet - echo "Complete publishing of $project" - echo "Start uploading of $project" - assert_success ./gradlew uploadSonatypePublication --quiet - echo "Complete uploading of $project" -done -