-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcoverage.sh
executable file
·107 lines (82 loc) · 2.87 KB
/
coverage.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
#!/bin/bash
set -e
ORIGWD="$(pwd)"
SRCDIR="$(cd $(dirname -- ${0%/*}) && pwd)"
JOBS="${JOBS:-4}"
WORKDIR="${WORKDIR:-$ORIGWD/workdir}"
MAKE="${MAKE:-make -j$JOBS}"
echo "Switching into ${WORKDIR}..." >&2
mkdir -vp "$WORKDIR"
cd "$WORKDIR"
# get node core repo + coverage tools via git
if [ ! -d node ]; then
git clone --depth=10 --single-branch git://github.com/nodejs/node.git
else
# reset everything to the current master
(cd node && \
git fetch origin && \
git checkout -- . && git clean -fd . && \
git reset --hard origin/master)
fi
if [ ! -d gcovr ]; then
git clone --depth=10 --single-branch git://github.com/gcovr/gcovr.git
(cd gcovr && patch -p1 < "${SRCDIR}/gcovr-patches.diff")
fi
# first, a semi-normal build without lib/ coverage
cd node
echo "Now in $(pwd)" >&2
# patch things up
patch -p1 < "${SRCDIR}/patches.diff"
export PATH="$(pwd):$PATH"
# if we don't have our npm dependencies available, build node and fetch them
# with npm
if [ ! -x "$SRCDIR/node_modules/.bin/nyc" ] || \
[ ! -x "$SRCDIR/node_modules/.bin/istanbul-merge" ]; then
echo "Building, without lib/ coverage..." >&2
./configure
$MAKE
./node -v
cd "$SRCDIR"
# get nyc + istanbul-merge
"$WORKDIR/node/node" "$WORKDIR/node/deps/npm" install
test -x "$SRCDIR/node_modules/.bin/nyc"
test -x "$SRCDIR/node_modules/.bin/istanbul-merge"
fi
cd "$WORKDIR/node"
echo "Instrumenting code in lib/..." >&2
"$SRCDIR/node_modules/.bin/nyc" instrument lib/ lib_/
sed -e s~"'"lib/~"'"lib_/~g -i~ node.gyp
echo "Removing old coverage files" >&2
rm -rf out/Release/.coverage
rm -f out/Release/obj.target/node/src/*.gcda
echo "Building, with lib/ coverage..." >&2
./configure
$MAKE
echo "Testing..." >&2
./node -v
# This corresponds to `make test` up to removal of `test/message`.
$MAKE build-addons cctest
python tools/test.py --mode=release -J \
addons doctool known_issues pseudo-tty parallel sequential
echo "Gathering coverage..." >&2
mkdir -p coverage .cov_tmp
"$SRCDIR/node_modules/.bin/istanbul-merge" --out .cov_tmp/libcov.json \
'out/Release/.coverage/coverage-*.json'
(cd lib && "$SRCDIR/node_modules/.bin/nyc" report \
--temp-directory "$(pwd)/../.cov_tmp" -r html --report-dir "../coverage")
(cd out && "$WORKDIR/gcovr/scripts/gcovr" --gcov-exclude='.*deps' --gcov-exclude='.*usr' -v \
-r Release/obj.target/node --html --html-detail \
-o ../coverage/cxxcoverage.html)
OUTDIR="$ORIGWD/out"
COMMIT_ID=$(git rev-parse --short=16 HEAD)
mkdir -p "$OUTDIR"
cp -rv coverage "$OUTDIR/coverage-$COMMIT_ID"
JSCOVERAGE=$(grep -B1 Lines coverage/index.html | \
head -n1 | grep -o '[0-9\.]*')
CXXCOVERAGE=$(grep -A3 Lines coverage/cxxcoverage.html | \
grep style | grep -o '[0-9]\{1,3\}\.[0-9]\{1,2\}')
echo "JS Coverage: $JSCOVERAGE %"
echo "C++ Coverage: $CXXCOVERAGE %"
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
echo "$JSCOVERAGE,$CXXCOVERAGE,$NOW,$COMMIT_ID" >> "$OUTDIR/index.csv"
cd "$ORIGWD"