This repository has been archived by the owner on Dec 13, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 44
/
ci-run-tests.sh
executable file
·129 lines (108 loc) · 4.44 KB
/
ci-run-tests.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/sh
YARN_OP_FLAGS="--ignore-engines"
YARN_BUILD_FLAGS="$YARN_OP_FLAGS --build-from-source"
alias yarn_install_command="yarn $YARN_BUILD_FLAGS"
alias yarn_ci_command="yarn $YARN_OP_FLAGS --frozen-lockfile"
alias yarn_build_command="yarn $YARN_OP_FLAGS build"
alias yarn_dist_command="yarn $YARN_OP_FLAGS dist"
alias yarn_rm_command="yarn $YARN_OP_FLAGS remove"
alias yarn_add_command="yarn $YARN_BUILD_FLAGS add -D"
alias yann_add_global_command="yarn global add $YARN_BUILD_FLAGS"
# Enable core dumps.
ulimit -c unlimited
# Clone MetaMask.
echo -n "Cloning MetaMask..."
git clone --depth 1 --single-branch --branch $METAMASK_BRANCH https://github.com/${METAMASK_REPOSITORY} $WORKING_DIRECTORY/metamask &>/dev/null
echo "OK"
echo -n "Injecting CF into MetaMask..."
# Inject CF IIFE dependencies into MetaMask.
cp $COUNTERFACTUAL_PATH/packages/cf.js/dist/index-iife.js $WORKING_DIRECTORY/metamask/app/vendor/counterfactual/node/cf.js.iife.js
cp $COUNTERFACTUAL_PATH/packages/node/dist/index.iife.js $WORKING_DIRECTORY/metamask/app/vendor/counterfactual/node/node.iife.js
cp $COUNTERFACTUAL_PATH/packages/firebase-client/dist/index.iife.js $WORKING_DIRECTORY/metamask/app/vendor/counterfactual/node/firebase-client.iife.js
echo "OK"
cd $WORKING_DIRECTORY/metamask
# Build MetaMask without some heavy binaries. Mostly done because @sentry/cli
# isn't compatible with Alpine Linux, and we don't need it in this case.
# We also manually add @babel/core because on a subdependency level, it was
# getting installed and it's necessary for transpilation.
echo -n "Removing non-essential dependencies..."
mv package.json package.json.original
sed -r '/\@sentry\/cli|\@storybook|eslint|chromedriver|geckodriver|selenium-webdriver|jsdom|"karma|"mocha|tape|testem|qunitjs|gh-pages|"ganache-cli/d' package.json.original > package.json
echo "OK"
echo -n "Building MetaMask..."
yarn_ci_command #&>/dev/null
yarn_add_command @babel/core #&>/dev/null
yarn_dist_command #&>/dev/null
echo "OK"
# Move MM distributable to Greenboard.
echo -n "Cleaning up..."
mv $WORKING_DIRECTORY/metamask/dist/chrome $COUNTERFACTUAL_PATH/packages/greenboard/extension
rm -rf $WORKING_DIRECTORY/metamask;
echo "OK"
# Install dependencies for Greenboard.
echo -n "Installing Greenboard dependencies..."
cd $COUNTERFACTUAL_PATH/packages/greenboard
yarn_install_command #&>/dev/null
cp -rl node_modules/* ../../node_modules/
yann_add_global_command serve #&>/dev/null
echo "OK"
# Install dependencies for the Hub.
echo -n "Installing Hub dependencies..."
cd $COUNTERFACTUAL_PATH/packages/simple-hub-server
yarn_install_command &>/dev/null
cp -rl node_modules/* ../../node_modules/
echo "OK"
# Initialize logs.
echo -n "Initializing logs..."
mkdir -p $COUNTERFACTUAL_PATH/packages/greenboard/chrome-profile
touch /tmp/hub-wallet.log
touch $COUNTERFACTUAL_PATH/packages/greenboard/chrome-profile/chrome_debug.log
touch $COUNTERFACTUAL_PATH/packages/greenboard/chrome-profile/greenboard-local-storage.json
echo "OK"
# Run the Hub and the Wallet UI.
cd $COUNTERFACTUAL_PATH/
yarn run:wallet:e2e & wait %1; WALLET_E2E_EXIT_CODE=$?
cd $COUNTERFACTUAL_PATH/packages/greenboard
# Run the tests through Xvfb.
echo -n "Waiting for the Hub to spin up..."
while ! sh -c "nc -n localhost 9001 < /dev/null";
do
if [ "$WALLET_E2E_EXIT_CODE" -ne 0 ];
then
break
fi
sleep 0.1;
done
echo "OK"
echo -n "Waiting for the Wallet UI to spin up..."
while ! sh -c "nc -n localhost 3334 < /dev/null";
do
if [ "$WALLET_E2E_EXIT_CODE" -ne 0 ];
then
break
fi
sleep 0.1;
done
echo "OK"
if [ "$WALLET_E2E_EXIT_CODE" -ne 0 ]; then
echo "Cannot run tests, Hub/Wallet UI initialization failed"
mkdir -p /tmp/core_dumps
cp /home/circleci/project/packages/simple-hub-server/core* /tmp/core_dumps
else
echo "Running tests now!"
xvfb-run yarn start
fi
echo "Hub & Wallet UI logs ==========================================="
cat /tmp/hub-wallet.log
echo "ChromeDriver logs =============================================="
cat ./chrome-profile/chrome_debug.log
echo "Node storage dump =============================================="
cat ./chrome-profile/greenboard-local-storage.json
echo "File lists ====================================================="
echo "Node"
ls -alF $COUNTERFACTUAL_PATH/packages/node/*
echo "Greenboard"
ls -alF $COUNTERFACTUAL_PATH/packages/greenboard/*
echo "Simple Hub Server"
ls -alF $COUNTERFACTUAL_PATH/packages/simple-hub-server/*
exit $WALLET_E2E_EXIT_CODE