Skip to content

Fix #1417, Fix #1418, Fix workflow bug and enforce updating of coverage minimums #130

Fix #1417, Fix #1418, Fix workflow bug and enforce updating of coverage minimums

Fix #1417, Fix #1418, Fix workflow bug and enforce updating of coverage minimums #130

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