gplay-rollout-management
Staged rollout orchestration and monitoring for Google Play releases. Use when implementing gradual release strategies.
What this skill does
# Staged Rollout Management
Use this skill when you need to manage gradual releases on Google Play.
## What is Staged Rollout?
Staged rollout releases your app to a percentage of users, allowing you to:
- Monitor crash rates and reviews before full release
- Catch critical bugs with limited user impact
- Gradually increase distribution as confidence grows
## Start a Staged Rollout
### During initial release
```bash
gplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--rollout 10
```
This releases to 10% of users.
### Promote with rollout
```bash
gplay promote \
--package com.example.app \
--from beta \
--to production \
--rollout 25
```
## Increase Rollout Percentage
```bash
# Increase to 25%
gplay rollout update \
--package com.example.app \
--track production \
--rollout 25
# Increase to 50%
gplay rollout update \
--package com.example.app \
--track production \
--rollout 50
# Increase to 100% (or use complete)
gplay rollout update \
--package com.example.app \
--track production \
--rollout 100
```
## Halt Rollout
Pause distribution if issues are detected:
```bash
gplay rollout halt \
--package com.example.app \
--track production
```
**Effect:**
- Stops further distribution
- Existing users keep the update
- New users don't receive the update
## Resume Rollout
Resume after fixing issues:
```bash
gplay rollout resume \
--package com.example.app \
--track production
```
## Complete Rollout
Release to 100% of users:
```bash
gplay rollout complete \
--package com.example.app \
--track production
```
## Check Rollout Status
```bash
gplay tracks get \
--package com.example.app \
--track production \
| jq '.releases[0].userFraction'
```
## Recommended Rollout Strategy
### Conservative (7-day rollout)
```bash
# Day 1: 10%
gplay release --package com.example.app --track production --bundle app.aab --rollout 10
# Day 2: 25% (monitor crash rate)
gplay rollout update --package com.example.app --track production --rollout 25
# Day 3: 50%
gplay rollout update --package com.example.app --track production --rollout 50
# Day 5: 75%
gplay rollout update --package com.example.app --track production --rollout 75
# Day 7: 100%
gplay rollout complete --package com.example.app --track production
```
### Aggressive (3-day rollout)
```bash
# Day 1: 25%
gplay release --package com.example.app --track production --bundle app.aab --rollout 25
# Day 2: 50%
gplay rollout update --package com.example.app --track production --rollout 50
# Day 3: 100%
gplay rollout complete --package com.example.app --track production
```
### Cautious (for critical apps)
```bash
# Day 1: 5%
gplay release --package com.example.app --track production --bundle app.aab --rollout 5
# Day 2: 10% (monitor carefully)
gplay rollout update --package com.example.app --track production --rollout 10
# Day 3: 25%
gplay rollout update --package com.example.app --track production --rollout 25
# Day 5: 50%
gplay rollout update --package com.example.app --track production --rollout 50
# Day 7: 75%
gplay rollout update --package com.example.app --track production --rollout 75
# Day 10: 100%
gplay rollout complete --package com.example.app --track production
```
## Monitoring During Rollout
### Check crash rate
Use Play Console → Quality → Android vitals
### Monitor reviews
```bash
# Get recent reviews
gplay reviews list \
--package com.example.app \
--paginate \
| jq '.reviews[] | select(.createdTime > "2025-02-05") | {rating, text: .comments[0].userComment.text}'
```
### Filter 1-star reviews
```bash
gplay reviews list \
--package com.example.app \
| jq '.reviews[] | select(.rating == 1) | .comments[0].userComment.text'
```
## Decision Matrix
| Metric | Action |
|--------|--------|
| Crash rate < 1% | Continue rollout |
| Crash rate 1-2% | Halt, investigate |
| Crash rate > 2% | Halt, rollback if possible |
| 1-star reviews spike | Halt, investigate |
| ANR rate spike | Halt, investigate |
| No issues after 24h | Increase rollout |
## Rollback Strategy
Google Play doesn't support automatic rollback, but you can:
### Option 1: Upload hotfix
```bash
# Build hotfix with higher version code
./gradlew bundleRelease
# Release hotfix immediately to 100%
gplay release \
--package com.example.app \
--track production \
--bundle app-hotfix.aab
```
### Option 2: Promote previous version
This requires the previous version still be in beta track:
```bash
gplay promote \
--package com.example.app \
--from beta \
--to production
```
## Best Practices
1. **Always start with <20%** - Catch issues early
2. **Monitor for 24 hours** between increases
3. **Have a hotfix plan** - Be ready to fix critical bugs quickly
4. **Set up alerts** - Monitor crash rates automatically
5. **Test thoroughly in beta** - Reduce production issues
6. **Communicate with users** - Update release notes
7. **Don't rush** - Gradual rollout is for safety
## Common Mistakes to Avoid
❌ **Don't:**
- Jump from 10% to 100% immediately
- Ignore crash rate increases
- Roll out during weekends/holidays (slower monitoring)
- Skip beta testing phase
✅ **Do:**
- Monitor crash rates constantly
- Have team available during rollout
- Prepare hotfix in advance
- Communicate expected timeline to stakeholders
## Automation Example
### CI/CD with automated rollout
```yaml
# .github/workflows/rollout.yml
name: Automated Rollout
on:
schedule:
- cron: '0 9 * * *' # Daily at 9 AM
jobs:
increase-rollout:
runs-on: ubuntu-latest
steps:
- name: Get current rollout
id: current
run: |
CURRENT=$(gplay tracks get --package $PACKAGE | jq -r '.releases[0].userFraction')
echo "fraction=$CURRENT" >> $GITHUB_OUTPUT
- name: Increase rollout
if: steps.current.outputs.fraction < 1.0
run: |
NEW_FRACTION=$(echo "${{ steps.current.outputs.fraction }} + 0.25" | bc)
gplay rollout update --package $PACKAGE --track production --rollout $NEW_FRACTION
```
## Support
For manual rollout control, always use the Google Play Console UI as a backup.
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.