diff --git a/.github/workflows/actions/runCPPTests/runAllTests/action.yml b/.github/workflows/actions/runCPPTests/runAllTests/action.yml new file mode 100644 index 0000000000..8eb6e07b72 --- /dev/null +++ b/.github/workflows/actions/runCPPTests/runAllTests/action.yml @@ -0,0 +1,79 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# *************************************************************************** +# * * +# * Copyright (c) 2023 The FreeCAD Project Association * +# * * +# * This file is part of FreeCAD. * +# * * +# * FreeCAD is free software: you can redistribute it and/or modify it * +# * under the terms of the GNU Lesser General Public License as * +# * published by the Free Software Foundation, either version 2.1 of the * +# * License, or (at your option) any later version. * +# * * +# * FreeCAD is distributed in the hope that it will be useful, but * +# * WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +# * Lesser General Public License for more details. * +# * * +# * You should have received a copy of the GNU Lesser General Public * +# * License along with FreeCAD. If not, see * +# * . * +# * * +# *************************************************************************** + +# !!! 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 where logs will be stored" + required: true + builddir: + description: "Build directory where tests are located" + required: true + 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 + 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 + 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/action.yml b/.github/workflows/actions/runCPPTests/runSingleTest/action.yml similarity index 74% rename from .github/workflows/actions/runCPPTests/action.yml rename to .github/workflows/actions/runCPPTests/runSingleTest/action.yml index 25985b9a39..642433f2c4 100644 --- a/.github/workflows/actions/runCPPTests/action.yml +++ b/.github/workflows/actions/runCPPTests/runSingleTest/action.yml @@ -32,32 +32,41 @@ inputs: testLogFile: description: "Path for the command-line output of the tests" required: true - reportFile: - description: "Report file" + testName: + description: "A descriptive name for the test suite" required: true +outputs: + reportText: + description: "Report text" + value: ${{ steps.report.outputs.reportText }} runs: using: "composite" steps: - - name: Run C++ unit tests + - name: Run C++ tests shell: bash 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++ unit test suite failed" >> ${{ inputs.reportFile }} + reportText="
:fire: GTest C++ test suite '${{ inputs.testName }}' failed\n" else - echo "
:heavy_check_mark: GTest C++ unit test suite 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 ee8369dff9..60acb20a8c 100644 --- a/.github/workflows/sub_buildUbuntu2004.yml +++ b/.github/workflows/sub_buildUbuntu2004.yml @@ -202,13 +202,13 @@ jobs: testCommand: xvfb-run ${{ env.builddir }}/bin/FreeCAD -t 0 logFile: ${{ env.logdir }}TestGUIBuild.log reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: C++ unit tests + - name: C++ tests timeout-minutes: 1 - uses: ./.github/workflows/actions/runCPPTests + uses: ./.github/workflows/actions/runCPPTests/runAllTests with: - testCommand: ${{ env.builddir }}/tests/Tests_run --gtest_output=json:${{env.reportdir}}gtest_results.json - testLogFile: ${{env.reportdir}}gtest_test_log.txt - reportFile: ${{env.reportdir}}${{ env.reportfilename }} + reportdir: ${{ env.reportdir }} + builddir: ${{ env.builddir }} + 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 0746d78698..659e700d89 100644 --- a/.github/workflows/sub_buildUbuntu2204.yml +++ b/.github/workflows/sub_buildUbuntu2204.yml @@ -200,13 +200,13 @@ jobs: testCommand: xvfb-run ${{ env.builddir }}/bin/FreeCAD -t 0 logFile: ${{ env.logdir }}TestGUIBuild.log reportFile: ${{env.reportdir}}${{ env.reportfilename }} - - name: C++ unit tests + - name: C++ tests timeout-minutes: 1 - uses: ./.github/workflows/actions/runCPPTests + uses: ./.github/workflows/actions/runCPPTests/runAllTests with: - testCommand: ${{ env.builddir }}/tests/Tests_run --gtest_output=json:${{env.reportdir}}gtest_results.json - testLogFile: ${{env.reportdir}}gtest_test_log.txt - reportFile: ${{env.reportdir}}${{ env.reportfilename }} + reportdir: ${{ env.reportdir }} + builddir: ${{ env.builddir }} + reportFile: ${{ env.reportdir }}${{ env.reportfilename }} - name: CMake Install uses: ./.github/workflows/actions/linux/install with: