diff --git a/.github/workflows/release-snapshot.yaml b/.github/workflows/release-snapshot.yaml index c73f704d1a..aaab2a1e53 100644 --- a/.github/workflows/release-snapshot.yaml +++ b/.github/workflows/release-snapshot.yaml @@ -30,16 +30,28 @@ jobs: VERSION=$(./gradlew :core:properties -q | grep "version:" | awk '{print $2}') echo "version=${VERSION}" >> $GITHUB_OUTPUT - - name: Upload SNAPSHOT versions for scalardb, scalardb-server, scalardb-rpc, scalardb-schema-loader, and scalardb-integration-test to Maven Snapshot Repository + - name: Prepare SNAPSHOT versions of artifacts in staging-deploy directories if: contains(steps.version.outputs.version, '-SNAPSHOT') - run: | - echo "${{secrets.SIGNING_SECRET_KEY_RING}}" | base64 -d > ~/.gradle/secring.gpg - ./gradlew publish \ - -Psigning.keyId="${{ secrets.SIGNING_KEY_ID }}" \ - -P'signing.password'="${{ secrets.SIGNING_PASSWORD }}" \ - -Psigning.secretKeyRingFile="$(echo ~/.gradle/secring.gpg)" \ - -PossrhUsername="${{ secrets.OSSRH_USERNAMAE }}" \ - -PossrhPassword="${{ secrets.OSSRH_PASSWORD }}" + run: ./gradlew publish + + - name: Upload SNAPSHOT versions of artifacts to Maven Snapshot repository + if: contains(steps.version.outputs.version, '-SNAPSHOT') + 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/upload-artifacts.yaml b/.github/workflows/upload-artifacts.yaml index efc1f071a6..a3abdeaa64 100644 --- a/.github/workflows/upload-artifacts.yaml +++ b/.github/workflows/upload-artifacts.yaml @@ -53,6 +53,27 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 + - name: Prepare artifacts in staging-deploy directories + run: ./gradlew publish + + - name: Upload artifacts to Maven Central Repository + 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 with: @@ -105,13 +126,3 @@ jobs: run: | docker tag ghcr.io/scalar-labs/scalardb-server:${{ steps.version.outputs.version }} ${{ secrets.AWS_MARKETPLACE_ECR_ID }}.dkr.ecr.us-east-1.amazonaws.com/scalar/scalardb-server:${{ steps.version.outputs.version }} docker push ${{ secrets.AWS_MARKETPLACE_ECR_ID }}.dkr.ecr.us-east-1.amazonaws.com/scalar/scalardb-server:${{ steps.version.outputs.version }} - - - name: Upload scalardb, scalardb-server, scalardb-rpc, scalardb-schema-loader, and scalardb-integration-test to Maven Central Repository - run: | - echo "${{secrets.SIGNING_SECRET_KEY_RING}}" | base64 -d > ~/.gradle/secring.gpg - ./gradlew publish \ - -Psigning.keyId="${{ secrets.SIGNING_KEY_ID }}" \ - -P'signing.password'="${{ secrets.SIGNING_PASSWORD }}" \ - -Psigning.secretKeyRingFile="$(echo ~/.gradle/secring.gpg)" \ - -PossrhUsername="${{ secrets.OSSRH_USERNAMAE }}" \ - -PossrhPassword="${{ secrets.OSSRH_PASSWORD }}" diff --git a/build.gradle b/build.gradle index 311c6d790a..6efceb2d51 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,16 @@ -buildscript { - repositories { - maven { - url 'https://plugins.gradle.org/m2/' - } - } - dependencies { - classpath 'com.diffplug.spotless:spotless-plugin-gradle:6.13.0' - } +plugins { + id "com.diffplug.spotless" version "6.13.0" + id "org.jreleaser" version "1.19.0" +} + +ext { + projectGroup = 'com.scalar-labs' + projectVersion = '3.13.5-SNAPSHOT' } +group = projectGroup +version = projectVersion + subprojects { apply plugin: 'java' apply plugin: 'eclipse' @@ -18,7 +20,7 @@ subprojects { apply plugin: 'com.diffplug.spotless' apply plugin: 'com.scalar.db.jdk-configuration' - project.version = '3.13.5-SNAPSHOT' + project.version = projectVersion ext { guiceVersion = '5.1.0' @@ -73,7 +75,7 @@ subprojects { testLogging.showStandardStreams = true } - group = "com.scalar-labs" + group = projectGroup java { withJavadocJar() @@ -99,3 +101,39 @@ subprojects { } } +jreleaser { + gitRootSearch = true + + signing { + active = 'ALWAYS' + armored = true + } + + deploy { + maven { + def stagingRepositories = ['core/build/staging-deploy', + 'integration-test/build/staging-deploy', + 'schema-loader/build/staging-deploy', + 'server/build/staging-deploy', + 'rpc/build/staging-deploy'] + mavenCentral { + sonatype { + active = 'RELEASE' + url = 'https://central.sonatype.com/api/v1/publisher' + stagingRepositories.each { stagingRepository(it) } + } + } + nexus2 { + 'snapshot-deploy' { + active = 'SNAPSHOT' + snapshotUrl = 'https://central.sonatype.com/repository/maven-snapshots/' + applyMavenCentralRules = true + snapshotSupported = true + closeRepository = true + releaseRepository = true + stagingRepositories.each { stagingRepository(it) } + } + } + } + } +} diff --git a/core/build.gradle b/core/build.gradle index 01dd84994b..74be9495d2 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -2,7 +2,6 @@ plugins { id 'com.github.spotbugs-base' version "${spotbugsPluginVersion}" id 'net.ltgt.errorprone' version "${errorpronePluginVersion}" id 'maven-publish' - id 'signing' id 'base' } @@ -350,18 +349,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 = project.properties['ossrhUsername'] ?: "" - password = project.properties['ossrhPassword'] ?: "" - } + url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - required { project.gradle.taskGraph.hasTask("publish") } - sign publishing.publications.mavenJava -} diff --git a/integration-test/build.gradle b/integration-test/build.gradle index 3567f531c4..1b9bd242c3 100644 --- a/integration-test/build.gradle +++ b/integration-test/build.gradle @@ -2,7 +2,6 @@ plugins { id 'com.github.spotbugs' version "${spotbugsPluginVersion}" id 'net.ltgt.errorprone' version "${errorpronePluginVersion}" id 'maven-publish' - id 'signing' id 'base' } @@ -100,18 +99,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 = project.properties['ossrhUsername'] ?: "" - password = project.properties['ossrhPassword'] ?: "" - } + url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - required { project.gradle.taskGraph.hasTask("publish") } - sign publishing.publications.mavenJava -} diff --git a/rpc/build.gradle b/rpc/build.gradle index d87f98a704..fd2aa53520 100644 --- a/rpc/build.gradle +++ b/rpc/build.gradle @@ -1,7 +1,6 @@ plugins { id 'com.google.protobuf' version "${protobufPluginVersion}" id 'maven-publish' - id 'signing' id 'base' } @@ -84,18 +83,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 = project.properties['ossrhUsername'] ?: "" - password = project.properties['ossrhPassword'] ?: "" - } + url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - required { project.gradle.taskGraph.hasTask("publish") } - sign publishing.publications.mavenJava -} diff --git a/schema-loader/build.gradle b/schema-loader/build.gradle index 97523de479..2b0fcef429 100644 --- a/schema-loader/build.gradle +++ b/schema-loader/build.gradle @@ -3,7 +3,6 @@ plugins { id 'com.github.johnrengelman.shadow' version "${shadowPluginVersion}" id 'com.github.spotbugs' version "${spotbugsPluginVersion}" id 'maven-publish' - id 'signing' id 'base' } @@ -134,18 +133,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 = project.properties['ossrhUsername'] ?: "" - password = project.properties['ossrhPassword'] ?: "" - } + url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - required { project.gradle.taskGraph.hasTask("publish") } - sign publishing.publications.mavenJava -} diff --git a/server/build.gradle b/server/build.gradle index 672f08e0d5..fc7d4d2830 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -3,7 +3,6 @@ plugins { id 'com.github.spotbugs' version "${spotbugsPluginVersion}" id 'net.ltgt.errorprone' version "${errorpronePluginVersion}" id 'maven-publish' - id 'signing' id 'base' } @@ -188,18 +187,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 = project.properties['ossrhUsername'] ?: "" - password = project.properties['ossrhPassword'] ?: "" - } + url = layout.buildDirectory.dir('staging-deploy') } } } - -signing { - required { project.gradle.taskGraph.hasTask("publish") } - sign publishing.publications.mavenJava -}