Publish to Maven Central #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Publish to Maven Central | |
| on: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| packages: read | |
| jobs: | |
| publish: | |
| runs-on: ubuntu-latest | |
| env: | |
| OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} | |
| OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: '17' | |
| cache: 'gradle' | |
| - name: Import GPG key | |
| run: | | |
| echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 --decode > "$HOME/secring.gpg" | |
| gpg --batch --import "$HOME/secring.gpg" | |
| - name: Build core locally | |
| run: | | |
| git clone --depth 1 https://github.com/MapConductor/android-sdk-core.git _core | |
| cd _core | |
| ./gradlew --no-daemon publishToMavenLocal | |
| cd .. | |
| mkdir -p "$HOME/.gradle/init.d" | |
| cat > "$HOME/.gradle/init.d/use-local-maven.init.gradle" << 'EOF' | |
| gradle.settingsEvaluated { settings -> | |
| settings.dependencyResolutionManagement.repositories { | |
| mavenLocal() | |
| } | |
| } | |
| EOF | |
| - name: Check version and publish to Maven Central | |
| env: | |
| ORG_GRADLE_PROJECT_ossrh_username: ${{ secrets.OSSRH_USERNAME }} | |
| ORG_GRADLE_PROJECT_ossrh_password: ${{ secrets.OSSRH_PASSWORD }} | |
| ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_PRIVATE_KEY }} | |
| ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_PASSPHRASE }} | |
| GITHUB_ACTOR: ${{ github.actor }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| set +e | |
| set -uo pipefail | |
| GROUP_ID="com.mapconductor" | |
| GROUP_PATH="${GROUP_ID//./\/}" | |
| ARTIFACT_ID="for-mapbox" | |
| local_version=$(grep '^libraryVersion=' gradle.properties | cut -d'=' -f2 | tr -d '\r') | |
| if [[ -z "$local_version" ]]; then | |
| echo "ERROR: Could not read libraryVersion from gradle.properties" | |
| exit 1 | |
| fi | |
| metadata_url="https://repo1.maven.org/maven2/${GROUP_PATH}/${ARTIFACT_ID}/maven-metadata.xml" | |
| echo "Checking ${GROUP_ID}:${ARTIFACT_ID} (local version ${local_version})" | |
| remote_version="" | |
| if curl -fsSL "$metadata_url" -o metadata.xml; then | |
| remote_version=$(grep '<release>' metadata.xml | head -n1 | sed -E 's/.*<release>([^<]+)<\/release>.*/\1/' || true) | |
| if [[ -z "$remote_version" ]]; then | |
| remote_version=$(grep '<version>' metadata.xml | sed -E 's/.*<version>([^<]+)<\/version>.*/\1/' | tail -n1 || true) | |
| fi | |
| rm -f metadata.xml | |
| else | |
| echo " No metadata found on Maven Central (not published yet)." | |
| fi | |
| if [[ -n "$remote_version" && "$local_version" == "$remote_version" ]]; then | |
| echo " Already published (remote version ${remote_version}); skipping." | |
| exit 0 | |
| fi | |
| echo " Will publish local version ${local_version} (remote='${remote_version}')." | |
| ./gradlew --no-daemon publishReleasePublicationToCentralPortal | |
| gradle_exit=$? | |
| if [[ $gradle_exit -ne 0 ]]; then | |
| echo "Gradle publish failed with exit code $gradle_exit" | |
| exit $gradle_exit | |
| fi |