diff --git a/.github/workflows/actions/runCPPTests/runAllTests/action.yml b/.github/workflows/actions/runCPPTests/runAllTests/action.yml index 1e1218e87b..8eb6e07b72 100644 --- a/.github/workflows/actions/runCPPTests/runAllTests/action.yml +++ b/.github/workflows/actions/runCPPTests/runAllTests/action.yml @@ -21,34 +21,59 @@ # * * # *************************************************************************** +# !!! Each step running a single test shall have an'id' defined so its report will be output + name: Run all C++ Tests description: "Run all C++ tests, generating logs and reports for each" inputs: reportdir: - description: "Report directory" + description: "Report directory where logs will be stored" required: true builddir: - description: "Build directory" + description: "Build directory where tests are located" required: true - reportfilename: - description: "Report filename" + reportFile: + description: "Path for report file" required: true runs: using: "composite" steps: - name: C++ core tests + id: core uses: ./.github/workflows/actions/runCPPTests/runSingleTest with: testCommand: ${{ inputs.builddir }}/tests/Tests_run --gtest_output=json:${{ inputs.reportdir }}core_gtest_results.json testLogFile: ${{ inputs.reportdir }}core_gtest_test_log.txt - reportFile: ${{ inputs.reportdir }}${{ inputs.reportfilename }} testName: Core - name: C++ Sketcher tests + id: sketcher uses: ./.github/workflows/actions/runCPPTests/runSingleTest with: testCommand: ${{ inputs.builddir }}/tests/Sketcher_tests_run --gtest_output=json:${{ inputs.reportdir }}sketcher_gtest_results.json testLogFile: ${{ inputs.reportdir }}sketcher_gtest_test_log.txt - reportFile: ${{ inputs.reportdir }}${{ inputs.reportfilename }} testName: Sketcher + - name: Compose summary report based on test results + if: always() + shell: bash + run: | + # Printing global result + if [ ${{ job.status }} != "success" ] + then + echo "
:fire: C++ tests failed" >> ${{ inputs.reportFile }} + else + echo "
:heavy_check_mark: C++ tests succeeded" >> ${{ inputs.reportFile }} + fi + echo "" >> ${{ inputs.reportFile }} + echo "
" >> ${{ inputs.reportFile }} + #Extract individual results + cat > /tmp/data << "EOD" + ${{ toJSON(steps) }} + EOD + echo "$(jq -r ".[].outputs.reportText" /tmp/data)" >> ${{ inputs.reportFile }} + # Close report + echo "
" >> ${{ inputs.reportFile }} + echo "
" >> ${{ inputs.reportFile }} + echo "" >> ${{ inputs.reportFile }} + diff --git a/.github/workflows/actions/runCPPTests/runSingleTest/action.yml b/.github/workflows/actions/runCPPTests/runSingleTest/action.yml index 3ad60e5573..642433f2c4 100644 --- a/.github/workflows/actions/runCPPTests/runSingleTest/action.yml +++ b/.github/workflows/actions/runCPPTests/runSingleTest/action.yml @@ -32,12 +32,13 @@ inputs: testLogFile: description: "Path for the command-line output of the tests" required: true - reportFile: - description: "Report file" - required: true testName: description: "A descriptive name for the test suite" required: true +outputs: + reportText: + description: "Report text" + value: ${{ steps.report.outputs.reportText }} runs: using: "composite" @@ -47,20 +48,25 @@ runs: run: stdbuf -oL -eL ${{ inputs.testCommand }} |& tee -a ${{ inputs.testLogFile }} - name: Parse test results if: always() + id: report shell: bash run: | result=$(sed -ne "/Global test environment tear-down/,/^$/{/^$/d;p}" ${{ inputs.testLogFile }}) if grep -qF "[ FAILED ]" <<< $result then - echo "
:fire: GTest C++ test suite '${{ inputs.testName }}' failed" >> ${{ inputs.reportFile }} + reportText="
:fire: GTest C++ test suite '${{ inputs.testName }}' failed\n" else - echo "
:heavy_check_mark: GTest C++ test suite '${{ inputs.testName }}' succeeded" >> ${{ inputs.reportFile }} + reportText="
:heavy_check_mark: GTest C++ test suite '${{ inputs.testName }}' succeeded\n" fi - echo "" >> ${{ inputs.reportFile }} - echo "Results" >> ${{ inputs.reportFile }} - echo "" >> ${{ inputs.reportFile }} - echo '```' >> ${{ inputs.reportFile }} - echo "$result" >> ${{ inputs.reportFile }} - echo '```' >> ${{ inputs.reportFile }} - echo "
">> ${{ inputs.reportFile }} - echo "" >> ${{ inputs.reportFile }} + reportText+="\n" + reportText+="Results\n" + reportText+="\n" + reportText+='```\n' + reportText+="$result\n" + reportText+='```\n' + reportText+="
\n" + reportText+="\n" + echo "reportText<> $GITHUB_OUTPUT + echo -e "$reportText" >> $GITHUB_OUTPUT + echo "EOD" >> $GITHUB_OUTPUT + echo -e "$reportText" diff --git a/.github/workflows/sub_buildUbuntu2004.yml b/.github/workflows/sub_buildUbuntu2004.yml index cbea492840..60acb20a8c 100644 --- a/.github/workflows/sub_buildUbuntu2004.yml +++ b/.github/workflows/sub_buildUbuntu2004.yml @@ -208,7 +208,7 @@ jobs: with: reportdir: ${{ env.reportdir }} builddir: ${{ env.builddir }} - reportfilename: ${{ env.reportfilename }} + reportFile: ${{ env.reportdir }}${{ env.reportfilename }} - name: CMake Install uses: ./.github/workflows/actions/linux/install with: diff --git a/.github/workflows/sub_buildUbuntu2204.yml b/.github/workflows/sub_buildUbuntu2204.yml index d14ce8242d..659e700d89 100644 --- a/.github/workflows/sub_buildUbuntu2204.yml +++ b/.github/workflows/sub_buildUbuntu2204.yml @@ -206,7 +206,7 @@ jobs: with: reportdir: ${{ env.reportdir }} builddir: ${{ env.builddir }} - reportfilename: ${{ env.reportfilename }} + reportFile: ${{ env.reportdir }}${{ env.reportfilename }} - name: CMake Install uses: ./.github/workflows/actions/linux/install with: