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: read | |
| jobs: | |
| publish: | |
| runs-on: ubuntu-latest | |
| env: | |
| OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} | |
| OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} | |
| GPR_USER: ${{ secrets.GPR_USER }} | |
| GPR_TOKEN: ${{ secrets.GPR_TOKEN }} | |
| 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: Fetch HERE SDK mock artifact | |
| run: | | |
| mkdir -p libs | |
| target_path="libs/heresdk-explore-mock-4.23.2.0.210004.jar" | |
| echo "Downloading HERE SDK mock artifact to $target_path" | |
| curl --fail --show-error --silent --location \ | |
| -u "$GPR_USER:$GPR_TOKEN" \ | |
| -o "$target_path" \ | |
| "https://raw.githubusercontent.com/MapConductor/here-sdk-mocks/main/heresdk-explore-mock-4.23.2.0.210004.jar" | |
| if [ ! -s "$target_path" ]; then | |
| echo "Failed to download HERE SDK mock artifact" | |
| exit 1 | |
| fi | |
| - name: Build core and compose locally | |
| run: | | |
| # このモジュールは単体ビルドだと com.mapconductor:compose を座標で解決する | |
| # (build.gradle.kts の findProject 分岐)。compose はさらに core に依存するので、 | |
| # core -> mavenLocal を有効化 -> compose の順に積む。 | |
| # **compose を積まないと依存解決で落ちる。** Compose 層を切り出す前の | |
| # ワークフローは core だけを clone していた。 | |
| 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 | |
| git clone --depth 1 https://github.com/MapConductor/android-sdk-compose.git _compose | |
| cd _compose | |
| ./gradlew --no-daemon publishToMavenLocal | |
| cd .. | |
| - 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-here" | |
| 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 publishAllPublicationsToCentralPortal | |
| gradle_exit=$? | |
| if [[ $gradle_exit -ne 0 ]]; then | |
| echo "Gradle publish failed with exit code $gradle_exit" | |
| exit $gradle_exit | |
| fi |