diff --git a/.cirrus.yml b/.cirrus.yml index 85640990d0d..81b94d70fac 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -3,26 +3,26 @@ container: task: env: + OS_NAME: linux + # Rename the SDK directory to include a space so that we constantly + # test path names with spaces in them. CIRRUS_WORKING_DIR: "/tmp/flutter sdk" PATH: "$CIRRUS_WORKING_DIR/bin:$CIRRUS_WORKING_DIR/bin/cache/dart-sdk/bin:$PATH" - git_fetch_script: git fetch origin - setup_script: | - echo "SDK directory is: $PWD" - ./bin/flutter --version - - # disable analytics on the bots and download Flutter dependencies - ./bin/flutter config --no-analytics - - # run pub get in all the repo packages - ./bin/flutter update-packages - - git fetch origin master + setup_script: ./dev/bots/cirrus_setup.sh matrix: - name: docs env: SHARD: docs + # For uploading docs to Firebase + FIREBASE_TOKEN: ENCRYPTED[a40fcb68452b92254b7f532a460529b5e4ca51d6d338a8fae8db9db832ad3c2a7efb962e257de79686a9345f4a18661a] docs_script: ./dev/bots/docs.sh + - name: deploy_gallery + env: + SHARD: deploy_gallery + GOOGLE_DEVELOPER_SERVICE_ACCOUNT_ACTOR_FASTLANE: ENCRYPTED[d9ac1462c3c556fc2f8165c9d5566a16497d8ebc38a50357f7f3abf136b7f83e1d1d76dde36fee356cb0f9ebf7a89346] + ANDROID_GALLERY_UPLOAD_KEY: ENCRYPTED[0b3e681b4507aec433ef29c79b715f15f8c75ecd25315ea286b0b2bcb8b28d578634eead5aa2c54086a25e8da1bb219a] + test_script: ./dev/bots/deploy_gallery.sh - name: analyze env: SHARD: analyze @@ -49,6 +49,7 @@ task: name: tests-windows env: SHARD: tests + OS_NAME: windows windows_container: image: cirrusci/windowsservercore:2016 os_version: 2016 @@ -67,6 +68,7 @@ task: name: tool_tests-windows env: SHARD: tool_tests + OS_NAME: windows windows_container: image: cirrusci/windowsservercore:2016 os_version: 2016 @@ -81,10 +83,31 @@ task: test_all_script: - bin\cache\dart-sdk\bin\dart.exe -c dev\bots\test.dart +task: + name: deploy_gallery-macos + env: + SHARD: deploy_gallery + OS_NAME: macos + # Apple Certificates Match Passphrase + MATCH_PASSWORD: ENCRYPTED[db07f252234397090e3ec59152d9ec1831f5ecd0ef97d247b1dca757bbb9ef9b7c832a39bce2caf1949ccdf097e59a73] + # Apple Fastlane Password + FASTLANE_PASSWORD: ENCRYPTED[0bf9bb0cc2cb32a0ed18470cf2c9df0f587cce5f8b04adbd6cff15ca5bde7a74f721ee580227b132ab6b032f08e52ae0] + # Private repo for publishing certificates. + PUBLISHING_MATCH_CERTIFICATE_REPO: git@github.com:flutter/private_publishing_certificates.git + osx_instance: + image: high-sierra-xcode-9.4.1 + git_fetch_script: git fetch origin + setup_script: + - bin/flutter config --no-analytics + - bin/flutter update-packages + test_all_script: + - ./dev/bots/deploy_gallery.sh + task: name: tests-macos env: SHARD: tests + OS_NAME: macos osx_instance: image: high-sierra-xcode-9.4.1 git_fetch_script: git fetch origin @@ -99,6 +122,7 @@ task: name: tool_tests-macos env: SHARD: tool_tests + OS_NAME: macos osx_instance: image: high-sierra-xcode-9.4.1 git_fetch_script: git fetch origin diff --git a/dev/bots/cirrus_setup.sh b/dev/bots/cirrus_setup.sh new file mode 100755 index 00000000000..2f15e894713 --- /dev/null +++ b/dev/bots/cirrus_setup.sh @@ -0,0 +1,86 @@ +#!/bin/bash +set -e + +# This script is only meant to be run by the Cirrus CI system, not locally. +# It must be run from the root of the Flutter repo. + +# Collects log output in a tmpfile, but only prints it if the command fails. +function log_on_fail() { + local COMMAND="$@" + local TMPDIR="$(mktemp -d)" + local TMPFILE="$TMPDIR/command.log" + local EXIT=0 + if ("$@" > "$TMPFILE" 2>&1); then + echo "'$COMMAND' succeeded." + else + EXIT=$? + cat "$TMPFILE" 1>&2 + echo "FAIL: '$COMMAND' exited with code $EXIT" 1>&2 + fi + rm -rf "$TMPDIR" + return "$EXIT" +} + +function run_sdkmanager() { + echo "y" | sdkmanager "$@" +} + +function setup_android() { + echo "Installing Android SDK so the Gallery app can built and/or deployed for $CIRRUS_BRANCH." + set -x + wget --progress=dot:giga https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip + mkdir android-sdk + unzip -qq sdk-tools-linux-3859397.zip -d android-sdk + export ANDROID_HOME="$PWD/android-sdk" + export PATH="$PWD/android-sdk/tools/bin:$PATH" + mkdir -p "$HOME/.android" # silence sdkmanager warning + # Make sure we don't print our secrets to the logs! + set +x + if [ -n "$ANDROID_GALLERY_UPLOAD_KEY" ]; then + echo "$ANDROID_GALLERY_UPLOAD_KEY" | base64 --decode > "$HOME/.android/debug.keystore" + fi + echo 'count=0' > "$HOME/.android/repositories.cfg" # silence sdkmanager warning + local SDKS=( + "tools" + "platform-tools" + "build-tools;27.0.3" + "platforms;android-27" + "extras;android;m2repository" + "extras;google;m2repository" + "patcher;v4" + ) + for SDK in "${SDKS[@]}"; do + echo "Installing '$SDK' with sdkmanager" + log_on_fail run_sdkmanager "$SDK" + done + set -x + sdkmanager --list + wget --progress=dot:giga http://services.gradle.org/distributions/gradle-4.4-bin.zip + unzip -qq gradle-4.4-bin.zip + export GRADLE_HOME="$PWD/gradle-4.4" + export PATH="$GRADLE_HOME/bin:$PATH" + gradle -v + set +x +} + +echo "Flutter SDK directory is: $PWD" + +if [[ -n "$CIRRUS_CI" && "$OS_NAME" == "linux" && "$SHARD" == "deploy_gallery" ]]; then + setup_android +fi + +# Run flutter to download dependencies and precompile things, and to disable +# analytics on the bots. +echo "Downloading build dependencies and pre-compiling Flutter snapshot" +log_on_fail ./bin/flutter config --no-analytics + +# Run doctor, to print it to the log for debugging purposes. +./bin/flutter doctor -v + +# Run pub get in all the repo packages. +echo "Updating packages for Flutter." +log_on_fail ./bin/flutter update-packages + +# Make sure the master branch has been fetched so we can determine a branch +# point for PRs. +git fetch origin master diff --git a/dev/bots/deploy_gallery.sh b/dev/bots/deploy_gallery.sh new file mode 100755 index 00000000000..ce56548ddd7 --- /dev/null +++ b/dev/bots/deploy_gallery.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +set -e + +function script_location() { + local script_location="${BASH_SOURCE[0]}" + # Resolve symlinks + while [[ -h "$script_location" ]]; do + DIR="$(cd -P "$(dirname "$script_location")" >/dev/null && pwd)" + script_location="$(readlink "$script_location")" + [[ "$script_location" != /* ]] && script_location="$DIR/$script_location" + done + echo "$(cd -P "$(dirname "$script_location")" >/dev/null && pwd)" +} + +# So that users can run this script locally from any directory and it will work as +# expected. +SCRIPT_LOCATION="$(script_location)" +FLUTTER_ROOT="$(dirname "$(dirname "$SCRIPT_LOCATION")")" + +export PATH="$FLUTTER_ROOT/bin:$FLUTTER_ROOT/bin/cache/dart-sdk/bin:$PATH" + +set -x + +cd "$FLUTTER_ROOT" + +if [[ "$SHARD" = "deploy_gallery" ]]; then + version="$( doc/robots.txt while : ; do @@ -49,7 +47,7 @@ if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then done fi - if [ "$TRAVIS_BRANCH" == "beta" ]; then + if [[ "$CIRRUS_BRANCH" == "beta" ]]; then echo "Updating beta docs: https://docs.flutter.io/" while : ; do firebase deploy --project docs-flutter-io && break