diff --git a/.travis.yml b/.travis.yml index 9d7d2526d7..b71170795b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,10 @@ language: node_js sudo: false -# force trusty as Google Chrome addon is not supported on Precise dist: trusty node_js: - '6.9.5' addons: - chrome: stable # firefox: "38.0" apt: sources: diff --git a/aio/scripts/test-pwa-score.js b/aio/scripts/test-pwa-score.js index a53e1b28b2..388d76651d 100644 --- a/aio/scripts/test-pwa-score.js +++ b/aio/scripts/test-pwa-score.js @@ -19,6 +19,11 @@ const config = require('lighthouse/lighthouse-core/config/default.js'); // Constants const VIEWER_URL = 'https://googlechrome.github.io/lighthouse/viewer/'; +// Specify the path to Chrome on Travis +if (process.env.TRAVIS) { + process.env.LIGHTHOUSE_CHROMIUM_PATH = process.env.CHROME_BIN; +} + // Run _main(process.argv.slice(2)); diff --git a/aio/tools/examples/shared/protractor.config.js b/aio/tools/examples/shared/protractor.config.js index 21b54feb8b..b5c090e2df 100644 --- a/aio/tools/examples/shared/protractor.config.js +++ b/aio/tools/examples/shared/protractor.config.js @@ -20,7 +20,11 @@ exports.config = { // Capabilities to be passed to the webdriver instance. capabilities: { - 'browserName': 'chrome' + 'browserName': 'chrome', + // For Travis + chromeOptions: { + binary: process.env.CHROME_BIN + } }, // Framework to use. Jasmine is recommended. diff --git a/scripts/ci/env.sh b/scripts/ci/env.sh index 3ec8e8918e..2fadcf21d3 100755 --- a/scripts/ci/env.sh +++ b/scripts/ci/env.sh @@ -36,6 +36,7 @@ fi setEnvVar NODE_VERSION 6.9.5 setEnvVar YARN_VERSION 1.0.2 +setEnvVar CHROMIUM_VERSION 499098 # Chrome 62 linux stable, see https://www.chromium.org/developers/calendar setEnvVar BAZEL_VERSION 0.5.4 setEnvVar SAUCE_CONNECT_VERSION 4.4.9 setEnvVar ANGULAR_CLI_VERSION 1.4.0-rc.2 @@ -103,6 +104,7 @@ if [[ ${TRAVIS:-} ]]; then setEnvVar BROWSER_STACK_USERNAME angularteam1 # not using use setEnvVar so that we don't print the key export BROWSER_STACK_ACCESS_KEY=BWCd4SynLzdDcv8xtzsB + setEnvVar CHROME_BIN ${HOME}/.chrome/chromium/chrome-linux/chrome setEnvVar BROWSER_PROVIDER_READY_FILE /tmp/angular-build/browser-provider-tunnel-init.lock fi diff --git a/scripts/ci/install-chromium.sh b/scripts/ci/install-chromium.sh new file mode 100755 index 0000000000..c18f3c9f7f --- /dev/null +++ b/scripts/ci/install-chromium.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +set -u -e -o pipefail + +# Setup environment +readonly thisDir=$(cd $(dirname $0); pwd) +source ${thisDir}/_travis-fold.sh + + +# This script basically follows the instructions to download an old version of Chromium: https://www.chromium.org/getting-involved/download-chromium +# 1) It retrieves the current stable version number from https://www.chromium.org/developers/calendar (via the https://omahaproxy.appspot.com/all file), e.g. 359700 for Chromium 48. +# 2) It checks the Travis cache for this specific version +# 3) If not available, it downloads and caches it, using the "decrement commit number" trick. + +#Build version read from the OmahaProxy CSV Viewer at https://www.chromium.org/developers/calendar +#Let's use the following version of Chromium, and inform about availability of newer build from https://omahaproxy.appspot.com/all +# +# CHROMIUM_VERSION <<< this variable is now set via env.sh + +PLATFORM="$(uname -s)" +case "$PLATFORM" in + (Darwin) + ARCHITECTURE=Mac + DIST_FILE=chrome-mac.zip + ;; + (Linux) + ARCHITECTURE=Linux_x64 + DIST_FILE=chrome-linux.zip + ;; + (*) + echo Unsupported platform $PLATFORM. Exiting ... >&2 + exit 3 + ;; +esac + +TMP=$(curl -s "https://omahaproxy.appspot.com/all") || true +oldIFS="$IFS" +IFS=' +' +IFS=${IFS:0:1} +lines=( $TMP ) +IFS=',' +for line in "${lines[@]}" + do + lineArray=($line); + if [ "${lineArray[0]}" = "linux" ] && [ "${lineArray[1]}" = "stable" ] ; then + LATEST_CHROMIUM_VERSION="${lineArray[7]}" + fi +done +IFS="$oldIFS" + +CHROMIUM_DIR=$HOME/.chrome/chromium +CHROMIUM_BIN=$CHROMIUM_DIR/chrome-linux/chrome +CHROMIUM_VERSION_FILE=$CHROMIUM_DIR/VERSION + +EXISTING_VERSION="" +if [[ -f $CHROMIUM_VERSION_FILE && -x $CHROMIUM_BIN ]]; then + EXISTING_VERSION=`cat $CHROMIUM_VERSION_FILE` + echo Found cached Chromium version: ${EXISTING_VERSION} +fi + +if [[ "$EXISTING_VERSION" != "$CHROMIUM_VERSION" ]]; then + echo Downloading Chromium version: ${CHROMIUM_VERSION} + rm -fR $CHROMIUM_DIR + mkdir -p $CHROMIUM_DIR + + NEXT=$CHROMIUM_VERSION + FILE="chrome-linux.zip" + STATUS=404 + while [[ $STATUS == 404 && $NEXT -ge 0 ]] + do + echo Fetch Chromium version: ${NEXT} + STATUS=$(curl "https://storage.googleapis.com/chromium-browser-snapshots/${ARCHITECTURE}/${NEXT}/${DIST_FILE}" -s -w %{http_code} --create-dirs -o $FILE) || true + NEXT=$[$NEXT-1] + done + + unzip $FILE -d $CHROMIUM_DIR + rm $FILE + echo $CHROMIUM_VERSION > $CHROMIUM_VERSION_FILE +fi + +if [[ "$CHROMIUM_VERSION" != "$LATEST_CHROMIUM_VERSION" ]]; then + echo "New version of Chromium available. Update install-chromium.sh with build number: ${LATEST_CHROMIUM_VERSION}" +fi diff --git a/scripts/ci/install.sh b/scripts/ci/install.sh index 04d3b0c424..de53413d75 100755 --- a/scripts/ci/install.sh +++ b/scripts/ci/install.sh @@ -72,11 +72,21 @@ if [[ ${TRAVIS} && (${CI_MODE} == "bazel" || ${CI_MODE} == "e2e_2") ]]; then travisFoldEnd "bazel-install" fi -# Start xvfb for local Chrome testing -if [[ ${TRAVIS} && (${CI_MODE} == "js" || ${CI_MODE} == "e2e" || ${CI_MODE} == "e2e_2" || ${CI_MODE} == "aio" || ${CI_MODE} == "aio_e2e") ]]; then - travisFoldStart "xvfb-start" - sh -e /etc/init.d/xvfb start - travisFoldEnd "xvfb-start" + +# Install Chromium +if [[ ${TRAVIS} && ${CI_MODE} == "js" || ${CI_MODE} == "e2e" || ${CI_MODE} == "e2e_2" || ${CI_MODE} == "aio" || ${CI_MODE} == "aio_e2e" ]]; then + travisFoldStart "install-chromium" + ( + ${thisDir}/install-chromium.sh + + # Start xvfb for local Chrome used for testing + if [[ ${TRAVIS} ]]; then + travisFoldStart "install-chromium.xvfb-start" + sh -e /etc/init.d/xvfb start + travisFoldEnd "install-chromium.xvfb-start" + fi + ) + travisFoldEnd "install-chromium" fi