From e7b63e2ab166f3298322a0e21875bbcd7f1fe503 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Thu, 15 Jul 2021 11:39:29 +0200
Subject: [PATCH] [cmake,ci] Added test presets.

---
 CMakePresets.json                           | 53 ++++++++++++++++-----
 scripts/ci/extends/template-build-linux.yml | 32 ++++++-------
 scripts/ci/extends/template-build-win.yml   | 21 ++++----
 scripts/ci/extends/test-artifacts.yml       |  3 +-
 4 files changed, 66 insertions(+), 43 deletions(-)

diff --git a/CMakePresets.json b/CMakePresets.json
index ea12dd6feb8..f803ca12f7c 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -191,6 +191,15 @@
     }
   ],
   "buildPresets": [
+    {
+      "name": "_win",
+      "hidden": true,
+      "condition": {
+        "type": "equals",
+        "lhs": "${hostSystemName}",
+        "rhs": "Windows"
+      }
+    },
     {
       "name": "release",
       "configurePreset": "release"
@@ -223,14 +232,17 @@
     },
     {
       "name": "msvc-release",
+      "inherits": "_win",
       "configurePreset": "msvc-release"
     },
     {
       "name": "msvc-debug",
+      "inherits": "_win",
       "configurePreset": "msvc-debug"
     },
     {
       "name": "msvc-release-gui",
+      "inherits": "_win",
       "configurePreset": "msvc-release-gui",
       "targets": [
         "DataExplorer"
@@ -238,40 +250,48 @@
     },
     {
       "name": "msvc-debug-gui",
+      "inherits": "_win",
       "configurePreset": "msvc-debug-gui",
       "targets": [
         "DataExplorer"
       ]
+    },
+    {
+      "name": "ci-simplest",
+      "configurePreset": "ci-simplest"
+    },
+    {
+      "name": "ci-no-unity",
+      "configurePreset": "ci-no-unity"
     }
   ],
   "testPresets": [
     {
-      "name": "_release",
+      "name": "release",
       "configurePreset": "release",
-      "hidden": true,
       "output": {
         "outputOnFailure": true
-      }
-    },
-    {
-      "name": "release",
-      "inherits": [
-        "_release"
-      ],
+      },
       "filter": {
-        "exclude": {
-          "label": "large"
+        "include": {
+          "label": "default"
+        }
+      },
+      "execution": {
+        "repeat": {
+          "mode": "until-pass",
+          "count": 2
         }
       }
     },
     {
       "name": "release-large",
       "inherits": [
-        "_release"
+        "release"
       ],
       "filter": {
         "include": {
-          "label": "large"
+          "label": "default|large"
         }
       }
     },
@@ -302,6 +322,13 @@
       "inherits": [
         "release-large"
       ]
+    },
+    {
+      "name": "release-gui",
+      "configurePreset": "release-gui",
+      "inherits": [
+        "release"
+      ]
     }
   ]
 }
diff --git a/scripts/ci/extends/template-build-linux.yml b/scripts/ci/extends/template-build-linux.yml
index 3c97410f1e3..1dca90694b0 100644
--- a/scripts/ci/extends/template-build-linux.yml
+++ b/scripts/ci/extends/template-build-linux.yml
@@ -6,44 +6,42 @@
 
   before_script:
     - 'echo "For debugging run: docker run --rm -it -v $CI_BUILDS_DIR:/builds -w=$CI_PROJECT_DIR $CI_JOB_IMAGE"'
-    - build_dir=${BUILD_DIR:-$CMAKE_PRESET}
-    - build_dir_full=../build/${build_dir}
+    - build_dir_full=../build/${CMAKE_PRESET}
+    - log_file=$build_dir_full/make.output
     - rm -rf $build_dir_full
-    - mkdir -p $build_dir_full
-    - mkdir build
+    - mkdir -p $build_dir_full build
     - if [[ "$OSTYPE" == "darwin"* ]] ; then readlink_cmd=greadlink; else readlink_cmd=readlink; fi
-    - ln -s `$readlink_cmd -f $build_dir_full` build/${build_dir}
+    - ln -s `$readlink_cmd -f $build_dir_full` build/${CMAKE_PRESET}
     - ([ "${CONAN_USER_HOME}" == "${CI_PROJECT_DIR}/.conan" ]) && conan remove --system-reqs '*'
     - ([[ $BUILD_CTEST_LARGE_ON_MASTER && "${CI_COMMIT_BRANCH}" == "master" && "${CMAKE_ARGS}" == *"USE_PYTHON=ON"* ]]) && export BUILD_CTEST_LARGE=true
   script:
-    - cmake -S . -B $build_dir_full --preset=$CMAKE_PRESET $CMAKE_ARGS -DOGS_BUILD_PROCESSES=$BUILD_PROCESSES
-    - cd $build_dir_full
+    - cmake -S . --preset=$CMAKE_PRESET $CMAKE_ARGS -DOGS_BUILD_PROCESSES=$BUILD_PROCESSES
     - |
       if [[ -z "$TARGETS" ]]; then
 
-        $BUILD_CMD_PREFIX cmake --build . --target package > >(tee make.output)
+        $BUILD_CMD_PREFIX cmake --build --preset=$CMAKE_PRESET --target package > >(tee $log_file)
 
-        if [ "$BUILD_TESTS" = true ]; then $BUILD_CMD_PREFIX cmake --build . --target tests ; fi
+        if [ "$BUILD_TESTS" = true ]; then $BUILD_CMD_PREFIX cmake --build --preset=$CMAKE_PRESET --target tests ; fi
 
         if [ "$BUILD_CTEST" = true ]; then
-
-          ctest_labels="default"
           ctest_timeout=15
+          preset_postfix=""
           if [ "$BUILD_CTEST_LARGE" = true ]; then
-            ctest_labels="large|$ctest_labels"
             ctest_timeout=90
+            preset_postfix="-large"
           fi
 
           if [[ "$OSTYPE" == "darwin"* ]]; then alias date=gdate ; fi
 
-          ctest -T Test --no-compress-output -L "$ctest_labels" --repeat until-pass:2 --stop-time `date -d "today + ${ctest_timeout} minutes" +'%H:%M:%S'`
-          cp Testing/**/Test.xml Tests/ctest.xml
-
+          ctest --preset=${CMAKE_PRESET}${preset_postfix} --output-junit Tests/ctest.xml --no-compress-output --stop-time `date -d "today + ${ctest_timeout} minutes" +'%H:%M:%S'`
         fi
+
       else
-        $BUILD_CMD_PREFIX cmake --build . --target ${TARGETS} > >(tee make.output)
+
+        $BUILD_CMD_PREFIX cmake --build --preset=$CMAKE_PRESET --target ${TARGETS} > >(tee $log_file)
+
       fi
     - |
       if [[ "$CHECK_WARNINGS" = true ]] ; then
-        if [[ $(cat make.output | grep warning -i | grep -v 'WARNING: no license files found') ]]; then printf 'There were compiler warnings:\n\n'; cat make.output | grep warning -i | grep -v 'WARNING: no license files found'; exit 1; fi
+        if [[ $(cat $log_file | grep warning -i | grep -v 'WARNING: no license files found') ]]; then printf 'There were compiler warnings:\n\n'; cat $log_file | grep warning -i | grep -v 'WARNING: no license files found'; exit 1; fi
       fi
diff --git a/scripts/ci/extends/template-build-win.yml b/scripts/ci/extends/template-build-win.yml
index 4c952c14595..c7f8b40dadd 100644
--- a/scripts/ci/extends/template-build-win.yml
+++ b/scripts/ci/extends/template-build-win.yml
@@ -8,27 +8,24 @@
   needs: [meta]
   variables:
   script:
-    - $build_directory = if ($env:BUILD_DIR) { $env:BUILD_DIR } else { $env:CMAKE_PRESET }
-    - $build_directory_full = "..\build\" + $build_directory
+    - $build_directory_full = "..\build\" + $env:CMAKE_PRESET
+    - $log_file = $build_directory_full + "\make.output"
     - (rm -r -fo $build_directory_full)
     - cmd /c if not exist $build_directory_full mkdir $build_directory_full
     - mkdir build
     # Create symlink https://stackoverflow.com/a/34905638/80480
-    - cmd /c mklink /D build\$build_directory $env:CI_PROJECT_DIR\$build_directory_full
-    - $cmake_cmd = "cmake -S . -B $build_directory_full --preset=$env:CMAKE_PRESET
-      $env:CMAKE_ARGS
+    - cmd /c mklink /D build\$env:CMAKE_PRESET $env:CI_PROJECT_DIR\$build_directory_full
+    - $cmake_cmd = "cmake -S . --preset=$env:CMAKE_PRESET $env:CMAKE_ARGS
       -DOGS_BUILD_PROCESSES=$env:BUILD_PROCESSES"
     - $cmake_cmd
     - Invoke-Expression $cmake_cmd
-    - cd $build_directory_full
-    - cmake --build . --target package | Tee-Object -FilePath make.output
-    - if($env:BUILD_TESTS -eq "true") { cmake --build . --target tests }
-    - if($env:BUILD_CTEST -eq "true") { cmake --build . --target ctest }
-        cp Testing/**/Test.xml Tests/ctest.xml
+    - cmake --build --preset=$env:CMAKE_PRESET --target package | Tee-Object -FilePath $log_file
+    - if($env:BUILD_TESTS -eq "true") { cmake --build --preset=$env:CMAKE_PRESET --target tests }
+    - if($env:BUILD_CTEST -eq "true") { ctest --preset=$env:CMAKE_PRESET --output-junit Tests/ctest.xml }
     - |
-      if($env:CHECK_WARNINGS -eq "true" -and (cat make.output | Select-String -Pattern ': warning') )
+      if($env:CHECK_WARNINGS -eq "true" -and (cat $log_file | Select-String -Pattern ': warning') )
       {
           Write-Output 'There were compiler warnings:\n'
-          cat make.output | Select-String -Pattern ': warning'
+          cat $log_file | Select-String -Pattern ': warning'
           exit 1
       }
diff --git a/scripts/ci/extends/test-artifacts.yml b/scripts/ci/extends/test-artifacts.yml
index 96f2a07bbe8..ffe88323e80 100644
--- a/scripts/ci/extends/test-artifacts.yml
+++ b/scripts/ci/extends/test-artifacts.yml
@@ -3,7 +3,7 @@
     when: always
     paths:
       - build/*/logs/*.log
-      - build/*/Tests/ctest.xml
+      - build/*/Tests/ctest-junit.xml
       - build/*/Tests/testrunner.xml
       - build/*/make.output
       - build/*/*.zip
@@ -12,3 +12,4 @@
     reports:
       junit:
         - build/*/Tests/testrunner.xml
+        - build/*/Tests/ctest.xml
-- 
GitLab