diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 09cbfa9cd..e0a3c1854 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -127,28 +127,20 @@ jobs: platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-${{ matrix.RENDERER }}-${{ env.buildtype }}-${{ needs.android-create-release.outputs.version_tag }}.aar platform/android/build/debug-symbols-maplibre-android-${{ matrix.RENDERER }}-${{ env.buildtype }}-${{ needs.android-create-release.outputs.version_tag }}.tar.gz - - name: Prepare MavenCentral release - env: - GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }} - run: | - echo "${GPG_KEY_CONTENTS}" | base64 -d > signing-key.gpg - shell: bash - - name: Publish to MavenCentral run: | renderer=${{ matrix.RENDERER }} if [ "$renderer" = "opengl" ]; then - ./gradlew :MapLibreAndroid:publishOpengl${{ env.buildtype }}PublicationToSonatypeRepository - ./gradlew :MapLibreAndroid:publishDefault${{ env.buildtype }}PublicationToSonatypeRepository + ./gradlew :MapLibreAndroid:publishOpengl${{ env.buildtype }}PublicationToMavenCentralRepository + ./gradlew :MapLibreAndroid:publishDefault${{ env.buildtype }}PublicationToMavenCentralRepository else - ./gradlew :MapLibreAndroid:publishVulkan${{ env.buildtype }}PublicationToSonatypeRepository + ./gradlew :MapLibreAndroid:publishVulkan${{ env.buildtype }}PublicationToMavenCentralRepository fi env: - MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }} - MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} - SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} - SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }} - SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }} + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_PRIVATE_KEY }} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }} finilize-release: runs-on: ubuntu-latest @@ -170,13 +162,9 @@ jobs: distribution: "temurin" java-version: "17" - - name: Close Sonatype staging repository - run: ./gradlew closeSonatypeStagingRepository - working-directory: platform/android - env: - MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }} - MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} - SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }} + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v4 + with: + node-version-file: ".nvmrc" - run: npm install working-directory: . diff --git a/platform/android/build.gradle.kts b/platform/android/build.gradle.kts index a992c50ae..0915ac305 100644 --- a/platform/android/build.gradle.kts +++ b/platform/android/build.gradle.kts @@ -1,21 +1,6 @@ plugins { - alias(libs.plugins.nexusPublishPlugin) alias(libs.plugins.kotlinter) apply false alias(libs.plugins.kotlinAndroid) apply false id("com.jaredsburrows.license") version "0.9.8" apply false id("maplibre.dependencies") - id("maplibre.publish-root") -} - - -nexusPublishing { - repositories { - sonatype { - stagingProfileId.set(extra["sonatypeStagingProfileId"] as String?) - username.set(extra["mavenCentralUsername"] as String?) - password.set(extra["mavenCentralPassword"] as String?) - nexusUrl.set(uri("https://ossrh-staging-api.central.sonatype.com/service/local/")) - snapshotRepositoryUrl.set(uri("https://central.sonatype.com/repository/maven-snapshots/")) - } - } } diff --git a/platform/android/buildSrc/build.gradle.kts b/platform/android/buildSrc/build.gradle.kts index 4cdaa0204..3bbc201d1 100644 --- a/platform/android/buildSrc/build.gradle.kts +++ b/platform/android/buildSrc/build.gradle.kts @@ -11,6 +11,7 @@ repositories { dependencies { implementation("com.vanniktech:gradle-dependency-graph-generator-plugin:0.3.0") + implementation("com.vanniktech:gradle-maven-publish-plugin:0.34.0") implementation("com.android.tools.build:gradle:8.6.0") implementation("com.android.application:com.android.application.gradle.plugin:8.6.0") implementation("commons-collections:commons-collections:3.2.2") diff --git a/platform/android/buildSrc/src/main/kotlin/maplibre.gradle-publish.gradle.kts b/platform/android/buildSrc/src/main/kotlin/maplibre.gradle-publish.gradle.kts index 7d0b157f5..23ddaa253 100644 --- a/platform/android/buildSrc/src/main/kotlin/maplibre.gradle-publish.gradle.kts +++ b/platform/android/buildSrc/src/main/kotlin/maplibre.gradle-publish.gradle.kts @@ -1,3 +1,4 @@ +import org.gradle.api.Task import org.gradle.kotlin.dsl.get import java.util.Locale @@ -5,8 +6,29 @@ plugins { `maven-publish` signing id("com.android.library") + id("com.vanniktech.maven.publish.base") id("maplibre.artifact-settings") - id("maplibre.publish-root") +} + + +afterEvaluate { + mavenPublishing { + publishToMavenCentral() + signAllPublications() + } +} + +// Configure task dependencies after all tasks are created +gradle.projectsEvaluated { + // Explicitly configure publish tasks to depend on their corresponding signing tasks + // This fixes Gradle's implicit dependency validation warnings + // Since some publications may share components (e.g., defaultdebug and opengldebug both use openglDebug), + // we ensure all signing tasks complete before any publish task + tasks.filter { it.name.startsWith("publish") && it.name.endsWith("PublicationToMavenCentralRepository") }.forEach { publishTask -> + tasks.filter { it.name.startsWith("sign") && it.name.endsWith("Publication") }.forEach { signingTask -> + publishTask.dependsOn(signingTask) + } + } } tasks.register("androidJavadocs") { @@ -89,14 +111,6 @@ fun configureMavenPublication( } -// workaround for https://github.com/gradle/gradle/issues/26091#issuecomment-1836156762 -// https://github.com/gradle-nexus/publish-plugin/issues/208 -tasks { - withType { - dependsOn(withType()) - } -} - afterEvaluate { configureMavenPublication("opengl", "defaultrelease", "", "") configureMavenPublication("opengl", "defaultdebug", "-debug", " (Debug)", "Debug") @@ -119,7 +133,3 @@ afterEvaluate { } } } - -signing { - sign(publishing.publications) -} diff --git a/platform/android/buildSrc/src/main/kotlin/maplibre.publish-root.gradle.kts b/platform/android/buildSrc/src/main/kotlin/maplibre.publish-root.gradle.kts deleted file mode 100644 index e70c2a3f0..000000000 --- a/platform/android/buildSrc/src/main/kotlin/maplibre.publish-root.gradle.kts +++ /dev/null @@ -1,6 +0,0 @@ -extra["signing.keyId"] = System.getenv("SIGNING_KEY_ID") -extra["signing.password"] = System.getenv("SIGNING_PASSWORD") -extra["signing.secretKeyRingFile"] = "${projectDir}/../signing-key.gpg" -extra["mavenCentralUsername"] = System.getenv("MAVEN_CENTRAL_USERNAME") -extra["mavenCentralPassword"] = System.getenv("MAVEN_CENTRAL_PASSWORD") -extra["sonatypeStagingProfileId"] = System.getenv("SONATYPE_STAGING_PROFILE_ID")