From dbeeb7eceb7fc14cdda21fa290ab964b97fad5ea Mon Sep 17 00:00:00 2001 From: Petr Pokorny Date: Tue, 4 May 2021 19:46:30 +0200 Subject: [PATCH] Migrate from bintray (#77) * Bug fixes & cleanup * Ignoring private files * Bug fixes found during testing + added script to generate pgp key * Added step for closing and releasing staging repository * Update build.gradle Disabling test coverage due to timeouts --- .github/workflows/android-release.yml | 22 ++-- .gitignore | 3 + platform/android/Makefile | 24 ++-- .../android/MapboxGLAndroidSDK/build.gradle | 3 +- platform/android/build.gradle | 26 ++-- .../android/gradle/artifact-settings.gradle | 31 ++--- platform/android/gradle/dependencies.gradle | 13 +- .../gradle/gradle-bintray-maplibre.gradle | 103 --------------- platform/android/gradle/gradle-bintray.gradle | 117 ------------------ .../android/gradle/gradle-gitpackages.gradle | 85 ------------- platform/android/gradle/gradle-publish.gradle | 91 ++++++++++++++ platform/android/gradle/publish-root.gradle | 21 ++++ .../android/scripts/create-signing-key.sh | 30 +++++ 13 files changed, 204 insertions(+), 365 deletions(-) delete mode 100644 platform/android/gradle/gradle-bintray-maplibre.gradle delete mode 100644 platform/android/gradle/gradle-bintray.gradle delete mode 100644 platform/android/gradle/gradle-gitpackages.gradle create mode 100644 platform/android/gradle/gradle-publish.gradle create mode 100644 platform/android/gradle/publish-root.gradle create mode 100755 platform/android/scripts/create-signing-key.sh diff --git a/.github/workflows/android-release.yml b/.github/workflows/android-release.yml index 030b756a7..71536d1d1 100644 --- a/.github/workflows/android-release.yml +++ b/.github/workflows/android-release.yml @@ -179,16 +179,18 @@ jobs: rm -f ${{ steps.prepare_release.outputs.release_notes }} shell: bash - # deploy to github maven repo - - name: Publish package - run: make android-maven-publish + - name: Prepare MavenCentral release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GPG_KEY_CONTENTS: ${{ secrets.GPG_KEY_CONTENTS }} + run: | + echo '$GPG_KEY_CONTENTS' | base64 -d > signing-key.gpg + shell: bash - # deploy to bintray - - name: Publish to Bintray - run: make run-android-upload-to-bintray + - name: Publish to MavenCentral + run: make run-android-publish env: - BINTRAY_USER: ${{ secrets.BINTRAY_USER }} - BINTRAY_API_KEY: ${{ secrets.BINTRAY_API_KEY }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} + OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} + SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} + SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }} + SONATYPE_STAGING_PROFILE_ID: ${{ secrets.SONATYPE_STAGING_PROFILE_ID }} diff --git a/.gitignore b/.gitignore index f834afc94..7c5833a18 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ **/.idea /platform/android/MapboxGLAndroidSDKTestApp/local.properties /new_offline.db +*.gpg +/.vscode +/platform/android/signing-key.text diff --git a/platform/android/Makefile b/platform/android/Makefile index 77df35929..391bfe9e0 100644 --- a/platform/android/Makefile +++ b/platform/android/Makefile @@ -47,6 +47,7 @@ MBGL_ANDROID_STL ?= c++_static SOCKET_TIMEOUT = 360000 CONNECTION_TIMEOUT = 360000 MBGL_ANDROID_GRADLE = ./gradlew --parallel --max-workers=$(JOBS) -Pmapbox.buildtype=$(buildtype) -Pmapbox.stl=$(MBGL_ANDROID_STL) -Dorg.gradle.internal.http.socketTimeout=$(SOCKET_TIMEOUT) -Dorg.gradle.internal.http.connectionTimeout=$(CONNECTION_TIMEOUT) +MBGL_ANDROID_GRADLE_SINGLE_JOB = ./gradlew --parallel --max-workers=1 -Pmapbox.buildtype=$(buildtype) -Pmapbox.stl=$(MBGL_ANDROID_STL) -Dorg.gradle.internal.http.socketTimeout=$(SOCKET_TIMEOUT) -Dorg.gradle.internal.http.connectionTimeout=$(CONNECTION_TIMEOUT) # Lists all devices, and extracts the identifiers, then obtains the ABI for every one. # Some devices return \r\n, so we'll have to remove the carriage return before concatenating. @@ -248,20 +249,10 @@ android-ui-test: gradle/configuration.gradle run-android-test-app-center: appcenter test run espresso --app "Mapbox-mobile/Maps-sdk" --devices "Mapbox-mobile/${devices}" --app-path MapboxGLAndroidSDKTestApp/build/outputs/apk/debug/MapboxGLAndroidSDKTestApp-debug.apk --test-series "master" --locale "en_US" --build-dir MapboxGLAndroidSDKTestApp/build/outputs/apk/androidTest/debug --token ${APPCENTER_ACCESS_TOKEN} -# Uploads the compiled Android SDK to Bintray -.PHONY: run-android-upload-to-bintray -run-android-upload-to-bintray: gradle/configuration.gradle - $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all :MapboxGLAndroidSDK:bintrayUpload - -# Uploads the compiled Android SDK SNAPSHOT to oss.jfrog.org -.PHONY: run-android-upload-to-artifactory -run-android-upload-to-artifactory: gradle/configuration.gradle - $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all :MapboxGLAndroidSDK:artifactoryPublish - -# Uploads the compiled Android SDK to maven github package registry -.PHONY: android-maven-publish -android-maven-publish: gradle/configuration.gradle - $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all :MapboxGLAndroidSDK:publish +# Uploads the compiled Android SDK to Maven Central Staging +.PHONY: run-android-publish +run-android-publish: gradle/configuration.gradle + $(MBGL_ANDROID_GRADLE_SINGLE_JOB) -Pmapbox.abis=all :MapboxGLAndroidSDK:publishReleasePublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository # Dump system graphics information for the test app .PHONY: android-gfxinfo @@ -339,6 +330,11 @@ run-android-nitpick: android-update-vendor android-graph: gradle/configuration.gradle $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=none :MapboxGLAndroidSDK:generateDependencyGraphMapboxLibraries +# Lists tasks +.PHONY: list-tasks +list-tasks: gradle/configuration.gradle + $(MBGL_ANDROID_GRADLE) -Pmapbox.abis=all tasks + #### Miscellaneous targets ##################################################### .PHONY: clean diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index 52358e917..c21331a1d 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -99,11 +99,12 @@ configurations { all*.exclude group: 'commons-logging', module: 'commons-logging' all*.exclude group: 'commons-collections', module: 'commons-collections' } + apply from: "${rootDir}/gradle/gradle-javadoc.gradle" apply from: "${rootDir}/gradle/gradle-checkstyle.gradle" apply from: "${rootDir}/gradle/gradle-dependencies-graph.gradle" apply from: "${rootDir}/gradle/gradle-update-vendor-modules.gradle" apply from: "${rootDir}/gradle/android-nitpick.gradle" -apply from: "${rootDir}/gradle/gradle-bintray-maplibre.gradle" +apply from: "${rootDir}/gradle/gradle-publish.gradle" // Disabled to prevent timeouts // apply from: "${rootDir}/gradle/jacoco-report.gradle" diff --git a/platform/android/build.gradle b/platform/android/build.gradle index 328fc64af..0429589ab 100644 --- a/platform/android/build.gradle +++ b/platform/android/build.gradle @@ -1,7 +1,11 @@ +apply plugin: 'io.github.gradle-nexus.publish-plugin' + buildscript { apply from: "${rootDir}/gradle/dependencies.gradle" repositories { + maven { url "https://plugins.gradle.org/m2/" } + mavenCentral() google() jcenter() } @@ -9,11 +13,9 @@ buildscript { classpath 'com.android.tools.build:gradle:3.6.3' classpath dependenciesList.licensesPlugin classpath dependenciesList.kotlinPlugin - classpath dependenciesList.bintrayPlugin - classpath dependenciesList.artifactoryPlugin - classpath dependenciesList.androidPublishPlugin classpath dependenciesList.jacocoPlugin classpath dependenciesList.mapboxSdkVersions + classpath dependenciesList.gradleNexus } } @@ -22,14 +24,24 @@ allprojects { mavenCentral() google() jcenter() - // For publishing Maps SDK files to Bintray - // maven { url 'https://mapbox.bintray.com/mapbox' } - // Snapshot repository - // maven { url 'https://oss.jfrog.org/artifactory/oss-snapshot-local/' } } apply from: "${rootDir}/gradle/ktlint.gradle" } subprojects { apply from: "${rootDir}/gradle/dependencies.gradle" +} + +apply from: "${rootDir}/gradle/publish-root.gradle" +// Set up Sonatype repository +nexusPublishing { + repositories { + sonatype { + stagingProfileId = sonatypeStagingProfileId + username = ossrhUsername + password = ossrhPassword + nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/")) + snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/")) + } + } } \ No newline at end of file diff --git a/platform/android/gradle/artifact-settings.gradle b/platform/android/gradle/artifact-settings.gradle index 51afd8cde..8adb21b97 100644 --- a/platform/android/gradle/artifact-settings.gradle +++ b/platform/android/gradle/artifact-settings.gradle @@ -1,22 +1,13 @@ ext { - mapboxArtifactGroupId = 'org.maplibre.gl' - mapboxArtifactId = 'android-sdk' - mapboxArtifactTitle = 'MapLibre Maps SDK for Android' - mapboxArtifactDescription = 'MapLibre Maps SDK for Android' - mapboxDeveloperName = 'MapLibre' - mapboxDeveloperId = 'maplibre' - mapboxArtifactUrl = 'https://github.com/maplibre/maplibre-gl-native' - mapboxArtifactVcsUrl = 'https://github.com/maplibre/maplibre-gl-native.git' - mapboxArtifactScmUrl = 'scm:git@github.com:maplibre/maplibre-gl-native.git' - mapboxArtifactLicenseName = 'BSD' - mapboxArtifactLicenseUrl = 'https://opensource.org/licenses/BSD-2-Clause' - mapboxPackageRepository = 'https://maven.pkg.github.com/maptiler/maplibre-gl-native' + mapLibreArtifactGroupId = 'org.maplibre.gl' + mapLibreArtifactId = 'android-sdk' + mapLibreArtifactTitle = 'MapLibre Maps SDK for Android' + mapLibreArtifactDescription = 'MapLibre Maps SDK for Android' + mapLibreDeveloperName = 'MapLibre' + mapLibreDeveloperId = 'maplibre' + mapLibreArtifactUrl = 'https://github.com/maplibre/maplibre-gl-native' + mapLibreArtifactScmUrl = 'scm:git@github.com:maplibre/maplibre-gl-native.git' + mapLibreArtifactLicenseName = 'BSD' + mapLibreArtifactLicenseUrl = 'https://opensource.org/licenses/BSD-2-Clause' versionName = project.hasProperty('VERSION_NAME') ? project.property('VERSION_NAME') : System.getenv('VERSION_NAME') - - mapboxBintrayUserOrg = 'maplibre' - mapboxBintrayRepoName = 'maplibre-gl-native' - mapboxBintrayPackageName = 'org.maplibre.gl:android-sdk' - mapboxBintrayUser = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER') - mapboxBintrayApiKey = project.hasProperty('BINTRAY_API_KEY') ? project.property('BINTRAY_API_KEY') : System.getenv('BINTRAY_API_KEY') - mapboxGpgPassphrase = project.hasProperty('GPG_PASSPHRASE') ? project.property('GPG_PASSPHRASE') : System.getenv('GPG_PASSPHRASE') -} +} \ No newline at end of file diff --git a/platform/android/gradle/dependencies.gradle b/platform/android/gradle/dependencies.gradle index 14ddcacc3..acb0eaf1f 100644 --- a/platform/android/gradle/dependencies.gradle +++ b/platform/android/gradle/dependencies.gradle @@ -29,9 +29,6 @@ ext { okhttp : '3.12.3', kotlin : '1.3.72', licenses : '0.8.80', - bintray : '1.8.5', - artifactory : '4.15.2', - androidPublish : '3.6.2', lint : '26.4.2', gms : '16.0.0', jacoco : '0.8.5', @@ -39,7 +36,8 @@ ext { ktlint : '0.40.0', commonsIO : '2.6', mapboxSdkVersions: '1.0.1', - assertj : "3.11.1" + assertj : "3.11.1", + gradleNexus : "1.1.0" ] dependenciesList = [ @@ -78,9 +76,6 @@ ext { kotlinLib : "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${versions.kotlin}", kotlinPlugin : "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}", licensesPlugin : "com.jaredsburrows:gradle-license-plugin:${versions.licenses}", - bintrayPlugin : "com.jfrog.bintray.gradle:gradle-bintray-plugin:${versions.bintray}", - artifactoryPlugin : "org.jfrog.buildinfo:build-info-extractor-gradle:${versions.artifactory}", - androidPublishPlugin : "digital.wup:android-maven-publish:${versions.androidPublish}", jacocoPlugin : "org.jacoco:org.jacoco.core:${versions.jacoco}", lint : "com.android.tools.lint:lint:${versions.lint}", @@ -88,6 +83,8 @@ ext { lintChecks : "com.android.tools.lint:lint-checks:${versions.lint}", lintTests : "com.android.tools.lint:lint-tests:${versions.lint}", ktlint : "com.pinterest:ktlint:${versions.ktlint}", - mapboxSdkVersions : "com.mapbox.mapboxsdk:mapbox-android-sdk-versions:${versions.mapboxSdkVersions}" + mapboxSdkVersions : "com.mapbox.mapboxsdk:mapbox-android-sdk-versions:${versions.mapboxSdkVersions}", + + gradleNexus : "io.github.gradle-nexus:publish-plugin:${versions.gradleNexus}" ] } diff --git a/platform/android/gradle/gradle-bintray-maplibre.gradle b/platform/android/gradle/gradle-bintray-maplibre.gradle deleted file mode 100644 index 611b292ac..000000000 --- a/platform/android/gradle/gradle-bintray-maplibre.gradle +++ /dev/null @@ -1,103 +0,0 @@ -apply plugin: 'digital.wup.android-maven-publish' -apply plugin: 'maven-publish' -apply plugin: 'com.jfrog.bintray' -apply from: file('../gradle/artifact-settings.gradle') - -version = project.ext.versionName -group = project.ext.mapboxArtifactGroupId - -publishing { - publications { - MapboxMapsSdkPublication(MavenPublication) { - from components.android - groupId this.group - artifactId project.ext.mapboxArtifactId - version this.version - - afterEvaluate { - artifact(androidSourcesJar) - artifact(androidJavadocsJar) - } - - pom.withXml { - final mainNode = asNode() - mainNode.appendNode('name', project.ext.mapboxArtifactTitle) - mainNode.appendNode('description', project.ext.mapboxArtifactTitle) - mainNode.appendNode('url', project.ext.mapboxArtifactUrl) - - final licenseNode = mainNode.appendNode('licenses').appendNode('license') - licenseNode.appendNode('name', project.ext.mapboxArtifactLicenseName) - licenseNode.appendNode('url', project.ext.mapboxArtifactLicenseUrl) - licenseNode.appendNode('distribution', "repo") - - final developerNode = mainNode.appendNode('developers').appendNode('developer') - developerNode.appendNode('id', project.ext.mapboxDeveloperId) - developerNode.appendNode('name', project.ext.mapboxDeveloperName) - - final scmNode = mainNode.appendNode("scm") - scmNode.appendNode("connection", project.ext.mapboxArtifactScmUrl) - scmNode.appendNode("developerConnection", project.ext.mapboxArtifactScmUrl) - scmNode.appendNode("url", project.ext.mapboxArtifactUrl) - } - } - } -} - -bintray { - user = mapboxBintrayUser - key = mapboxBintrayApiKey - publications('MapboxMapsSdkPublication') - publish = true - override = true - pkg { - repo = project.ext.mapboxBintrayRepoName - name = project.ext.mapboxBintrayPackageName - userOrg = project.ext.mapboxBintrayUserOrg - licenses = [project.ext.mapboxArtifactLicenseName] - vcsUrl = project.ext.mapboxArtifactVcsUrl - version { - name = project.ext.versionName - desc = project.ext.mapboxArtifactDescription - released = new Date() - gpg { - sign = true - passphrase = mapboxGpgPassphrase - } - mavenCentralSync { - sync = false - } - } - } -} - -task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java.sourceFiles - classpath = files(android.bootClasspath) - failOnError = false -} - -task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir -} - -task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.sourceFiles -} - -tasks.withType(Javadoc) { - options.addStringOption('encoding', 'UTF-8') - options.addStringOption('docencoding', 'UTF-8') - options.addStringOption('charset', 'UTF-8') -} - -afterEvaluate { project -> - android.libraryVariants.all { variant -> - tasks.androidJavadocs.doFirst { - classpath += files(variant.javaCompile.classpath.files) - } - } -} - - diff --git a/platform/android/gradle/gradle-bintray.gradle b/platform/android/gradle/gradle-bintray.gradle deleted file mode 100644 index e8ace7359..000000000 --- a/platform/android/gradle/gradle-bintray.gradle +++ /dev/null @@ -1,117 +0,0 @@ -apply plugin: 'digital.wup.android-maven-publish' -apply plugin: 'maven-publish' -apply plugin: 'com.jfrog.bintray' -apply plugin: 'com.jfrog.artifactory' -apply from: file('../gradle/artifact-settings.gradle') - -version = project.ext.versionName -group = project.ext.mapboxArtifactGroupId - -publishing { - publications { - MapboxMapsSdkPublication(MavenPublication) { - from components.android - groupId this.group - artifactId project.ext.mapboxArtifactId - version this.version - - afterEvaluate { - artifact(androidSourcesJar) - artifact(androidJavadocsJar) - } - - pom.withXml { - final mainNode = asNode() - mainNode.appendNode('name', project.ext.mapboxArtifactTitle) - mainNode.appendNode('description', project.ext.mapboxArtifactTitle) - mainNode.appendNode('url', project.ext.mapboxArtifactUrl) - - final licenseNode = mainNode.appendNode('licenses').appendNode('license') - licenseNode.appendNode('name', project.ext.mapboxArtifactLicenseName) - licenseNode.appendNode('url', project.ext.mapboxArtifactLicenseUrl) - licenseNode.appendNode('distribution', "repo") - - final developerNode = mainNode.appendNode('developers').appendNode('developer') - developerNode.appendNode('id', project.ext.mapboxDeveloperId) - developerNode.appendNode('name', project.ext.mapboxDeveloperName) - - final scmNode = mainNode.appendNode("scm") - scmNode.appendNode("connection", project.ext.mapboxArtifactScmUrl) - scmNode.appendNode("developerConnection", project.ext.mapboxArtifactScmUrl) - scmNode.appendNode("url", project.ext.mapboxArtifactUrl) - } - } - } -} - -bintray { - user = mapboxBintrayUser - key = mapboxBintrayApiKey - publications('MapboxMapsSdkPublication') - pkg { - repo = project.ext.mapboxBintrayRepoName - name = project.ext.mapboxBintrayPackageName - userOrg = project.ext.mapboxBintrayUserOrg - licenses = [project.ext.mapboxArtifactLicenseName] - vcsUrl = project.ext.mapboxArtifactVcsUrl - publish = false - version { - name = project.ext.versionName - desc = project.ext.mapboxArtifactDescription - released = new Date() - gpg { - sign = true - passphrase = mapboxGpgPassphrase - } - mavenCentralSync { - sync = false - } - } - } -} - -artifactory { - contextUrl = 'http://oss.jfrog.org' - publish { - repository { - repoKey = 'oss-snapshot-local' - username = mapboxBintrayUser - password = mapboxBintrayApiKey - } - defaults { - publications('MapboxMapsSdkPublication') - } - } -} - -task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java.sourceFiles - classpath = files(android.bootClasspath) - failOnError = false -} - -task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir -} - -task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.sourceFiles -} - -tasks.withType(Javadoc) { - options.addStringOption('encoding', 'UTF-8') - options.addStringOption('docencoding', 'UTF-8') - options.addStringOption('charset', 'UTF-8') -} - -afterEvaluate { project -> - android.libraryVariants.all { variant -> - tasks.androidJavadocs.doFirst { - classpath += files(variant.javaCompile.classpath.files) - } - } -} - - diff --git a/platform/android/gradle/gradle-gitpackages.gradle b/platform/android/gradle/gradle-gitpackages.gradle deleted file mode 100644 index e3bb81b67..000000000 --- a/platform/android/gradle/gradle-gitpackages.gradle +++ /dev/null @@ -1,85 +0,0 @@ -apply plugin: 'digital.wup.android-maven-publish' -apply plugin: 'maven-publish' -apply from: file('../gradle/artifact-settings.gradle') - -version = project.ext.versionName -group = project.ext.mapboxArtifactGroupId - -publishing { - publications { - MapboxMapsSdkPublication(MavenPublication) { - from components.android - groupId this.group - artifactId project.ext.mapboxArtifactId - version this.version - - afterEvaluate { - artifact(androidSourcesJar) - artifact(androidJavadocsJar) - } - - pom.withXml { - final mainNode = asNode() - mainNode.appendNode('name', project.ext.mapboxArtifactTitle) - mainNode.appendNode('description', project.ext.mapboxArtifactTitle) - mainNode.appendNode('url', project.ext.mapboxArtifactUrl) - - final licenseNode = mainNode.appendNode('licenses').appendNode('license') - licenseNode.appendNode('name', project.ext.mapboxArtifactLicenseName) - licenseNode.appendNode('url', project.ext.mapboxArtifactLicenseUrl) - licenseNode.appendNode('distribution', "repo") - - final developerNode = mainNode.appendNode('developers').appendNode('developer') - developerNode.appendNode('id', project.ext.mapboxDeveloperId) - developerNode.appendNode('name', project.ext.mapboxDeveloperName) - - final scmNode = mainNode.appendNode("scm") - scmNode.appendNode("connection", project.ext.mapboxArtifactScmUrl) - scmNode.appendNode("developerConnection", project.ext.mapboxArtifactScmUrl) - scmNode.appendNode("url", project.ext.mapboxArtifactUrl) - } - } - } - repositories { - maven { - name = "GitHubPackages" - url = project.ext.mapboxPackageRepository - credentials { - username = System.getenv("GITHUB_ACTOR") - password = System.getenv("GITHUB_TOKEN") - } - } - } -} - -task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java.sourceFiles - classpath = files(android.bootClasspath) - failOnError = false -} - -task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir -} - -task androidSourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.sourceFiles -} - -tasks.withType(Javadoc) { - options.addStringOption('encoding', 'UTF-8') - options.addStringOption('docencoding', 'UTF-8') - options.addStringOption('charset', 'UTF-8') -} - -afterEvaluate { project -> - android.libraryVariants.all { variant -> - tasks.androidJavadocs.doFirst { - classpath += files(variant.javaCompile.classpath.files) - } - } -} - - diff --git a/platform/android/gradle/gradle-publish.gradle b/platform/android/gradle/gradle-publish.gradle new file mode 100644 index 000000000..57d97216a --- /dev/null +++ b/platform/android/gradle/gradle-publish.gradle @@ -0,0 +1,91 @@ +apply plugin: 'maven-publish' +apply plugin: 'signing' +apply from: "${rootDir}/gradle/artifact-settings.gradle" +apply from: "${rootDir}/gradle/publish-root.gradle" + +task androidJavadocs(type: Javadoc) { + source = android.sourceSets.main.java.sourceFiles + classpath = files(android.bootClasspath) + failOnError = false +} + +task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { + archiveClassifier.set('javadoc') + from androidJavadocs.destinationDir +} + +task androidSourcesJar(type: Jar) { + archiveClassifier.set('sources') + from android.sourceSets.main.java.sourceFiles +} + +tasks.withType(Javadoc) { + options.addStringOption('encoding', 'UTF-8') + options.addStringOption('docencoding', 'UTF-8') + options.addStringOption('charset', 'UTF-8') +} + +artifacts { + archives androidSourcesJar + archives androidJavadocsJar +} + + +project.logger.lifecycle(ext["versionName"]) + +version = project.ext.versionName +group = project.ext.mapLibreArtifactGroupId + +afterEvaluate { + publishing { + publications { + release(MavenPublication) { + groupId this.group + artifactId project.ext.mapLibreArtifactId + version this.version + + from components.release + + artifact androidSourcesJar + artifact androidJavadocsJar + + pom { + name = project.ext.mapLibreArtifactTitle + description = project.ext.mapLibreArtifactTitle + url = project.ext.mapLibreArtifactUrl + licenses { + license { + name = project.ext.mapLibreArtifactLicenseName + url = project.ext.mapLibreArtifactLicenseUrl + } + } + developers { + developer { + id = project.ext.mapLibreDeveloperId + name = project.ext.mapLibreDeveloperName + email = 'maplibre@maplibre.org' + } + } + scm { + connection = project.ext.mapLibreArtifactScmUrl + developerConnection = project.ext.mapLibreArtifactScmUrl + url = project.ext.mapLibreArtifactUrl + } + } + } + } + } +} + +afterEvaluate { project -> + android.libraryVariants.all { variant -> + tasks.androidJavadocs.doFirst { + classpath += files(variant.javaCompile.classpath.files) + } + } +} + +signing { + sign publishing.publications +} + diff --git a/platform/android/gradle/publish-root.gradle b/platform/android/gradle/publish-root.gradle new file mode 100644 index 000000000..467ecfa11 --- /dev/null +++ b/platform/android/gradle/publish-root.gradle @@ -0,0 +1,21 @@ +ext["signing.keyId"] = '' +ext["signing.password"] = '' +ext["signing.secretKeyRingFile"] = "${projectDir}/../signing-key.gpg" +ext["ossrhUsername"] = '' +ext["ossrhPassword"] = '' +ext["sonatypeStagingProfileId"] = '' + +File secretPropsFile = project.rootProject.file('local.properties') +if (secretPropsFile.exists()) { + // Read local.properties file first if it exists + Properties p = new Properties() + new FileInputStream(secretPropsFile).withCloseable { is -> p.load(is) } + p.each { name, value -> ext[name] = value } +} else { + // Use system environment variables + ext["ossrhUsername"] = System.getenv('OSSRH_USERNAME') + ext["ossrhPassword"] = System.getenv('OSSRH_PASSWORD') + ext["sonatypeStagingProfileId"] = System.getenv('SONATYPE_STAGING_PROFILE_ID') + ext["signing.keyId"] = System.getenv('SIGNING_KEY_ID') + ext["signing.password"] = System.getenv('SIGNING_PASSWORD') +} diff --git a/platform/android/scripts/create-signing-key.sh b/platform/android/scripts/create-signing-key.sh new file mode 100755 index 000000000..8a2eb9b19 --- /dev/null +++ b/platform/android/scripts/create-signing-key.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail +set -u + +cat >foo < + # Do a commit here, so that we can later print "done" :-) + %commit + %echo done +EOF + +gpg --batch --generate-key foo +rm foo +gpg --list-secret-keys + +# gpg --keyserver hkp://ipv4.pool.sks-keyservers.net --send-keys < your key here - i.e. 6BCC07D1, last 8 characters > +# gpg --keyserver hkps://keys.openpgp.org --send-key 6BCC07D1 +# gpg --export-secret-keys < your key here - i.e. 6BCC07D1, last 8 characters > /Volumes/Src/src/MapTiler/Native/maplibre-gl-native/platform/android/signing-key.gpg +# base64 /Volumes/Src/src/MapTiler/Native/maplibre-gl-native/platform/android/signing-key.gpg > /Volumes/Src/src/MapTiler/Native/maplibre-gl-native/platform/android/signing-key.text \ No newline at end of file