diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index efa1708652a0be4d0600c88687d52c9c8c5f0f61..8f6e7ac970fe9251432a87d951a15557ff759c23 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 @@ -161,6 +163,7 @@ build:windows_vs2022_debug: - .windows_debug - .windows_tags - .cmake_build_windows + - .cmake_build_artifacts - .run_automatically test:windows_vs2022_debug: @@ -168,6 +171,7 @@ test:windows_vs2022_debug: - .windows_debug - .windows_tags - .cmake_test_windows + - .cmake_annotation_artifacts - .run_automatically needs: - build:windows_vs2022_debug @@ -177,6 +181,7 @@ build:windows_vs2022_release: - .windows_release - .windows_tags - .cmake_build_windows + - .cmake_build_artifacts - .run_automatically test:windows_vs2022_release: @@ -184,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 096e25b312b7401d1fe0a473e2e790075613979a..75c909fee4ab831aa60b9a83016cc9cf0c060c43 100644 --- a/.gitlab/artifacts.yml +++ b/.gitlab/artifacts.yml @@ -1,8 +1,20 @@ --- # 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 + when: always + reports: + annotations: + - build/annotations.json paths: # The artifacts of the build. # Generated headers. @@ -16,3 +28,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 0000000000000000000000000000000000000000..4f9aadea030491dfc0c9731ea94e47f3f0c2c76d --- /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 a6b47c49ab614b6bc58cbef7ba2f01e5e7ea5f51..d3f63a4009c440b454e5cf1fe803c0facc1e7d51 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 55cad135a077af68b211858ac160f354f8a28940..333c42bee05eb75f9f6f513b9fccf7afe05fdd59 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 5a4cf081463066ebd70e5fbc9e297d8720cf5090..bf837826b0cefd0365e1ed8f8c475cf19eb42bc2 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 facf9ba4ba10eb899564dfa907add46c0af28e80..4b12da9886ac8d8ee5626455c6efbd15afd65360 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") diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml index b13485583e4fdbe048246cbd624014bdbdbed46f..211fa967652c69406e0cad334848a35ff723d121 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: