diff --git a/gradle/templates/publish.gradle b/gradle/templates/publish.gradle index 6d4246b81c8..bde36e05ffd 100644 --- a/gradle/templates/publish.gradle +++ b/gradle/templates/publish.gradle @@ -1,9 +1,49 @@ -if (ext.getProperties()["do_publish"] == false) { - return -} +import java.nio.charset.StandardCharsets +import java.net.http.HttpClient +import java.net.http.HttpRequest +import java.net.http.HttpResponse apply plugin: 'maven-publish' -apply from: "$sonatype_upload" +if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { + def taskName = "uploadSonatypePublication" + if (rootProject.tasks.names.contains(taskName) == false) { + rootProject.tasks.register(taskName) { + doLast { + 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') + def bearer = Base64.getEncoder().encodeToString("$username:$password".getBytes(StandardCharsets.UTF_8)) + + 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) { + throw IllegalStateException("Faced error of uploading for repo with key $it. Response: $uploadResponse") + } + } + } + } + } +} task javadocsJar(type: Jar) { archiveClassifier = 'javadoc' @@ -24,29 +64,24 @@ publishing { } developers { + developer { + id = "InsanusMokrassar" + name = "Aleksei Ovsiannikov" + email = "ovsyannikov.alexey95@gmail.com" + } - developer { - id = "InsanusMokrassar" - name = "Aleksei Ovsiannikov" - email = "ovsyannikov.alexey95@gmail.com" - } - - - developer { - id = "000Sanya" - name = "Syrov Aleksandr" - email = "000sanya.000sanya@gmail.com" - } - + developer { + id = "000Sanya" + name = "Syrov Aleksandr" + email = "000sanya.000sanya@gmail.com" + } } licenses { - - license { - name = "Apache Software License 2.0" - url = "https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE" - } - + license { + name = "Apache Software License 2.0" + url = "https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE" + } } } repositories { @@ -54,42 +89,39 @@ publishing { maven { name = "GithubPackages" url = uri("https://maven.pkg.github.com/InsanusMokrassar/MicroUtils") - + credentials { username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER') password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD') } - } } if ((project.hasProperty('INMONEXUS_USER') || System.getenv('INMONEXUS_USER') != null) && (project.hasProperty('INMONEXUS_PASSWORD') || System.getenv('INMONEXUS_PASSWORD') != null)) { maven { name = "InmoNexus" url = uri("https://nexus.inmo.dev/repository/maven-releases/") - + credentials { username = project.hasProperty('INMONEXUS_USER') ? project.property('INMONEXUS_USER') : System.getenv('INMONEXUS_USER') password = project.hasProperty('INMONEXUS_PASSWORD') ? project.property('INMONEXUS_PASSWORD') : System.getenv('INMONEXUS_PASSWORD') } - } } if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { maven { name = "sonatype" url = uri("https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/") - + credentials { 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') } - } } } } } - + if (project.hasProperty("signing.gnupg.keyName")) { apply plugin: 'signing' diff --git a/gradle/templates/publish.kpsb b/gradle/templates/publish.kpsb index 1fcc50538b8..36449579aa3 100644 --- a/gradle/templates/publish.kpsb +++ b/gradle/templates/publish.kpsb @@ -1 +1 @@ -{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE"}],"mavenConfig":{"name":"${project.name}","description":"It is set of projects with micro tools for avoiding of routines coding","url":"https://github.com/InsanusMokrassar/MicroUtils/","vcsUrl":"https://github.com/InsanusMokrassar/MicroUtils.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"},{"id":"000Sanya","name":"Syrov Aleksandr","eMail":"000sanya.000sanya@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/MicroUtils"},{"name":"InmoNexus","url":"https://nexus.inmo.dev/repository/maven-releases/"},{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}}} \ No newline at end of file +{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE"}],"mavenConfig":{"name":"${project.name}","description":"It is set of projects with micro tools for avoiding of routines coding","url":"https://github.com/InsanusMokrassar/MicroUtils/","vcsUrl":"https://github.com/InsanusMokrassar/MicroUtils.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"},{"id":"000Sanya","name":"Syrov Aleksandr","eMail":"000sanya.000sanya@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/MicroUtils"},{"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 diff --git a/gradle/templates/publish_jvm.gradle b/gradle/templates/publish_jvm.gradle index f741bcad726..b7545f99d5e 100644 --- a/gradle/templates/publish_jvm.gradle +++ b/gradle/templates/publish_jvm.gradle @@ -1,5 +1,50 @@ +import java.nio.charset.StandardCharsets +import java.net.http.HttpClient +import java.net.http.HttpRequest +import java.net.http.HttpResponse + apply plugin: 'maven-publish' -apply from: "$sonatype_upload" +if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { + def taskName = "uploadSonatypePublication" + if (rootProject.tasks.names.contains(taskName) == false) { + rootProject.tasks.register(taskName) { + doLast { + 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') + def bearer = Base64.getEncoder().encodeToString("$username:$password".getBytes(StandardCharsets.UTF_8)) + + 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) { + throw IllegalStateException("Faced error of uploading for repo with key $it. Response: $uploadResponse") + } + } + } + } + } +} + task javadocJar(type: Jar) { from javadoc @@ -66,7 +111,6 @@ publishing { username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER') password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD') } - } } if ((project.hasProperty('INMONEXUS_USER') || System.getenv('INMONEXUS_USER') != null) && (project.hasProperty('INMONEXUS_PASSWORD') || System.getenv('INMONEXUS_PASSWORD') != null)) { @@ -78,7 +122,6 @@ publishing { username = project.hasProperty('INMONEXUS_USER') ? project.property('INMONEXUS_USER') : System.getenv('INMONEXUS_USER') password = project.hasProperty('INMONEXUS_PASSWORD') ? project.property('INMONEXUS_PASSWORD') : System.getenv('INMONEXUS_PASSWORD') } - } } if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { @@ -90,7 +133,6 @@ publishing { 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') } - } } } @@ -100,13 +142,13 @@ publishing { if (project.hasProperty("signing.gnupg.keyName")) { apply plugin: 'signing' - + signing { useGpgCmd() - + sign publishing.publications } - + task signAll { tasks.withType(Sign).forEach { dependsOn(it) diff --git a/gradle/templates/publish_jvm.kpsb b/gradle/templates/publish_jvm.kpsb index ed4995630c1..fe56af0efdf 100644 --- a/gradle/templates/publish_jvm.kpsb +++ b/gradle/templates/publish_jvm.kpsb @@ -1 +1 @@ -{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE"}],"mavenConfig":{"name":"${project.name}","description":"It is set of projects with micro tools for avoiding of routines coding","url":"https://github.com/InsanusMokrassar/MicroUtils/","vcsUrl":"https://github.com/InsanusMokrassar/MicroUtils.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"},{"id":"000Sanya","name":"Syrov Aleksandr","eMail":"000sanya.000sanya@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/MicroUtils"},{"name":"InmoNexus","url":"https://nexus.inmo.dev/repository/maven-releases/"},{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"} \ No newline at end of file +{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/MicroUtils/blob/master/LICENSE"}],"mavenConfig":{"name":"${project.name}","description":"It is set of projects with micro tools for avoiding of routines coding","url":"https://github.com/InsanusMokrassar/MicroUtils/","vcsUrl":"https://github.com/InsanusMokrassar/MicroUtils.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"},{"id":"000Sanya","name":"Syrov Aleksandr","eMail":"000sanya.000sanya@gmail.com"}],"repositories":[{"name":"GithubPackages","url":"https://maven.pkg.github.com/InsanusMokrassar/MicroUtils"},{"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},"type":"JVM"} \ No newline at end of file diff --git a/gradle/templates/sonatype_upload.gradle b/gradle/templates/sonatype_upload.gradle deleted file mode 100644 index 28a3ddd1e4e..00000000000 --- a/gradle/templates/sonatype_upload.gradle +++ /dev/null @@ -1,47 +0,0 @@ -import java.nio.charset.StandardCharsets -import java.util.Base64 -import java.net.http.HttpClient -import java.net.http.HttpRequest -import java.net.http.HttpResponse - -if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) { - def taskName = "uploadSonatypePublication" - if (rootProject.tasks.names.contains(taskName)) { - return - } - rootProject.tasks.register(taskName) { - doLast { - 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') - def bearer = Base64.getEncoder().encodeToString("$username:$password".getBytes(StandardCharsets.UTF_8)) - - 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) { - throw IllegalStateException("Faced error of uploading for repo with key $it. Response: $uploadResponse") - } - } - } - } -}