gpc-migrate-fastlane
gpc-migrate-fastlane
Complete guide for migrating from Fastlane supply to GPC.
When to use
- Migrating from Fastlane supply to GPC (partial or full)
- Running GPC alongside Fastlane during a transition period
- Comparing Fastlane and GPC commands
- Converting Fastlane CI workflows to GPC
- Understanding metadata directory compatibility
Inputs required
- Existing Fastlane setup — Fastfile, Appfile, metadata directory
- Service account key — same key file works for both tools
- App package name — from Appfile or Fastfile configuration
Procedure
1. Assess current Fastlane usage
Identify which Fastlane supply features you use:
# Check your Fastfile for supply lanes
cat fastlane/Fastfile | grep -A 10 'supply'
# Check metadata directory
ls fastlane/metadata/android/
# Check Appfile for config
cat fastlane/Appfile
2. Install GPC (keep Fastlane installed)
npm install -g @gpc-cli/cli
Both tools can coexist — they share the same service account keys and metadata directory structure.
3. Authenticate with the same service account
# Use the same key file from Fastlane
gpc auth login --service-account path/to/play-store-key.json
# Or set via environment variable (same as SUPPLY_JSON_KEY)
export GPC_SERVICE_ACCOUNT=$(cat path/to/play-store-key.json)
# Configure default app (from your Appfile)
gpc config set app com.example.app
# Verify
gpc doctor
4. Map your Fastlane commands to GPC
Read: references/command-mapping.md for the complete command mapping table.
Key mappings:
# Upload AAB
# Fastlane: fastlane supply --aab app.aab --track beta
# GPC:
gpc releases upload app.aab --track beta
# Upload with rollout
# Fastlane: fastlane supply --aab app.aab --track production --rollout 0.1
# GPC: (note: percentage, not decimal)
gpc releases upload app.aab --track production --rollout 10
# Download metadata
# Fastlane: fastlane supply --download_metadata --metadata_path metadata/
# GPC:
gpc listings pull --dir metadata/
# Push metadata
# Fastlane: fastlane supply --skip_upload_aab --metadata_path metadata/
# GPC:
gpc listings push --dir metadata/
# Upload screenshots (one-shot)
# Fastlane: fastlane supply --skip_upload_aab --skip_upload_metadata
# GPC:
gpc listings images upload --lang en-US --type phoneScreenshots *.png
# Sync screenshots from a directory (v0.9.69+ — equivalent to Fastlane's sync_image_upload)
# SHA-256 content hashing: only uploads new/changed files; --delete removes extras remotely.
gpc listings images sync --lang en-US --type phoneScreenshots --dir ./screenshots/en-US/ --delete
# In-app update priority (v0.9.70+ — equivalent to Fastlane's in_app_update_priority)
# Fastlane: supply(in_app_update_priority: 3)
# GPC:
gpc releases upload app.aab --track production --in-app-update-priority 3
# Retain previous version codes (v0.9.70+)
# Fastlane: supply(version_codes_to_retain: [40, 41])
# GPC:
gpc releases upload app.aab --track internal --retain-version-codes 40,41
# Fastlane-style versioned changelogs (v0.9.70+)
# If your changelogs/ directory uses the Fastlane layout:
# changelogs/en-US/42.txt, changelogs/en-US/default.txt, changelogs/ja-JP/default.txt
# GPC auto-detects the structure. Reads {versionCode}.txt first, falls back to default.txt.
gpc releases upload app.aab --track production --notes-dir changelogs/
5. Test with dry-run
Before switching any CI pipeline, verify GPC produces the same results:
# Preview metadata push (no changes applied)
gpc listings push --dir fastlane/metadata/android/ --dry-run
# Preview upload (validates AAB without uploading)
gpc validate app.aab
# Compare listing output
gpc listings view --lang en-US --json
6. Migrate CI configuration
Read: references/ci-migration.md for platform-specific CI migration examples.
Replace Fastlane supply calls in your CI with GPC equivalents:
# Before (GitHub Actions with Fastlane)
- name: Deploy to beta
run: bundle exec fastlane supply --aab app.aab --track beta
# After (GitHub Actions with GPC)
- name: Deploy to beta
env:
GPC_SERVICE_ACCOUNT: ${{ secrets.PLAY_SA_KEY }}
GPC_APP: com.example.app
run: npx @gpc-cli/cli releases upload app.aab --track beta
7. Clean up Fastlane (optional)
Once fully migrated and confident:
# Remove Fastlane files
rm -rf fastlane/Fastfile fastlane/Appfile fastlane/Pluginfile
rm Gemfile Gemfile.lock
# Keep metadata directory — GPC uses the same structure
# fastlane/metadata/android/ → works with both tools
Note: The metadata directory (fastlane/metadata/android/) is fully compatible. You can rename it if you want (e.g., metadata/) — just update the --dir flag.
Verification
gpc doctorpasses all checksgpc listings push --dir fastlane/metadata/android/ --dry-runshows no errorsgpc releases upload app.aab --track internal --dry-runvalidates the bundle- CI pipeline runs successfully with GPC commands
- Metadata and screenshots match what was uploaded via Fastlane
Failure modes / debugging
| Symptom | Likely Cause | Fix |
|---|---|---|
| Auth fails with same key | Key path differs between tools | Use absolute path or GPC_SERVICE_ACCOUNT env var |
| Metadata push shows no changes | GPC already matches Play Store | This is expected — both tools read the same source |
| Rollout percentage wrong | Fastlane uses decimal (0.1), GPC uses percentage (10) | Convert: multiply Fastlane value by 100 |
| Screenshots missing after push | GPC listings push doesn't push images | Use gpc listings images upload separately |
| CI slower than Fastlane | Ruby/Bundler vs Node.js startup | Use npx @gpc-cli/cli or pre-install globally; both are fast |
EDIT_CONFLICT error |
Fastlane and GPC both have open edits | Don't run both tools simultaneously on the same app |
changesNotSentForReview 403 on commit |
App has a rejected update — was Fastlane supply's #1 failure point | v0.9.69+: gpc releases commit auto-rescues this by retrying with the correct flag. No manual intervention needed. |
Related skills
- gpc-setup — initial authentication and configuration
- gpc-metadata-sync — detailed metadata management beyond migration
- gpc-release-flow — full release lifecycle with GPC
- gpc-ci-integration — CI/CD pipeline setup with GPC
More from yasserstudio/gpc-skills
gpc-sdk-usage
Use when building applications that programmatically interact with the Google Play Developer API using GPC's TypeScript SDK packages. Make sure to use this skill whenever the user mentions @gpc-cli/api, @gpc-cli/auth, PlayApiClient, createApiClient, resolveAuth, Google Play API client, TypeScript SDK, programmatic access, API client, HTTP client, rate limiter, pagination, edit lifecycle in code, Node.js Google Play, server-side Play Store, backend integration — even if they don't explicitly say 'SDK.' Also trigger when someone wants to build a backend service, custom dashboard, automation script, or any TypeScript/JavaScript application that interacts with Google Play programmatically rather than through the CLI. For CLI usage, see other gpc-* skills. For building plugins, see gpc-plugin-development.
12gpc-release-flow
Use when uploading, releasing, promoting, or managing rollouts on Google Play. Make sure to use this skill whenever the user mentions gpc releases, upload AAB, upload APK, staged rollout, promote to production, halt rollout, gpc publish, release notes, track management, internal testing, beta release, production rollout, version code, rollout percentage, gpc bundles, bundle list, bundle wait, wait for bundle processing, in-app update priority, retain version codes, versioned changelogs, or wants to ship an Android app to any Play Store track. Also trigger when someone asks about the Google Play edit lifecycle, release validation, or how to do a phased rollout — even if they don't mention GPC by name. For metadata and listings, see gpc-metadata-sync. For CI/CD integration, see gpc-ci-integration.
12gpc-security
Use when dealing with GPC credential security, secret management, audit logging, or access control. Make sure to use this skill whenever the user mentions credentials, service account key, secret rotation, key rotation, credential storage, audit log, audit trail, security best practices, .gpcrc.json security, secrets in CI, GPC_SERVICE_ACCOUNT safety, keychain, token cache, credential leak, key compromise, secure deployment — even if they don't explicitly say 'security.' Also trigger when someone asks about where GPC stores credentials, how to rotate service account keys, how to audit who did what with GPC, how to securely pass credentials in CI/CD, or how to handle a compromised service account key. For auth setup, see gpc-setup. For CI configuration, see gpc-ci-integration.
12gpc-multi-app
Use when managing multiple Google Play apps with GPC. Make sure to use this skill whenever the user mentions multiple apps, multi-app, monorepo, white-label, batch operations, bulk upload, several apps, --app flag, app switching, profiles for different apps, fleet management, app portfolio, multiple package names — even if they don't explicitly say 'multi-app.' Also trigger when someone has more than one Android app and wants to manage them efficiently, when they need different configurations per app, when they're running the same command across multiple apps, or when they have a monorepo with multiple Android modules. For single-app setup, see gpc-setup. For CI automation, see gpc-ci-integration.
11gpc-setup
Use when setting up GPC (Google Play Console CLI): authentication with service accounts, OAuth, or Application Default Credentials; configuration files (.gpcrc.json, env vars, XDG paths); auth profiles; running gpc doctor; troubleshooting auth errors. Make sure to use this skill whenever the user mentions gpc auth, service account setup, gpc config, gpc doctor, GPC_SERVICE_ACCOUNT, gpc auth login, Google Play API credentials, Play Console authentication, gpc setup, gpc setup wizard, one-command onboarding, or wants to install/configure GPC — even if they don't explicitly say 'setup.' Also trigger when someone is troubleshooting auth failures, token expiration, keychain issues, or proxy/network configuration for GPC.
11gpc-monetization
Use when managing in-app purchases, subscriptions, pricing, or Real-Time Developer Notifications in Google Play. Make sure to use this skill whenever the user mentions gpc subscriptions, gpc iap, gpc purchases, gpc pricing, gpc rtdn, in-app products, base plans, subscription offers, one-time products, consumable products, purchase verification, purchase acknowledgement, purchase token, subscription cancellation, subscription deferral, voided purchases, refunds, regional pricing, currency conversion, price migration, SKU management, monetization, revenue, billing, subscription analytics, churn, trial conversion, subscriber count, RTDN, Real-Time Developer Notifications, Pub/Sub notifications, subscription events, purchase events — even if they don't explicitly say 'monetization.' Also trigger when someone wants to create or update subscriptions, manage base plan lifecycle (activate/deactivate), set up introductory offers, verify server-side purchases, handle refunds, convert prices across regions, sync IAP products from files, migrate subscribers to new prices, view subscription analytics, decode Pub/Sub notification payloads, or check RTDN topic configuration. For release management, see gpc-release-flow. For CI automation, see gpc-ci-integration.
11