From f237f113c8e2935a00288d1261f58e708cfccc0f Mon Sep 17 00:00:00 2001 From: Jun Nemoto Date: Mon, 14 Jul 2025 16:23:23 +0900 Subject: [PATCH 1/4] Use JReleaser to release artifacts in Maven Central --- .github/workflows/release-snapshot.yaml | 27 +++++++++---- .github/workflows/release.yaml | 28 +++++++++----- build.gradle | 49 +++++++++++++++++++++++- client/archive.gradle | 13 +------ common/archive.gradle | 13 +------ gradle/wrapper/gradle-wrapper.properties | 2 +- ledger/archive.gradle | 13 +------ rpc/archive.gradle | 12 +----- 8 files changed, 91 insertions(+), 66 deletions(-) diff --git a/.github/workflows/release-snapshot.yaml b/.github/workflows/release-snapshot.yaml index 3c842b59..b5179cc7 100644 --- a/.github/workflows/release-snapshot.yaml +++ b/.github/workflows/release-snapshot.yaml @@ -30,16 +30,27 @@ jobs: VERSION=$(./gradlew :ledger:properties -q | grep "version:" | awk '{print $2}') echo "version=${VERSION}" >> $GITHUB_OUTPUT + - name: Prepare artifacts in staging-deploy directories + run: ./gradlew publish + - name: Upload the SNAPSHOT versions of scalardl-ledger, scalardl-java-client-sdk, scalardl-common, and scalardl-rpc to Maven Central Repository if: contains(steps.version.outputs.version, '-SNAPSHOT') - run: | - echo "${{secrets.SIGNING_SECRET_KEY_RING}}" | base64 -d > /tmp/secring.gpg - ./gradlew publish \ - -Psigning.keyId="${{ secrets.SIGNING_KEY_ID }}" \ - -P'signing.password'="${{ secrets.SIGNING_PASSWORD }}" \ - -Psigning.secretKeyRingFile="$(echo /tmp/secring.gpg)" \ - -PossrhUsername="${{ secrets.OSSRH_USERNAMAE }}" \ - -PossrhPassword="${{ secrets.OSSRH_PASSWORD }}" + env: + JRELEASER_NEXUS2_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }} + JRELEASER_NEXUS2_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} + JRELEASER_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} + JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.MAVEN_CENTRAL_GPG_PUBLIC_KEY }} + JRELEASER_GPG_SECRET_KEY: ${{ secrets.MAVEN_CENTRAL_GPG_SECRET_KEY }} + run: ./gradlew jreleaserDeploy + + - name: Upload JReleaser outputs + if: always() + uses: actions/upload-artifact@v4 + with: + name: jreleaser-release + path: | + build/jreleaser/trace.log + build/jreleaser/output.properties - name: Login to GitHub Container Registry uses: docker/login-action@v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a6587d00..7527380c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -32,16 +32,26 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 + - name: Prepare artifacts in staging-deploy directories + run: ./gradlew publish + - name: Upload scalardl-ledger, scalardl-java-client-sdk, scalardl-common, and scalardl-rpc to Maven Central Repository - run: | - echo "${{secrets.SIGNING_SECRET_KEY_RING}}" | base64 -d > /tmp/secring.gpg - ./gradlew publish \ - -Pversion=${{ steps.version.outputs.version }} \ - -Psigning.keyId="${{ secrets.SIGNING_KEY_ID }}" \ - -P'signing.password'="${{ secrets.SIGNING_PASSWORD }}" \ - -Psigning.secretKeyRingFile="$(echo /tmp/secring.gpg)" \ - -PossrhUsername="${{ secrets.OSSRH_USERNAMAE }}" \ - -PossrhPassword="${{ secrets.OSSRH_PASSWORD }}" + env: + JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }} + JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} + JRELEASER_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} + JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.MAVEN_CENTRAL_GPG_PUBLIC_KEY }} + JRELEASER_GPG_SECRET_KEY: ${{ secrets.MAVEN_CENTRAL_GPG_SECRET_KEY }} + run: ./gradlew jreleaserDeploy + + - name: Upload JReleaser outputs + if: always() + uses: actions/upload-artifact@v4 + with: + name: jreleaser-release + path: | + build/jreleaser/trace.log + build/jreleaser/output.properties - name: Login to GitHub Container Registry uses: docker/login-action@v3 diff --git a/build.gradle b/build.gradle index 8574ec74..3c863913 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,16 @@ plugins { id("com.diffplug.spotless") version "6.13.0" + id("org.jreleaser") version "1.19.0" } +ext { + projectGroup = 'com.scalar-labs' + projectVersion = '4.0.0-SNAPSHOT' +} + +group = projectGroup +version = projectVersion + subprojects { apply plugin: 'java' apply plugin: 'eclipse' @@ -10,7 +19,7 @@ subprojects { apply plugin: 'java-library-distribution' apply plugin: 'com.diffplug.spotless' - project.version = '4.0.0-SNAPSHOT' + project.version = projectVersion ext { grpcVersion = '1.73.0' @@ -113,3 +122,41 @@ subprojects { executable "${rootDir}/scripts/docker/lint.sh" } } + +jreleaser { + gitRootSearch = true + + signing { + active = 'ALWAYS' + armored = true + } + + deploy { + maven { + mavenCentral { + sonatype { + active = 'ALWAYS' + url = 'https://central.sonatype.com/api/v1/publisher' + stagingRepository('client/build/staging-deploy') + stagingRepository('common/build/staging-deploy') + stagingRepository('ledger/build/staging-deploy') + stagingRepository('rpc/build/staging-deploy') + } + } + nexus2 { + 'snapshot-deploy' { + active = 'SNAPSHOT' + snapshotUrl = 'https://central.sonatype.com/repository/maven-snapshots/' + applyMavenCentralRules = true + snapshotSupported = true + closeRepository = true + releaseRepository = true + stagingRepository('client/build/staging-deploy') + stagingRepository('common/build/staging-deploy') + stagingRepository('ledger/build/staging-deploy') + stagingRepository('rpc/build/staging-deploy') + } + } + } + } +} diff --git a/client/archive.gradle b/client/archive.gradle index ea8c367d..9678304f 100644 --- a/client/archive.gradle +++ b/client/archive.gradle @@ -1,5 +1,4 @@ apply plugin: 'maven-publish' -apply plugin: 'signing' publishing { publications { @@ -42,17 +41,7 @@ publishing { } repositories { maven { - def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2" - def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots" - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - credentials { - username = "${ossrhUsername}" - password = "${ossrhPassword}" - } + url = url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - sign publishing.publications.mavenJava -} diff --git a/common/archive.gradle b/common/archive.gradle index a32ec306..ef10d1c3 100644 --- a/common/archive.gradle +++ b/common/archive.gradle @@ -1,5 +1,4 @@ apply plugin: 'maven-publish' -apply plugin: 'signing' publishing { publications { @@ -40,17 +39,7 @@ publishing { } repositories { maven { - def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2" - def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots" - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - credentials { - username = "${ossrhUsername}" - password = "${ossrhPassword}" - } + url = url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - sign publishing.publications.mavenJava -} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 774fae87..0d01abe8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/ledger/archive.gradle b/ledger/archive.gradle index 26b0879e..b9e62675 100644 --- a/ledger/archive.gradle +++ b/ledger/archive.gradle @@ -1,5 +1,4 @@ apply plugin: 'maven-publish' -apply plugin: 'signing' publishing { publications { @@ -40,17 +39,7 @@ publishing { } repositories { maven { - def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2" - def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots" - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - credentials { - username = "${ossrhUsername}" - password = "${ossrhPassword}" - } + url = url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - sign publishing.publications.mavenJava -} diff --git a/rpc/archive.gradle b/rpc/archive.gradle index 04c0e746..c2ad95fd 100644 --- a/rpc/archive.gradle +++ b/rpc/archive.gradle @@ -40,17 +40,7 @@ publishing { } repositories { maven { - def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2" - def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots" - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - credentials { - username = "${ossrhUsername}" - password = "${ossrhPassword}" - } + url = url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - sign publishing.publications.mavenJava -} From 5811a2cea8e197890bf6bd0f31544449377b6001 Mon Sep 17 00:00:00 2001 From: Jun Nemoto Date: Mon, 14 Jul 2025 16:40:25 +0900 Subject: [PATCH 2/4] Fix --- client/archive.gradle | 2 +- common/archive.gradle | 2 +- ledger/archive.gradle | 2 +- rpc/archive.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/archive.gradle b/client/archive.gradle index 9678304f..43a17928 100644 --- a/client/archive.gradle +++ b/client/archive.gradle @@ -41,7 +41,7 @@ publishing { } repositories { maven { - url = url = layout.buildDirectory.dir('staging-deploy') + url = layout.buildDirectory.dir('staging-deploy') } } } diff --git a/common/archive.gradle b/common/archive.gradle index ef10d1c3..372fae56 100644 --- a/common/archive.gradle +++ b/common/archive.gradle @@ -39,7 +39,7 @@ publishing { } repositories { maven { - url = url = layout.buildDirectory.dir('staging-deploy') + url = layout.buildDirectory.dir('staging-deploy') } } } diff --git a/ledger/archive.gradle b/ledger/archive.gradle index b9e62675..9088cabc 100644 --- a/ledger/archive.gradle +++ b/ledger/archive.gradle @@ -39,7 +39,7 @@ publishing { } repositories { maven { - url = url = layout.buildDirectory.dir('staging-deploy') + url = layout.buildDirectory.dir('staging-deploy') } } } diff --git a/rpc/archive.gradle b/rpc/archive.gradle index c2ad95fd..1fd99a8a 100644 --- a/rpc/archive.gradle +++ b/rpc/archive.gradle @@ -40,7 +40,7 @@ publishing { } repositories { maven { - url = url = layout.buildDirectory.dir('staging-deploy') + url = layout.buildDirectory.dir('staging-deploy') } } } From 731993fc45ee6cc086eb8cf3e61d170b2ebab21a Mon Sep 17 00:00:00 2001 From: Jun Nemoto Date: Tue, 15 Jul 2025 10:43:10 +0900 Subject: [PATCH 3/4] Fix based on feedback --- .github/workflows/release-snapshot.yaml | 1 + build.gradle | 7 +++---- rpc/archive.gradle | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-snapshot.yaml b/.github/workflows/release-snapshot.yaml index b5179cc7..e8404c10 100644 --- a/.github/workflows/release-snapshot.yaml +++ b/.github/workflows/release-snapshot.yaml @@ -31,6 +31,7 @@ jobs: echo "version=${VERSION}" >> $GITHUB_OUTPUT - name: Prepare artifacts in staging-deploy directories + if: contains(steps.version.outputs.version, '-SNAPSHOT') run: ./gradlew publish - name: Upload the SNAPSHOT versions of scalardl-ledger, scalardl-java-client-sdk, scalardl-common, and scalardl-rpc to Maven Central Repository diff --git a/build.gradle b/build.gradle index 3c863913..c7110185 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,7 @@ subprojects { apply plugin: 'java-library-distribution' apply plugin: 'com.diffplug.spotless' + group = projectGroup project.version = projectVersion ext { @@ -94,8 +95,6 @@ subprojects { sourceCompatibility = 1.8 targetCompatibility = 1.8 - group = "com.scalar-labs" - distZip { archiveFileName = "${project.name}.zip" duplicatesStrategy = DuplicatesStrategy.EXCLUDE @@ -134,8 +133,8 @@ jreleaser { deploy { maven { mavenCentral { - sonatype { - active = 'ALWAYS' + 'release-deploy' { + active = 'RELEASE' url = 'https://central.sonatype.com/api/v1/publisher' stagingRepository('client/build/staging-deploy') stagingRepository('common/build/staging-deploy') diff --git a/rpc/archive.gradle b/rpc/archive.gradle index 1fd99a8a..7e7fcece 100644 --- a/rpc/archive.gradle +++ b/rpc/archive.gradle @@ -1,5 +1,4 @@ apply plugin: 'maven-publish' -apply plugin: 'signing' publishing { publications { From f423c439c0c8ea5cc4cb036aab879d9f2699a973 Mon Sep 17 00:00:00 2001 From: Jun Nemoto Date: Tue, 15 Jul 2025 16:23:14 +0900 Subject: [PATCH 4/4] Refactoring --- build.gradle | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index c7110185..e719d208 100644 --- a/build.gradle +++ b/build.gradle @@ -132,14 +132,15 @@ jreleaser { deploy { maven { + def stagingRepositories = ['client/build/staging-deploy', + 'common/build/staging-deploy', + 'ledger/build/staging-deploy', + 'rpc/build/staging-deploy'] mavenCentral { 'release-deploy' { active = 'RELEASE' url = 'https://central.sonatype.com/api/v1/publisher' - stagingRepository('client/build/staging-deploy') - stagingRepository('common/build/staging-deploy') - stagingRepository('ledger/build/staging-deploy') - stagingRepository('rpc/build/staging-deploy') + stagingRepositories.each { stagingRepository(it) } } } nexus2 { @@ -150,10 +151,7 @@ jreleaser { snapshotSupported = true closeRepository = true releaseRepository = true - stagingRepository('client/build/staging-deploy') - stagingRepository('common/build/staging-deploy') - stagingRepository('ledger/build/staging-deploy') - stagingRepository('rpc/build/staging-deploy') + stagingRepositories.each { stagingRepository(it) } } } }