diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 813e9ca..bab5f06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,14 +17,27 @@ jobs: distribution: temurin - name: Build with Gradle run: ./gradlew build - - name: Publish + - name: Verify JReleaser configuration + env: + JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.SONATYPE_CENTRAL_USERNAME }} + JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }} + JRELEASER_NEXUS2_USERNAME: ${{ secrets.SONATYPE_CENTRAL_USERNAME }} + JRELEASER_NEXUS2_PASSWORD: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }} + run: ./gradlew jreleaserConfig + - name: Build artifacts if: ${{ github.ref == 'refs/heads/main' || startswith(github.ref, 'refs/tags/') }} env: SIGNING_PRIVATE_KEY: ${{ secrets.MAVEN_CENTRAL_GPG_KEY }} SIGNING_PASSWORD: ${{ secrets.MAVEN_CENTRAL_GPG_PASSWORD }} - ORG_GRADLE_PROJECT_sonatype_username: ${{ secrets.SONATYPE_S01_USERNAME }} - ORG_GRADLE_PROJECT_sonatype_password: ${{ secrets.SONATYPE_S01_PASSWORD }} run: ./gradlew publish + - name: Deploy artifacts + if: ${{ github.ref == 'refs/heads/main' || startswith(github.ref, 'refs/tags/') }} + env: + JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.SONATYPE_CENTRAL_USERNAME }} + JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }} + JRELEASER_NEXUS2_USERNAME: ${{ secrets.SONATYPE_CENTRAL_USERNAME }} + JRELEASER_NEXUS2_PASSWORD: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }} + run: ./gradlew jreleaserDeploy - name: Upload reports if: success() || failure() uses: actions/upload-artifact@v4 diff --git a/build.gradle b/build.gradle index 5bf31a7..b01915c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,5 @@ +apply from: "gradle/jreleaser.gradle" + allprojects { pluginManager.withPlugin('maven-publish') { apply from: "${rootDir}/gradle/publish.gradle" diff --git a/gradle/jreleaser.gradle b/gradle/jreleaser.gradle new file mode 100644 index 0000000..d2553b2 --- /dev/null +++ b/gradle/jreleaser.gradle @@ -0,0 +1,43 @@ +apply plugin: 'base' +apply plugin: 'org.jreleaser' + +jreleaser { + deploy { + maven { + mavenCentral { + sonatype { + active = 'RELEASE' + url = 'https://central.sonatype.com/api/v1/publisher' + sign = false + applyMavenCentralRules = true + stagingRepository('build/staging-deploy') + namespace = 'com.contentgrid' + } + } + nexus2 { + 'sonatype-snapshot' { + active = 'SNAPSHOT' + snapshotUrl = 'https://central.sonatype.com/repository/maven-snapshots/' + sign = false + applyMavenCentralRules = true + snapshotSupported = true + closeRepository = true + releaseRepository = true + stagingRepository('build/staging-deploy') + } + } + } + } + // It is required to configure at least one release provider. + // But you can provide any non-existing non-empty GitHub token and skip creating tags and releases. + // see https://github.com/jreleaser/jreleaser/discussions/1725 + gitRootSearch = true + release { + github { + enabled = true + skipTag = true + skipRelease = true + token = '__UNUSED__' + } + } +} diff --git a/gradle/publish.gradle b/gradle/publish.gradle index f1f69d8..48cf3ef 100644 --- a/gradle/publish.gradle +++ b/gradle/publish.gradle @@ -32,22 +32,8 @@ publishing { } repositories { - if ("${project.version}".endsWith('-SNAPSHOT')) { - sonatypeSnapshots { - url = "https://s01.oss.sonatype.org/content/repositories/snapshots/" - credentials { - username = project.findProperty('sonatype_username') - password = project.findProperty('sonatype_password') - } - } - } else { - sonatypeMavenCentral { - url = "https://s01.oss.sonatype.org/service/local/" - credentials { - username = project.findProperty('sonatype_username') - password = project.findProperty('sonatype_password') - } - } + maven { + url = uri("${rootDir}/build/staging-deploy") } } } diff --git a/settings.gradle b/settings.gradle index c0d73ac..83119f8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,7 @@ plugins { id 'eu.xenit.enterprise-conventions.oss' version '0.5.2' id 'org.ajoberstar.reckon.settings' version '0.19.2' + id 'org.jreleaser' version '1.19.0' apply false } rootProject.name = 'opa-java-client'