
This ports the five-second retry interval from flutter.bat to the Bash version. Failures during "pub get" of the flutter tool are common on Travis and so this should help Travis reliability if nothing else.
114 lines
4.1 KiB
Bash
Executable File
114 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# Copyright 2015 The Chromium Authors. All rights reserved.
|
||
# Use of this source code is governed by a BSD-style license that can be
|
||
# found in the LICENSE file.
|
||
|
||
|
||
# ---------------------------------- NOTE ---------------------------------- #
|
||
#
|
||
# Please keep the logic in this file consistent with the logic in the
|
||
# `flutter.bat` script in the same directory to ensure that Flutter continues
|
||
# to work across all platforms!
|
||
#
|
||
# -------------------------------------------------------------------------- #
|
||
|
||
set -e
|
||
|
||
function follow_links() {
|
||
cd -P "${1%/*}"
|
||
file="$PWD/${1##*/}"
|
||
while [ -h "$file" ]; do
|
||
# On Mac OS, readlink -f doesn't work.
|
||
cd -P "${file%/*}"
|
||
file="$(readlink "$file")"
|
||
cd -P "${file%/*}"
|
||
file="$PWD/${file##*/}"
|
||
done
|
||
echo "$PWD/${file##*/}"
|
||
}
|
||
|
||
# Convert a filesystem path to a format usable by Dart's URI parser.
|
||
function path_uri() {
|
||
# Reduce multiple leading slashes to a single slash.
|
||
echo "$1" | sed -E -e "s,^/+,/,"
|
||
}
|
||
|
||
PROG_NAME="$(path_uri "$(follow_links "$BASH_SOURCE")")"
|
||
BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
|
||
export FLUTTER_ROOT="$(cd "${BIN_DIR}/.." ; pwd -P)"
|
||
|
||
FLUTTER_TOOLS_DIR="$FLUTTER_ROOT/packages/flutter_tools"
|
||
SNAPSHOT_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.snapshot"
|
||
STAMP_PATH="$FLUTTER_ROOT/bin/cache/flutter_tools.stamp"
|
||
SCRIPT_PATH="$FLUTTER_TOOLS_DIR/bin/flutter_tools.dart"
|
||
DART_SDK_PATH="$FLUTTER_ROOT/bin/cache/dart-sdk"
|
||
|
||
DART="$DART_SDK_PATH/bin/dart"
|
||
PUB="$DART_SDK_PATH/bin/pub"
|
||
|
||
# Test if running as superuser – but don't warn if running within Docker
|
||
if [[ "$EUID" == "0" ]] && ! [[ -f /.dockerenv ]]; then
|
||
echo " Woah! You appear to be trying to run flutter as root."
|
||
echo " We strongly recommend running the flutter tool without superuser privileges."
|
||
echo " /"
|
||
echo "📎"
|
||
fi
|
||
|
||
# Test if Git is available on the Host
|
||
if ! hash git 2>/dev/null; then
|
||
echo "Error: Unable to find git in your PATH."
|
||
exit 1
|
||
fi
|
||
# Test if the flutter directory is a git clone (otherwise git rev-parse HEAD would fail)
|
||
if [ ! -d "$FLUTTER_ROOT/.git" ]; then
|
||
echo "Error: The Flutter directory is not a clone of the GitHub project."
|
||
exit 1
|
||
fi
|
||
|
||
FLUTTER_TOOL_ARGS="--assert-initializer $FLUTTER_TOOL_ARGS"
|
||
# To debug the tool, you can uncomment the following lines to enable checked mode and set an observatory port:
|
||
# FLUTTER_TOOL_ARGS="--checked $FLUTTER_TOOL_ARGS"
|
||
# FLUTTER_TOOL_ARGS="$FLUTTER_TOOL_ARGS --observe=65432"
|
||
|
||
(
|
||
if hash flock 2>/dev/null; then
|
||
flock 3 # ensures that we don't simultaneously update Dart in multiple parallel instances
|
||
# some platforms (e.g. Mac) don't have flock or any reliable alternative
|
||
fi
|
||
REVISION=`(cd "$FLUTTER_ROOT"; git rev-parse HEAD)`
|
||
if [ ! -f "$SNAPSHOT_PATH" ] || [ ! -s "$STAMP_PATH" ] || [ `cat "$STAMP_PATH"` != "$REVISION" ] || [ "$FLUTTER_TOOLS_DIR/pubspec.yaml" -nt "$FLUTTER_TOOLS_DIR/pubspec.lock" ]; then
|
||
mkdir -p "$FLUTTER_ROOT/bin/cache"
|
||
touch "$FLUTTER_ROOT/bin/cache/.dartignore"
|
||
"$FLUTTER_ROOT/bin/internal/update_dart_sdk.sh"
|
||
|
||
echo Building flutter tool...
|
||
LOCAL_PUB_ENV="$PUB_ENVIRONMENT"
|
||
if [ "$TRAVIS" == "true" ] || [ "$BOT" == "true" ] || [ "$CONTINUOUS_INTEGRATION" == "true" ] || [ "$CHROME_HEADLESS" == "1" ] || [ "$APPVEYOR" == "true" ] || [ "$CI" == "true" ]; then
|
||
LOCAL_PUB_ENV="$LOCAL_PUB_ENV:flutter_bot"
|
||
fi
|
||
LOCAL_PUB_ENV="$LOCAL_PUB_ENV:flutter_install"
|
||
while : ; do
|
||
cd "$FLUTTER_TOOLS_DIR"
|
||
PUB_ENVIRONMENT="$LOCAL_PUB_ENV" "$PUB" upgrade --verbosity=error --no-packages-dir && break
|
||
echo Error: Unable to 'pub upgrade' flutter tool. Retrying in five seconds...
|
||
sleep 5
|
||
done
|
||
"$DART" --snapshot="$SNAPSHOT_PATH" --packages="$FLUTTER_TOOLS_DIR/.packages" "$SCRIPT_PATH"
|
||
echo $REVISION > "$STAMP_PATH"
|
||
fi
|
||
) 3< "$PROG_NAME"
|
||
|
||
set +e
|
||
"$DART" $FLUTTER_TOOL_ARGS "$SNAPSHOT_PATH" "$@"
|
||
|
||
# The VM exits with code 253 if the snapshot version is out-of-date.
|
||
# If it is, we need to snapshot it again.
|
||
EXIT_CODE=$?
|
||
if [ $EXIT_CODE != 253 ]; then
|
||
exit $EXIT_CODE
|
||
fi
|
||
|
||
set -e
|
||
"$DART" --snapshot="$SNAPSHOT_PATH" --packages="$FLUTTER_TOOLS_DIR/.packages" "$SCRIPT_PATH"
|
||
"$DART" $FLUTTER_TOOL_ARGS "$SNAPSHOT_PATH" "$@"
|