mirror of
https://github.com/tiennm99/loto.git
synced 2026-10-11 03:13:40 +00:00
Internal testing is a separate track and does not count toward the 12-tester, 14-day requirement for production access -- only a closed test does. Releases were landing on internal, so reaching the testers meant promoting each build by hand in the Console. Point tracks: at alpha, the closed track, and update the publishing guide and android README to match. An unknown track id fails the step with the list of valid tracks rather than publishing somewhere unintended, so the id is checked at upload time. Builds up to v0.1.1 remain on the internal track.
97 lines
3.5 KiB
YAML
97 lines
3.5 KiB
YAML
# Tag-driven release. Builds standalone rather than consuming ci.yml
|
|
# artifacts: a tag run has no upstream run to pull from, and a release
|
|
# should be reproducible from the tagged tree alone.
|
|
|
|
name: android / release
|
|
|
|
on:
|
|
push:
|
|
tags: ['v*.*.*']
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
concurrency:
|
|
group: android-release-${{ github.ref }}
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
release:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- uses: ./.github/actions/setup-web
|
|
|
|
# ci.yml does not run on tags, so this is the only gate before signing.
|
|
- name: Test web
|
|
run: npm test
|
|
working-directory: web
|
|
|
|
# Base "" — the APK loads the bundle from the domain root.
|
|
- name: Build web
|
|
run: npm run build
|
|
working-directory: web
|
|
|
|
- uses: ./.github/actions/setup-android
|
|
|
|
- name: Sync web bundle into the native project
|
|
run: npm run sync
|
|
working-directory: android
|
|
|
|
- name: Decode keystore
|
|
env:
|
|
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
|
|
run: printf '%s' "$KEYSTORE_BASE64" | base64 --decode > "$GITHUB_WORKSPACE/keystore.p12"
|
|
|
|
- name: Build signed AAB + APK
|
|
working-directory: android/android
|
|
env:
|
|
LOTO_KEYSTORE_PATH: ${{ github.workspace }}/keystore.p12
|
|
LOTO_KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
|
LOTO_KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
|
|
LOTO_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
|
run: ./gradlew :app:bundleRelease :app:assembleRelease
|
|
|
|
- name: Upload to GitHub Release
|
|
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
|
|
with:
|
|
files: |
|
|
android/android/app/build/outputs/apk/release/*.apk
|
|
android/android/app/build/outputs/bundle/release/*.aab
|
|
|
|
# Auto-publish to Google Play (gated on the service-account secret).
|
|
# Skips silently if PLAY_SERVICE_ACCOUNT_JSON is not configured, so
|
|
# tagging a release before Play setup still produces a GH Release.
|
|
# Uploads to "alpha", the closed-testing track. Internal testing is a
|
|
# separate track and does not count toward the 12-tester requirement
|
|
# for production access, so releases have to land here to reach the
|
|
# testers. An unknown track name fails the step with the list of
|
|
# valid tracks rather than publishing somewhere unintended.
|
|
- name: Check Play Store config
|
|
id: play
|
|
env:
|
|
PLAY_SERVICE_ACCOUNT_JSON: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }}
|
|
run: |
|
|
if [ -n "$PLAY_SERVICE_ACCOUNT_JSON" ]; then
|
|
echo "configured=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "configured=false" >> "$GITHUB_OUTPUT"
|
|
echo "::notice::PLAY_SERVICE_ACCOUNT_JSON not set; skipping Play Store upload."
|
|
fi
|
|
|
|
- name: Upload to Google Play (closed testing track)
|
|
if: steps.play.outputs.configured == 'true'
|
|
uses: r0adkll/upload-google-play@e738b9dd8f2476ea806d921b64aacd24f34515a5 # v1.1.5
|
|
with:
|
|
serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }}
|
|
packageName: com.miti99.loto
|
|
releaseFiles: android/android/app/build/outputs/bundle/release/*.aab
|
|
tracks: alpha
|
|
status: completed
|
|
# Bumps versionCode automatically? No — must be incremented
|
|
# manually in android/android/app/build.gradle before tagging.
|