diff --git a/.github/workflows/build-run-app.yml b/.github/workflows/build-run-app.yml index 1f92ba5..00ed983 100644 --- a/.github/workflows/build-run-app.yml +++ b/.github/workflows/build-run-app.yml @@ -4,112 +4,8 @@ on: push: pull_request: -# jobs: -# build-run: -# name: Build and run with startup msg verification -# uses: nasa/cFS/.github/workflows/build-run-app.yml@main - - -# need this next -# Force bash to apply pipefail option so pipeline failures aren't masked -defaults: - run: - shell: bash - jobs: - # Checks for duplicate actions. Skips push actions if there is a matching or - # duplicate pull-request action. - checks-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"]' - - build-and-run: - needs: checks-for-duplicates - if: ${{ needs.checks-for-duplicates.outputs.should_skip != 'true' || contains(github.ref, 'main') }} - name: Build and run app, confirm startup message - runs-on: ubuntu-20.04 - - steps: - - name: Set up environment variables - # Apps typically use lowercase targets and uppercase names, this logic is fragile but works - run: | - echo "APP_UPPER=$(echo ${{ inputs.app-name }} | sed 's/[a-z]/\U&/g')" >> $GITHUB_ENV - echo "APP_LOWER=$(echo ${{ inputs.app-name }} | sed 's/[A-Z]/\L&/g')" >> $GITHUB_ENV - - - name: Set up start string for verification - run: | - if [[ "${{ inputs.startup-string }}" == '' ]]; then - echo "START_STRING=$APP_UPPER Initialized." >> $GITHUB_ENV - else - echo "START_STRING=${{ inputs.startup-string }}" >> $GITHUB_ENV - fi - - - name: Checkout Bundle Main - uses: actions/checkout@v4 - with: - submodules: true - repository: nasa/cFS - - - name: Checkout Repo - uses: actions/checkout@v4 - with: - path: apps/${{ env.APP_LOWER }} - - - name: Copy Files - run: | - cp ./cfe/cmake/Makefile.sample Makefile - cp -r ./cfe/cmake/sample_defs sample_defs - - # - name: Add To Build - # run: | - # sed -i "/list(APPEND MISSION_GLOBAL_APPLIST/a list(APPEND MISSION_GLOBAL_APPLIST $APP_LOWER)" sample_defs/targets.cmake - - # - name: Add To Startup - # run: | - # sed -i "1i CFE_APP, $APP_LOWER, ${APP_UPPER}_AppMain, $APP_UPPER, 80, 16384, 0x0, 0;" sample_defs/cpu1_cfe_es_startup.scr - # cat sample_defs/cpu1_cfe_es_startup.scr - - - name: Make install - run: make SIMULATION=native BUILDTYPE=release OMIT_DEPRECATED=true install - - - name: Run cFS - working-directory: ./build/exe/cpu1 - run: | - ./core-cpu1 > ../../../cFS_startup_cpu1.txt & - sleep 30 - ../host/cmdUtil --endian=LE --pktid=0x1806 --cmdcode=2 --half=0x0002 - - - name: Archive results - uses: actions/upload-artifact@v4 - with: - name: cFS_startup_log - path: cFS_startup_cpu1.txt - - - name: Confirm startup string - run: | - if [[ -z $(grep "$START_STRING" cFS_startup_cpu1.txt) ]]; then - echo "Startup verification string not found in log: $START_STRING" - echo "" - echo "Possible related event messages:" - grep "/$APP_UPPER " cFS_startup_cpu1.txt - exit -1 - fi + build-run: + name: Build and run with startup msg verification + uses: thnkslprpt/cFS/.github/workflows/build-run-app.yml@test - - name: Check for cFS Warnings - if: success() || failure() - run: | - if [[ -n $(grep -i "warn\|err\|fail" cFS_startup_cpu1.txt) ]]; then - echo "cFS startup warn|err|fail:" - echo "" - grep -i 'warn\|err\|fail' cFS_startup_cpu1.txt - exit -1 - fi diff --git a/.github/workflows/unit-test-coverage.yml b/.github/workflows/unit-test-coverage.yml index d6f3faa..d67e62b 100644 --- a/.github/workflows/unit-test-coverage.yml +++ b/.github/workflows/unit-test-coverage.yml @@ -3,151 +3,8 @@ name: Unit Test and Coverage on: push: pull_request: - inputs: - # Optional inputs - # app-name: - # description: Application name, if different from repo name - # type: string - # required: false - # default: ${{ github.event.repository.name }} - max-missed-branches: - description: Maximum number of missed branches - type: number - required: false - default: 0 - max-missed-lines: - description: Maximum number of missed lines - type: number - required: false - default: 0 - -# jobs: -# unit-test-coverage: -# name: Run unit test and coverage -# uses: nasa/cFS/.github/workflows/unit-test-coverage.yml@main - -# name: Unit Test and Coverage - -# on: -# workflow_call: -# inputs: -# # Optional inputs -# app-name: -# description: Application name, if different from repo name -# type: string -# required: false -# default: ${{ github.event.repository.name }} -# max-missed-branches: -# description: Maximum number of missed branches -# type: number -# required: false -# default: 0 -# max-missed-lines: -# description: Maximum number of missed lines -# type: number -# required: false -# default: 0 - -# # Force bash to apply pipefail option so pipeline failures aren't masked -# defaults: -# run: -# shell: bash jobs: - # Checks for duplicate actions. Skips push actions if there is a matching or - # duplicate pull-request action. - # checks-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"]' - unit-test-coverage: - # needs: checks-for-duplicates - if: ${{ needs.checks-for-duplicates.outputs.should_skip != 'true' || contains(github.ref, 'main') }} - name: Build, run unit tests and enforce coverage - runs-on: ubuntu-20.04 - - steps: - - name: Install coverage tools - run: sudo apt-get install lcov -y - - # - name: Set up environment variables - # # Apps typically use lowercase targets and uppercase names, this logic is fragile but works - # run: | - # echo "APP_UPPER=$(echo ${{ inputs.app-name }} | sed 's/[a-z]/\U&/g')" >> $GITHUB_ENV - # echo "APP_LOWER=$(echo ${{ inputs.app-name }} | sed 's/[A-Z]/\L&/g')" >> $GITHUB_ENV - - - name: Checkout Bundle Main - uses: actions/checkout@v4 - with: - submodules: true - repository: nasa/cFS - - - name: Checkout Repo - uses: actions/checkout@v4 - # with: - # path: apps/${{ env.APP_LOWER }} - - - name: Copy Files - run: | - cp ./cfe/cmake/Makefile.sample Makefile - cp -r ./cfe/cmake/sample_defs sample_defs - - # - name: Add Repo To Build - # run: | - # sed -i "/list(APPEND MISSION_GLOBAL_APPLIST/a list(APPEND MISSION_GLOBAL_APPLIST $APP_LOWER)" sample_defs/targets.cmake - - - name: Make Prep - run: make SIMULATION=native ENABLE_UNIT_TESTS=true OMIT_DEPRECATED=true prep - - - name: Build app build dependencies - run: make -C build/tools/elf2cfetbl - - # - name: Build app target - # run: | - # make -C build/native/default_cpu1/apps/$APP_LOWER - - - name: Capture initial lcov and run test - run: | - lcov --capture --initial --directory build --output-file coverage_base.info - (cd build/native/default_cpu1/apps/sample_app; ctest --verbose) | tee test_results.txt - - - 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 ${{ inputs.max-missed-branches }} ] || [ $line_diff -gt ${{ inputs.max-missed-lines }} ] - then - grep -A 3 "Overall coverage rate" lcov_out.txt - echo "$branch_diff branches missed, ${{ inputs.max-missed-branches }} allowed" - echo "$line_diff lines missed, ${{ inputs.max-missed-lines }} allowed" - exit -1 - fi - - - name: Archive results - # Upload if success or failure which supports skipping, unlike always() - if: success() || failure() - uses: actions/upload-artifact@v4 - with: - name: Unit test and coverage results - path: | - test_results.txt - lcov_out.txt - lcov + name: Run unit test and coverage + uses: nasa/cFS/.github/workflows/unit-test-coverage.yml@main