ci: move local and saucelabs unit tests to circle (#27937)
Moving the tests over to CircleCI in pretty much "as-is" state just so that we can drop the dependency on Travis. In the followup changes we plan to migrate these tests to run on sauce under bazel. @gregmagolan is working on that. I've previously verified that all the tests executed in legacy-unit-tests-local already under bazel. Therefore the legacy-unit-tests-local job is strictly not necessary any more, but given how flaky legacy-unit-tests-saucelabs is, it is good to have the -local job just so that we can quickly determine if any failure is a flake or legit issue (the bazel version of these tests could theoretically run in a slightly different way and fail or not fail in a different way, so having -lcoal job is just an extra safety check). This change was coauthored with @devversion PR Close #27937
This commit is contained in:

committed by
Kara Erickson

parent
9e04284bb3
commit
50fadfaca3
@ -20,6 +20,8 @@ if [[ ${CI_MODE:-} == "bazel" ]]; then
|
||||
fi
|
||||
|
||||
travisFoldStart "tsc tools"
|
||||
# TODO: I think these three can be deleted... but I'm not sure
|
||||
# let's delete them one at a time and test on CI
|
||||
$(npm bin)/tsc -p tools
|
||||
$(npm bin)/tsc -p packages/compiler/tsconfig-tools.json
|
||||
$(npm bin)/tsc -p packages/compiler-cli/tsconfig-tools.json
|
||||
|
@ -5,64 +5,11 @@ set -u -e -o pipefail
|
||||
TRAVIS=${TRAVIS:-}
|
||||
CI_MODE=${CI_MODE:-}
|
||||
|
||||
# Setup environment
|
||||
readonly thisDir=$(cd $(dirname $0); pwd)
|
||||
source ${thisDir}/_travis-fold.sh
|
||||
|
||||
|
||||
# If the previous commands in the `script` section of .travis.yaml failed, then abort.
|
||||
# The variable is not set in early stages of the build, so we default to 0 there.
|
||||
# https://docs.travis-ci.com/user/environment-variables/
|
||||
if [[ ${TRAVIS_TEST_RESULT=0} == 1 ]]; then
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
|
||||
mkdir -p ${LOGS_DIR}
|
||||
|
||||
|
||||
# TODO: install nvm?? it's already on travis so we don't need it
|
||||
#curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
|
||||
|
||||
|
||||
# Install node
|
||||
#nvm install ${NODE_VERSION}
|
||||
|
||||
|
||||
# Install version of yarn that we are locked against
|
||||
travisFoldStart "install-yarn"
|
||||
curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version "${YARN_VERSION}"
|
||||
travisFoldEnd "install-yarn"
|
||||
|
||||
|
||||
# Install all npm dependencies according to yarn.lock
|
||||
travisFoldStart "yarn-install"
|
||||
(node tools/npm/check-node-modules --purge && yarn postinstall) || yarn install --frozen-lockfile --non-interactive
|
||||
travisFoldEnd "yarn-install"
|
||||
|
||||
|
||||
|
||||
# Install Chromium
|
||||
if [[ ${TRAVIS} &&
|
||||
${CI_MODE} == "js" ||
|
||||
${CI_MODE} == "e2e" ||
|
||||
${CI_MODE} == "e2e_2"
|
||||
]]; 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
|
||||
|
||||
|
||||
# Install Sauce Connect
|
||||
if [[ ${TRAVIS}] && (${CI_MODE} == "saucelabs_required" || ${CI_MODE} == "saucelabs_optional") ]]; then
|
||||
travisFoldStart "install-sauceConnect"
|
||||
|
@ -1,11 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -u -e -o pipefail
|
||||
|
||||
# Setup environment
|
||||
readonly thisDir=$(cd $(dirname $0); pwd)
|
||||
source ${thisDir}/_travis-fold.sh
|
||||
|
||||
travisFoldStart "test.unit.localChrome"
|
||||
$(npm bin)/karma start ./karma-js.conf.js --single-run --browsers=${KARMA_JS_BROWSERS}
|
||||
travisFoldEnd "test.unit.localChrome"
|
@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Wait for Connect to be ready before exiting
|
||||
printf "Connecting to Sauce."
|
||||
while [ ! -f $BROWSER_PROVIDER_READY_FILE ]; do
|
||||
printf "."
|
||||
#dart2js takes longer than the travis 10 min timeout to complete
|
||||
sleep .5
|
||||
done
|
||||
echo "Connected"
|
@ -1,57 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set +x -u -e -o pipefail
|
||||
|
||||
# Setup environment
|
||||
readonly thisDir=$(cd $(dirname $0); pwd)
|
||||
source ${thisDir}/../ci/_travis-fold.sh
|
||||
|
||||
|
||||
|
||||
# Setup and start Sauce Connect for your TravisCI build
|
||||
# This script requires your .travis.yml to include the following two private env variables:
|
||||
# SAUCE_USERNAME
|
||||
# SAUCE_ACCESS_KEY
|
||||
# Follow the steps at https://saucelabs.com/opensource/travis to set that up.
|
||||
#
|
||||
# Curl and run this script as part of your .travis.yml before_script section:
|
||||
# before_script:
|
||||
# - curl https://gist.github.com/santiycr/5139565/raw/sauce_connect_setup.sh | bash
|
||||
|
||||
CONNECT_URL="https://saucelabs.com/downloads/sc-${SAUCE_CONNECT_VERSION}-linux.tar.gz"
|
||||
CONNECT_DIR="/tmp/sauce-connect-$RANDOM"
|
||||
CONNECT_DOWNLOAD="sc-latest-linux.tar.gz"
|
||||
|
||||
# We don't want to create a log file because sauceconnect always logs in verbose mode. This seems
|
||||
# to be overwhelming Travis and causing flakes when we are cat-ing the log in "print-logs.sh"
|
||||
CONNECT_LOG="/dev/null"
|
||||
|
||||
# Even though the stdout of sauceconnect is not very verbose, we don't want to log this to
|
||||
# Travis because it will show up in between different travis log-output groups
|
||||
CONNECT_STDOUT="/dev/null"
|
||||
|
||||
# Get Connect and start it
|
||||
mkdir -p $CONNECT_DIR
|
||||
cd $CONNECT_DIR
|
||||
curl $CONNECT_URL -o $CONNECT_DOWNLOAD 2> /dev/null 1> /dev/null
|
||||
mkdir sauce-connect
|
||||
tar --extract --file=$CONNECT_DOWNLOAD --strip-components=1 --directory=sauce-connect > /dev/null
|
||||
rm $CONNECT_DOWNLOAD
|
||||
|
||||
SAUCE_ACCESS_KEY=`echo $SAUCE_ACCESS_KEY | rev`
|
||||
|
||||
ARGS=""
|
||||
|
||||
# Set tunnel-id only on Travis, to make local testing easier.
|
||||
if [ ! -z "$TRAVIS_JOB_NUMBER" ]; then
|
||||
ARGS="$ARGS --tunnel-identifier $TRAVIS_JOB_NUMBER"
|
||||
fi
|
||||
if [ ! -z "$BROWSER_PROVIDER_READY_FILE" ]; then
|
||||
ARGS="$ARGS --readyfile $BROWSER_PROVIDER_READY_FILE"
|
||||
fi
|
||||
|
||||
set -v
|
||||
echo "Starting Sauce Connect in the background."
|
||||
sauce-connect/bin/sc -u $SAUCE_USERNAME -k $SAUCE_ACCESS_KEY $ARGS --logfile $CONNECT_LOG \
|
||||
> $CONNECT_STDOUT &
|
||||
set +v
|
@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e -o pipefail
|
||||
|
||||
|
||||
echo "Shutting down Sauce Connect tunnel"
|
||||
|
||||
killall sc
|
||||
|
||||
while [[ -n `ps -ef | grep "sauce-connect-" | grep -v "grep"` ]]; do
|
||||
printf "."
|
||||
sleep .5
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Sauce Connect tunnel has been shut down"
|
25
scripts/saucelabs/start-tunnel.sh
Executable file
25
scripts/saucelabs/start-tunnel.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -x -u -e -o pipefail
|
||||
|
||||
readonly currentDir=$(cd $(dirname $0); pwd)
|
||||
|
||||
# Command arguments that will be passed to sauce-connect.
|
||||
sauceArgs=""
|
||||
|
||||
if [[ ! -z "${SAUCE_READY_FILE}" ]]; then
|
||||
sauceArgs="${sauceArgs} --readyfile ${SAUCE_READY_FILE}"
|
||||
fi
|
||||
|
||||
if [[ ! -z "${SAUCE_PID_FILE}" ]]; then
|
||||
mkdir -p $(dirname ${SAUCE_PID_FILE})
|
||||
sauceArgs="${sauceArgs} --pidfile ${SAUCE_PID_FILE}"
|
||||
fi
|
||||
|
||||
if [[ ! -z "${SAUCE_TUNNEL_IDENTIFIER}" ]]; then
|
||||
sauceArgs="${sauceArgs} --tunnel-identifier ${SAUCE_TUNNEL_IDENTIFIER}"
|
||||
fi
|
||||
|
||||
echo "Starting Sauce Connect. Passed arguments: ${sauceArgs}"
|
||||
|
||||
${currentDir}/../../node_modules/sauce-connect/bin/sc -u ${SAUCE_USERNAME} -k ${SAUCE_ACCESS_KEY} ${sauceArgs}
|
27
scripts/saucelabs/stop-tunnel.sh
Executable file
27
scripts/saucelabs/stop-tunnel.sh
Executable file
@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Disable printing of any executed command because this would cause a lot
|
||||
# of spam due to the loop.
|
||||
set +x -u -e -o pipefail
|
||||
|
||||
if [[ ! -f ${SAUCE_PID_FILE} ]]; then
|
||||
echo "Could not find Saucelabs tunnel PID file. Cannot stop tunnel.."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Shutting down Sauce Connect tunnel"
|
||||
|
||||
# The process id for the sauce-connect instance is stored inside of the pidfile.
|
||||
tunnelProcessId=$(cat ${SAUCE_PID_FILE})
|
||||
|
||||
# Kill the process by using the PID that has been read from the pidfile. Note that
|
||||
# we cannot use killall because CircleCI base container images don't have it installed.
|
||||
kill ${tunnelProcessId}
|
||||
|
||||
while (ps -p ${tunnelProcessId} &> /dev/null); do
|
||||
printf "."
|
||||
sleep .5
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Sauce Connect tunnel has been shut down"
|
26
scripts/saucelabs/wait-for-tunnel.sh
Executable file
26
scripts/saucelabs/wait-for-tunnel.sh
Executable file
@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Disable printing of any executed command because this would cause a lot
|
||||
# of spam due to the loop.
|
||||
set +x -u -e -o pipefail
|
||||
|
||||
# Waits for Saucelabs Connect to be ready before executing any tests.
|
||||
counter=0
|
||||
|
||||
while [[ ! -f ${SAUCE_READY_FILE} ]]; do
|
||||
counter=$((counter + 1))
|
||||
|
||||
# Counter needs to be multiplied by two because the while loop only sleeps a half second.
|
||||
# This has been made in favor of better progress logging (printing dots every half second)
|
||||
if [ $counter -gt $[${SAUCE_READY_FILE_TIMEOUT} * 2] ]; then
|
||||
echo ""
|
||||
echo "Timed out after ${SAUCE_READY_FILE_TIMEOUT} seconds waiting for tunnel ready file"
|
||||
exit 5
|
||||
fi
|
||||
|
||||
printf "."
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Connected to Saucelabs"
|
Reference in New Issue
Block a user