Skip to content

Commit dd62b59

Browse files
authored
Merge pull request #14 from DataDog/david.goffredo/ci-coverage-upload
Store coverage reports in a website
2 parents 4da7907 + 2b4d5e4 commit dd62b59

File tree

5 files changed

+99
-26
lines changed

5 files changed

+99
-26
lines changed

.circleci/config.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
version: 2.1
22

33
jobs:
4+
45
format:
56
docker:
67
- image: "datadog/docker-library:dd-trace-cpp-ci"
78
resource_class: small
89
steps:
910
- checkout
1011
- run: bin/check-format
11-
12+
1213
build-bazel:
1314
parameters:
1415
toolchain:
@@ -21,7 +22,7 @@ jobs:
2122
steps:
2223
- checkout
2324
- run: bin/with-toolchain << parameters.toolchain >> bazelisk build --jobs $MAKE_JOB_COUNT dd_trace_cpp
24-
25+
2526
test-cmake:
2627
parameters:
2728
toolchain:
@@ -40,6 +41,20 @@ jobs:
4041
- run: cd .build && make -j $MAKE_JOB_COUNT VERBOSE=1
4142
- run: cd .build && test/tests
4243

44+
coverage:
45+
docker:
46+
- image: "datadog/docker-library:dd-trace-cpp-ci"
47+
resource_class: xlarge
48+
environment:
49+
MAKE_JOB_COUNT: 8
50+
steps:
51+
- checkout
52+
- run: bin/test --coverage --verbose
53+
- add_ssh_keys:
54+
fingerprints:
55+
- "d3:8f:a8:6e:b6:ef:37:65:1a:dc:2b:88:3b:ff:50:f4"
56+
- run: bin/publish-coverage
57+
4358
workflows:
4459
pull-request:
4560
jobs:
@@ -53,3 +68,4 @@ workflows:
5368
matrix:
5469
parameters:
5570
toolchain: ["gnu", "llvm"]
71+
- coverage

Dockerfile

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,25 @@ from ubuntu:22.04
77
# prompts for the current time zone).
88
env DEBIAN_FRONTEND=noninteractive
99

10-
# Update the package lists and upgrade already-installed software.
11-
run apt-get update && apt-get upgrade --yes
10+
# - Make available more recent versions of git.
11+
# - Update the package lists and upgrade already-installed software.
12+
# - Install build tooling:
13+
# - GCC, clang, make, git, debugger, formatter, and miscellanea
14+
run apt-get update && apt-get install --yes software-properties-common && \
15+
add-apt-repository ppa:git-core/ppa --yes && \
16+
apt-get update && apt-get upgrade --yes && \
17+
apt-get install --yes wget build-essential clang sed gdb clang-format git ssh
1218

13-
# Install build tooling:
14-
# GCC, clang, make, coverage report generator, debugger, formatter, and miscellanea
15-
run apt-get install --yes wget build-essential clang sed lcov gdb clang-format
1619
# bazelisk, a launcher for bazel. `bazelisk --help` will cause the latest
1720
# version to be downloaded.
1821
run wget -O/usr/local/bin/bazelisk https://github.com/bazelbuild/bazelisk/releases/download/v1.15.0/bazelisk-linux-amd64 \
1922
&& chmod +x /usr/local/bin/bazelisk \
2023
&& bazelisk --help
24+
2125
# CMake, by downloading a recent release from their website.
2226
copy bin/install-cmake /tmp/install-cmake
2327
run chmod +x /tmp/install-cmake && /tmp/install-cmake && rm /tmp/install-cmake
28+
29+
# Coverage reporting.
30+
copy bin/install-lcov /tmp/install-lcov
31+
run chmod +x /tmp/install-lcov && /tmp/install-lcov && rm /tmp/install-lcov

bin/install-lcov

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/sh
2+
3+
set -x
4+
set -e
5+
6+
cd /tmp
7+
wget 'https://github.com/linux-test-project/lcov/releases/download/v1.16/lcov-1.16.tar.gz'
8+
tar xzf lcov-1.16.tar.gz
9+
cd lcov-1.16/
10+
make install
11+
cd ../
12+
rm -r lcov-1.16 lcov-1.16.tar.gz

bin/publish-coverage

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,57 @@
11
#!/bin/sh
22

3+
# Publish an already-generated coverage report from dd-trace-cpp to
4+
# dd-trace-cpp-coverage.
5+
#
6+
# Overall, here's what we're going to do:
7+
#
8+
# Clone as little of the dd-trace-cpp-coverage repository as we can manage.
9+
# Then, move the rendered coverage report from dd-trace-cpp into a specially
10+
# named location in dd-trace-cpp-coverage. Commit and push.
11+
12+
set -x
313
set -e
414

5-
cd "$(dirname "$0")"/..
6-
7-
# See <https://unix.stackexchange.com/a/155077>
8-
if output=$(git status --porcelain) && [ -z "$output" ]; then
9-
: # Working directory clean
10-
else
11-
>&2 echo 'Commit or stash changes to the working tree before running this script.'
12-
>&2 echo 'See `git status` for more info.'
13-
exit 1
14-
fi
15-
16-
bin/test --coverage
17-
git switch gh-pages
18-
cp -r .coverage/report/* .
19-
git add -A
20-
git commit -m 'update testing code coverage report'
15+
tracer_dir=$(pwd)
16+
temp_dir=$(mktemp -d)
17+
18+
echo "Using temporary directory: $temp_dir"
19+
cd "$temp_dir"
20+
21+
# Clone directory structure of the most recent commit of one
22+
# branch (main). Don't fetch any regular files.
23+
mkdir dd-trace-cpp-coverage
24+
cd dd-trace-cpp-coverage
25+
26+
git init
27+
28+
git config user.email "[email protected]"
29+
git config user.name "David Goffredo (via script)"
30+
31+
git remote add origin '[email protected]:DataDog/dd-trace-cpp-coverage.git'
32+
branch=gh-pages
33+
git fetch --depth=1 --filter=blob:none origin "$branch"
34+
35+
# "Sparse checkout" some subdirectory of the repo root.
36+
# The leaves above and below that directory will be fetched,
37+
# but its sibling directories will not.
38+
git sparse-checkout set dummy/
39+
git checkout "$branch"
40+
41+
# e.g. "2022-12-29 22:09:54 UTC (6c6e440)"
42+
coverage_report_name() {
43+
commit_time_iso=$(git show -s --format=%cI)
44+
commit_hash_short=$(git rev-parse HEAD | head -c 7)
45+
46+
date "--date=$commit_time_iso" --iso-8601=seconds --utc | \
47+
sed -e 's/T/ /' -e "s/+.*/ UTC ($commit_hash_short)/"
48+
}
49+
50+
cd "$tracer_dir"
51+
report_name=$(coverage_report_name)
52+
mv .coverage/report "$temp_dir/dd-trace-cpp-coverage/$report_name"
53+
54+
cd "$temp_dir/dd-trace-cpp-coverage"
55+
git add -A --sparse
56+
git commit -m "add $report_name"
2157
git push
22-
git switch -

bin/test

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
set -e
44

5+
MAKE_JOB_COUNT=${MAKE_JOB_COUNT:-$(nproc)}
6+
57
if [ "$1" = '--coverage' ]; then
68
coverage_flags=-DBUILD_COVERAGE=1
79
shift
@@ -38,7 +40,7 @@ cd .build
3840
cmake .. $coverage_flags -DBUILD_TESTING=1
3941
# Clean up any code coverage artifacts.
4042
find . -type f -name '*.gcda' -print0 | xargs -0 rm -f
41-
make -j $(nproc) $verbosity_flags
43+
make -j "$MAKE_JOB_COUNT" $verbosity_flags
4244

4345
if [ "$build_only" -eq 1 ]; then
4446
exit
@@ -57,7 +59,7 @@ if [ "$coverage_flags" != '' ]; then
5759
# Filter out system headers and test drivers.
5860
lcov --quiet --remove .coverage/raw.info -o .coverage/filtered.info '/usr/*' "$(pwd)/test/*" '*json.hpp'
5961
# Generate an HTML coverage report at ".coverage/report/index.html".
60-
genhtml --quiet .coverage/filtered.info --output-directory .coverage/report
62+
genhtml --quiet --dark-mode .coverage/filtered.info --output-directory .coverage/report
6163

6264
echo 'Done.'
6365
fi

0 commit comments

Comments
 (0)