publish-play-store.yml caches android/build + intermediates with a restore-keys prefix fallback. After the package rename, that fallback restored a generated autolinking tree (ReactNativeApplicationEntryPoint.java) referencing the OLD package ai.opencode.mobile.BuildConfig, so compileReleaseJavaWithJavac failed. Delete generated + intermediates before prebuild so they regenerate for cc.agentlabs.opencode. Build.yml has no Gradle cache, which is why it built the new package fine. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
105 lines
3.8 KiB
YAML
105 lines
3.8 KiB
YAML
name: Publish to Google Play Store
|
|
|
|
on:
|
|
release:
|
|
types: [published]
|
|
push:
|
|
tags: ["v*"]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
publish:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
EXPO_PUBLIC_SENTRY_DSN: ${{ secrets.EXPO_PUBLIC_SENTRY_DSN }}
|
|
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
|
|
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
|
|
SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 20
|
|
cache: npm
|
|
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: temurin
|
|
java-version: 17
|
|
|
|
- name: Setup Android SDK
|
|
uses: android-actions/setup-android@v4
|
|
|
|
- name: Cache Gradle
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
android/.gradle
|
|
key: ${{ runner.os }}-gradle-${{ hashFiles('android/**/*.gradle*', 'android/gradle/wrapper/gradle-wrapper.properties') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gradle-
|
|
|
|
- name: Cache Android build outputs
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: |
|
|
android/app/build/intermediates
|
|
android/build
|
|
android/app/.cxx
|
|
key: ${{ runner.os }}-android-build-${{ hashFiles('package-lock.json', 'android/**/*.gradle*') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-android-build-
|
|
|
|
- name: Install dependencies
|
|
run: npm install --legacy-peer-deps
|
|
|
|
- name: Bump android.versionCode in app.json
|
|
# Play Store rejects duplicate versionCodes, so derive a monotonic value
|
|
# from github.run_number. expo prebuild reads this into build.gradle.
|
|
run: |
|
|
node -e "const f='app.json';const j=require('./'+f);j.expo.android=j.expo.android||{};j.expo.android.versionCode=${{ github.run_number }};require('fs').writeFileSync(f,JSON.stringify(j,null,2)+'\n')"
|
|
echo "versionCode now: $(node -p "require('./app.json').expo.android.versionCode")"
|
|
|
|
- name: Purge stale generated sources
|
|
# The Android build cache (restore-keys prefix fallback) can restore a
|
|
# generated autolinking tree from a previous package id. Gradle then
|
|
# reuses ReactNativeApplicationEntryPoint.java referencing the OLD
|
|
# package (ai.opencode.mobile.BuildConfig) and compileReleaseJavaWithJavac
|
|
# fails. Delete generated sources so prebuild + Gradle regenerate them
|
|
# for the current package (cc.agentlabs.opencode).
|
|
run: rm -rf android/app/build/generated android/build/generated android/app/build/intermediates
|
|
|
|
- name: Expo prebuild
|
|
run: npx expo prebuild --platform android --no-install
|
|
|
|
- name: Decode keystore
|
|
run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/release.keystore
|
|
|
|
- name: Build AAB
|
|
working-directory: android
|
|
env:
|
|
RELEASE_STORE_FILE: release.keystore
|
|
RELEASE_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
|
RELEASE_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
|
|
RELEASE_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
|
run: ./gradlew bundleRelease
|
|
|
|
- name: Upload AAB artifact
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: app-release-bundle
|
|
path: android/app/build/outputs/bundle/release/app-release.aab
|
|
|
|
- name: Publish to Play Store
|
|
uses: r0adkll/upload-google-play@e738b9dd8f2476ea806d921b64aacd24f34515a5 # v1.1.5
|
|
with:
|
|
serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_SERVICE_ACCOUNT_JSON }}
|
|
packageName: cc.agentlabs.opencode
|
|
releaseFiles: android/app/build/outputs/bundle/release/app-release.aab
|
|
track: internal
|
|
status: completed
|
|
whatsNewDirectory: distribution/whatsnew
|