Files
archived-matedroid/.github/workflows/release.yml
Davide Ferrari bd68a9be6d ci: split Play Store upload into internal and production tracks
- Internal testing track: always uploads when secrets are configured
- Production track: only uploads when PLAY_STORE_PRODUCTION_ENABLED var is 'true'

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 12:06:23 +01:00

112 lines
4.1 KiB
YAML

name: Build Release APK
on:
release:
types: [published]
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Setup keystore
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
run: |
if [ -n "$KEYSTORE_BASE64" ]; then
echo "Using release keystore from secrets"
echo "$KEYSTORE_BASE64" | base64 -d > app/release.keystore
else
echo "No keystore secret found, creating debug keystore"
mkdir -p ~/.android
keytool -genkey -v -keystore ~/.android/debug.keystore \
-storepass android -alias androiddebugkey -keypass android \
-keyalg RSA -keysize 2048 -validity 10000 \
-dname "CN=Android Debug,O=Android,C=US"
fi
- name: Build Release APK
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEYSTORE_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: ./gradlew assembleRelease
- name: Build Release AAB (for Play Store)
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEYSTORE_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: ./gradlew bundleRelease
- name: Build Debug APK
run: ./gradlew assembleDebug
- name: Rename APKs
run: |
VERSION=$(grep 'versionName' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/')
mv app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/matedroid-${VERSION}.apk
mv app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/debug/matedroid-${VERSION}-debug.apk
echo "APK_NAME=matedroid-${VERSION}.apk" >> $GITHUB_ENV
echo "APK_NAME_DEBUG=matedroid-${VERSION}-debug.apk" >> $GITHUB_ENV
- name: Upload APKs to release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
files: |
app/build/outputs/apk/release/${{ env.APK_NAME }}
app/build/outputs/apk/debug/${{ env.APK_NAME_DEBUG }}
- name: Upload to Google Play (Internal Testing)
if: github.event_name == 'release' && env.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON != ''
env:
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.matedroid
releaseFiles: app/build/outputs/bundle/release/app-release.aab
track: internal
status: completed
- name: Upload to Google Play (Production)
if: github.event_name == 'release' && env.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON != '' && vars.PLAY_STORE_PRODUCTION_ENABLED == 'true'
env:
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON }}
packageName: com.matedroid
releaseFiles: app/build/outputs/bundle/release/app-release.aab
track: production
status: completed
- name: Upload APKs and AAB as artifacts
if: github.event_name == 'workflow_dispatch'
uses: actions/upload-artifact@v4
with:
name: build-outputs
path: |
app/build/outputs/apk/release/${{ env.APK_NAME }}
app/build/outputs/apk/debug/${{ env.APK_NAME_DEBUG }}
app/build/outputs/bundle/release/app-release.aab