From d882c2ccef56d650ecc7668e04ba30db1502c492 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 25 Feb 2025 14:07:02 +0100 Subject: [PATCH 1/4] gitlab-ci: always provide artifacts For debugging purposes. --- .gitlab/artifacts.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab/artifacts.yml b/.gitlab/artifacts.yml index 096e25b3..20b60d24 100644 --- a/.gitlab/artifacts.yml +++ b/.gitlab/artifacts.yml @@ -3,6 +3,7 @@ .cmake_build_artifacts: artifacts: expire_in: 1d + when: always paths: # The artifacts of the build. # Generated headers. -- GitLab From e9611578f81d55642554501bc2e6440cc2469010 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 25 Feb 2025 14:08:37 +0100 Subject: [PATCH 2/4] gitlab-ci: add links to CDash as annotations --- .gitlab/artifacts.yml | 4 ++++ .gitlab/ci/ctest_annotation.cmake | 33 +++++++++++++++++++++++++++++++ .gitlab/ci/ctest_build.cmake | 8 ++++++++ .gitlab/ci/ctest_configure.cmake | 14 ++++++++++++- .gitlab/ci/ctest_memcheck.cmake | 7 +++++++ .gitlab/ci/ctest_test.cmake | 11 +++++++++++ 6 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 .gitlab/ci/ctest_annotation.cmake diff --git a/.gitlab/artifacts.yml b/.gitlab/artifacts.yml index 20b60d24..85cb5b12 100644 --- a/.gitlab/artifacts.yml +++ b/.gitlab/artifacts.yml @@ -4,6 +4,9 @@ artifacts: expire_in: 1d when: always + reports: + annotations: + - build/annotations.json paths: # The artifacts of the build. # Generated headers. @@ -17,3 +20,4 @@ - build/Testing/ # CDash files. - build/DartConfiguration.tcl + - build/cdash-build-id diff --git a/.gitlab/ci/ctest_annotation.cmake b/.gitlab/ci/ctest_annotation.cmake new file mode 100644 index 00000000..4f9aadea --- /dev/null +++ b/.gitlab/ci/ctest_annotation.cmake @@ -0,0 +1,33 @@ +function (ctest_annotation_report file) + set(label "") + + if (EXISTS "${file}") + file(READ "${file}" json) + else () + set(json "{\"CDash\": []}") + endif () + + foreach (arg IN LISTS ARGN) + if (NOT label) + set(label "${arg}") + continue () + endif () + + set(item "{\"external_link\":{\"label\":\"${label}\",\"url\":\"${arg}\"}}") + set(label "") + + string(JSON length LENGTH "${json}" "CDash") + string(JSON json SET "${json}" "CDash" "${length}" "${item}") + endforeach () + + file(WRITE "${file}" "${json}") +endfunction () + +if (NOT DEFINED build_id) + include("${CTEST_BINARY_DIRECTORY}/cdash-build-id" OPTIONAL) +endif () + +function (store_build_id build_id) + file(WRITE "${CTEST_BINARY_DIRECTORY}/cdash-build-id" + "set(build_id \"${build_id}\")\n") +endfunction () diff --git a/.gitlab/ci/ctest_build.cmake b/.gitlab/ci/ctest_build.cmake index a6b47c49..d3f63a40 100644 --- a/.gitlab/ci/ctest_build.cmake +++ b/.gitlab/ci/ctest_build.cmake @@ -27,6 +27,14 @@ ctest_build( RETURN_VALUE build_result) ctest_submit(PARTS Build) +include("${CMAKE_CURRENT_LIST_DIR}/ctest_annotation.cmake") +if (DEFINED build_id) + ctest_annotation_report("${CTEST_BINARY_DIRECTORY}/annotations.json" + "Build Errors (${num_errors})" "https://open.cdash.org/viewBuildError.php?buildid=${build_id}" + "Build Warnings (${num_warnings})" "https://open.cdash.org/viewBuildError.php?type=1&buildid=${build_id}" + ) +endif () + if (build_result) message(FATAL_ERROR "Failed to build") diff --git a/.gitlab/ci/ctest_configure.cmake b/.gitlab/ci/ctest_configure.cmake index 55cad135..333c42be 100644 --- a/.gitlab/ci/ctest_configure.cmake +++ b/.gitlab/ci/ctest_configure.cmake @@ -24,7 +24,19 @@ ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}") # We can now submit because we've configured. This is a cmb-superbuild-ism. ctest_submit(PARTS Update) -ctest_submit(PARTS Configure) +ctest_submit( + PARTS Configure + BUILD_ID build_id) + +include("${CMAKE_CURRENT_LIST_DIR}/ctest_annotation.cmake") +if (DEFINED build_id) + ctest_annotation_report("${CTEST_BINARY_DIRECTORY}/annotations.json" + "Build Summary" "https://open.cdash.org/build/${build_id}" + "Update" "https://open.cdash.org/build/${build_id}/update" + "Configure" "https://open.cdash.org/build/${build_id}/configure" + ) + store_build_id("${build_id}") +endif () if (configure_result) message(FATAL_ERROR diff --git a/.gitlab/ci/ctest_memcheck.cmake b/.gitlab/ci/ctest_memcheck.cmake index 5a4cf081..bf837826 100644 --- a/.gitlab/ci/ctest_memcheck.cmake +++ b/.gitlab/ci/ctest_memcheck.cmake @@ -28,6 +28,13 @@ ctest_memcheck( DEFECT_COUNT defects) ctest_submit(PARTS Memcheck) +include("${CMAKE_CURRENT_LIST_DIR}/ctest_annotation.cmake") +if (DEFINED build_id) + ctest_annotation_report("${CTEST_BINARY_DIRECTORY}/annotations.json" + "Defects (${defects})" "https://open.cdash.org/viewDynamicAnalysis.php?buildid=${build_id}" + ) +endif () + if (test_result) message(FATAL_ERROR "Failed to test") diff --git a/.gitlab/ci/ctest_test.cmake b/.gitlab/ci/ctest_test.cmake index facf9ba4..4b12da98 100644 --- a/.gitlab/ci/ctest_test.cmake +++ b/.gitlab/ci/ctest_test.cmake @@ -24,6 +24,17 @@ ctest_test( EXCLUDE "${test_exclusions}") ctest_submit(PARTS Test) +include("${CMAKE_CURRENT_LIST_DIR}/ctest_annotation.cmake") +if (DEFINED build_id) + ctest_annotation_report("${CTEST_BINARY_DIRECTORY}/annotations.json" + "Build Summary" "https://open.cdash.org/build/${build_id}" + "All Tests" "https://open.cdash.org/viewTest.php?buildid=${build_id}" + "Test Failures" "https://open.cdash.org/viewTest.php?onlyfailed&buildid=${build_id}" + "Tests Not Run" "https://open.cdash.org/viewTest.php?onlynotrun&buildid=${build_id}" + "Test Passes" "https://open.cdash.org/viewTest.php?onlypassed&buildid=${build_id}" + ) +endif () + if (test_result) message(FATAL_ERROR "Failed to test") -- GitLab From 3def1fc71da3c3c22e393d24d522dd608a8af2e6 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 25 Feb 2025 14:35:35 +0100 Subject: [PATCH 3/4] gitlab-ci: provide limited artifacts for Windows builds This reduces the artifact size (e.g., `.obj` files are skipped). --- .gitlab-ci.yml | 2 ++ .gitlab/os-windows.yml | 5 ----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index efa17086..2599b33d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -161,6 +161,7 @@ build:windows_vs2022_debug: - .windows_debug - .windows_tags - .cmake_build_windows + - .cmake_build_artifacts - .run_automatically test:windows_vs2022_debug: @@ -177,6 +178,7 @@ build:windows_vs2022_release: - .windows_release - .windows_tags - .cmake_build_windows + - .cmake_build_artifacts - .run_automatically test:windows_vs2022_release: diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml index b1348558..211fa967 100644 --- a/.gitlab/os-windows.yml +++ b/.gitlab/os-windows.yml @@ -45,11 +45,6 @@ - *before_script_windows_build - "ctest -VV -S .gitlab/ci/ctest_configure.cmake" - "ctest -VV -S .gitlab/ci/ctest_build.cmake" - artifacts: - expire_in: 24 hours - when: always - paths: - - build .cmake_test_windows: &cmake_test_windows extends: -- GitLab From 1305711da0a41c17940601ab8519b5a98faf66ac Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 25 Feb 2025 14:35:59 +0100 Subject: [PATCH 4/4] gitlab-ci: limit test job artifacts Only annotations are necessary. --- .gitlab-ci.yml | 10 +++++++--- .gitlab/artifacts.yml | 8 ++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2599b33d..8f6e7ac9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -81,6 +81,7 @@ test:fedora36-mpich: - .fedora36_mpich - .cmake_test_linux - .linux_builder_tags + - .cmake_annotation_artifacts - .run_automatically needs: - build:fedora36-mpich @@ -98,6 +99,7 @@ test:fedora36-mpich-nothreads: - .fedora36_mpich_nothreads - .cmake_test_linux - .linux_builder_tags + - .cmake_annotation_artifacts - .run_automatically needs: - build:fedora36-mpich-nothreads @@ -115,7 +117,7 @@ test:fedora36-openmpi: - .fedora36_openmpi - .cmake_test_linux - .linux_builder_tags - - .cmake_build_artifacts + - .cmake_annotation_artifacts - .run_automatically needs: - build:fedora36-openmpi @@ -133,7 +135,7 @@ test:fedora36-asan: - .fedora36_asan - .cmake_memcheck_linux - .linux_tester_priv_tags - - .cmake_build_artifacts + - .cmake_annotation_artifacts - .run_automatically needs: - build:fedora36-asan @@ -151,7 +153,7 @@ test:fedora36-ubsan: - .fedora36_ubsan - .cmake_memcheck_linux - .linux_tester_priv_tags - - .cmake_build_artifacts + - .cmake_annotation_artifacts - .run_automatically needs: - build:fedora36-ubsan @@ -169,6 +171,7 @@ test:windows_vs2022_debug: - .windows_debug - .windows_tags - .cmake_test_windows + - .cmake_annotation_artifacts - .run_automatically needs: - build:windows_vs2022_debug @@ -186,6 +189,7 @@ test:windows_vs2022_release: - .windows_release - .windows_tags - .cmake_test_windows + - .cmake_annotation_artifacts - .run_automatically needs: - build:windows_vs2022_release diff --git a/.gitlab/artifacts.yml b/.gitlab/artifacts.yml index 85cb5b12..75c909fe 100644 --- a/.gitlab/artifacts.yml +++ b/.gitlab/artifacts.yml @@ -1,5 +1,13 @@ --- # Lists of paths for artifacts of various stages. +.cmake_annotation_artifacts: + artifacts: + expire_in: 1d + when: always + reports: + annotations: + - build/annotations.json + .cmake_build_artifacts: artifacts: expire_in: 1d -- GitLab