Skip to content

chore: remove inactive browserstack wrapper package #1991

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Dec 1, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ env:
- BROWSER_STACK_ACCESS_KEY=BWCd4SynLzdDcv8xtzsB
- ARCH=linux-x64
- BROWSER_PROVIDER_READY_FILE=/tmp/angular-material2-build/readyfile
- BROWSER_PROVIDER_ERROR_FILE=/tmp/angular-material2-build/errorfile
# GITHUB_TOKEN_ANGULAR
- secure: "fq/U7VDMWO8O8SnAQkdbkoSe2X92PVqg4d044HmRYVmcf6YbO48+xeGJ8yOk0pCBwl3ISO4Q2ot0x546kxfiYBuHkZetlngZxZCtQiFT9kyId8ZKcYdXaIW9OVdw3Gh3tQyUwDucfkVhqcs52D6NZjyE2aWZ4/d1V4kWRO/LMgo="
matrix:
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
"@types/node": "^6.0.34",
"@types/run-sequence": "0.0.27",
"@types/rx": "^2.5.33",
"browserstacktunnel-wrapper": "^2.0.0",
"conventional-changelog": "^1.1.0",
"express": "^4.14.0",
"firebase-tools": "^2.2.1",
Expand Down
59 changes: 0 additions & 59 deletions scripts/browserstack/start_tunnel.js

This file was deleted.

73 changes: 71 additions & 2 deletions scripts/browserstack/start_tunnel.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,72 @@
export BROWSER_STACK_ACCESS_KEY=`echo $BROWSER_STACK_ACCESS_KEY | rev`
#!/bin/bash

node ./scripts/browserstack/start_tunnel.js &
set -e -o pipefail

# Workaround for Travis CI cookbook https://github.com/travis-ci/travis-ci/issues/4862,
# where $PATH will be extended with relative paths to the NPM binaries.
PATH=`echo $PATH | sed -e 's/:\.\/node_modules\/\.bin//'`

TUNNEL_FILE="BrowserStackLocal-linux-x64.zip"
TUNNEL_URL="https://www.browserstack.com/browserstack-local/$TUNNEL_FILE"
TUNNEL_DIR="/tmp/browserstack-tunnel"
TUNNEL_LOG="$LOGS_DIR/browserstack-tunnel.log"

BROWSER_STACK_ACCESS_KEY=`echo $BROWSER_STACK_ACCESS_KEY | rev`

# Cleanup and create the folder structure for the tunnel connector.
rm -rf $TUNNEL_DIR $BROWSER_PROVIDER_READY_FILE
mkdir -p $TUNNEL_DIR
touch $TUNNEL_LOG

cd $TUNNEL_DIR

# Download the browserstack local binaries.
curl $TUNNEL_URL -o $TUNNEL_FILE 2> /dev/null 1> /dev/null

# Extract the browserstack local binaries from the tarball.
mkdir -p browserstack-tunnel
unzip -q $TUNNEL_FILE -d browserstack-tunnel

# Cleanup the download directory.
rm $TUNNEL_FILE

ARGS=""

# Set tunnel-id only on Travis, to make local testing easier.
if [ ! -z "$TRAVIS_JOB_NUMBER" ]; then
ARGS="$ARGS --local-identifier $TRAVIS_JOB_NUMBER"
fi

echo "Starting Browserstack Local in the background, logging into:"
echo " $TUNNEL_LOG"
echo " ---"
echo " $ARGS"

# Extension to the BrowserStackLocal binaries, because those can't create a readyfile.
function create_ready_file {

# To be able to exit the tail properly we need to have a sub shell spawned, which is
# used to track the state of tail.
{ sleep 120; touch $BROWSER_PROVIDER_ERROR_FILE; } &

TIMER_PID=$!

# Disown the background process, because we don't want to show any messages when killing
# the timer.
disown
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think you need to disown here, since you're &> /dev/null below. Right?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The &> /dev/null won't have an effect on that, because when using the kill command the process always prints a message that the child-process terminated.


# When the tail recognizes the `Ctrl-C` log message the BrowserStack Tunnel is up.
{
tail -n0 -f $TUNNEL_LOG --pid $TIMER_PID | { sed '/Ctrl/q' && kill -9 $TIMER_PID; };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it takes more than 2 minutes the tail will exit. We should treat that case since it's an error and it would try to connect later on to browser stack but would fail (since the tunnel isn't connected but this script succeeded).

The way to do that would be (my BASH is rusty) to, instead of just sleep 120 & do something like

  (sleep 120; echo ERROR TIMEOUT > $BROWSER_STACK_ERROR_FILE) &

then on the wait tunnel script, if ERROR_FILE exists just exit with a special code that fails the test.

What do you think?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tail should only run 2 minutes at maximum. If the specific string was found then the $TIMER_PID will be killed and the tail exits.

Did you mean something else?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, if the tail runs for longer than 2 minutes because the connection to the tunnel takes longer. The timer will terminate but the process will succeed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it. Yeah I like that idea with the error file. Will change that

} &> /dev/null

echo
echo "BrowserStack Tunnel ready"

touch $BROWSER_PROVIDER_READY_FILE
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why use killall instead of output the PID of browserstack in the ready file?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed it to killall because we are doing the same with sauce-connect and it would be consistent with the readyfile API from sauce-connect

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not 100% convinced yet that this is right; what if you run these scripts locally on your computer?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can see what you mean, but I think you won't be able to fix this for saucelabs, because the integrated --readyfile option can't write any PID to the file.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay that's fair.

}

browserstack-tunnel/BrowserStackLocal -k $BROWSER_STACK_ACCESS_KEY $ARGS &>> $TUNNEL_LOG &

# Wait for the tunnel to be ready and create the readyfile with the Browserstack PID
create_ready_file &
8 changes: 2 additions & 6 deletions scripts/browserstack/teardown_tunnel.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@ set -e -o pipefail

echo "Shutting down Browserstack tunnel"

PID=$(cat $BROWSER_PROVIDER_READY_FILE);
killall BrowserStackLocal

# Resolving the PID from the readyfile.
kill $PID


while [[ -n `ps -ef | grep $PID | grep -v "grep"` ]]; do
while [[ -n `ps -ef | grep "BrowserStackLocal" | grep -v "grep"` ]]; do
printf "."
sleep .5
done
Expand Down
9 changes: 9 additions & 0 deletions scripts/browserstack/waitfor_tunnel.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
#!/bin/bash

TUNNEL_LOG="$LOGS_DIR/browserstack-tunnel.log"

# Wait for Connect to be ready before exiting
# Time out if we wait for more than 2 minutes, so the process won't run forever.
let "counter=0"

# Exit the process if there are errors reported. Print the tunnel log to the console.
if [ -f $BROWSER_PROVIDER_ERROR_FILE ]; then
echo
echo "An error occurred while starting the tunnel. See error:"
cat $TUNNEL_LOG
exit 5
fi

while [ ! -f $BROWSER_PROVIDER_READY_FILE ]; do
let "counter++"

Expand Down