| #!/usr/bin/env bash |
| # Copyright 2014 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Based on the current repository state, writes the following two files to disk: |
| # |
| # bin/cache/engine.stamp <-- SHA of the commit that engine artifacts were built |
| # bin/cache/engine.realm <-- optional; whether the SHA is from presubmit builds or staging (bringup: true). |
| |
| # ---------------------------------- NOTE ---------------------------------- # |
| # |
| # Please keep the logic in this file consistent with the logic in the |
| # `update_engine_version.ps1` script in the same directory to ensure that Flutter |
| # continues to work across all platforms! |
| # |
| # https://github.com/flutter/flutter/blob/main/docs/tool/Engine-artifacts.md. |
| # |
| # Want to test this script? |
| # $ cd dev/tools |
| # $ dart test test/update_engine_version_test.dart |
| # |
| # -------------------------------------------------------------------------- # |
| |
| set -e |
| |
| # When called from a submodule hook; these will override `git -C dir` |
| unset GIT_DIR |
| unset GIT_INDEX_FILE |
| unset GIT_WORK_TREE |
| |
| FLUTTER_ROOT="$(dirname "$(dirname "$(dirname "${BASH_SOURCE[0]}")")")" |
| |
| # Generate a bin/cache directory, which won't initially exist for a fresh checkout. |
| mkdir -p "$FLUTTER_ROOT/bin/cache" |
| |
| # Check if FLUTTER_PREBUILT_ENGINE_VERSION is set |
| # |
| # This is intended for systems where we intentionally want to (ephemerally) use |
| # a specific engine artifacts version (which includes the Flutter engine and |
| # the Dart SDK), such as on CI. |
| # |
| # If set, it takes precedence over any other source of engine version. |
| if [ -n "${FLUTTER_PREBUILT_ENGINE_VERSION}" ]; then |
| ENGINE_VERSION="${FLUTTER_PREBUILT_ENGINE_VERSION}" |
| |
| # Check if bin/internal/engine.version exists and is a tracked file in git. |
| # |
| # This is intended for a user-shipped stable or beta release, where the release |
| # has a specific (pinned) engine artifacts version. |
| # |
| # If set, it takes precedence over the git hash. |
| elif [ -n "$(git -C "$FLUTTER_ROOT" ls-files bin/internal/engine.version)" ]; then |
| ENGINE_VERSION="$(cat "$FLUTTER_ROOT/bin/internal/engine.version")" |
| |
| # Fallback to using git to triangulate which upstream/master (or origin/master) |
| # the current branch is forked from, which would be the last version of the |
| # engine artifacts built from CI. |
| else |
| set +e |
| # We fallback to origin/master if upstream is not detected. |
| git -C "$FLUTTER_ROOT" remote get-url upstream >/dev/null 2>&1 |
| exit_code=$? |
| set -e |
| |
| if [[ $exit_code -eq 0 ]]; then |
| ENGINE_VERSION=$(git -C "$FLUTTER_ROOT" merge-base HEAD upstream/master) |
| else |
| ENGINE_VERSION=$(git -C "$FLUTTER_ROOT" merge-base HEAD origin/master) |
| fi |
| fi |
| |
| # Write the engine version out so downstream tools know what to look for. |
| echo $ENGINE_VERSION >"$FLUTTER_ROOT/bin/cache/engine.stamp" |
| |
| # The realm on CI is passed in. |
| if [ -n "${FLUTTER_REALM}" ]; then |
| echo $FLUTTER_REALM >"$FLUTTER_ROOT/bin/cache/engine.realm" |
| else |
| echo "" >"$FLUTTER_ROOT/bin/cache/engine.realm" |
| fi |