Skip to content

Stricter stacktrace tests #2

Stricter stacktrace tests

Stricter stacktrace tests #2

Workflow file for this run

# Copyright Agustin K-ballo Berge, Fusion Fenix 2026
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
name: coverage
on:
push:
branches: [ main, feature/** ]
pull_request:
types: [opened, synchronize, reopened]
workflow_dispatch:
jobs:
coverage:
name: ubuntu-24.04 / llvm-cov
runs-on: ubuntu-24.04
timeout-minutes: 6
steps:
- uses: actions/checkout@v5
- name: Set up APT package cache
run: |
mkdir -p ~/.cache/apt/archives/partial
echo "Dir::Cache::archives \"$HOME/.cache/apt/archives\";" \
| sudo tee /etc/apt/apt.conf.d/99user-cache
- name: Cache APT packages
uses: actions/cache@v5
with:
path: ~/.cache/apt/archives
key: apt-ubuntu-24.04-clang-22-${{ hashFiles('.github/workflows/coverage.yml') }}
restore-keys: apt-ubuntu-24.04-clang-22-
- name: Install Clang 22
run: |
wget -q https://apt.llvm.org/llvm.sh
sudo bash llvm.sh 22 all
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-22 200
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-22 200
- name: Install Ninja
run: sudo apt-get install -y ninja-build
- name: Fix APT cache permissions
if: always()
run: sudo rm -rf ~/.cache/apt/archives/lock ~/.cache/apt/archives/partial
- name: Configure (coverage)
run: |
cmake --preset dev-clang -B build/coverage \
-DCMAKE_CXX_FLAGS="-fprofile-instr-generate -fcoverage-mapping" \
-DCMAKE_EXE_LINKER_FLAGS="-fprofile-instr-generate"
- name: Build
run: cmake --build build/coverage --config Debug
- name: Test
run: |
LLVM_PROFILE_FILE="${GITHUB_WORKSPACE}/build/coverage/cov-%p.profraw" \
ctest --test-dir build/coverage --build-config Debug \
--output-on-failure --no-compress-output
- name: Merge profile data
run: |
llvm-profdata-22 merge -sparse build/coverage/cov-*.profraw \
-o build/coverage/coverage.profdata
- name: Coverage report
run: |
mapfile -t objects < <(find build/coverage -path "*/Debug/*" -type f -perm /111)
first="${objects[0]}"
obj_args=()
for o in "${objects[@]:1}"; do obj_args+=("-object=$o"); done
llvm-cov-22 report "$first" "${obj_args[@]}" \
-instr-profile=build/coverage/coverage.profdata \
-use-color=false src include/eggs 2>/dev/null
- name: Generate HTML report
run: |
mapfile -t objects < <(find build/coverage -path "*/Debug/*" -type f -perm /111)
first="${objects[0]}"
obj_args=()
for o in "${objects[@]:1}"; do obj_args+=("-object=$o"); done
llvm-cov-22 show "$first" "${obj_args[@]}" \
-instr-profile=build/coverage/coverage.profdata \
-format=html \
-output-dir=build/coverage/html \
-show-line-counts-or-regions \
src include/eggs 2>/dev/null
- name: Upload coverage report
uses: actions/upload-artifact@v6
with:
name: coverage-report-llvm-cov
path: build/coverage/html/
retention-days: 7
coverage-gcov:
name: ubuntu-24.04 / gcov
runs-on: ubuntu-24.04
timeout-minutes: 6
steps:
- uses: actions/checkout@v5
- name: Set up APT package cache
run: |
mkdir -p ~/.cache/apt/archives/partial
echo "Dir::Cache::archives \"$HOME/.cache/apt/archives\";" \
| sudo tee /etc/apt/apt.conf.d/99user-cache
- name: Cache APT packages
uses: actions/cache@v5
with:
path: ~/.cache/apt/archives
key: apt-ubuntu-24.04-gcc-16-${{ hashFiles('.github/workflows/coverage.yml') }}
restore-keys: apt-ubuntu-24.04-gcc-16-
- name: Install GCC 16
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update -q
sudo apt-get install -y gcc-16 g++-16 lcov
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-16 100 \
--slave /usr/bin/g++ g++ /usr/bin/g++-16
- name: Install Ninja
run: sudo apt-get install -y ninja-build
- name: Fix APT cache permissions
if: always()
run: sudo rm -rf ~/.cache/apt/archives/lock ~/.cache/apt/archives/partial
- name: Configure (coverage)
run: |
cmake --preset dev-gcc -B build/coverage-gcc \
-DCMAKE_CXX_FLAGS="--coverage" \
-DCMAKE_EXE_LINKER_FLAGS="--coverage"
- name: Build
run: cmake --build build/coverage-gcc --config Debug
- name: Test
run: |
find build/coverage-gcc -name "*.gcda" -delete
ctest --test-dir build/coverage-gcc --build-config Debug \
--output-on-failure --no-compress-output
- name: Collect coverage
run: |
lcov --capture \
--gcov-tool gcov-16 \
--ignore-errors mismatch \
--directory build/coverage-gcc \
--output-file build/coverage-gcc/coverage.info
lcov --extract build/coverage-gcc/coverage.info \
'*/src/*' '*/include/eggs/*' \
--ignore-errors unused \
--output-file build/coverage-gcc/coverage.info
- name: Coverage report
run: |
lcov --list build/coverage-gcc/coverage.info
- name: Generate HTML report
run: |
genhtml build/coverage-gcc/coverage.info \
--output-directory build/coverage-gcc/html \
--quiet
- name: Upload coverage report
uses: actions/upload-artifact@v6
with:
name: coverage-report-gcov
path: build/coverage-gcc/html/
retention-days: 7