kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
ci(release): check for existing versionCode on Google Play before build (#3320)
rodzic
be2719d365
commit
c1f411b2ad
|
@ -97,9 +97,47 @@ jobs:
|
||||||
echo "exists=false" >> $GITHUB_OUTPUT
|
echo "exists=false" >> $GITHUB_OUTPUT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
check-versioncode-google-play:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: prepare-build-info
|
||||||
|
outputs:
|
||||||
|
exists: ${{ steps.check_versioncode.outputs.exists }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
- name: Setup Fastlane
|
||||||
|
uses: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: '3.2'
|
||||||
|
bundler-cache: true
|
||||||
|
- name: Check if versionCode exists on Google Play Internal Track
|
||||||
|
id: check_versioncode
|
||||||
|
env:
|
||||||
|
VERSION_CODE: ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }}
|
||||||
|
GOOGLE_PLAY_JSON_KEY: ${{ secrets.GOOGLE_PLAY_JSON_KEY }}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
echo "$GOOGLE_PLAY_JSON_KEY" > /tmp/play-store-credentials.json
|
||||||
|
exists=false
|
||||||
|
if bundle exec fastlane supply --help | grep -q -- '--json'; then
|
||||||
|
JSON=$(bundle exec fastlane supply --json_key /tmp/play-store-credentials.json --package_name com.geeksville.mesh --track internal --json || true)
|
||||||
|
if echo "$JSON" | jq -e ".tracks.internal.releases[].versionCodes[] | select(. == ${VERSION_CODE})" >/dev/null 2>&1; then
|
||||||
|
exists=true
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Fallback: use fastlane action output and parse array from stdout
|
||||||
|
OUTFILE=$(mktemp)
|
||||||
|
bundle exec fastlane run google_play_track_version_codes json_key:/tmp/play-store-credentials.json package_name:com.geeksville.mesh track:internal --capture_output | tee "$OUTFILE" || true
|
||||||
|
ARR=$(grep -oE '\\[[^]]*\\]' "$OUTFILE" | head -n1)
|
||||||
|
if echo "$ARR" | tr -d '[] ' | tr ',' '\n' | grep -x "${VERSION_CODE}" >/dev/null 2>&1; then
|
||||||
|
exists=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "exists=${exists}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
release-google:
|
release-google:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [prepare-build-info, prepare-release-environment]
|
needs: [prepare-build-info, prepare-release-environment, check-versioncode-google-play]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
@ -146,12 +184,19 @@ jobs:
|
||||||
bundler-cache: true
|
bundler-cache: true
|
||||||
|
|
||||||
- name: Build and Deploy to Internal Track
|
- name: Build and Deploy to Internal Track
|
||||||
if: needs.prepare-release-environment.outputs.exists == 'false'
|
if: contains(github.ref_name, '-internal') && needs.prepare-release-environment.outputs.exists == 'false' && needs.check-versioncode-google-play.outputs.exists == 'false'
|
||||||
env:
|
env:
|
||||||
VERSION_NAME: ${{ needs.prepare-build-info.outputs.APP_VERSION_NAME }}
|
VERSION_NAME: ${{ needs.prepare-build-info.outputs.APP_VERSION_NAME }}
|
||||||
VERSION_CODE: ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }}
|
VERSION_CODE: ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }}
|
||||||
run: bundle exec fastlane internal
|
run: bundle exec fastlane internal
|
||||||
|
|
||||||
|
- name: Build Google artifacts without upload
|
||||||
|
if: contains(github.ref_name, '-internal') && needs.prepare-release-environment.outputs.exists == 'false' && needs.check-versioncode-google-play.outputs.exists == 'true'
|
||||||
|
env:
|
||||||
|
VERSION_NAME: ${{ needs.prepare-build-info.outputs.APP_VERSION_NAME }}
|
||||||
|
VERSION_CODE: ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }}
|
||||||
|
run: ./gradlew clean bundleGoogleRelease assembleGoogleRelease -Pandroid.injected.version.name=${VERSION_NAME} -Pandroid.injected.version.code=${VERSION_CODE}
|
||||||
|
|
||||||
- name: Determine Fastlane Promotion Lane
|
- name: Determine Fastlane Promotion Lane
|
||||||
id: fastlane_lane
|
id: fastlane_lane
|
||||||
if: "!contains(github.ref_name, '-internal')"
|
if: "!contains(github.ref_name, '-internal')"
|
||||||
|
@ -165,15 +210,21 @@ jobs:
|
||||||
echo "lane=production" >> $GITHUB_OUTPUT
|
echo "lane=production" >> $GITHUB_OUTPUT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
- name: Ensure internal track has version for promotion
|
||||||
|
if: "!contains(github.ref_name, '-internal') && needs.check-versioncode-google-play.outputs.exists != 'true'"
|
||||||
|
run: |
|
||||||
|
echo "::error::Cannot promote: versionCode ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }} not found on Google Play internal track. Run internal build first." >&2
|
||||||
|
exit 1
|
||||||
|
|
||||||
- name: Promote on Google Play
|
- name: Promote on Google Play
|
||||||
if: "steps.fastlane_lane.outputs.lane != ''"
|
if: "steps.fastlane_lane.outputs.lane != '' && needs.check-versioncode-google-play.outputs.exists == 'true'"
|
||||||
env:
|
env:
|
||||||
VERSION_NAME: ${{ needs.prepare-build-info.outputs.APP_VERSION_NAME }}
|
VERSION_NAME: ${{ needs.prepare-build-info.outputs.APP_VERSION_NAME }}
|
||||||
VERSION_CODE: ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }}
|
VERSION_CODE: ${{ needs.prepare-build-info.outputs.APP_VERSION_CODE }}
|
||||||
run: bundle exec fastlane ${{ steps.fastlane_lane.outputs.lane }}
|
run: bundle exec fastlane ${{ steps.fastlane_lane.outputs.lane }}
|
||||||
|
|
||||||
- name: Upload Google AAB artifact
|
- name: Upload Google AAB artifact
|
||||||
if: needs.prepare-release-environment.outputs.exists == 'false'
|
if: needs.prepare-release-environment.outputs.exists == 'false' && contains(github.ref_name, '-internal')
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: google-aab
|
name: google-aab
|
||||||
|
@ -181,7 +232,7 @@ jobs:
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
- name: Upload Google APK artifact
|
- name: Upload Google APK artifact
|
||||||
if: needs.prepare-release-environment.outputs.exists == 'false'
|
if: needs.prepare-release-environment.outputs.exists == 'false' && contains(github.ref_name, '-internal')
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: google-apk
|
name: google-apk
|
||||||
|
@ -189,7 +240,7 @@ jobs:
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
- name: Attest Google artifacts provenance
|
- name: Attest Google artifacts provenance
|
||||||
if: needs.prepare-release-environment.outputs.exists == 'false'
|
if: needs.prepare-release-environment.outputs.exists == 'false' && contains(github.ref_name, '-internal')
|
||||||
uses: actions/attest-build-provenance@v3
|
uses: actions/attest-build-provenance@v3
|
||||||
with:
|
with:
|
||||||
subject-path: |
|
subject-path: |
|
||||||
|
@ -197,9 +248,9 @@ jobs:
|
||||||
app/build/outputs/apk/google/release/app-google-release.apk
|
app/build/outputs/apk/google/release/app-google-release.apk
|
||||||
|
|
||||||
release-fdroid:
|
release-fdroid:
|
||||||
if: needs.prepare-release-environment.outputs.exists == 'false'
|
if: contains(github.ref_name, '-internal') && needs.prepare-release-environment.outputs.exists == 'false' && needs.check-versioncode-google-play.outputs.exists == 'false'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [prepare-build-info, prepare-release-environment]
|
needs: [prepare-build-info, prepare-release-environment, check-versioncode-google-play]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v5
|
||||||
|
@ -254,7 +305,7 @@ jobs:
|
||||||
|
|
||||||
manage-github-release:
|
manage-github-release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [prepare-build-info, prepare-release-environment, release-google, release-fdroid]
|
needs: [prepare-build-info, prepare-release-environment, check-versioncode-google-play, release-google, release-fdroid]
|
||||||
steps:
|
steps:
|
||||||
- name: Download all artifacts
|
- name: Download all artifacts
|
||||||
if: needs.prepare-release-environment.outputs.exists == 'false'
|
if: needs.prepare-release-environment.outputs.exists == 'false'
|
||||||
|
|
Ładowanie…
Reference in New Issue