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/.github/workflows/publish-android.yml b/.github/workflows/publish-android.yml index d3effc7e..cc25163b 100644 --- a/.github/workflows/publish-android.yml +++ b/.github/workflows/publish-android.yml @@ -12,7 +12,10 @@ on: description: Target branch type: string required: false - workflow_dispatch: + maven_publish: + type: boolean + required: false + default: true env: CARGO_TERM_COLOR: always @@ -68,19 +71,14 @@ 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 }} - 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: Gradle Publish Android Package to Maven Central repository - run: ./gradlew publishAndroidReleasePublicationToMavenCentralRepository -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: ORG_OSSRH_USERNAME: ${{ secrets.ORG_OSSRH_USERNAME }} ORG_OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} @@ -88,3 +86,10 @@ jobs: 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..dab6a9c5 100644 --- a/.github/workflows/publish-jvm.yml +++ b/.github/workflows/publish-jvm.yml @@ -12,7 +12,10 @@ on: description: Target branch type: string required: false - workflow_dispatch: + maven_publish: + type: boolean + required: false + default: true env: CARGO_TERM_COLOR: always @@ -74,7 +77,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,20 +176,14 @@ 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 }} - 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: Gradle Publish JVM Package to Maven Central repository - run: ./gradlew publishJvmPublicationToMavenCentralRepository -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: ORG_OSSRH_USERNAME: ${{ secrets.ORG_OSSRH_USERNAME }} ORG_OSSRH_PASSWORD: ${{ secrets.ORG_OSSRH_PASSWORD }} @@ -194,3 +191,10 @@ jobs: 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..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 @@ -94,14 +100,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/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/gradle.properties b/gradle.properties new file mode 100644 index 00000000..5c311496 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled +org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true diff --git a/zenoh-java/build.gradle.kts b/zenoh-java/build.gradle.kts index 2e22e887..123d7499 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 } @@ -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 @@ -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") @@ -132,29 +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") - } - } - 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") - } - } - } } } @@ -204,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) {