Skip to content

Align Android Fastlane with Earn Time Play lanes (beta, release, promote) - #87

Open
thcathy wants to merge 1 commit into
masterfrom
cursor/fastlane-android-play-release-parity-0a37
Open

Align Android Fastlane with Earn Time Play lanes (beta, release, promote)#87
thcathy wants to merge 1 commit into
masterfrom
cursor/fastlane-android-play-release-parity-0a37

Conversation

@thcathy

@thcathy thcathy commented Sep 8, 2026

Copy link
Copy Markdown
Owner

Bring FunFunSpell Android Fastlane closer to Earn Time To Play so Timmy can use the same lane names (beta, release, promote, metadata, validate).

What changed

  • Android Fastfile lanes: build (AAB only), beta (internal/draft), release (promote, or PLAY_UPLOAD_AAB=true to upload), promote, metadata, validate, plus existing set_version / build_apk / build_bundle / upload
  • ./build.sh beta_android, release_android, promote_android, metadata_android, validate_android, build_android — Capacitor prep stays in build.sh (no Flutter)
  • android/fastlane/env.example documents GCLOUD_SERVICE_ACCOUNT_KEY / PLAY_STORE_JSON_KEY and Play env toggles
  • PLAY_PRODUCTION_STATUS defaults draft on release / promote / release_android
  • versionCode formula unchanged: major*100000 + minor*1000 + patch from package.json
  • Changelogs still copied from release_notes/{en,zh-Hant,zh-Hans}.txt
  • Legacy upload (production draft, aab: required) and build_apk kept

How to run

cp android/fastlane/env.example android/fastlane/.env
# or keep repo-root .env with GCLOUD_SERVICE_ACCOUNT_KEY and ESL_IONIC_KEYSTORE_PASSWORD

./build.sh beta_android
./build.sh release_android
PLAY_PRODUCTION_STATUS=completed ./build.sh release_android
./build.sh promote_android
SKIP_BUILD=true ./build.sh beta_android
./build.sh metadata_android
./build.sh validate_android

release_android maps to fastlane android release with PLAY_UPLOAD_AAB=true (new AAB → production draft). Direct fastlane android release promotes like Earn Time.

Verification (no Play upload)

Linux agent did not call Google Play. Checks that did run:

  • Ruby syntax of Fastfile / Appfile / load_env.rb
  • package.json 10.3.1versionCode 1003001 (matches app/build.gradle)
  • Lane names present (build, beta, release, promote, metadata, validate + legacy); no flutter
  • ./build.sh help lists the new commands
  • Missing Play key / keystore fails before Fastlane
  • PLAY_STORE_JSON_KEY alias is enough for require_play_key
  • SKIP_BUILD=true ./build.sh beta_android skips Capacitor (then stops because Fastlane is not installed here)
  • Changelog locale mapping from release_notes/ is intact

Out of scope

Open in Web Open in Cursor 

…ote)

Add ETTP-style Android lanes while keeping build_apk, set_version,
build_bundle, changelog-from-release_notes, and release_android's
production-draft AAB upload. Wire Play json_key from
GCLOUD_SERVICE_ACCOUNT_KEY (PLAY_STORE_JSON_KEY alias) and document
draft-safe defaults.

Co-authored-by: Timmy Wong <thcathy@gmail.com>
@sonarqubecloud

sonarqubecloud Bot commented Sep 8, 2026

Copy link
Copy Markdown

@thcathy
thcathy marked this pull request as ready for review September 8, 2026 23:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants