Code Coverage Analysis #424
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Code Coverage Analysis" | |
on: | |
push: | |
pull_request: | |
workflow_dispatch: | |
schedule: | |
# 11:00 PM UTC every Sunday | |
- cron: '0 23 * * 0' | |
env: | |
SIMULATION: native | |
ENABLE_UNIT_TESTS: true | |
OMIT_DEPRECATED: true | |
BUILDTYPE: debug | |
jobs: | |
#Check for duplicate actions. Skips push actions if there is a matching or duplicate pull-request action. | |
check-for-duplicates: | |
runs-on: ubuntu-latest | |
# Map a step output to a job output | |
outputs: | |
should_skip: ${{ steps.skip_check.outputs.should_skip }} | |
steps: | |
- id: skip_check | |
uses: fkirc/skip-duplicate-actions@master | |
with: | |
concurrent_skipping: 'same_content' | |
skip_after_successful_duplicate: 'true' | |
do_not_skip: '["pull_request", "workflow_dispatch", "schedule"]' | |
Local-Test-Build: | |
#Continue if check-for-duplicates found no duplicates. Always runs for pull-requests. | |
needs: check-for-duplicates | |
if: ${{ needs.check-for-duplicates.outputs.should_skip != 'true' }} | |
runs-on: ubuntu-20.04 | |
timeout-minutes: 15 | |
steps: | |
- name: Install coverage tools | |
run: sudo apt-get install lcov -y | |
# Checks out a copy of your repository on the ubuntu-latest machine | |
- name: Checkout bundle | |
uses: actions/checkout@v3 | |
with: | |
repository: nasa/cFS | |
submodules: true | |
- name: Checkout submodule | |
uses: actions/checkout@v3 | |
with: | |
path: cfe | |
- name: Check versions | |
run: git submodule | |
# Setup the build system | |
- name: Set up for build | |
run: | | |
cp ./cfe/cmake/Makefile.sample Makefile | |
cp -r ./cfe/cmake/sample_defs sample_defs | |
make prep | |
make -C build mission-prebuild | |
# Build the code | |
- name: Build | |
run: | | |
make -C build/native/default_cpu1/config | |
make -C build/native/default_cpu1/core_api | |
make -C build/native/default_cpu1/core_private | |
make -C build/native/default_cpu1/es | |
make -C build/native/default_cpu1/evs | |
make -C build/native/default_cpu1/fs | |
make -C build/native/default_cpu1/msg | |
make -C build/native/default_cpu1/resourceid | |
make -C build/native/default_cpu1/sb | |
make -C build/native/default_cpu1/sbr | |
make -C build/native/default_cpu1/tbl | |
make -C build/native/default_cpu1/time | |
# Initialize lcov and test the code | |
- name: Test | |
run: | | |
lcov --capture --initial --directory build --output-file coverage_base.info | |
(cd build/native/default_cpu1/config && ctest --output-on-failure) | |
(cd build/native/default_cpu1/core_api && ctest --output-on-failure) | |
(cd build/native/default_cpu1/core_private && ctest --output-on-failure) | |
(cd build/native/default_cpu1/es && ctest --output-on-failure) | |
(cd build/native/default_cpu1/evs && ctest --output-on-failure) | |
(cd build/native/default_cpu1/fs && ctest --output-on-failure) | |
(cd build/native/default_cpu1/msg && ctest --output-on-failure) | |
(cd build/native/default_cpu1/resourceid && ctest --output-on-failure) | |
(cd build/native/default_cpu1/sb && ctest --output-on-failure) | |
(cd build/native/default_cpu1/sbr && ctest --output-on-failure) | |
(cd build/native/default_cpu1/tbl && ctest --output-on-failure) | |
(cd build/native/default_cpu1/time && ctest --output-on-failure) | |
- name: Calculate Coverage | |
run: | | |
lcov --capture --rc lcov_branch_coverage=1 --directory build --output-file coverage_test.info | |
lcov --rc lcov_branch_coverage=1 --add-tracefile coverage_base.info --add-tracefile coverage_test.info --output-file coverage_total.info | |
genhtml coverage_total.info --branch-coverage --output-directory lcov | tee lcov_out.txt | |
- name: Confirm Minimum Coverage | |
run: | | |
missed_branches=39 | |
missed_lines=19 | |
branch_nums=$(grep -A 3 "Overall coverage rate" lcov_out.txt | grep branches | grep -oP "[0-9]+[0-9]*") | |
line_nums=$(grep -A 3 "Overall coverage rate" lcov_out.txt | grep lines | grep -oP "[0-9]+[0-9]*") | |
branch_diff=$(echo $branch_nums | awk '{ print $4 - $3 }') | |
line_diff=$(echo $line_nums | awk '{ print $4 - $3 }') | |
if [ $branch_diff -gt $missed_branches ] || [ $line_diff -gt $missed_lines ] | |
then | |
grep -A 3 "Overall coverage rate" lcov_out.txt | |
echo "$branch_diff branches missed, $missed_branches allowed" | |
echo "$line_diff lines missed, $missed_lines allowed" | |
exit -1 | |
fi |