Skip to content

fix: Release mobile stores independently - #3567

Open
shrutikbalwan wants to merge 1 commit into
fossasia:mainfrom
shrutikbalwan:fix-3349-independent-store-releases
Open

shrutikbalwan wants to merge 1 commit into
fossasia:mainfrom
shrutikbalwan:fix-3349-independent-store-releases

Conversation

@shrutikbalwan

@shrutikbalwan shrutikbalwan commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Related to #3349 (partial implementation)

Change

An Android signing or production-promotion failure currently prevents iOS promotion because both run sequentially in one job. Read the release version in a common job, then run Android and iOS release jobs independently. Each job prepares its own credentials and Git identity.

Use the actual lowercase ios path and pass release notes through an environment variable so quotes and shell syntax in release text are preserved as text.

This addresses store-promotion independence only. Publishing the shared binary download branch still requires a maintainer decision about partial builds and stale artifacts. The broader issue remains open.

Validation

  • Parsed YAML and checked the dependency graph, secret separation and version output flow.
  • Git Bash syntax checks passed for every run block.
  • GitHub PR build validation ran successfully for the desktop platforms. No production release, secret decryption or Fastlane metadata push was executed by this validation.
  • Existing Fastlane availability and credentials remain runtime prerequisites.

Coordination

@marcnause, this draft covers store-promotion isolation only. It leaves the shared binary publication policy unchanged pending the decision in the issue.

Screenshots / Recordings

N/A: workflow change.

Summary by Sourcery

Separate Android and iOS store release workflows while sharing validated release version information.

Bug Fixes:

  • Allow Android and iOS store promotions to run independently so a failure on one platform does not block the other.

Enhancements:

  • Centralize release version loading and isolate platform-specific credentials, Git configuration, metadata updates, and promotion steps in separate jobs.
  • Preserve release notes as literal text and use the repository's lowercase iOS directory path.

CI validation update

GitHub Actions run.

Passed: Codacy Static Code Analysis, macOS Flutter Build, Windows Flutter Build, Linux Flutter Build, Android Flutter Build, Screenshots (Android), Linux ARM64 Flutter Build, iOS Flutter Build, Screenshots (iPad), Web App Flutter Build, Validate PR title, Common Build, Detect Changes.

The iPhone screenshot job later exceeded its 30-minute timeout. A targeted rerun requires repository admin rights; diagnosis and maintainer rerun request.

Ready for review of the stated scope. Remaining manual checks and broader issue work above are not claimed complete.

Summary by CodeRabbit

  • Bug Fixes

    • Improved release validation by checking version codes before production promotion.
    • Corrected iOS release directory handling.
  • Chores

    • Streamlined Android and iOS production release processing.
    • Improved consistency of release tags, notes, and changelog metadata across platforms.

Copilot AI lite review requested due to automatic review settings September 16, 2026 02:59
@coderabbitai

coderabbitai Bot commented Sep 16, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 361c12cc-6c9a-49cd-ae87-8daf0afb59cd
📥 Commits

Reviewing files that changed from the base of the PR and between 4ce221d and 8ee2499.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 9340f35c-721c-46ff-a240-325d36725eda

📥 Commits

Reviewing files that changed from the base of the PR and between 5499a24 and c4b867a.

📒 Files selected for processing (1)
  • .github/workflows/release.yml

Included review availability: Your plan provides up to 8 included reviews per hour; 5 remain after this review.


📝 Walkthrough

Walkthrough

The release workflow now validates the release version code in a shared job. Separate Android and iOS jobs prepare secrets, update fastlane metadata, and promote each platform release.

Changes

Release workflow

Layer / File(s) Summary
Shared release validation
.github/workflows/release.yml
The workflow defines release-wide variables. The common job downloads and validates versionCode.txt and exposes VERSION_CODE.
Platform promotion jobs
.github/workflows/release.yml
The android and ios jobs depend on common, prepare platform secrets, update fastlane metadata, push their branches, and promote releases. The iOS job uses ./ios and removes a leading v from the release tag.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseWorkflow
  participant ReleaseAsset
  participant AndroidFastlane
  participant IOSFastlane
  ReleaseWorkflow->>ReleaseAsset: Download versionCode.txt for RELEASE_TAG
  ReleaseAsset-->>ReleaseWorkflow: Return numeric version code
  ReleaseWorkflow->>ReleaseWorkflow: Expose VERSION_CODE
  ReleaseWorkflow->>AndroidFastlane: Update metadata and promote Android release
  ReleaseWorkflow->>IOSFastlane: Update metadata and promote iOS release
Loading

Merge Risk: ⚪ Minimal · up to 1990b

The independent Android and iOS promotion jobs retain the shared release values needed for their metadata updates and promotions.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: running Android and iOS store releases independently.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@sourcery-ai

sourcery-ai Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Restructures the release workflow into a common metadata job plus independent Android and iOS promotion jobs, isolating credentials and Git setup per platform while safely propagating release metadata and correcting the iOS path.

File-Level Changes

Change Details Files
Split store promotion into independently runnable Android and iOS jobs coordinated through a shared version-reading job.
  • Read and validate versionCode once, then expose it as a job output.
  • Make Android and iOS depend only on the common job so one platform’s failure does not block the other.
  • Move checkout, Git identity, platform secret preparation, metadata publishing, and promotion into each platform job.
.github/workflows/release.yml
Harden release metadata and platform path handling.
  • Pass release tag and notes through environment variables for shell-safe text handling.
  • Use the lowercase ios directory path and shared version output for Fastlane commands and metadata filenames.
  • Restrict the release asset download to versionCode.txt and reject non-numeric version values.
.github/workflows/release.yml

Possibly linked issues


Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@shrutikbalwan
shrutikbalwan marked this pull request as ready for review September 16, 2026 03:24

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!

Sourcery assessment

Needs a human reviewer. If the shared version or either store-specific release step is wrong, this workflow can publish an incorrect mobile release and force-push release metadata using production credentials. Reverting the workflow prevents future releases but does not unpublish a store release or restore the overwritten branch.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

@shrutikbalwan

Copy link
Copy Markdown
Contributor Author

@marcnause, the iPhone screenshot job exceeded its 30-minute limit. The log reports Xcode build done at 03:10:22 UTC, then no further output from flutter drive before cancellation at 03:30:54 UTC. There is no failing test assertion in that interval.

All platform build jobs and the Android/iPad screenshot jobs passed. This PR changes the production release workflow only; it does not change app code or the screenshot workflow.

I attempted a targeted rerun, but GitHub returned 403: Must have admin rights to Repository. Could a maintainer rerun the iPhone screenshot job? I have left the existing timeout and required checks unchanged.

@github-actions

github-actions Bot commented Sep 16, 2026 •

Copy link
Copy Markdown
Contributor

Build Status: Build successful.

Build artifacts to test

Screenshots

Android Screenshots
iPhone Screenshots
iPad Screenshots

@marcnause
marcnause force-pushed the fix-3349-independent-store-releases branch 2 times, most recently from 6aad2d3 to 4ce221d Compare September 21, 2026 21:35
@marcnause
marcnause requested a lite review from Copilot September 21, 2026 21:35

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Production release workflows and runtime promotion steps require final human review.

Review effort: Lite
Findings: None

@marcnause
marcnause force-pushed the fix-3349-independent-store-releases branch from 4ce221d to 8ee2499 Compare October 3, 2026 20:16
Copilot AI lite review requested due to automatic review settings October 3, 2026 20:16

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

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