-
Notifications
You must be signed in to change notification settings - Fork 204
149 lines (130 loc) · 5.99 KB
/
code-coverage.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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
env:
MISSED_BRANCHES_ALLOWED: 39
MISSED_LINES_ALLOWED: 19
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: |
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_ALLOWED ] || [ $line_diff -gt $MISSED_LINES_ALLOWED ]
then
grep -A 3 "Overall coverage rate" lcov_out.txt
echo "$branch_diff branches missed, $MISSED_BRANCHES_ALLOWED allowed"
echo "$line_diff lines missed, $MISSED_LINES_ALLOWED allowed"
exit -1
fi
- name: Check that Minimum Coverage Limits are Correctly Calibrated
run: |
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 -lt $MISSED_BRANCHES_ALLOWED ] || [ $line_diff -lt $MISSED_LINES_ALLOWED ]
then
grep -A 3 "Overall coverage rate" lcov_out.txt
echo ""
if [ $branch_diff -lt $MISSED_BRANCHES_ALLOWED ]
then
echo "$branch_diff branches were missed, which is *less* than the expected/allowed amount: $MISSED_BRANCHES_ALLOWED"
echo "Please update (lower) the MISSED_BRANCHES_ALLOWED variable in this workflow file to match the new coverage level."
echo ""
fi
if [ $line_diff -lt $MISSED_LINES_ALLOWED ]
then
echo "$line_diff lines were missed, which is *less* than the expected/allowed amount: $MISSED_LINES_ALLOWED"
echo "Please update (lower) the MISSED_LINES_ALLOWED variable in this workflow file to match the new coverage level."
echo ""
fi
exit -1
fi