-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtravis-ci
executable file
·181 lines (152 loc) · 5.08 KB
/
travis-ci
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/bin/bash -e
# shellcheck source=commands/.settings
. "${BASH_SOURCE%/*}/commands/.settings"
if [ "$TRAVIS_OS_NAME" = linux ]; then
TMP="/tmp/"
elif [ "$TRAVIS_OS_NAME" = osx ]; then
TMP="$TMPDIR"
fi
LOCK="${TMP}install.lock"
if [ "$TRAVIS_OS_NAME" = linux ]; then
locked() { flock "$LOCK" "$@"; }
elif [ "$TRAVIS_OS_NAME" = osx ]; then
locked() {
while ! shlock -f "$LOCK" -p $$ ; do sleep 0.25; done
local EXIT=0
"$@" || EXIT=$?
rm -f "$LOCK"
return $EXIT
}
elif [ "$TRAVIS_OS_NAME" = windows ]; then
locked() { "$@"; }
fi
finish() {
if [ -f "$TMP.$1" ]; then
local EXIT=0
tail -n 1000 -f "$TMP.$1" &
local PID=$!
if ! wait "${!1}"; then
EXIT=$?
fi
kill -9 $PID
rm -f "$TMP.$1"
return $EXIT
fi
}
concurrently() {
local VAR="$1"
shift
"$@" >> "$TMP.$VAR" 2>&1 &
local PID=$!
export "$VAR"=$PID
if [ "$INSTALL_WAIT" = 1 ]; then finish "$VAR"; fi
}
ignore() {
"$@" || true
}
folded() {
FOLD=$((FOLD+1))
echo -e "travis_fold:start:cppsm.$FOLD\033[33;1m$1\033[0m"
travis_time_start
shift
echo "$@"
"$@"
travis_time_finish
echo -e "\ntravis_fold:end:cppsm.$FOLD\r"
}
folded-finish() {
[ ! -f "$TMP.$1" ] || folded ... finish "$1"
}
folded ... concurrently GIT_UPDATE_PID git submodule update --init --depth 1 --jobs "$N_PARALLEL_UPDATE"
install-emsdk() {
git clone https://github.com/emscripten-core/emsdk.git .build-emsdk
cd .build-emsdk
./emsdk install latest
./emsdk activate latest
}
[ "$TRAVIS_OS_NAME" = windows ] || [ "$EMSCRIPTEN" != 1 ] || folded ... concurrently EMSCRIPTEN_INSTALL_PID install-emsdk
if [ "$TRAVIS_OS_NAME" = osx ]; then
[ "$CODECOV" != 1 ] || HOMEBREW_NO_INSTALL_CLEANUP=1 folded ... concurrently LCOV_INSTALL_PID locked brew install lcov
[ "$FORMAT_CHECK" = 0 ] || HOMEBREW_NO_INSTALL_CLEANUP=1 folded ... concurrently FORMAT_INSTALL_PID locked brew install prettier clang-format
elif [ "$TRAVIS_OS_NAME" = windows ]; then
[ "$GCC" = 0 ] || folded ... concurrently MAKE_INSTALL_PID choco install make
[ "$VS2019" = 0 ] || folded ... concurrently VS2019_INSTALL_PID ignore choco install visualstudio2019-workload-vctools
fi
export CMAKE_HELP
CMAKE_HELP="$(cmake --help)"
if ! command -v cppsm > /dev/null; then
export PATH="$PWD/.cppsm/.cli/bin:$PATH"
fi
folded-finish GIT_UPDATE_PID
if [ "$TRAVIS_OS_NAME" = osx ] && [ "$GCC" != 0 ]; then
for ((i=8; i<20; ++i)); do
if command -v "gcc-$i" > /dev/null ; then
GCC_VERSION="$i"
fi
done
fi
run-tests() {
for CONFIG in Debug Release; do
if [ "$TRAVIS_OS_NAME" = linux ]; then
[ "$CLANG" = 0 ] || CMAKE_BUILD_TYPE=$CONFIG CC=clang CXX=clang++ folded "Clang $CONFIG" cppsm test
[ "$GCC" = 0 ] || CMAKE_BUILD_TYPE=$CONFIG CC=gcc-9 CXX=g++-9 folded "GCC $CONFIG" cppsm test
elif [ "$TRAVIS_OS_NAME" = windows ]; then
[ "$VS2017" = 0 ] || CMAKE_BUILD_TYPE=$CONFIG CC='' CXX='' CMAKE_GENERATOR="Visual Studio 15 2017" folded "VS2017 $CONFIG" cppsm test
[ "$GCC" = 0 ] || folded-finish MAKE_INSTALL_PID
[ "$GCC" = 0 ] || CMAKE_BUILD_TYPE=$CONFIG CC="gcc" CXX="g++" folded "GCC $CONFIG" cppsm test
elif [ "$TRAVIS_OS_NAME" = osx ]; then
[ "$CLANG" = 0 ] || CMAKE_BUILD_TYPE=$CONFIG CC='' CXX='' CMAKE_GENERATOR=Xcode folded "Clang $CONFIG" cppsm test
[ "$GCC" = 0 ] || CMAKE_BUILD_TYPE=$CONFIG CC=gcc-$GCC_VERSION CXX=g++-$GCC_VERSION folded "GCC $CONFIG" cppsm test
else
echo "Unsupported OS: $TRAVIS_OS_NAME"
exit 1
fi
done
if [ "$TRAVIS_OS_NAME" = windows ] && [ "$VS2019" != 0 ]; then
folded-finish VS2019_INSTALL_PID
for CONFIG in Debug Release; do
CMAKE_BUILD_TYPE=$CONFIG CC='' CXX='' CMAKE_GENERATOR="Visual Studio 16 2019" folded "VS2019 $CONFIG" cppsm test
done
# shellcheck disable=2009,2046
kill -9 $(ps | grep -o "^ *[0-9]\\+ *$$ " | sed -e 's#^ *##g' -e 's# .*##g') 2>/dev/null || true
fi
if [ "$TRAVIS_OS_NAME" != windows ] && [ "$EMSCRIPTEN" = 1 ]; then
folded-finish EMSCRIPTEN_INSTALL_PID
folded "Sourcing Emscripten environment" . .build-emsdk/emsdk_env.sh
for CONFIG in Debug Release; do
CMAKE_BUILD_TYPE=$CONFIG CC=emcc CXX=emcc folded "Emscripten $CONFIG" cppsm test
done
fi
}
run-tests
if [ "$TRAVIS_OS_NAME" = osx ]; then
code-coverage() {
COVERAGE=1 cppsm test
local COVERAGE_INFO="${TMP}coverage.info"
lcov --capture --directory . --output-file "$COVERAGE_INFO"
lcov --remove "$COVERAGE_INFO" '/Applications/*' --output-file "$COVERAGE_INFO"
bash <(curl -s https://codecov.io/bash) -f "$COVERAGE_INFO"
}
format-check() {
git checkout .
cppsm format
if [[ $(git status --porcelain) ]] ; then
git status
git diff
exit 1
fi
}
[ "$CODECOV" != 1 ] || folded-finish LCOV_INSTALL_PID
[ "$CODECOV" != 1 ] || folded 'Code coverage' code-coverage
[ "$FORMAT_CHECK" = 0 ] || folded-finish FORMAT_INSTALL_PID
[ "$FORMAT_CHECK" = 0 ] || folded 'Format check' format-check
fi
if [ "$UPGRADE_CHECK" != 0 ]; then
upgrade() {
cppsm upgrade
}
folded 'Upgrading dependencies' upgrade
if ! git diff --cached --quiet; then
run-tests
fi
fi