From 9bc600afbe3752d0e13120a2b4044b35d7ab5cf8 Mon Sep 17 00:00:00 2001 From: Ben Lawrence Date: Wed, 23 Oct 2024 10:31:04 +0100 Subject: [PATCH] Check that subprocesses don't error out This should make the cause of some CI failures easier to spot since they'll fail early rather than halfway through the build. --- cmake/DoradoVersion.cmake | 13 +++++++++++-- cmake/HDF5.cmake | 21 +++++++++++++-------- cmake/Htslib.cmake | 7 +++++-- cmake/InstallRedistLibs.cmake | 12 ++++++++++-- cmake/Koi.cmake | 22 ++++++++++++++++++---- cmake/Torch.cmake | 7 ++++++- cmake/UpdateSubmodules.cmake | 12 ++++++------ cmake/VbzPlugin.cmake | 12 ++++++++++-- 8 files changed, 79 insertions(+), 27 deletions(-) diff --git a/cmake/DoradoVersion.cmake b/cmake/DoradoVersion.cmake index b185318d9..c105c8de2 100644 --- a/cmake/DoradoVersion.cmake +++ b/cmake/DoradoVersion.cmake @@ -4,8 +4,17 @@ set(DORADO_VERSION_REV 0) find_package(Git QUIET) if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") - execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%h OUTPUT_VARIABLE DORADO_SHORT_HASH WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - execute_process(COMMAND ${GIT_EXECUTABLE} diff --quiet RESULT_VARIABLE IS_DIRTY WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%h + OUTPUT_VARIABLE DORADO_SHORT_HASH + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process( + COMMAND ${GIT_EXECUTABLE} diff --quiet + RESULT_VARIABLE IS_DIRTY + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + ) if(IS_DIRTY) string(APPEND DORADO_SHORT_HASH "+dirty") endif() diff --git a/cmake/HDF5.cmake b/cmake/HDF5.cmake index 142ca2eb4..2571d44ba 100644 --- a/cmake/HDF5.cmake +++ b/cmake/HDF5.cmake @@ -19,15 +19,20 @@ elseif(WIN32) # Need a zlib build for HDF to use download_and_extract(https://github.com/madler/zlib/archive/refs/tags/v${ZLIB_VER}.tar.gz zlib-${ZLIB_VER}) set(HDF5_ZLIB_BUILD_DIR ${CMAKE_BINARY_DIR}/zlib-${ZLIB_VER}/build) - execute_process(COMMAND - cmake - -S ${DORADO_3RD_PARTY_DOWNLOAD}/zlib-${ZLIB_VER}/zlib-${ZLIB_VER} - -B ${HDF5_ZLIB_BUILD_DIR} - -A x64 - -D CMAKE_INSTALL_PREFIX=${HDF5_ZLIB_INSTALL_DIR} - -D CMAKE_CONFIGURATION_TYPES=Release + execute_process( + COMMAND + cmake + -S ${DORADO_3RD_PARTY_DOWNLOAD}/zlib-${ZLIB_VER}/zlib-${ZLIB_VER} + -B ${HDF5_ZLIB_BUILD_DIR} + -A x64 + -D CMAKE_INSTALL_PREFIX=${HDF5_ZLIB_INSTALL_DIR} + -D CMAKE_CONFIGURATION_TYPES=Release + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process( + COMMAND cmake --build ${HDF5_ZLIB_BUILD_DIR} --config Release --target install + COMMAND_ERROR_IS_FATAL ANY ) - execute_process(COMMAND cmake --build ${HDF5_ZLIB_BUILD_DIR} --config Release --target install) # HDF5 itself download_and_extract(https://cdn.oxfordnanoportal.com/software/analysis/${HDF_VER}-win.zip ${HDF_VER}) diff --git a/cmake/Htslib.cmake b/cmake/Htslib.cmake index caabc1a39..86dff1f8e 100644 --- a/cmake/Htslib.cmake +++ b/cmake/Htslib.cmake @@ -18,8 +18,11 @@ if(NOT TARGET htslib) # lazy include guard find_program(MAKE_COMMAND make REQUIRED) find_program(AUTOCONF_COMMAND autoconf REQUIRED) find_program(AUTOHEADER_COMMAND autoheader REQUIRED) - execute_process(COMMAND bash -c "${AUTOCONF_COMMAND} -V | sed 's/.* //; q'" - OUTPUT_VARIABLE AUTOCONF_VERS) + execute_process( + COMMAND bash -c "${AUTOCONF_COMMAND} -V | sed 's/.* //; q'" + OUTPUT_VARIABLE AUTOCONF_VERS + COMMAND_ERROR_IS_FATAL ANY + ) if (AUTOCONF_VERS VERSION_GREATER_EQUAL 2.70 AND NOT CMAKE_GENERATOR STREQUAL "Xcode") set(AUTOCONF_COMMAND autoreconf --install) endif() diff --git a/cmake/InstallRedistLibs.cmake b/cmake/InstallRedistLibs.cmake index 1984c0770..a3eb479c3 100644 --- a/cmake/InstallRedistLibs.cmake +++ b/cmake/InstallRedistLibs.cmake @@ -31,14 +31,22 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") get_filename_component(target_name ${target} NAME) get_filename_component(link_name ${link} NAME) if (NOT target_name STREQUAL link_name) - execute_process(COMMAND ln -rfs ${target_name} ${link_name} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + execute_process( + COMMAND ln -rfs ${target_name} ${link_name} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${link_name} DESTINATION lib COMPONENT redist_libs) # create links to the versioned links above # e.g. libcublas.so => libcublas.so.11 string(REGEX REPLACE "[.]so[.0-9]*$" ".so" base_link ${link_name}) if (NOT base_link STREQUAL link_name) - execute_process(COMMAND ln -rfs ${link_name} ${base_link} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + execute_process( + COMMAND ln -rfs ${link_name} ${base_link} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${base_link} DESTINATION lib COMPONENT redist_libs) endif() endif() diff --git a/cmake/Koi.cmake b/cmake/Koi.cmake index a58f5faae..54403e452 100644 --- a/cmake/Koi.cmake +++ b/cmake/Koi.cmake @@ -31,13 +31,27 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR WIN32) if(NOT EXISTS ${KOI_DIR}) if(DEFINED GITLAB_CI_TOKEN) message("Cloning Koi using CI token") - execute_process(COMMAND git clone https://gitlab-ci-token:${GITLAB_CI_TOKEN}@git.oxfordnanolabs.local/machine-learning/koi.git ${KOI_DIR}) + execute_process( + COMMAND git clone https://gitlab-ci-token:${GITLAB_CI_TOKEN}@git.oxfordnanolabs.local/machine-learning/koi.git ${KOI_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) else() message("Cloning Koi using ssh") - execute_process(COMMAND git clone git@git.oxfordnanolabs.local:machine-learning/koi.git ${KOI_DIR}) + execute_process( + COMMAND git clone git@git.oxfordnanolabs.local:machine-learning/koi.git ${KOI_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) endif() - execute_process(COMMAND git checkout v${KOI_VERSION} WORKING_DIRECTORY ${KOI_DIR}) - execute_process(COMMAND git submodule update --init --checkout WORKING_DIRECTORY ${KOI_DIR}) + execute_process( + COMMAND git checkout v${KOI_VERSION} + WORKING_DIRECTORY ${KOI_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process( + COMMAND git submodule update --init --checkout + WORKING_DIRECTORY ${KOI_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) endif() add_subdirectory(${KOI_DIR}/koi/lib) diff --git a/cmake/Torch.cmake b/cmake/Torch.cmake index 3999adc5d..469def886 100644 --- a/cmake/Torch.cmake +++ b/cmake/Torch.cmake @@ -214,7 +214,12 @@ else() file(STRINGS "${TORCH_LIB}/build-version" TORCH_BUILD_VERSION) else() set(PYTORCH_BUILD_VERSION "import torch; print('%s+cu%s' % (torch.__version__, torch.version.cuda.replace('.', '')), end='')") - execute_process(COMMAND python3 -c "${PYTORCH_BUILD_VERSION}" OUTPUT_VARIABLE TORCH_BUILD_VERSION WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) + execute_process( + COMMAND python3 -c "${PYTORCH_BUILD_VERSION}" + OUTPUT_VARIABLE TORCH_BUILD_VERSION + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) endif() message(STATUS "TORCH_BUILD_VERSION: ${TORCH_BUILD_VERSION}") endif() diff --git a/cmake/UpdateSubmodules.cmake b/cmake/UpdateSubmodules.cmake index 1ae5b59ea..a1e7de202 100644 --- a/cmake/UpdateSubmodules.cmake +++ b/cmake/UpdateSubmodules.cmake @@ -3,17 +3,17 @@ option(GIT_SUBMODULE "Check submodules during build" ON) function(git_submodule_update) find_package(Git QUIET) if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") - + if(GIT_SUBMODULE) message(STATUS "Submodule update") - + file(LOCK ${CMAKE_SOURCE_DIR} DIRECTORY) execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - RESULT_VARIABLE GIT_SUBMOD_RESULT - ) + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE GIT_SUBMOD_RESULT + ) file(LOCK ${CMAKE_SOURCE_DIR} DIRECTORY RELEASE) - + if(NOT GIT_SUBMOD_RESULT EQUAL "0") message(FATAL_ERROR "git submodule update --init --recursive failed with ${GIT_SUBMOD_RESULT}, please checkout submodules") endif() diff --git a/cmake/VbzPlugin.cmake b/cmake/VbzPlugin.cmake index eb41df61f..82b3495d8 100644 --- a/cmake/VbzPlugin.cmake +++ b/cmake/VbzPlugin.cmake @@ -15,8 +15,12 @@ function(add_hdf_vbz_plugin) -B ${ZSTD_BUILD_DIR} -A x64 -D CMAKE_CONFIGURATION_TYPES=Release + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process( + COMMAND cmake --build ${ZSTD_BUILD_DIR} --config Release + COMMAND_ERROR_IS_FATAL ANY ) - execute_process(COMMAND cmake --build ${ZSTD_BUILD_DIR} --config Release) # On windows we need to tell hdf_plugins where we put the built zstd lib set(CONAN_INCLUDE_DIRS_RELEASE ${DORADO_3RD_PARTY_SOURCE}/zstd/lib) @@ -35,8 +39,12 @@ function(add_hdf_vbz_plugin) -S ${DORADO_3RD_PARTY_SOURCE}/zstd/build/cmake -B ${ZSTD_BUILD_DIR} -D CMAKE_INSTALL_PREFIX=${ZSTD_INSTALL_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) + execute_process( + COMMAND cmake --build ${ZSTD_BUILD_DIR} --target install + COMMAND_ERROR_IS_FATAL ANY ) - execute_process(COMMAND cmake --build ${ZSTD_BUILD_DIR} --target install) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/dorado/3rdparty/hdf_plugins/cmake") # Findzstd.cmake uses conan variables to determine where things are.