Skip to content

Coverage Report

Coverage Report #4

name: Coverage Report
on:
workflow_dispatch: # Manual trigger
pull_request:
types:
- opened
- synchronize
- labeled
- unlabeled
paths-ignore:
- .gitignore
- CONTRIBUTORS
- LICENSE
- NOTICE
- README.md
- docs/**
- packaging/**
- platform/*apple*
- platform/*_android*
- platform/*_ios*
- platform/*_mac*
- platform/*_win*
- pyhelpers/**
- tools/**
- '!tools/python/test_server/**'
- xcode/**
# Cancels previous jobs if the same branch or PR was updated again.
concurrency:
group: ${{ github.workflow }}-coverage-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
should-run-check:
name: Should run coverage
runs-on: ubuntu-24.04
outputs:
run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }}
manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }}
steps:
- name: Check if PR has 'Coverage' label
id: run-from-pr
if: github.event_name == 'pull_request'
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
GH_TOKEN: ${{ github.token }}
run: |
LABEL_NAME="Coverage"
LABELS=$(gh pr view https://github.com/$GITHUB_REPOSITORY/pull/$PR_NUMBER --json labels)
if echo "$LABELS" | jq -e '.labels[].name' | grep -q "$LABEL_NAME"; then
echo "run-from-pr=true" >> $GITHUB_OUTPUT
echo "'Coverage' label found in PR."
fi
- name: Check if manually triggered
id: manually-triggered
if: github.event_name == 'workflow_dispatch'
run: echo "manually-triggered=true" >> $GITHUB_OUTPUT
coverage:
needs: should-run-check
name: Generate coverage report
runs-on: ubuntu-24.04
if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}}
steps:
- name: Free disk space by removing .NET, Android and Haskell
shell: bash
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
- name: Checkout sources
uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: |
3party
qt
base
cmake
coding
cppjansson
data
descriptions
drape
drape_frontend
editor
feature_list
ge0
generator
geometry
indexer
kml
map
openlr
packaging
platform
poly_borders
pyhelpers
qt
qt_testfrm
routing
routing_common
search
shaders
sking_generator
std
storage
traffic
testing
tools
topography_generator
track_analyzing
track_generator
tracking
traffic
transit
CMakeLists.txt
configure.sh
defines.hpp
gcovr.cfg
omim_config.h
precompiled_headers.hpp
private_default.h
- name: Parallel submodules checkout
shell: bash
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
- name: Install build tools and dependencies
shell: bash
run: |
sudo apt update -y
sudo apt install -y \
ninja-build \
libgl1-mesa-dev \
libglvnd-dev \
qt6-base-dev \
libqt6svg6-dev \
qt6-positioning-dev \
libqt6positioning6-plugins \
libqt6positioning6 \
llvm
pip install gcovr
- name: Configure
shell: bash
run: ./configure.sh
- name: Configure ccache
uses: hendrikmuhs/[email protected]
with:
key: ${{ github.workflow }}-coverage
- name: CMake
shell: bash
env:
CC: clang-18
CXX: clang++-18
CMAKE_C_COMPILER_LAUNCHER: ccache
CMAKE_CXX_COMPILER_LAUNCHER: ccache
# -g1 should slightly reduce build time.
run: |
cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_FLAGS=-g1 -DCOVERAGE_REPORT=ON
- name: Compile
shell: bash
working-directory: build
run: ninja
- name: Tests
shell: bash
working-directory: build
env:
# drape_tests - requires X Window
# generator_integration_tests - https://github.com/organicmaps/organicmaps/issues/225
# opening_hours_integration_tests - https://github.com/organicmaps/organicmaps/issues/219
# opening_hours_supported_features_tests - https://github.com/organicmaps/organicmaps/issues/219
# routing_integration_tests - https://github.com/organicmaps/organicmaps/issues/221
# shaders_tests - https://github.com/organicmaps/organicmaps/issues/223
# world_feed_integration_tests - https://github.com/organicmaps/organicmaps/issues/215
CTEST_EXCLUDE_REGEX: "drape_tests|generator_integration_tests|opening_hours_integration_tests|opening_hours_supported_features_tests|routing_benchmarks|routing_integration_tests|routing_quality_tests|search_quality_tests|storage_integration_tests|shaders_tests|world_feed_integration_tests"
run: |
sudo locale-gen en_US
sudo locale-gen en_US.UTF-8
sudo locale-gen es_ES
sudo locale-gen es_ES.UTF-8
sudo locale-gen fr_FR
sudo locale-gen fr_FR.UTF-8
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF-8
sudo update-locale
ctest -L "omim-test" -E "$CTEST_EXCLUDE_REGEX" --output-on-failure
- name: Run coverage report generation
shell: bash
working-directory: build
run: |
cmake --build . --target omim_coverage
cat coverage_report/summary.txt
- name: Archive the coverage report
working-directory: build/coverage_report
run: zip -r coverage_report.zip html/
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: build/coverage_report/coverage_report.zip