diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b8199284..1a92d309 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,15 +73,15 @@ jobs: ./gradlew --no-daemon --info :json-schema-validator:assemble :json-schema-validator-objects:assemble - publish closeAndReleaseStagingRepositories + publishToMavenCentral --no-configuration-cache -Pversion=${{ needs.version.outputs.RELEASE_VERSION }} -x :benchmark:benchmark env: - SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} - SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }} - SIGNING_SECRET_KEY: ${{ secrets.SIGNING_SECRET_KEY }} - OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} - OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_SECRET_KEY }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.OSSRH_PASSWORD }} create_release: runs-on: ubuntu-latest needs: diff --git a/.github/workflows/snapshot_release.yml b/.github/workflows/snapshot_release.yml index b8b02e2b..58df9a27 100644 --- a/.github/workflows/snapshot_release.yml +++ b/.github/workflows/snapshot_release.yml @@ -60,11 +60,11 @@ jobs: --info :json-schema-validator:assemble :json-schema-validator-objects:assemble - publish + publishToMavenCentral -x :benchmark:benchmark env: - SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} - SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }} - SIGNING_SECRET_KEY: ${{ secrets.SIGNING_SECRET_KEY }} - OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} - OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} \ No newline at end of file + ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_SECRET_KEY }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.OSSRH_PASSWORD }} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index fb5d3ba5..f5b6d42d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,5 @@ plugins { alias(libs.plugins.kotlin.binaryCompatibility) - alias(libs.plugins.nexus.publish) - convention.properties } allprojects { @@ -14,21 +12,6 @@ apiValidation { ignoredProjects += listOf("benchmark", "test-suites", "json-schema-validator-bom") } -val ossrhUsername: String by project.ext -val ossrhPassword: String by project.ext - -nexusPublishing { - this.repositories { - sonatype { - nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/")) - snapshotRepositoryUrl.set(uri("https://central.sonatype.com/repository/maven-snapshots/")) - - username.set(ossrhUsername) - password.set(ossrhPassword) - } - } -} - tasks.register("printKtlintVersion") { doLast { println(libs.versions.ktlint.get()) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 35ab926e..6ab2a3e5 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -9,4 +9,5 @@ repositories { dependencies { implementation(libs.kotlin.gradle.plugin) implementation(libs.sigstore.gradle.plugin) + implementation(libs.maven.publish.gradle.plugin) } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/convention.properties.gradle.kts b/buildSrc/src/main/kotlin/convention.properties.gradle.kts deleted file mode 100644 index d7cd4a83..00000000 --- a/buildSrc/src/main/kotlin/convention.properties.gradle.kts +++ /dev/null @@ -1,28 +0,0 @@ -import java.util.Properties - -allprojects { - ext["signing.keyId"] = "" - ext["signing.password"] = "" - ext["signing.key"] = "" - ext["ossrhUsername"] = "" - ext["ossrhPassword"] = "" - - val secretPropsFile: File = project.rootProject.file("local.properties") - if (secretPropsFile.exists()) { - secretPropsFile - .reader() - .use { - Properties().apply { - load(it) - } - }.onEach { (name, value) -> - ext[name.toString()] = value - } - } else { - ext["signing.keyId"] = System.getenv("SIGNING_KEY_ID") ?: "" - ext["signing.password"] = System.getenv("SIGNING_PASSWORD") ?: "" - ext["signing.keys"] = System.getenv("SIGNING_SECRET_KEY") ?: "" - ext["ossrhUsername"] = System.getenv("OSSRH_USERNAME") ?: "" - ext["ossrhPassword"] = System.getenv("OSSRH_PASSWORD") ?: "" - } -} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/convention.publication.gradle.kts b/buildSrc/src/main/kotlin/convention.publication.gradle.kts index be453dfc..628e5106 100644 --- a/buildSrc/src/main/kotlin/convention.publication.gradle.kts +++ b/buildSrc/src/main/kotlin/convention.publication.gradle.kts @@ -2,14 +2,9 @@ plugins { `maven-publish` signing id("dev.sigstore.sign") + id("com.vanniktech.maven.publish") } -val javadocJar by tasks.registering(Jar::class) { - archiveClassifier.set("javadoc") -} - -fun getExtraString(name: String) = ext[name]?.toString() - /** * Create a service for collecting the coordinates of all artifacts that should be included in the bom. */ @@ -38,47 +33,30 @@ bomService.coordinates }, ) -publishing { +mavenPublishing { + publishToMavenCentral(automaticRelease = true) + signAllPublications() - publications.withType { - // Stub javadoc.jar artifact - artifact(javadocJar) + pom { + name.set("JSON schema validator") + description.set("Multiplatform Kotlin implementation of JSON schema validator") + url.set("https://github.com/OptimumCode/json-schema-validator") - pom { - name.set("JSON schema validator") - description.set("Multiplatform Kotlin implementation of JSON schema validator") - url.set("https://github.com/OptimumCode/json-schema-validator") - - licenses { - license { - name.set("MIT") - url.set("https://opensource.org/licenses/MIT") - } - } - developers { - developer { - id.set("OptimumCode") - name.set("Oleg Smirnov") - email.set("oleg31101996@gmail.com") - } + licenses { + license { + name.set("MIT") + url.set("https://opensource.org/licenses/MIT") } - scm { - url.set("https://github.com/OptimumCode/json-schema-validator") + } + developers { + developer { + id.set("OptimumCode") + name.set("Oleg Smirnov") + email.set("oleg31101996@gmail.com") } } + scm { + url.set("https://github.com/OptimumCode/json-schema-validator") + } } } - -// otherwise, the publication fails because some task uses sign output but do not declare that -tasks.withType { - mustRunAfter(tasks.withType()) -} - -signing { - useInMemoryPgpKeys( - getExtraString("signing.keyId"), - getExtraString("signing.keys"), - getExtraString("signing.password"), - ) - sign(publishing.publications) -} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f2d026b0..4932e205 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,6 @@ kover = { id = "org.jetbrains.kotlinx.kover", version = "0.9.1" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version = "12.3.0" } kotlin-binaryCompatibility = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.18.0" } -nexus-publish = { id = "io.github.gradle-nexus.publish-plugin", version = "2.0.0" } [libraries] kotlin-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "serialization" } @@ -43,6 +42,7 @@ normalize = { group = "com.doist.x", name = "normalize", version = "1.2.0" } karacteristics = { group = "io.github.optimumcode", name = "karacteristics", version = "0.0.6" } kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } sigstore-gradle-plugin = { module = "dev.sigstore:sigstore-gradle-sign-plugin", version = "1.3.0"} +maven-publish-gradle-plugin = { module = "com.vanniktech.maven.publish:com.vanniktech.maven.publish.gradle.plugin", version = "0.33.0"} [bundles] openapi = ["openapi-validator", "openapi-interfaces", "openapi-jackson"] diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c352119..1b33c55b 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37f853b1..d4081da4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6d..23d15a93 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -115,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -206,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. @@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9b42019c..5eed7ee8 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,11 @@ goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell