Skip to content

Publish to Maven Central #5

Publish to Maven Central

Publish to Maven Central #5

name: Publish to Maven Central
on:
workflow_dispatch:
permissions:
contents: 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: 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 }}
run: |
set +e
set -uo pipefail
GROUP_ID="com.mapconductor"
GROUP_PATH="${GROUP_ID//./\/}"
ARTIFACT_ID="core"
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