Skip to content

Code Coverage Analysis #402

Code Coverage Analysis

Code Coverage Analysis #402

Workflow file for this run

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
# 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=52
missed_lines=18
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