feat(release): target API 36 and upload each tag's bundle to Google Play (M8 step 1) #60
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/m8-google-play"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Step 1 of M8 (
docs/android/PLAN.mditem 9). Docs: RunicGateway/docs#376 (opened alongside).What changes
platforms;android-36. AGP 8.13 still defaults to build-tools 35.0.0.release.ymlalso runsbundleRelease, signed with the same keystore. The.aabgoes on the Gitea release beside the APK, with a line in the changelog footer saying it doesn't install on a phone. This is also where the hand-uploaded first bundle comes from.openssl, using only curl, jq and openssl, with no Gradle plugin. The key comes from the new secretPLAY_SERVICE_ACCOUNT_JSON. While that secret is unset, the step warns and skips. The step runs after the Gitea release, so a Play failure fails the run but never holds back the APK.One choice to check: the AAB is attached to the public Gitea release rather than kept as a private Actions artifact. Nothing in the org uses artifact actions yet, and the bundle is the same signed build as the APK.
How it was checked
PR-gate build passes locally:
testDebugUnitTest lintDebug assembleDebug.I built a release APK and bundle with a throwaway keystore through the CI env vars, since the real keystore isn't on this machine. Both carry the same certificate,
targetSdkVersion 36, versionCode 601.I ran the Play step from
release.ymlinubuntu:latestagainst a mock of the token and Play endpoints. The mock checked the JWT signature against the key's public half. All six cases behaved: success, a rejected token, a refused upload, a refused commit, a mismatched versionCode, and an unset secret. Google's error body is printed, and the key file is removed every time.Walked on an Android 16 emulator (API 36.1): connect, sign in as admin, save notification settings, edge-swipe back, Rust servers, Dashboard. No crash.
The minified release build refuses
httpand survives a TLS round trip.On the
s22_ultraemulator (API 35), the build updates in place and connects.Not walked:
The step-2 internal-track install covers both.
Before CI can upload (by hand):
PLAY_SERVICE_ACCOUNT_JSONsecret.🤖 Generated with Claude Code
https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY