- Generated PKCS12 keystore (production-release.jks, alias: upload) - Updated GitHub secrets: KEYSTORE_BASE64/PASSWORD/KEY_ALIAS/KEY_PASSWORD - Added keystores/ to .gitignore - Added distribution/PLAY_CONSOLE_SETUP.md: step-by-step guide to create GCP service account, link to Play Console, first manual upload, and configure PLAY_STORE_SERVICE_ACCOUNT_JSON secret - Installed android-playstore-setup skills (sub-skills) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
Google Play Console Setup — OpenCode Mobile
Package: ai.opencode.mobile
Developer: Vibe Technologies, LLC
Status
- Keystore generated (
keystores/production-release.jks, alias:upload) - GitHub secrets set:
KEYSTORE_BASE64,KEYSTORE_PASSWORD,KEY_ALIAS,KEY_PASSWORD - Google Cloud project created
- Service account created + JSON key downloaded
- Play Developer API enabled
- Service account linked to Play Console
- App created in Play Console (
ai.opencode.mobile) - First AAB manually uploaded (internal track)
- GitHub secret set:
PLAY_STORE_SERVICE_ACCOUNT_JSON
Step 1: Create Google Cloud Project
- Go to: https://console.cloud.google.com/
- "Select a project" → "New Project"
- Name:
opencode-mobile-deploy - Click "Create"
Step 2: Create Service Account
- IAM & Admin → Service Accounts
- "Create Service Account"
- Name:
playstore-deploy - Description:
Automated Play Store deployment for ai.opencode.mobile - "Create and Continue" → skip role → "Done"
Step 3: Download JSON Key
- Click service account → "Keys" tab
- "Add Key" → "Create new key" → JSON → "Create"
- File downloads automatically — save to Bitwarden as
PLAY_STORE_SERVICE_ACCOUNT_JSON - NEVER commit to git
Step 4: Enable Play Developer API
- APIs & Services → Library
- Search:
Google Play Android Developer API - Click "Enable"
Step 5: Link Cloud Project to Play Console
- https://play.google.com/console/
- All apps → (select
ai.opencode.mobile) - Setup → API access
- "Link a Google Cloud project" → select
opencode-mobile-deploy - "Link"
Step 6: Grant Service Account Permissions
- Play Console → Setup → API access → Service accounts
- Find
playstore-deploy@...→ "Grant access" - Check: "Release to production, exclude devices, and use Play App Signing"
- "Apply" → "Invite user"
Step 7: First Manual Upload (REQUIRED before CI can deploy)
Google Play requires at least one manual upload before automated CI uploads work.
# Build AAB locally (in the opencode-mobile repo)
cd android
RELEASE_STORE_FILE=../keystores/production-release.jks \
RELEASE_STORE_PASSWORD=$(cat ../keystores/KEYSTORE_INFO.txt | grep "Store Password:" | head -1 | awk '{print $NF}') \
RELEASE_KEY_ALIAS=upload \
RELEASE_KEY_PASSWORD=$(cat ../keystores/KEYSTORE_INFO.txt | grep "Store Password:" | head -1 | awk '{print $NF}') \
./gradlew bundleRelease
Then in Play Console:
- Internal testing → "Create new release"
- Upload
android/app/build/outputs/bundle/release/app-release.aab - Complete store listing (title, description, icon)
- Complete app content declarations
- "Save and publish"
Step 8: Add Service Account JSON to GitHub
# After downloading the JSON key from Google Cloud:
cat /path/to/service-account.json | \
gh secret set PLAY_STORE_SERVICE_ACCOUNT_JSON --repo dzianisv/opencode-mobile
Step 9: Test CI Deployment
Trigger workflow manually:
gh workflow run publish-play-store.yml --repo dzianisv/opencode-mobile
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
Tag number over 30 is not supported |
Corrupt keystore | ✅ Fixed — new PKCS12 keystore generated |
Package not found |
App not in Play Console | Complete Step 7 (first manual upload) |
Permission denied for service account |
Permissions not propagated | Wait 5-10 min after Step 6 |
serviceAccountJsonPlainText invalid |
Wrong JSON format | Use raw JSON, not base64 |