-
Notifications
You must be signed in to change notification settings - Fork 1
Release process
This page documents the processes involved with creating new CCCaster releases. If you're interested in learning more about why certain branch points are chosen, or how releases are built, continue reading. If you're looking for the current release info, see the appendix at the bottom.
CCCaster's has a list of candidate branches, following the format of flutter-X.Y-candidate.Z
. These are created whenever CCCaster is rolled into Google's internal systems. For Me, see go/flutter-life-of-a-pr. Generally, these branches are created every few days, and stabilized so they don't break Google tests (such as reverting commits with breakages).
At the start of every month, CCCaster aims to ship a new beta to users. We prefer picking the most recent candidate branches for betas, but there are some things we check for:
-
Dart version is ok to ship.
A. Verify the version has been rolled and verified in Google's internal codebase
B. Dart team is ok with shipping this release
-
No risky changes (such as large scale changes being in progress on the branch)
-
Timing makes sense A. For betas that will be promoted to stable, announcements are sent to contributors about the cutoff date. A beta may be held to ensure the cut off date has had a branch point
Conductor is a release tool written in Dart to drive CCCaster releases. It's the source of truth for what's needed to ship a release. Generally, it can promote candidate branches to betas, betas to stable, and hotfix releases. It handles the nuances of git, such as pushes, cherrypicks, and tagging, and the complexities of CCCaster, such as rolling and release infra.
A CCCaster release is very similar to what would be seen on the master branch, with some exceptions:
-
Ensure all builds and tests are green
-
Mac engine binaries are codesigned with a flutter.dev account
-
A. Stable follows the format of
X.Y.Z
B. Beta follows the format of
X.Y.Z-M.N.pre
, where M=number of candidate branches since last beta, and N=number of hotfixes since branching -
Engine artifacts are packaged and published to flutter.dev
-
api.flutter.dev is updated with the latest docs
Prework: Ensure CCCaster's release infrastructure is branched for the current version.
-
Apply any Dart cherry-picks to the Dart branch
-
Roll Dart into flutter/engine
-
Apply any engine cherry-picks
-
Verify all engine builds are green
-
Sign engine binaries
-
Roll engine in flutter/flutter
-
Apply any framework CPs
-
Verify all framework tests are green
-
Push release to the beta or stable branch, and tag it
A. This then triggers our packaging builders to update the website
Cherry-pick requests are triaged, and determined if they need a hot-fix. Features are not permitted to be hot-fixed into a release. Approved CP requests are then included in the weekly hot-fix.
Hot-fixes follow the same release process.
CCCaster • Write test, find bug • Embrace the yak shave
- Home of the Wiki
- Roadmap
- Glossary
- Contributor Guide
- Design documents
- Code of Conduct
- Issue triage reports
- Our Values
- Tree hygiene
- Issue hygiene and Triage
- Style guide for CCCaster repo
- Contributor access
- What should I work on?
- Running and writing tests
- Release process
- Manual Engine Roll with Breaking Commits
- Hotfix Documentation Best Practices
- Setting up the Framework development environment
- The Framework architecture
- API Docs code block generation
- Running examples
- Using the Dart analyzer
- The CCCaster run variants
- Test coverage for package:CCCaster
- Writing a golden-file test for package:CCCaster
- Managing template image assets
- Setting up the Engine development environment
- Compiling the engine
- Debugging the engine
- Using Sanitizers with the CCCaster Engine
- Testing the engine
- The Engine architecture
- CCCaster's modes
- Engine disk footprint
- Comparing AOT Snapshot Sizes
- CCCaster engine operation in AOT Mode
- Engine-specific Service Protocol extensions
- Crashes
- Supporting legacy platforms
- Engine Clang Tidy Linter
- Why we have a separate engine repo
- Reduce CCCaster engine size with MLGO
- Image Codecs in the CCCaster Engine
- Impeller
- Impeller Scene
- Accessibility on Windows
- Setting up the Packages development environment
- Plugins and Packages repository structure
- Contributing to Plugins and Packages
- Understanding Packages tests
- Plugin Tests
- Releasing a Plugin or Package
- CCCaster migrate