Release to Production v2.9.24 - 2026-06-07#2154
Conversation
Update build numbers, platform build files, and deployment timestamps after successful deployment. Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix upload issue * pr feedback * update skill * fixes * fixeds * pr feedback * pr feedback rd2
Release to Staging v2.9.24 - 2026-05-31
Release to Staging v2.9.24 - 2026-06-01
Release to Staging v2.9.24 - 2026-06-02
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Greptile SummaryThis release overhauls the Android Play Store upload pipeline — moving from Fastlane's
Confidence Score: 4/5Safe to merge for the bulk of the change; one path in the Play Store upload script leaves an uncommitted edit open which could block future uploads. The idempotent-retry success branch in upload_to_play_store.py returns True without deleting the freshly created edit. Google Play enforces at most one active edit per app, so the lingering uncommitted edit would cause every subsequent CI run to fail at edits.insert() until Play auto-expires the edit (~7 days). The fix is a targeted cleanup call before returning True, mirroring what query_track already does. All other changes — resumable uploads, pinned deps, CocoaPods exact-match caching, iOS idempotent retry, App Store submission path — look well-reasoned and low risk. app/scripts/upload_to_play_store.py — specifically the idempotent retry success path around line 268–272. Important Files Changed
|
| try: | ||
| # Build the service | ||
| service = build('androidpublisher', 'v3', credentials=credentials) | ||
|
|
||
| # Create an edit | ||
| print("🚀 Creating edit transaction...") | ||
| edit_request = service.edits().insert(body={}, packageName=package_name) | ||
| edit = edit_request.execute() | ||
| edit_id = edit['id'] | ||
| print(f"✅ Edit created: {edit_id}") | ||
|
|
||
| # Upload the AAB | ||
| print("📦 Uploading AAB file...") | ||
| media = MediaFileUpload(aab_path, mimetype='application/octet-stream') | ||
| upload_request = service.edits().bundles().upload( | ||
| bundle_response = execute_resumable_upload(upload_request, "Play Store AAB upload") | ||
| except HttpError as e: | ||
| if attempt > 1 and is_version_already_committed_error(e): | ||
| expected_version_code = (retry_state or {}).get('version_code') | ||
| if expected_version_code and track_contains_version_code( | ||
| service, | ||
| package_name, | ||
| edit_id, | ||
| track, | ||
| expected_version_code, | ||
| ): | ||
| print("ℹ️ Play reports this version code as already used, and " | ||
| f"track {track} already contains version code " | ||
| f"{expected_version_code}. Treating this retry as a " | ||
| "successful release.") | ||
| return True | ||
| print("⚠️ Play reports this version code as already used, but the " | ||
| f"expected version code {expected_version_code or 'unknown'} " | ||
| f"was not found on track {track}. Failing instead of reporting " | ||
| "an unverified release as successful.") | ||
| raise |
There was a problem hiding this comment.
Orphaned edit left open on idempotent-retry success path
When attempt > 1 detects is_version_already_committed_error and track_contains_version_code confirms the version landed, the function returns True — but edit_id (the fresh edit opened at the top of this retry) is never committed or deleted. Google Play allows only one active edit per app at a time, so this uncommitted edit will block every subsequent CI upload for up to 7 days (the Play Console auto-expiry window).
query_track avoids exactly this with a finally block that calls service.edits().delete(). The same cleanup is needed here before returning True.
🎯 Production Release
Release Date: June 07, 2026
Commits ahead: 7
This automated PR promotes tested changes from
stagingtomainfor production deployment.What's Included
All changes that have been verified in the staging environment.
Note: This PR is directly from
staging, so new commits merged tostagingwill automatically appear here.Pre-Deployment Checklist
Deployment Notes
Merging this PR will trigger production deployment.
This PR was automatically created by the Release Calendar workflow on June 07, 2026