Skip to content

Migrating from Fastlane

gplay covers the fastlane supply surface (and more) as a single static binary — no Ruby in the CI image. Migration is mostly mechanical.

Coming from Fastlane, the single most common surprise: gplay releases upload --track production does not publish to 100% by default. It creates a draft release that a follow-up step must explicitly publish with --complete or --staged <fraction> (plus --confirm). This is deliberate. On every other track the behavior matches Fastlane: completed at 100%.

fastlanegplay
supply --aab app.aab --track internalgplay releases upload app.aab --track internal
supply --track internal --track_promote_to betagplay releases promote --from internal --to beta
supply --rollout 0.1gplay releases rollout --track production --to 0.1 --confirm
supply --skip_upload_apk ... metadata syncgplay metadata apply / gplay metadata images apply
supply --metadata_path ./metadatagplay metadata apply --dir ./metadata

The on-disk layout is fastlane's, minus the redundant android/ segment and minus changelogs/:

  • title.txt, short_description.txt, full_description.txt, video.txt per locale — identical names.
  • Release notes move out of the metadata tree: gplay owns them at upload time via --release-notes or --release-notes-dir ./whatsnew (one <locale>.txt per file, optional default.txt fallback).

Start with gplay metadata pull into a fresh directory and diff it against your fastlane tree — differences are usually un-pushed edits.

The Google Cloud service-account JSON you already use with Fastlane works as-is. In CI, export it inline as GPLAY_SERVICE_ACCOUNT; locally, gplay auth login --service-account ./sa.json stores it in the OS keychain. gplay auth doctor verifies the wiring with a real API round-trip.

  • No Ruby runtime or bundle install in CI — one binary, fast cold start.
  • Semantic exit codes — retry on 40/50, fail fast on everything else, no log parsing.
  • JSON output that mirrors the Play API responses for scripting.
  • --dry-run on every write.

gplay is pre-1.0; a detailed pitfall-by-pitfall migration table is planned once more real migrations surface them. If you hit one, please open an issue.