Publish to Maven Central #10
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: write | |
| 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 | |
| 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.GPRTOKEN }} | |
| 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 | |
| # GitHub Packages へも publish(他モジュールが validated 状態で参照できるようにする) | |
| # 既に同じバージョンが存在する場合は 422 になるのでスキップ | |
| GPR_POM_URL="https://maven.pkg.github.com/MapConductor/android-sdk-core/${GROUP_PATH}/${ARTIFACT_ID}/${local_version}/${ARTIFACT_ID}-${local_version}.pom" | |
| if curl -fsSL -H "Authorization: Bearer ${GITHUB_TOKEN}" "$GPR_POM_URL" > /dev/null 2>&1; then | |
| echo " GitHub Packages already has version ${local_version}; skipping." | |
| else | |
| ./gradlew --no-daemon publishReleasePublicationToGitHubPackagesRepository \ | |
| -Pgpr.user="${GITHUB_ACTOR}" \ | |
| -Pgpr.key="${GITHUB_TOKEN}" | |
| gradle_exit=$? | |
| if [[ $gradle_exit -ne 0 ]]; then | |
| echo "GitHub Packages publish failed with exit code $gradle_exit" | |
| exit $gradle_exit | |
| fi | |
| fi | |
| echo " Will publish local version ${local_version} (remote='${remote_version}')." | |
| # Maven Central Portal へ publish | |
| ./gradlew --no-daemon publishReleasePublicationToCentralPortal | |
| gradle_exit=$? | |
| if [[ $gradle_exit -ne 0 ]]; then | |
| echo "Maven Central publish failed with exit code $gradle_exit" | |
| exit $gradle_exit | |
| fi |