Rebase ios-experimental branch onto main. This will make the PRs experimenting with newer versions of Xcode (like https://github.com/flutter/flutter/pull/173123) smaller and easier to reason about. Rebases #168860 and #170274 ``` $ git rebase main -Xtheirs ``` --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: gaaclarke <30870216+gaaclarke@users.noreply.github.com> Co-authored-by: Siva <a-siva@users.noreply.github.com> Co-authored-by: engine-flutter-autoroll <engine-flutter-autoroll@skia.org> Co-authored-by: Jamil Saadeh <jssaadeh@outlook.com> Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com> Co-authored-by: Greg Price <gnprice@gmail.com> Co-authored-by: Ben Konyi <bkonyi@google.com> Co-authored-by: Ricardo Dalarme <ricardodalarme@outlook.com> Co-authored-by: Flutter GitHub Bot <fluttergithubbot@gmail.com> Co-authored-by: Justin McCandless <jmccandless@google.com> Co-authored-by: Alex Talebi <31685655+SalehTZ@users.noreply.github.com> Co-authored-by: Qun Cheng <36861262+QuncCccccc@users.noreply.github.com> Co-authored-by: Mouad Debbar <mdebbar@google.com> Co-authored-by: Zuckjet <1083941774@qq.com> Co-authored-by: Loïc Sharma <737941+loic-sharma@users.noreply.github.com> Co-authored-by: auto-submit[bot] <98614782+auto-submit[bot]@users.noreply.github.com> Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: yim <ybz975218925@gmail.com> Co-authored-by: bufffun <chenmingding.cmd@alibaba-inc.com> Co-authored-by: Chinmay Garde <chinmaygarde@google.com> Co-authored-by: Hannah Jin <jhy03261997@gmail.com> Co-authored-by: Kate Lovett <katelovett@google.com> Co-authored-by: Valentin Vignal <32538273+ValentinVignal@users.noreply.github.com> Co-authored-by: Derek Xu <derekx@google.com> Co-authored-by: Yash Dhrangdhariya <72062416+Yash-Dhrangdhariya@users.noreply.github.com> Co-authored-by: bungeman <bungeman@chromium.org> Co-authored-by: Ahmed Mohamed Sameh <ahmedsameha1@gmail.com> Co-authored-by: John "codefu" McDole <codefu@google.com> Co-authored-by: Dmitry Grand <dmgr@google.com> Co-authored-by: Kostia Sokolovskyi <sokolovskyi.konstantin@gmail.com> Co-authored-by: Reid Baker <1063596+reidbaker@users.noreply.github.com> Co-authored-by: Matthew Kosarek <matt.kosarek@canonical.com> Co-authored-by: Jason Simmons <jason-simmons@users.noreply.github.com> Co-authored-by: Jim Graham <flar@google.com> Co-authored-by: Michael Goderbauer <goderbauer@google.com> Co-authored-by: Gray Mackall <34871572+gmackall@users.noreply.github.com> Co-authored-by: Gray Mackall <mackall@google.com> Co-authored-by: Tong Mu <dkwingsmt@users.noreply.github.com> Co-authored-by: Jon Ihlas <jon.i@hotmail.fr> Co-authored-by: Micael Cid <micaelcid10@gmail.com> Co-authored-by: Alexander Aprelev <aam@google.com> Co-authored-by: hellohuanlin <41930132+hellohuanlin@users.noreply.github.com> Co-authored-by: Luke Memet <1598289+lukemmtt@users.noreply.github.com> Co-authored-by: Victoria Ashworth <15619084+vashworth@users.noreply.github.com> Co-authored-by: Mairramer <50643541+Mairramer@users.noreply.github.com> Co-authored-by: Florin Malita <fmalita@gmail.com> Co-authored-by: chunhtai <47866232+chunhtai@users.noreply.github.com> Co-authored-by: Salem Iranloye <127918074+salemiranloye@users.noreply.github.com> Co-authored-by: Kevin Moore <kevmoo@google.com> Co-authored-by: Sydney Bao <sydneybao@google.com> Co-authored-by: Wdestroier <Wdestroier@gmail.com> Co-authored-by: Matt Boetger <matt.boetger@gmail.com> Co-authored-by: Reid Baker <reidbaker@google.com> Co-authored-by: Victor Sanni <victorsanniay@gmail.com> Co-authored-by: Jessy Yameogo <jessy.yameogo@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: romain.gyh <11901536+romaingyh@users.noreply.github.com> Co-authored-by: Robert Ancell <robert.ancell@canonical.com> Co-authored-by: TheLastFlame <131446187+TheLastFlame@users.noreply.github.com> Co-authored-by: masato <returnymgstokh@icloud.com> Co-authored-by: Albin PK <56157868+albinpk@users.noreply.github.com> Co-authored-by: Huy <huy@nevercode.io> Co-authored-by: Matan Lurey <matanlurey@users.noreply.github.com> Co-authored-by: Azat Chorekliyev <azat24680@gmail.com> Co-authored-by: EdwynZN <edwinzn9@gmail.com> Co-authored-by: Bruno Leroux <bruno.leroux@gmail.com> Co-authored-by: Dev TtangKong <ttankkeo112@gmail.com> Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> Co-authored-by: Houssem Eddine Fadhli <houssemeddinefadhli81@gmail.com>
6.3 KiB
How flutter fetches engine artifacts
flutter.dev/to/engine-artifacts
While in the same repository, the flutter (tool), which is used to run and
test the framework, needs to know how to download the engine artifacts for the
current platform and target device. Engine artifacts include dart (the
standalone Dart SDK), which runs flutter itself, and per-platform and build
mode prebuilt engines (which include the C++ compiled engine, and the embedders
for Android, iOS, and so-on).
When using a released version of Flutter, i.e. from a channel such as stable,
bin/internal/engine.version is set to the
content hash SHA for a merged commit in https://github.com/flutter/flutter, where
the engine artifacts have already been pre-built and uploaded.
When using the master channel, or contributing to Flutter (which is typically
as a fork of Flutter's master channel), the engine SHA is computed by
generating a content-aware hash of files that affect the engine build (such as
DEPS and the engine directory itself).
For advanced use-cases, such as on CI platforms, or for custom 1-off testing
using a pre-built Flutter engine (to use a locally built Flutter engine see
locally built engines), the environment variable FLUTTER_PREBUILT_ENGINE_VERSION can be set,
again to a engine SHA for a merged commit in flutter/flutter. This is only needed
if different artifacts from the content sha are desired:
$ FLUTTER_PREBUILT_ENGINE_VERSION=abc123 flutter --version
..
Engine • revision abc123 ..
..
stateDiagram-v2
[*] --> CheckEnvVar
CheckEnvVar: <code>FLUTTER_PREBUILT_ENGINE_VERSION</code> set?
UseEnvVar: Use <code>FLUTTER_PREBUILT_ENGINE_VERSION</code>
CheckReleaseFile: <code>bin/internal/engine.version</code> exists?
UseReleaseFile: Use <code>bin/internal/engine.version</code>
UseContentAwareHash: Compute content-aware hash
CheckEnvVar --> UseEnvVar: Yes
CheckEnvVar --> CheckReleaseFile: No
UseEnvVar --> [*]: Done
CheckReleaseFile --> UseReleaseFile: Yes
CheckReleaseFile --> UseContentAwareHash: No
UseReleaseFile --> [*]: Done
UseContentAwareHash --> [*]: Done
Flutter CI/CD Testing
On Cocoon (Flutter's internal CI/CD) we often set
FLUTTER_PREBUILT_ENGINE_VERSION to the following:
| Branch | Presubmit | Merge Queue | Postsubmit |
|---|---|---|---|
main |
content.sha |
content.sha |
content.sha |
flutter-x.x-candidate.x |
content.sha |
N/A1 | content.sha |
stable or beta |
N/A2 | N/A1 | N/A2 |
| anything else3 | content.sha |
content.sh |
content.sha |
To generate a new
engine.version:./bin/internal/content_aware_hash.sh > ./bin/internal/engine.versionAs of
b0ccfb53801abc9b0aa93e7cca3a3841513c3086(May 6 2025), the packaging release process will refuse to let you publish a release with an out of dateengine.version.
Content Hashing
The content hash is a fingerprint of the assets used in producing engine artifacts. These include:
DEPS: Used to pull third_party dependencies.engine/: The entire engine subfolder4.bin/internal/release-candidate-branch.version: A signal for release builds, keeping builds hermetic.
The Flutter project has a plethora of users: engineers working from local branches, release branches, GitHub merge queues, and downstream shallow consumers to name the known ones. The following table shows where the content hash is calculated from:
| Branch | Hashed From |
|---|---|
main,master |
HEAD |
stable, beta |
HEAD |
| GitHub Merge Queue | HEAD |
flutter-*-candidate.x |
HEAD |
HEAD |
HEAD |
| Shallow Clones | HEAD |
| Everything Else. | merge-base between HEAD and(origin or upstream)/(main or master) |
References
The script(s) that compute (and test the computation of) the engine version:
bin/internal/update_engine_version.shbin/internal/update_engine_version.ps1dev/tools/test/update_engine_version_test.dartbin/internal/last_engine_commit.shbin/internal/last_engine_commit.ps1dev/tools/test/last_engine_commit_test.dartbin/internal/content_aware_hash.shbin/internal/content_aware_hash.ps1dev/tools/test/content_aware_hash_test.dart
The tool uses the engine version in the following locations:
-
Does not use a merge queue. ↩︎
-
Only updated through
flutter-x.x-candidate.xbranches. ↩︎ -
I.e. experimental branches that do not fall into one of the above. ↩︎
-
This is suboptimal from an artifact building perspective, but optimal for the speed of each
dartandfluttercall. Flutter is called more often than it is built. ↩︎