-
Notifications
You must be signed in to change notification settings - Fork 14
136 lines (119 loc) · 4.65 KB
/
code-coverage.yml
File metadata and controls
136 lines (119 loc) · 4.65 KB
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
#
# Copyright (c) 2026 Sam Darwin
# Copyright (c) 2026 Alexander Grund
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
# Instructions
#
# After running this workflow successfully, go to https://github.com/ORGANIZATION/REPO/settings/pages
# and enable github pages on the code-coverage branch.
# The pages will be hosted at https://ORGANIZATION.github.io/REPO
#
name: Code Coverage
on:
push:
branches:
- master
- develop
paths:
- 'src/**'
- 'include/**'
- '.github/workflows/code-coverage.yml'
workflow_dispatch:
concurrency:
group: code-coverage-pages
cancel-in-progress: false
env:
GIT_FETCH_JOBS: 8
NET_RETRY_COUNT: 5
# Commit title of the automatically created commits
GCOVR_COMMIT_MSG: "Update coverage data"
# Should branch coverage be reported? Default to no.
BOOST_BRANCH_COVERAGE: 0
EXTRA_BOOST_LIBRARIES: "cppalliance/buffers cppalliance/capy"
jobs:
build:
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
include:
- runs-on: "ubuntu-24.04"
name: Coverage
cxxstd: "20"
gcovr_script: './ci-automation/scripts/lcov-jenkins-gcc-13.sh --only-gcovr'
name: ${{ matrix.name }}
runs-on: ${{ matrix.runs-on }}
timeout-minutes: 120
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Check for code-coverage Branch
run: |
set -xe
git config --global user.name cppalliance-bot
git config --global user.email cppalliance-bot@example.com
git fetch origin
if git branch -r | grep origin/code-coverage; then
echo "The code-coverage branch exists. Continuing."
else
echo "The code-coverage branch does not exist. Creating it."
git switch --orphan code-coverage
git commit --allow-empty -m "$GCOVR_COMMIT_MSG"
git push origin code-coverage
git checkout $GITHUB_REF_NAME
fi
- name: Install Python
uses: actions/setup-python@v6
with:
python-version: '3.13'
- name: Install Python packages
run: pip install gcovr
- name: Checkout ci-automation
uses: actions/checkout@v6
with:
repository: cppalliance/ci-automation
path: ci-automation
- name: Patch CI script for extra source directories
run: |
# The CI script only symlinks 'include/' and 'src/' at boost-root level,
# but this repo also has src_zlib/ and src_brotli/. After fix_paths.py
# strips 'libs/http/', gcovr can't find these files without symlinks.
sed -i '/ln -sfn "\$BOOST_CI_SRC_FOLDER\/src" /a\
for _d in "$BOOST_CI_SRC_FOLDER"/src_*; do [ -d "$_d" ] && ln -sfn "$_d" "$(pwd)/$(basename "$_d")" 2>/dev/null || true; done' \
ci-automation/scripts/lcov-jenkins-gcc-13.sh
- name: Build and run tests & collect coverage data
run: |
set -xe
ls -al
export ORGANIZATION=${GITHUB_REPOSITORY_OWNER}
export REPONAME=$(basename ${GITHUB_REPOSITORY})
export B2_CXXSTD=${{matrix.cxxstd}}
${{matrix.gcovr_script}}
- name: Checkout GitHub pages branch
uses: actions/checkout@v6
with:
ref: code-coverage
path: gh_pages_dir
- name: Copy gcovr results
run: |
set -xe
pwd
ls -al
touch gh_pages_dir/.nojekyll # Prevent GH pages from treating these files as Jekyll pages.
mkdir -p gh_pages_dir/develop
mkdir -p gh_pages_dir/master
rm -rf "gh_pages_dir/${GITHUB_REF_NAME}/gcovr"
cp -rp gcovr "gh_pages_dir/${GITHUB_REF_NAME}/"
echo -e "<html>\n<head>\n</head>\n<body>\n<a href=\"develop/index.html\">develop</a><br>\n<a href=\"master/index.html\">master</a><br>\n</body>\n</html>\n" > gh_pages_dir/index.html
# In the future: echo -e "<html>\n<head>\n</head>\n<body>\n<a href=gcovr/index.html>gcovr</a><br>\n</body>\n</html>\n" > gh_pages_dir/develop/index.html
echo -e "<html>\n<head>\n<meta http-equiv=\"refresh\" content=\"0; url=./gcovr/index.html\">\n</head>\n<body>\n</body>\n</html>\n" > gh_pages_dir/develop/index.html
cp gh_pages_dir/develop/index.html gh_pages_dir/master/index.html
cd gh_pages_dir
git add .
git commit --amend -m "$GCOVR_COMMIT_MSG"
git push -f origin code-coverage