ci: codecov: use gcovr and upload cobertura style file

Use gcovr to generate reports and upload cobertura style file instead of
previously lcov info file.

We have been seeing issues with lcov format and code being reporting as
not covered although by inspecting the generate output files, they
should be.

The XML format we generate is otherwise easier to parse and deal with.

Also reduce frequency to twice a day.

Fixes #66656

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2023-12-19 08:33:55 -05:00 committed by Carles Cufí
parent 1ef0ec55c9
commit f772bd1106

View File

@ -2,7 +2,7 @@ name: Code Coverage with codecov
on:
schedule:
- cron: '25 */3 * * 1-5'
- cron: '25 06,18 * * 1-5'
concurrency:
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }}
@ -88,27 +88,25 @@ jobs:
export ZEPHYR_BASE=${PWD}
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
mkdir -p coverage/reports
./scripts/twister --force-color -N -v --filter runnable -p ${{ matrix.platform }} --coverage -T tests
- name: Generate Coverage Report
run: |
mv twister-out/coverage.info lcov.pre.info
lcov -q --remove lcov.pre.info mylib.c --remove lcov.pre.info tests/\* \
--remove lcov.pre.info samples/\* --remove lcov.pre.info ext/\* \
--remove lcov.pre.info *generated* \
-o coverage/reports/${{ matrix.platform }}.info --rc lcov_branch_coverage=1
pip3 install gcovr
./scripts/twister -i --force-color -N -v --filter runnable -p ${{ matrix.platform }} --coverage -T tests --coverage-tool gcovr
- name: ccache stats post
run: |
ccache -s
ccache -p
- name: Rename coverage files
if: always()
run: |
cp twister-out/coverage.json coverage/reports/${{ matrix.platform }}.json
- name: Upload Coverage Results
if: always()
uses: actions/upload-artifact@v3
with:
name: Coverage Data (Subset ${{ matrix.platform }})
path: coverage/reports/${{ matrix.platform }}.info
path: coverage/reports/${{ matrix.platform }}.json
codecov-results:
name: "Publish Coverage Results"
@ -129,14 +127,14 @@ jobs:
- name: Move coverage files
run: |
mv ./coverage/reports/*/*.info ./coverage/reports
mv ./coverage/reports/*/*.json ./coverage/reports
ls -la ./coverage/reports
- name: Generate list of coverage files
id: get-coverage-files
shell: cmake -P {0}
run: |
file(GLOB INPUT_FILES_LIST "coverage/reports/*.info")
file(GLOB INPUT_FILES_LIST "coverage/reports/*.json")
set(MERGELIST "")
set(FILELIST "")
foreach(ITEM ${INPUT_FILES_LIST})
@ -150,7 +148,7 @@ jobs:
foreach(ITEM ${INPUT_FILES_LIST})
get_filename_component(f ${ITEM} NAME)
if(MERGELIST STREQUAL "")
set(MERGELIST "-a ${f}")
set(MERGELIST "--add-tracefile ${f}")
else()
set(MERGELIST "${MERGELIST} -a ${f}")
endif()
@ -160,17 +158,19 @@ jobs:
- name: Merge coverage files
run: |
sudo apt-get update
sudo apt-get install -y lcov
cd ./coverage/reports
lcov ${{ steps.get-coverage-files.outputs.mergefiles }} -o merged.info --rc lcov_branch_coverage=1
pip3 install gcovr
gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --json merged.json
gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --cobertura merged.xml
- name: Upload Merged Coverage Results
if: always()
uses: actions/upload-artifact@v3
with:
name: Merged Coverage Data
path: merged.info
path: |
coverage/reports/merged.json
coverage/reports/merged.xml
- name: Upload coverage to Codecov
if: always()
@ -180,4 +180,4 @@ jobs:
env_vars: OS,PYTHON
fail_ci_if_error: false
verbose: true
files: merged.info
files: merged.xml