-
Notifications
You must be signed in to change notification settings - Fork 1
Flutter Cherrypick Process
With branching and branch testability now being supported for Flutter & Dart releases, cherrypicking fixes will now be the preferred method to address issues for released software (beta and stable channels.) Stability of the release will be the overarching goal, so only high impactful and critical cherrypicks will be allowed across Dart and Flutter. This document outlines the process for requesting and approval of cherrypicks.
Note: This process applies to regressions from the previous release or serious bugs otherwise introduced by the current release. Feature work is not considered for cherrypicking and will need to wait for the next release.
The Cherrypick reviewers will initially be composed of leads from product, engineering and program managers across Dart and Flutter. They will meet/discuss asynchronously on an as-needed basis assuming there are requests to review or prioritize. Longer term, we may include contributors as well. The individual (Dart, Flutter) groups will meet to review cherrypick requests from their repos as needed, organized by their TPMs. The full group will meet when cherrypicks are approved by the individual groups and consideration for a hotfix release is required.
As we get into the stable release period, the unified group will still need to come to consensus for approval of all cherrypicks, even if they are for a certain area, as risk will need to be assessed across Dart and Flutter.
Assuming X.Y has been released in beta or stable, labels are created as “cp: X.Y” by the TPM team.
- Issue/bug is filed
- “cp: X.Y” can be added here by filer or community
- Issue enters triage process
- Top level triage
- Applies appropriate team label
- Can apply “cp: X.Y” label if it appears to have appropriate severity or impact.
- Engineering triage
- Milestone applied
- Can apply “cp: X.Y” label if it appears to have appropriate severity or impact.
- If Cherrypick request label is on the issue, agree on severity/impact and prioritization with the Cherrypick review
- Top level triage
-
Issue is fixed and checked into master.
- Pre and post-submit tests executed as normal for verification.
- Cherrypick reviewers may influence prioritization depending on the severity of the issue during the bug fixing process.
- Fixed issue with “cp: X.Y” is reviewed by the individual Cherrypick reviewer(s).
- TPgM/PM/Eng involved to make a decision based on factors that are different for beta and stable and the age of the branch.
-
Impact criteria:
- Early beta stabilization (first 2 weeks of beta): High impact P1/P0 affecting multiple customers / would be a P0 in stable / regressions / security issues
- Late beta stabilization: P0 issues / P1 issues affecting larger customers / regressions / security issues
- Stable: P0 issue, affecting large base of customers, high % of user apps | importance factor / security issues
- crashing on x% of phone ecosystem
- breaking developer flow with no easy workaround
-
Risk criteria:
- Is it a manual or automated merge?
- How many lines of code, what areas of the stack is it touching?
- Testability of the cherrypick.
-
Release timing
- How close is the next beta/stable release?
-
Impact criteria:
- TPgM/PM/Eng involved to make a decision based on factors that are different for beta and stable and the age of the branch.
- If the cherrypick is deemed necessary and approved by the individual team reviewers, the full set of reviewers (Flutter+Dart) will then review using the same factors as above, with attention to full stack risk.
- If denied, the issue is updated with denial reason and ideally a target release.
- If approved
- TPM/Developer will create PR into the vX.Y.Z branch
- for Dart, this will be the beta branch until the vX.Y.Z branch support or similar is built.
- If pre-submit tests fail, a risk assessment will need to be performed with input from the cherrypick reviewers.
- In case of a manual merge, see the below process on Resolving Merge Conflicts.
- Post-submit tests are triggered on branch
- In case of multiple cherrypicks/issues this will be done after a batch
- TPM/Developer will create PR into the vX.Y.Z branch
- When tests pass
- when there is a lull in CPs / or a priority CP has been merged, a new release will be made available through the release process.
In the case that an approved PR requires a manual merge to the desired release branch, the release manager (the TPM or developer who is conducting the release) will have the PR's original author create a new change to resolve the conflict.
- The release manager identifies a PR that will not merge cleanly with the release branch.
- The release manager will notify the PR author on GitHub on the release PR with a link to this document and a request to create a new PR merging the change into the release branch. This message can also be replicated in an e-mail and in chat to ensure the author is reached. If the author cannot be reached, one of the PR's approvers will be selected to do the merge.
- The PR author will fetch upstream, and then checkout the release branch that the release is targeting. For example:
$ git fetch upstream && git checkout -b $RELEASE_BRANCH upstream/$RELEASE_BRANCH
- The PR author should then cherrypick the commit from
master
that maps to their approved PR:
$ git cherry-pick $CHERRYPICK_COMMIT
- It is expected that the previous command will have a merge conflict. The PR author will resolve this conflict locally in their editor. They will run relevant tests and analysis to ensure the merged code is correct.
- The PR author will create a new PR. It is recommended to name the branch you push to your fork the same as the upstream release branch, to skip an additional step. In the new PR UI, there is a drop-down menu for the base branch the PR will merge into: this should be set the same
RELEASE_BRANCH
that the release is based on. The PR author will add the release manager as a reviewer. - If the PR author did not name the branch on their fork the same as the upstream release branch, the Flutter GitHub bot will reset the merge target branch of PR to
master
. If this happens, the PR author will press theedit
button in the top right of the PR UI, which will reveal a drop down menu to change thebase
branch back to the release branch. The bot will not reset the PR a second time. - The release manager will review the PR and validate pre-submit CI builds. After approval, they will merge the PR to the release branch.
- The release manager will rebase their initial release PR against the release branch with the new cherrypick commit. If there are any conflicts rebasing, the commit with the conflict will undergo this same process.
- Home of the Wiki
- Roadmap
- API Reference (stable)
- API Reference (master)
- Glossary
- Contributor Guide
- Chat on Discord
- Code of Conduct
- Issue triage reports
- Our Values
- Tree hygiene
- Issue hygiene and Triage
- Style guide for Flutter repo
- Project teams
- Contributor access
- What should I work on?
- Running and writing tests
- Release process
- Rolling Dart
- Manual Engine Roll with Breaking Commits
- Updating Material Design Fonts & Icons
- Postmortems
- Setting up the Framework development environment
- The Framework architecture
- The flutter tool
- API Docs code block generation
- Running examples
- Using the Dart analyzer
- The flutter run variants
- Test coverage for package:flutter
- Writing a golden-file test for package:flutter
- Setting up the Engine development environment
- Compiling the engine
- Debugging the engine
- Using Sanitizers with the Flutter Engine
- Testing the engine
- The Engine architecture
- Flutter's modes
- Engine disk footprint
- Comparing AOT Snapshot Sizes
- Custom Flutter engine embedders
- Custom Flutter Engine Embedding in AOT Mode
- Flutter engine operation in AOT Mode
- Engine-specific Service Protocol extensions
- Crashes
- Supporting legacy platforms
- Metal on iOS FAQ
- Engine Clang Tidy Linter
- Why we have a separate engine repo
- Reduce Flutter engine size with MLGO
- Setting up the Plugins development environment
- Setting up the Packages development environment
- Plugins and Packages repository structure
- Plugin Tests
- Contributing to Plugins and Packages
- Releasing a Plugin or Package
- Unexpected Plugins and Packages failures