Skip to content

publish / validate

High-level workflow commands that combine multiple operations into a single step.

Commands

CommandDescription
gpc publishValidate, upload, and release in one step
gpc validatePre-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

bash
gpc publish <file> [options]

Options

FlagShortTypeDefaultDescription
--trackstringinternalTarget track (internal, alpha, beta, production, or custom)
--rolloutnumberStaged rollout percentage (1-100)
--notesstringRelease notes text (en-US)
--notes-dirstringDirectory with per-language release notes (<dir>/<lang>.txt)
--namestringRelease name
--mappingstringPath to ProGuard/R8 mapping file for deobfuscation
--retry-logstringWrite 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:

bash
gpc publish app-release.aab \
  --app com.example.myapp \
  --track beta \
  --notes "Bug fixes and performance improvements" \
  --mapping app/build/outputs/mapping/release/mapping.txt

Upload with multi-language release notes:

bash
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.txt

Preview what would happen without executing:

bash
gpc publish app-release.aab --track beta --dry-run
json
{
  "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):

bash
gpc publish app-release.aab
# Prompts: Select track, rollout percentage, release notes

gpc validate

Run pre-submission validation checks on a bundle file without uploading.

Synopsis

bash
gpc validate <file> [options]

Options

FlagShortTypeDefaultDescription
--trackstringTarget track to validate against
--mappingstringPath to ProGuard/R8 mapping file
--notesstringRelease notes text (en-US)
--notes-dirstringDirectory with per-language release notes

Example

Validate a bundle before uploading:

bash
gpc validate app-release.aab
check        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

Valid

JSON output:

bash
gpc validate app-release.aab --output json
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:

bash
gpc validate app-release.aab \
  --track production \
  --notes "Version 2.0"

Exits with code 0 if valid, code 1 if any check fails.

Released under the MIT License.