-
Notifications
You must be signed in to change notification settings - Fork 217
141 lines (117 loc) · 5.66 KB
/
standalone-build.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
name: Build and Test Standalone OSAL package
on:
workflow_dispatch:
pull_request:
defaults:
run:
shell: bash
env:
allowed_ncov_lines: 0
allowed_ncov_branches: 2
allowed_ncov_functions: 0
jobs:
build-and-test:
name: Build and Execute Tests
strategy:
fail-fast: false
matrix:
build-type: [Debug, Release]
base-os: [ubuntu-22.04, ubuntu-20.04]
runs-on: ${{ matrix.base-os }}
steps:
- name: Checkout OSAL
uses: actions/checkout@v4
with:
path: source
- name: Install Coverage Analysis Tools
if: ${{ matrix.build-type == 'Debug' }}
run: sudo apt-get install -y lcov xsltproc && echo "run_lcov=TRUE" >> $GITHUB_ENV
- name: Set up debug environment
if: ${{ matrix.build-type == 'Debug' }}
run: |
echo "is_debug=TRUE" >> $GITHUB_ENV
echo "is_release=FALSE" >> $GITHUB_ENV
echo "build_tgt=all" >> $GITHUB_ENV
echo "DESTDIR=${{ github.workspace }}/staging-debug" >> $GITHUB_ENV
- name: Set up release environment
if: ${{ matrix.build-type == 'Release' }}
run: |
echo "is_debug=FALSE" >> $GITHUB_ENV
echo "is_release=TRUE" >> $GITHUB_ENV
echo "build_tgt=install" >> $GITHUB_ENV
echo "DESTDIR=${{ github.workspace }}/staging-release" >> $GITHUB_ENV
- name: Set up build
run: cmake
-DCMAKE_BUILD_TYPE=${{ matrix.build-type }}
-DENABLE_UNIT_TESTS=${{ env.is_debug }}
-DOSAL_OMIT_DEPRECATED=${{ env.is_debug }}
-DOSAL_VALIDATE_API=${{ env.is_release }}
-DOSAL_INSTALL_LIBRARIES=${{ env.is_release }}
-DOSAL_CONFIG_DEBUG_PERMISSIVE_MODE=${{ env.is_debug }}
-DOSAL_SYSTEM_BSPTYPE=generic-linux
-DCMAKE_PREFIX_PATH=/usr/lib/cmake
-DCMAKE_INSTALL_PREFIX=/usr
-S source
-B build
- name: Build OSAL
working-directory: build
run: make ${{ env.build_tgt }} -j2
- name: Validate API
if: ${{ matrix.build-type == 'Release' }}
working-directory: build
run: make osal_apicheck
- name: Execute Tests
if: ${{ matrix.build-type == 'Debug' }}
working-directory: build
run: ctest --output-on-failure -j4 2>&1 | tee ../ctest.log
- name: Check Coverage
id: stats
if: ${{ env.run_lcov == 'TRUE' }}
uses: ./source/.github/actions/check-coverage
with:
binary-dir: build
- name: Enforce coverage function minimum
if: ${{ env.run_lcov == 'TRUE' && always() && steps.stats.outputs.ncov_functions > env.allowed_ncov_functions }}
run: |
echo "::error::Too many uncovered functions (${{ steps.stats.outputs.ncov_functions }})"
/bin/false
- name: Enforce coverage line minimum
if: ${{ env.run_lcov == 'TRUE' && always() && steps.stats.outputs.ncov_lines > env.allowed_ncov_lines }}
run: |
echo "::error::Too many uncovered lines (${{ steps.stats.outputs.ncov_lines }})"
/bin/false
- name: Enforce coverage branch minimum
if: ${{ env.run_lcov == 'TRUE' && always() && steps.stats.outputs.ncov_branches > env.allowed_ncov_branches }}
run: |
echo "::error::Too many uncovered branches (${{ steps.stats.outputs.ncov_branches }})"
/bin/false
- name: Enforce keeping coverage function minimum up-to-date
if: ${{ env.run_lcov == 'TRUE' && always() && steps.stats.outputs.ncov_functions < env.allowed_ncov_functions }}
run: |
echo "::error::${{ steps.stats.outputs.ncov_functions }} uncovered function${{ steps.stats.outputs.ncov_functions == 1 && '' || 's' }} reported, but ${{ env.allowed_ncov_functions }} ${{ env.allowed_ncov_functions == 1 && 'is' || 'are' }} allowed."
echo "::error::Please update the 'allowed_ncov_functions' variable to ${{ steps.stats.outputs.ncov_functions }} in order to match the new coverage level."
/bin/false
- name: Enforce keeping coverage line minimum up-to-date
if: ${{ env.run_lcov == 'TRUE' && always() && steps.stats.outputs.ncov_lines < env.allowed_ncov_lines }}
run: |
echo "::error::${{ steps.stats.outputs.ncov_lines }} uncovered line${{ steps.stats.outputs.ncov_lines == 1 && '' || 's' }} reported, but ${{ env.allowed_ncov_lines }} ${{ env.allowed_ncov_lines == 1 && 'is' || 'are' }} allowed."
echo "::error::Please update the 'allowed_ncov_lines' variable to ${{ steps.stats.outputs.ncov_lines }} in order to match the new coverage level."
/bin/false
- name: Enforce keeping coverage branch minimum up-to-date
if: ${{ env.run_lcov == 'TRUE' && always() && steps.stats.outputs.ncov_branches < env.allowed_ncov_branches }}
run: |
echo "::error::${{ steps.stats.outputs.ncov_branches }} uncovered branch${{ steps.stats.outputs.ncov_branches == 1 && '' || 'es' }} reported, but ${{ env.allowed_ncov_branches }} ${{ env.allowed_ncov_branches == 1 && 'is' || 'are' }} allowed."
echo "::error::Please update the 'allowed_ncov_branches' variable to ${{ steps.stats.outputs.ncov_branches }} in order to match the new coverage level."
/bin/false
- name: Assemble Results
if: ${{ always() }}
run: |
if [ -s ctest.log ]; then
echo '<h2>CTest Execution</h2>' >> $GITHUB_STEP_SUMMARY
echo '<pre>' >> $GITHUB_STEP_SUMMARY
cat ctest.log >> $GITHUB_STEP_SUMMARY
echo '</pre>' >> $GITHUB_STEP_SUMMARY
fi
if [ -s 'build/lcov-summary.xml' ]; then
cat 'build/lcov-summary.xml' >> $GITHUB_STEP_SUMMARY
fi