From e53c7ed8d10b65f0dc5feea012df538445b9c928 Mon Sep 17 00:00:00 2001 From: Steve Gravrock Date: Sun, 16 Mar 2025 14:34:36 -0700 Subject: [PATCH] Update to Sauce Connect 5 --- .circleci/config.yml | 18 +++++++++------- scripts/start-sauce-connect | 27 ++++++----------------- scripts/stop-sauce-connect | 38 +++++++++++++++++++++------------ spec/support/jasmine-browser.js | 2 +- 4 files changed, 42 insertions(+), 43 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index df511e8e..a1f9229b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -71,12 +71,14 @@ jobs: - run: name: Install Sauce Connect command: | - cd /tmp - curl https://saucelabs.com/downloads/sc-4.7.1-linux.tar.gz | tar zxf - - chmod +x sc-4.7.1-linux/bin/sc + tmpdir=$(mktemp -d) + cd "$tmpdir" + curl https://saucelabs.com/downloads/sauce-connect/5.2.2/sauce-connect-5.2.2_linux.x86_64.tar.gz | tar zxf - + chmod +x sc mkdir ~/workspace/bin - cp sc-4.7.1-linux/bin/sc ~/workspace/bin - ~/workspace/bin/sc --version + cp sc ~/workspace/bin + echo "Sauce Connect version info:" + ~/workspace/bin/sc version - run: name: Run tests command: | @@ -84,13 +86,13 @@ jobs: # cleanly if we kill it from a different step than it started in. export PATH=$PATH:$HOME/workspace/bin - export SAUCE_TUNNEL_IDENTIFIER=$CIRCLE_WORKFLOW_JOB_ID - scripts/start-sauce-connect sauce-pidfile + export SAUCE_TUNNEL_NAME=$CIRCLE_WORKFLOW_JOB_ID + scripts/start-sauce-connect set +o errexit scripts/run-all-browsers exitcode=$? set -o errexit - scripts/stop-sauce-connect $(cat sauce-pidfile) + scripts/stop-sauce-connect exit $exitcode workflows: diff --git a/scripts/start-sauce-connect b/scripts/start-sauce-connect index cfe551b2..3fda7478 100755 --- a/scripts/start-sauce-connect +++ b/scripts/start-sauce-connect @@ -2,32 +2,19 @@ set -o errexit set -o pipefail -if [ $# -gt 1 -o "$1" = "--help" ]; then - echo "Usage: $0 [pidfile]" 1>&2 - exit -fi - -if [ -z "$1" ]; then - pidfile=`mktemp` -else - pidfile="$1" +if [ -z "$SAUCE_TUNNEL_NAME" ]; then + echo "SAUCE_TUNNEL_NAME must be set" 1>&2 + exit 1 fi outfile=`mktemp` echo "Starting Sauce Connect" -if [ -z "$SAUCE_TUNNEL_IDENTIFIER" ]; then - sc -u "$SAUCE_USERNAME" -k "$SAUCE_ACCESS_KEY" -X 4445 --pidfile "$pidfile" 2>&1 | tee "$outfile" & -else - sc -u "$SAUCE_USERNAME" -k "$SAUCE_ACCESS_KEY" -X 4445 --pidfile "$pidfile" -i "$SAUCE_TUNNEL_IDENTIFIER" 2>&1 | tee "$outfile" & -fi +sc legacy --proxy-localhost --tunnel-domains localhost --region us-west \ + -u "$SAUCE_USERNAME" -k "$SAUCE_ACCESS_KEY" \ + -X 4445 -i "$SAUCE_TUNNEL_NAME" 2>&1 | tee "$outfile" & -while ! fgrep "Sauce Connect is up, you may start your tests." "$outfile" > /dev/null; do +while ! fgrep "Sauce Connect is up, you may start your tests" "$outfile" > /dev/null; do sleep 1 - - if ! ps -p $(cat "$pidfile") > /dev/null; then - echo "Sauce Connect exited" - exit 1 - fi done if ! nc -z localhost 4445; then diff --git a/scripts/stop-sauce-connect b/scripts/stop-sauce-connect index 1b82081a..fce6924c 100755 --- a/scripts/stop-sauce-connect +++ b/scripts/stop-sauce-connect @@ -2,20 +2,31 @@ set -o errexit set -o pipefail -if [ -z "$1" ]; then - echo "Usage: $0 sauce-connect-pid" 1>&2 - exit +echo "Stopping Sauce Connect" + +# Sauce Connect 4 docs said that we can just kill -9 it if we don't care about +# failing any ongoing sessions. In practice, that sometimes worked but usually +# leaked a tunnel so badly that you couldn't even stop it from the web UI. +# +# Sauce Connect 5 appears to be *much* more prone to hung jobs. Hung jobs have +# a shutdown deadline of *three hours*, however, they appear to usually exit +# within a minute or so. Unfortunately the only thing the Sauce Connect 5 docs +# say about shutdown is that "you can stop your tunnel from the terminal where +# Sauce Connect is running by entering Ctrl+C". Nothing is said about what to +# do if Sauce Connect doesn't exit on it own or about non-interactive usage. +# +# So we do our best to be well-behaved without assuming that Sauce Connect +# always is: send it the same signal that it would get if an interactive user +# hit ctrl-c, wait a while for it to exit, then give up so that the CI task +# doesn't keep running indefinitely. + +pid=$(ps | grep sc | grep -v grep | awk '{print $1}') + +if [ -z $pid ]; then + echo "sc does not appear to be running" 1>&2 + exit 1 fi -pid="$1" -echo "PID: $pid" - -echo "Stopping Sauce Connect" -# Sauce Connect docs say that we can just kill -9 it if we don't care about -# failing any ongoing sessions. In practice, that sometimes works but usually -# leaks a tunnel so badly that you can't even stop it from the web UI. -# Instead of doing that, we give Sauce Connect some time to shut down -# gracefully and then give up. kill -INT $pid # Wait up to 2 minutes, then give up if it's still running @@ -28,6 +39,5 @@ done if ps -p $pid > /dev/null; then echo "Could not shut down Sauce Connect" + exit 1 fi - -exit $exitcode diff --git a/spec/support/jasmine-browser.js b/spec/support/jasmine-browser.js index 39969c59..588f4cd9 100644 --- a/spec/support/jasmine-browser.js +++ b/spec/support/jasmine-browser.js @@ -38,7 +38,7 @@ module.exports = { name: `jasmine-core ${new Date().toISOString()}`, build: `Core ${process.env.CIRCLE_BUILD_NUM || 'Ran locally'}`, tags: ['Jasmine-Core'], - tunnelIdentifier: process.env.SAUCE_TUNNEL_IDENTIFIER, + tunnelName: process.env.SAUCE_TUNNEL_NAME, username: process.env.SAUCE_USERNAME, accessKey: process.env.SAUCE_ACCESS_KEY }