From 9a0d58f2c66f84c1557fa0fc3ed13d4dcdce855c Mon Sep 17 00:00:00 2001 From: Darius Maitia Date: Mon, 27 Jan 2025 18:33:46 -0300 Subject: [PATCH 1/5] Maven publications Modifying gradle scripts and workflows for publishing packages into maven central (changes ported from zenoh-kotlin and addapted to zenoh-java). --- .github/workflows/publish-android.yml | 41 ++++++++++++++++++++----- .github/workflows/publish-dokka.yml | 2 +- .github/workflows/publish-jvm.yml | 44 +++++++++++++++++++++------ .github/workflows/release.yml | 4 +-- build.gradle.kts | 30 +++++++++++++----- gradle.properties | 1 + zenoh-java/build.gradle.kts | 24 ++++++--------- 7 files changed, 106 insertions(+), 40 deletions(-) create mode 100644 gradle.properties diff --git a/.github/workflows/publish-android.yml b/.github/workflows/publish-android.yml index d3effc7e..7e20f6ad 100644 --- a/.github/workflows/publish-android.yml +++ b/.github/workflows/publish-android.yml @@ -12,7 +12,22 @@ on: description: Target branch type: string required: false + github_publish: + type: boolean + required: false + default: true + maven_publish: + type: boolean + required: false + default: true workflow_dispatch: + inputs: + github_publish: + description: 'Publish to github packages' + default: true + maven_publish: + description: 'Publish to Maven Central' + default: true env: CARGO_TERM_COLOR: always @@ -68,23 +83,35 @@ jobs: run: | if [[ "${{ inputs.snapshot }}" == "true" ]]; then echo "PUB_MODE=-PSNAPSHOT" >> $GITHUB_ENV + else + echo "RELEASE=closeAndReleaseSonatypeStagingRepository" >> $GITHUB_ENV fi - - name: Gradle Publish Android Package to GitHub packages repository - run: ./gradlew publishAndroidReleasePublicationToGithubPackagesRepository -PremotePublication=true -Pandroid=true ${{ env.PUB_MODE }} + - if: ${{ inputs.maven_publish == true }} + name: Gradle Publish Android Package to Maven Central repository + run: | + ./gradlew publishAndroidReleasePublicationToSonatypeRepository ${{ env.RELEASE }} --info -PremotePublication=true -Pandroid=true ${{ env.PUB_MODE }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ORG_OSSRH_USERNAME: ${{ secrets.ORG_OSSRH_USERNAME }} + ORG_OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} ORG_GPG_KEY_ID: ${{ secrets.ORG_GPG_KEY_ID }} ORG_GPG_SUBKEY_ID: ${{ secrets.ORG_GPG_SUBKEY_ID }} ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} - - name: Gradle Publish Android Package to Maven Central repository - run: ./gradlew publishAndroidReleasePublicationToMavenCentralRepository -PremotePublication=true -Pandroid=true ${{ env.PUB_MODE }} + - if: ${{ inputs.github_publish == true }} + name: Gradle Publish Android Package to GitHub packages repository + run: ./gradlew publishAndroidReleasePublicationToGithubPackagesRepository ${{ env.RELEASE }} --info -PremotePublication=true -Pandroid=true ${{ env.PUB_MODE }} env: - ORG_OSSRH_USERNAME: ${{ secrets.ORG_OSSRH_USERNAME }} - ORG_OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ORG_GPG_KEY_ID: ${{ secrets.ORG_GPG_KEY_ID }} ORG_GPG_SUBKEY_ID: ${{ secrets.ORG_GPG_SUBKEY_ID }} ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} + + - name: "Upload gradle problems report" + if: always() + uses: actions/upload-artifact@v4 + with: + name: problem-reports-${{ github.job }}.zip + path: ${{ github.workspace }}/build/reports/problems/ diff --git a/.github/workflows/publish-dokka.yml b/.github/workflows/publish-dokka.yml index d65e8f37..87e75f3c 100644 --- a/.github/workflows/publish-dokka.yml +++ b/.github/workflows/publish-dokka.yml @@ -26,7 +26,7 @@ jobs: ref: ${{ inputs.branch }} - name: Build doc - run: gradle dokkaJavadoc + run: gradle dokkaGenerate - name: Deploy doc if: ${{ inputs.live-run || false }} diff --git a/.github/workflows/publish-jvm.yml b/.github/workflows/publish-jvm.yml index b2378a78..ab37d708 100644 --- a/.github/workflows/publish-jvm.yml +++ b/.github/workflows/publish-jvm.yml @@ -12,7 +12,22 @@ on: description: Target branch type: string required: false + github_publish: + type: boolean + required: false + default: true + maven_publish: + type: boolean + required: false + default: true workflow_dispatch: + inputs: + github_publish: + description: 'Publish to github packages' + default: "true" + maven_publish: + description: 'Publish to Maven Central' + default: "true" env: CARGO_TERM_COLOR: always @@ -74,7 +89,7 @@ jobs: shell: bash run: | case ${{ matrix.job.target }} in - *-linux-gnu*) cargo +stable install cargo-deb --locked;; + *-linux-gnu*) cargo +stable install cargo-deb --locked ;; esac case ${{ matrix.job.target }} in @@ -173,24 +188,35 @@ jobs: run: | if [[ "${{ inputs.snapshot }}" == "true" ]]; then echo "PUB_MODE=-PSNAPSHOT" >> $GITHUB_ENV + else + echo "RELEASE=closeAndReleaseSonatypeStagingRepository" >> $GITHUB_ENV fi - - name: Gradle Publish JVM Package to GitHub packages repository - run: ./gradlew publishJvmPublicationToGithubPackagesRepository -PremotePublication=true ${{ env.PUB_MODE }} + - if: ${{ inputs.maven_publish == true }} + name: Gradle Publish JVM Package to Maven Central repository + run: | + ./gradlew publishJvmPublicationToSonatypeRepository ${{ env.RELEASE }} --info -PremotePublication=true ${{ env.PUB_MODE }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ORG_OSSRH_USERNAME: ${{ secrets.ORG_OSSRH_USERNAME }} + ORG_OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} ORG_GPG_KEY_ID: ${{ secrets.ORG_GPG_KEY_ID }} ORG_GPG_SUBKEY_ID: ${{ secrets.ORG_GPG_SUBKEY_ID }} ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} - - - name: Gradle Publish JVM Package to Maven Central repository - run: ./gradlew publishJvmPublicationToMavenCentralRepository -PremotePublication=true ${{ env.PUB_MODE }} + - if: ${{ inputs.github_publish == true }} + name: Gradle Publish JVM Package to GitHub packages repository + run: ./gradlew publishJvmPublicationToGithubPackagesRepository ${{ env.RELEASE }} --info -PremotePublication=true ${{ env.PUB_MODE }} env: - ORG_OSSRH_USERNAME: ${{ secrets.ORG_OSSRH_USERNAME }} - ORG_OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ORG_GPG_KEY_ID: ${{ secrets.ORG_GPG_KEY_ID }} ORG_GPG_SUBKEY_ID: ${{ secrets.ORG_GPG_SUBKEY_ID }} ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} + + - name: "Upload gradle problems report" + if: always() + uses: actions/upload-artifact@v4 + with: + name: problem-reports-${{ github.job }}.zip + path: ${{ github.workspace }}/build/reports/problems/ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bca02dc5..44b0223e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -94,14 +94,14 @@ jobs: publish-dokka: name: Publish documentation - needs: tag + needs: [tag, publish-android, publish-jvm] uses: ./.github/workflows/publish-dokka.yml with: live-run: ${{ inputs.live-run || false }} branch: ${{ needs.tag.outputs.branch }} publish-github: - needs: tag + needs: [tag, publish-android, publish-jvm] runs-on: macos-latest steps: - uses: eclipse-zenoh/ci/publish-crates-github@main diff --git a/build.gradle.kts b/build.gradle.kts index 6e697866..9a173f47 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,9 +12,6 @@ // ZettaScale Zenoh Team, // -val zenohGroup = "io.zenoh" -val zenohVersion = file("version.txt").readText() - buildscript { repositories { google() @@ -32,15 +29,34 @@ plugins { id("org.jetbrains.kotlin.android") version "1.9.10" apply false id("org.jetbrains.kotlin.multiplatform") version "1.9.0" apply false id("org.mozilla.rust-android-gradle.rust-android") version "0.9.6" apply false - id("org.jetbrains.dokka") version "1.9.10" apply false + id("org.jetbrains.dokka-javadoc") version "2.0.0" apply false id("com.adarshr.test-logger") version "3.2.0" apply false kotlin("plugin.serialization") version "1.9.0" apply false + id("io.github.gradle-nexus.publish-plugin") version "2.0.0" } -subprojects { - group = zenohGroup - version = zenohVersion +group = "org.eclipse.zenoh" + +val baseVersion = file("version.txt").readText().trim() +version = if (project.hasProperty("SNAPSHOT")) { + "$baseVersion-SNAPSHOT" +} else { + baseVersion +} + +nexusPublishing { + repositories { + sonatype { + nexusUrl = uri("https://oss.sonatype.org/service/local/") + snapshotRepositoryUrl = uri("https://oss.sonatype.org/content/repositories/snapshots/") + username = System.getenv("ORG_OSSRH_USERNAME") + password = System.getenv("ORG_OSSRH_PASSWORD") + } + } +} + +subprojects { repositories { google() mavenCentral() diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..b962a081 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers diff --git a/zenoh-java/build.gradle.kts b/zenoh-java/build.gradle.kts index 2e22e887..51ccc9f6 100644 --- a/zenoh-java/build.gradle.kts +++ b/zenoh-java/build.gradle.kts @@ -18,7 +18,7 @@ plugins { kotlin("multiplatform") kotlin("plugin.serialization") id("com.adarshr.test-logger") - id("org.jetbrains.dokka") + id("org.jetbrains.dokka-javadoc") `maven-publish` signing } @@ -96,11 +96,19 @@ kotlin { } } + val javadocJar by tasks.registering(Jar::class) { + dependsOn("dokkaGenerate") + archiveClassifier.set("javadoc") + from("${buildDir}/dokka/html") + } + publishing { publications.withType { groupId = "org.eclipse.zenoh" artifactId = "zenoh-java" - version = project.version.toString() + if (project.hasProperty("SNAPSHOT")) "-SNAPSHOT" else "" + version = rootProject.version.toString() + + artifact(javadocJar) pom { name.set("Zenoh Java") @@ -142,18 +150,6 @@ kotlin { password = System.getenv("GITHUB_TOKEN") } } - maven { - name = "MavenCentral" - url = uri(if (project.hasProperty("SNAPSHOT")) - "https://oss.sonatype.org/content/repositories/snapshots/" - else - "https://oss.sonatype.org/service/local/staging/deploy/maven2/" - ) - credentials { - username = System.getenv("ORG_OSSRH_USERNAME") - password = System.getenv("ORG_OSSRH_PASSWORD") - } - } } } } From 6bcd62b32e3343a876a1fc32410a53aaec468cb5 Mon Sep 17 00:00:00 2001 From: Darius Maitia Date: Tue, 28 Jan 2025 15:57:37 -0300 Subject: [PATCH 2/5] Maven publications Sync2: removing deprecated github publication stuff & adding maven publish variable to the workflows --- .github/workflows/publish-android.yml | 17 ----------------- .github/workflows/publish-jvm.yml | 17 ----------------- .github/workflows/release.yml | 6 ++++++ zenoh-java/build.gradle.kts | 13 +------------ 4 files changed, 7 insertions(+), 46 deletions(-) diff --git a/.github/workflows/publish-android.yml b/.github/workflows/publish-android.yml index 7e20f6ad..64379fe8 100644 --- a/.github/workflows/publish-android.yml +++ b/.github/workflows/publish-android.yml @@ -12,19 +12,12 @@ on: description: Target branch type: string required: false - github_publish: - type: boolean - required: false - default: true maven_publish: type: boolean required: false default: true workflow_dispatch: inputs: - github_publish: - description: 'Publish to github packages' - default: true maven_publish: description: 'Publish to Maven Central' default: true @@ -99,16 +92,6 @@ jobs: ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} - - if: ${{ inputs.github_publish == true }} - name: Gradle Publish Android Package to GitHub packages repository - run: ./gradlew publishAndroidReleasePublicationToGithubPackagesRepository ${{ env.RELEASE }} --info -PremotePublication=true -Pandroid=true ${{ env.PUB_MODE }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - ORG_GPG_KEY_ID: ${{ secrets.ORG_GPG_KEY_ID }} - ORG_GPG_SUBKEY_ID: ${{ secrets.ORG_GPG_SUBKEY_ID }} - ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} - ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} - - name: "Upload gradle problems report" if: always() uses: actions/upload-artifact@v4 diff --git a/.github/workflows/publish-jvm.yml b/.github/workflows/publish-jvm.yml index ab37d708..d7ac8530 100644 --- a/.github/workflows/publish-jvm.yml +++ b/.github/workflows/publish-jvm.yml @@ -12,19 +12,12 @@ on: description: Target branch type: string required: false - github_publish: - type: boolean - required: false - default: true maven_publish: type: boolean required: false default: true workflow_dispatch: inputs: - github_publish: - description: 'Publish to github packages' - default: "true" maven_publish: description: 'Publish to Maven Central' default: "true" @@ -204,16 +197,6 @@ jobs: ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} - - if: ${{ inputs.github_publish == true }} - name: Gradle Publish JVM Package to GitHub packages repository - run: ./gradlew publishJvmPublicationToGithubPackagesRepository ${{ env.RELEASE }} --info -PremotePublication=true ${{ env.PUB_MODE }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - ORG_GPG_KEY_ID: ${{ secrets.ORG_GPG_KEY_ID }} - ORG_GPG_SUBKEY_ID: ${{ secrets.ORG_GPG_SUBKEY_ID }} - ORG_GPG_PRIVATE_KEY: ${{ secrets.ORG_GPG_PRIVATE_KEY }} - ORG_GPG_PASSPHRASE: ${{ secrets.ORG_GPG_PASSPHRASE }} - - name: "Upload gradle problems report" if: always() uses: actions/upload-artifact@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 44b0223e..5e001b02 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,6 +34,10 @@ on: type: string description: Release branch required: false + maven_publish: + type: boolean + description: Publish the package to Maven Central + required: false jobs: tag: @@ -75,6 +79,7 @@ jobs: with: snapshot: ${{ !(inputs.live-run || false) }} branch: ${{ needs.tag.outputs.branch }} + maven_publish: ${{ !(inputs.maven_publish || true )}} permissions: contents: read packages: write @@ -87,6 +92,7 @@ jobs: with: snapshot: ${{ !(inputs.live-run || false) }} branch: ${{ needs.tag.outputs.branch }} + maven_publish: ${{ !(inputs.maven_publish || true )}} permissions: contents: read packages: write diff --git a/zenoh-java/build.gradle.kts b/zenoh-java/build.gradle.kts index 51ccc9f6..74c2b6d3 100644 --- a/zenoh-java/build.gradle.kts +++ b/zenoh-java/build.gradle.kts @@ -26,7 +26,7 @@ plugins { val androidEnabled = project.findProperty("android")?.toString()?.toBoolean() == true val release = project.findProperty("release")?.toString()?.toBoolean() == true -// If the publication is meant to be done on a remote repository (GitHub packages or Maven central). +// If the publication is meant to be done on a remote repository (Maven central). // Modifying this property will affect the release workflows! val isRemotePublication = project.findProperty("remotePublication")?.toString()?.toBoolean() == true @@ -140,17 +140,6 @@ kotlin { } } } - - repositories { - maven { - name = "GithubPackages" - url = uri("https://maven.pkg.github.com/eclipse-zenoh/zenoh-java") - credentials { - username = System.getenv("GITHUB_ACTOR") - password = System.getenv("GITHUB_TOKEN") - } - } - } } } From 9a99aa877e0d59839cd25a0e61644cbd017a4a3f Mon Sep 17 00:00:00 2001 From: Darius Maitia Date: Wed, 29 Jan 2025 10:20:02 -0300 Subject: [PATCH 3/5] Maven publications Sync3: Removing workflow dispatch from jvm and android publication workflows --- .github/workflows/publish-android.yml | 5 ----- .github/workflows/publish-jvm.yml | 5 ----- 2 files changed, 10 deletions(-) diff --git a/.github/workflows/publish-android.yml b/.github/workflows/publish-android.yml index 64379fe8..cc25163b 100644 --- a/.github/workflows/publish-android.yml +++ b/.github/workflows/publish-android.yml @@ -16,11 +16,6 @@ on: type: boolean required: false default: true - workflow_dispatch: - inputs: - maven_publish: - description: 'Publish to Maven Central' - default: true env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/publish-jvm.yml b/.github/workflows/publish-jvm.yml index d7ac8530..dab6a9c5 100644 --- a/.github/workflows/publish-jvm.yml +++ b/.github/workflows/publish-jvm.yml @@ -16,11 +16,6 @@ on: type: boolean required: false default: true - workflow_dispatch: - inputs: - maven_publish: - description: 'Publish to Maven Central' - default: "true" env: CARGO_TERM_COLOR: always From 7dd27cf0bac4cb09e8fa4cd0ec3fc5651e6a128b Mon Sep 17 00:00:00 2001 From: Darius Maitia Date: Wed, 29 Jan 2025 12:44:47 -0300 Subject: [PATCH 4/5] Fix cargo relative path --- .github/workflows/ci.yml | 2 +- examples/build.gradle.kts | 2 +- zenoh-java/build.gradle.kts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0b186734..db7ca783 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-13] + os: [ubuntu-latest, macos-latest] steps: - uses: actions/checkout@v4 diff --git a/examples/build.gradle.kts b/examples/build.gradle.kts index baae7d53..dc5684d9 100644 --- a/examples/build.gradle.kts +++ b/examples/build.gradle.kts @@ -91,6 +91,6 @@ tasks { tasks.register("CompileZenohJNI") { project.exec { - commandLine("cargo", "build", "--release", "--manifest-path", "./zenoh-jni/Cargo.toml") + commandLine("cargo", "build", "--release", "--manifest-path", "../zenoh-jni/Cargo.toml") } } diff --git a/zenoh-java/build.gradle.kts b/zenoh-java/build.gradle.kts index 74c2b6d3..123d7499 100644 --- a/zenoh-java/build.gradle.kts +++ b/zenoh-java/build.gradle.kts @@ -189,7 +189,7 @@ fun buildZenohJNI(mode: BuildMode = BuildMode.DEBUG) { } val result = project.exec { - commandLine(*(cargoCommand.toTypedArray()), "--manifest-path", "./zenoh-jni/Cargo.toml") + commandLine(*(cargoCommand.toTypedArray()), "--manifest-path", "../zenoh-jni/Cargo.toml") } if (result.exitValue != 0) { From 2d3dfb99a1b8136f51ac28e9f55d40a2d2de19cb Mon Sep 17 00:00:00 2001 From: Darius Maitia Date: Wed, 29 Jan 2025 12:52:16 -0300 Subject: [PATCH 5/5] Disabling dokka migration helpers and migration message --- gradle.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b962a081..5c311496 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,2 @@ -org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers +org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled +org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true