From 92f4a2b7bfe17fb9cb41bbf7d19a140c28e8febc Mon Sep 17 00:00:00 2001 From: Ty Potter Date: Fri, 30 May 2025 17:02:16 -0600 Subject: [PATCH 1/4] jreleaser for publishing to maven central portal --- .github/workflows/publish-snapshot.yml | 38 ++++++++++++++++++++------ build.gradle | 13 +++------ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml index 966862a..59b09b0 100644 --- a/.github/workflows/publish-snapshot.yml +++ b/.github/workflows/publish-snapshot.yml @@ -2,16 +2,23 @@ name: Publish SDK Snapshot artifact on: push: - branches: [main] + branches: [main, typo/*] env: - ORG_GRADLE_PROJECT_ossrhUsername: ${{ secrets.OSSRH_USERNAME }} - ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }} CI: true jobs: publish-snapshot: runs-on: ubuntu-latest + env: + JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_TOKEN_USERNAME }} + JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_TOKEN_PASSWORD }} + JRELEASER_NEXUS2_SNAPSHOT_DEPLOY_USERNAME: ${{ secrets.MAVEN_CENTRAL_TOKEN_USERNAME }} + JRELEASER_NEXUS2_SNAPSHOT_DEPLOY_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN_PASSWORD }} + JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }} + JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 with: @@ -25,8 +32,23 @@ jobs: gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }} - - name: Publish Snapshot artifact - run: make test-data && ./gradlew check publish --no-daemon --stacktrace - env: - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + - name: Set up JDK 8 + uses: actions/setup-java@v4 + with: + java-version: '8' + distribution: 'temurin' + + - name: Download test data + run: make test-data + + - name: Test + run: ./gradlew check + + - name: Verify JReleaser + run: ./gradlew jreleaserConfig + + - name: Stage artifacts + run: ./gradlew clean publish -Psnapshot + + - name: Deploy to Maven Central + run: ./gradlew jreleaserDeploy diff --git a/build.gradle b/build.gradle index 789a2d1..f1c4960 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java-library' id 'maven-publish' - id 'signing' + id 'org.jreleaser' version '1.18.0' id "com.diffplug.spotless" version "6.13.0" } @@ -86,7 +86,8 @@ java { publishing { publications { - mavenJava(MavenPublication) { + maven(MavenPublication) { + groupId = 'cloud.eppo' artifactId = 'eppo-server-sdk' from components.java versionMapping { @@ -123,13 +124,7 @@ publishing { } repositories { maven { - def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" - def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/" - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - credentials { - username = project.properties.containsKey("ossrhUsername") ? project.properties["ossrhUsername"] : "" - password = project.properties.containsKey("ossrhPassword") ? project.properties["ossrhPassword"] : "" - } + url = layout.buildDirectory.dir('staging-deploy') } } } From 2bade5f5cdd2f9b4e2973283098d329b67ddba93 Mon Sep 17 00:00:00 2001 From: Ty Potter Date: Fri, 30 May 2025 17:05:42 -0600 Subject: [PATCH 2/4] j-rel --- build.gradle | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index f1c4960..590fc7b 100644 --- a/build.gradle +++ b/build.gradle @@ -129,11 +129,34 @@ publishing { } } -if (!project.gradle.startParameter.taskNames.contains('publishToMavenLocal')) { + +jreleaser { signing { - sign publishing.publications.mavenJava - if (System.env['CI']) { - useInMemoryPgpKeys(System.env.GPG_PRIVATE_KEY, System.env.GPG_PASSPHRASE) + active = 'ALWAYS' + armored = true + verify = false + } + deploy { + maven { + mavenCentral { + 'release-deploy' { + active = 'RELEASE' + url = 'https://central.sonatype.com/api/v1/publisher' + stagingRepository('build/staging-deploy') + } + } + nexus2 { + 'snapshot-deploy' { + active = 'SNAPSHOT' + snapshotUrl = 'https://central.sonatype.com/repository/maven-snapshots' + url = 'https://central.sonatype.com/repository/maven-snapshots' + applyMavenCentralRules = true + snapshotSupported = true + closeRepository = true + releaseRepository = true + stagingRepository('build/staging-deploy') + } + } } } } From 5a689413679c8bee782f1fc561207940020205a3 Mon Sep 17 00:00:00 2001 From: Ty Potter Date: Fri, 30 May 2025 21:08:24 -0600 Subject: [PATCH 3/4] sync workflows --- .github/workflows/publish-sdk.yml | 25 ++++++++++++++++--------- .github/workflows/publish-snapshot.yml | 11 +---------- build.gradle | 25 ++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/.github/workflows/publish-sdk.yml b/.github/workflows/publish-sdk.yml index 20d8753..35a8f1a 100644 --- a/.github/workflows/publish-sdk.yml +++ b/.github/workflows/publish-sdk.yml @@ -5,32 +5,39 @@ on: types: [published] env: - ORG_GRADLE_PROJECT_ossrhUsername: ${{ secrets.OSSRH_USERNAME }} - ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }} CI: true jobs: publish: runs-on: ubuntu-latest + env: + JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_TOKEN_USERNAME }} + JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_TOKEN_PASSWORD }} + JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }} + JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Set up Maven Central Repository + - name: Set up JDK 8 uses: actions/setup-java@v4 with: java-version: '8' distribution: 'temurin' - server-id: ossrh gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }} - name: Download test data run: make test-data - - name: Publish package to Maven Central - run: ./gradlew check publish --no-daemon - env: - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + - name: Test + run: ./gradlew check + + - name: Stage artifacts + run: ./gradlew clean publish -Prelease + + - name: Deploy to Maven Central + run: ./gradlew jreleaserDeploy diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml index 59b09b0..591eae5 100644 --- a/.github/workflows/publish-snapshot.yml +++ b/.github/workflows/publish-snapshot.yml @@ -24,7 +24,7 @@ jobs: with: fetch-depth: 0 - - name: Set up JDK 17 + - name: Set up JDK 8 uses: actions/setup-java@v4 with: java-version: 17 @@ -32,21 +32,12 @@ jobs: gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: ${{ secrets.GPG_PASSPHRASE }} - - name: Set up JDK 8 - uses: actions/setup-java@v4 - with: - java-version: '8' - distribution: 'temurin' - - name: Download test data run: make test-data - name: Test run: ./gradlew check - - name: Verify JReleaser - run: ./gradlew jreleaserConfig - - name: Stage artifacts run: ./gradlew clean publish -Psnapshot diff --git a/build.gradle b/build.gradle index 590fc7b..a700dda 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ java { } group = 'cloud.eppo' -version = '5.2.1-SNAPSHOT' +version = '5.2.1' ext.isReleaseVersion = !version.endsWith("SNAPSHOT") import org.apache.tools.ant.filters.ReplaceTokens @@ -161,6 +161,29 @@ jreleaser { } } + +// Custom task to ensure we can conditionally publish either a release or snapshot artifact +// based on a command line switch. See github workflow files for more details on usage. +tasks.register('checkVersion') { + doLast { + if (!project.hasProperty('release') && !project.hasProperty('snapshot')) { + throw new GradleException("You must specify either -Prelease or -Psnapshot") + } + if (project.hasProperty('release') && project.version.endsWith('SNAPSHOT')) { + throw new GradleException("You cannot specify -Prelease with a SNAPSHOT version") + } + if (project.hasProperty('snapshot') && !project.version.endsWith('SNAPSHOT')) { + throw new GradleException("You cannot specify -Psnapshot with a non-SNAPSHOT version") + } + project.ext.shouldPublish = true + } +} + +// Ensure checkVersion runs before publishing +tasks.named('publish').configure { + dependsOn checkVersion +} + javadoc { if (JavaVersion.current().isJava9Compatible()) { options.addBooleanOption('html5', true) From 3fdfb21188f797e605ff388bb722316b818d19b0 Mon Sep 17 00:00:00 2001 From: Ty Potter Date: Fri, 30 May 2025 21:10:00 -0600 Subject: [PATCH 4/4] no trigger wip --- .github/workflows/publish-snapshot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml index 591eae5..74a4b0e 100644 --- a/.github/workflows/publish-snapshot.yml +++ b/.github/workflows/publish-snapshot.yml @@ -2,7 +2,7 @@ name: Publish SDK Snapshot artifact on: push: - branches: [main, typo/*] + branches: [main] env: CI: true