Android Production
main is the production branch. Every push to main that touches the Android app runs .github/workflows/android-production.yml.
The current production channel is Google Play internal testing for the phone app package:
.github/workflows/android-wear-production.yml pipeline. It builds and signs the Wear App Bundle on main; Play publishing is gated by GOOGLE_PLAY_WEAR_PUBLISH_ENABLED=true because Play Console must first have the Wear form factor configured in Advanced settings.
GitHub secrets and variables
Add these repository secrets before relying onmain as the Android production path:
false until Play Console accepts Wear track edits. The workflow will still build and sign Wear artifacts while publishing is disabled.
To enable Firebase Remote Config in production builds, also add this repository variable:
google-services.json file for package co.sapientic.everything. The workflow writes it into apps/android/app/google-services.json on the runner before Gradle builds the app.
google-services.json is Firebase client configuration, not a production signing or publishing credential. Keep it out of the high-value GitHub secrets used for Play signing and publishing.
ANDROID_RELEASE_KEYSTORE_BASE64 should be the base64 contents of the Play upload keystore file. The workflow decodes it only in the signing job and never commits the keystore.
On Windows, generate the base64 value with:
Play Console setup
Create the app in Play Console with package nameco.sapientic.everything, enroll it in Play App Signing, and create an internal testing tester list.
Enable the Google Play Android Developer API, create a service account, and grant the service account app permission to release to testing tracks. Do not create or store a long-lived JSON key for CI publishing; the workflow requires Workload Identity Federation.
If Google Play reports Package not found, create the app record in Play Console first and complete the initial setup needed for API uploads.
GitHub OIDC setup
Use Workload Identity Federation so GitHub Actions can publish without a long-lived JSON key. The current service account is:sapientic/sapientic and branch refs/heads/main, grants roles/iam.workloadIdentityUser on the Play publishing service account, and writes the GitHub repository variables used by the production workflow.
If the repository still has an old GOOGLE_PLAY_SERVICE_ACCOUNT_JSON secret from earlier publishing setup, delete it after confirming Workload Identity Federation is configured.
Firebase Remote Config setup
In Firebase Console, add or open the Firebase project for Everything, register an Android app with packageco.sapientic.everything, download google-services.json, and store the file contents in the GitHub repository variable FIREBASE_ANDROID_GOOGLE_SERVICES_JSON.
Create a Remote Config parameter named home_screen_json with the server-driven home-screen schema:
sapientic.co.
You can publish the checked-in default schema from the command line after Firebase APIs and service-account permissions are configured:
apps/android/remote-config/home-screen.json run .github/workflows/android-remote-config.yml and publish Remote Config without a Play Store build. The workflow validates the checked-in JSON before Google authentication, then publishes from a no-checkout job so the OAuth token is not exposed to repository scripts.
Versioning
CI sets:main monotonically increasing for Google Play.