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: