publish / validate
High-level workflow commands that combine multiple operations into a single step.
Commands
| Command | Description |
|---|---|
gpc publish | Validate, upload, and release in one step |
gpc validate | Pre-submission validation checks |
TIP
gpc status — unified app health snapshot (releases + vitals + reviews) — has its own page: status.
gpc publish
End-to-end workflow: validates the bundle, uploads it to a track, sets release notes, and commits the edit.
Synopsis
gpc publish <file> [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--track | string | internal | Target track (internal, alpha, beta, production, or custom) | |
--rollout | number | Staged rollout percentage (1-100) | ||
--notes | string | Release notes text (en-US) | ||
--notes-dir | string | Directory with per-language release notes (<dir>/<lang>.txt) | ||
--name | string | Release name | ||
--mapping | string | Path to ProGuard/R8 mapping file for deobfuscation | ||
--retry-log | string | Write retry log entries to file (JSONL) |
WARNING
--notes and --notes-dir are mutually exclusive. Providing both causes exit code 2.
Example
Upload an AAB to the beta track with release notes:
gpc publish app-release.aab \
--app com.example.myapp \
--track beta \
--notes "Bug fixes and performance improvements" \
--mapping app/build/outputs/mapping/release/mapping.txtUpload with multi-language release notes:
gpc publish app-release.aab \
--app com.example.myapp \
--track production \
--rollout 10 \
--notes-dir ./release-notes/The release-notes/ directory structure:
release-notes/
en-US.txt
ja-JP.txt
de-DE.txtPreview what would happen without executing:
gpc publish app-release.aab --track beta --dry-run{
"dryRun": true,
"command": "publish",
"action": "publish",
"target": "app-release.aab",
"details": {
"track": "beta"
}
}Interactive mode (when no --no-interactive flag is set in a TTY):
gpc publish app-release.aab
# Prompts: Select track, rollout percentage, release notesgpc validate
Run pre-submission validation checks on a bundle file without uploading.
Synopsis
gpc validate <file> [options]Options
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--track | string | Target track to validate against | ||
--mapping | string | Path to ProGuard/R8 mapping file | ||
--notes | string | Release notes text (en-US) | ||
--notes-dir | string | Directory with per-language release notes |
Example
Validate a bundle before uploading:
gpc validate app-release.aabcheck passed message
----------- ------ --------------------------------
file_exists pass File exists
file_type pass Valid AAB file
file_size pass 148.2 MB (under 150 MB limit)
magic_bytes pass Valid ZIP magic bytes
ValidJSON output:
gpc validate app-release.aab --output json{
"valid": true,
"checks": [
{ "name": "file_exists", "passed": true, "message": "File exists" },
{ "name": "file_type", "passed": true, "message": "Valid AAB file" },
{ "name": "file_size", "passed": true, "message": "148.2 MB (under 150 MB limit)" },
{ "name": "magic_bytes", "passed": true, "message": "Valid ZIP magic bytes" }
],
"warnings": []
}Validate with track and notes:
gpc validate app-release.aab \
--track production \
--notes "Version 2.0"Exits with code 0 if valid, code 1 if any check fails.
Related
- status — Unified health snapshot (releases + vitals + reviews)
- releases — Granular release control
- vitals — Quality monitoring
- CI/CD Integration — Automation workflows