Fix #1417, Fix #1418, Fix workflow bug and enforce updating of coverage minimums #130
Workflow file for this run
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: 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 |