From 42af8c2da1bd0570a3464cf39558ea99db5cb465 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 14 Mar 2017 12:16:23 -0400 Subject: [PATCH 1/2] BUG: Return success for CircleCI, if not early fatal error --- circleci.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/circleci.cmake b/circleci.cmake index 6a6104ff3fa..dc9f1510190 100644 --- a/circleci.cmake +++ b/circleci.cmake @@ -59,3 +59,8 @@ SET (dashboard_cache " include("${CTEST_SCRIPT_DIRECTORY}/itk_common.cmake") + +# itk_common produces a fatal error ( and exits ) if there is a build +# error or warning and also for test failures. If itk_common does not +# terminate execution of this script early, then the build is OK. +return(0) From 014cdf330dce7e90ec13cc0a86cc4f64edc3b658 Mon Sep 17 00:00:00 2001 From: Bradley Lowekamp Date: Tue, 14 Mar 2017 12:17:00 -0400 Subject: [PATCH 2/2] ENH: Improve set_from_env function and use it The organization of setting CTest variables is improve by grouping them. Conditional are remove by making use of REQUIRE and DEFAULT options for the set_from_env function. The custom MAKEJ environment variable should be replaced by the standard CTEST_BUILD_FLAGS being mapped from an environment variable to a CTEST variable. MAKEJ remains to ensure the release branch still compiles on CircleCI. These changes follow improvements committed to SimpleITK. --- circleci.cmake | 64 +++++++++++++++++++++++++----------------------- itk_common.cmake | 1 + 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/circleci.cmake b/circleci.cmake index dc9f1510190..dcbd8c16d96 100644 --- a/circleci.cmake +++ b/circleci.cmake @@ -1,45 +1,49 @@ -set(CTEST_SITE "CircleCI") +# set_from_env +# ------------ +# +# Sets a CMake variable from an environment variable. If the +# environment variable is not defined then the CMake variable is not +# modified. If DEFAULT is specified then if the environment variable +# is not defined the default value is used. Alternatively, if REQUIRED +# is specified then a FATAL_ERROR is generated. +# +# set_from_env( [REQUIRED|DEFAULT value] ) function(set_from_env var env_var) if(NOT DEFINED ENV{${env_var}}) - message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") + if (ARGV2 STREQUAL "REQUIRED") + message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.") + elseif (ARGV2 STREQUAL "DEFAULT") + set(${var} ${ARGV3} PARENT_SCOPE) + endif() + else() + set(${var} $ENV{${env_var}} PARENT_SCOPE) endif() - set(${var} $ENV{${env_var}} PARENT_SCOPE) endfunction() - -set_from_env(CTEST_DASHBOARD_ROOT "CTEST_SOURCE_DIRECTORY") -set_from_env(CTEST_DASHBOARD_ROOT "CTEST_DASHBOARD_ROOT") -set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE") - -string(SUBSTRING $ENV{CIRCLE_SHA1} 0 7 commit_sha1) - -set(CTEST_BUILD_NAME "CircleCI-$ENV{CIRCLE_BRANCH}-${commit_sha1}") - -if( NOT "$ENV{CI_PULL_REQUEST}" STREQUAL "" ) - set(CTEST_BUILD_NAME "${CTEST_BUILD_NAME}-pull") -endif() - - -set(CTEST_CMAKE_GENERATOR "Unix Makefiles") - -if (DEFINED ENV{MAKEJ}) - set( CTEST_BUILD_FLAGS -j$ENV{MAKEJ}) -endif() - +set(CTEST_SITE "CircleCI") +set(CTEST_UPDATE_VERSION_ONLY 1) set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL 2 ) -set_from_env(CTEST_SOURCE_DIRECTORY "CTEST_SOURCE_DIRECTORY" ) -set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") -set_from_env(dashboard_model "DASHBOARD_MODEL") -if (DEFINED ENV{CTEST_CONFIGURATION_TYPE}) - set(CTEST_CONFIGURATION_TYPE "$ENV{CTEST_CONFIGURATION_TYPE}") -endif() +# Make environment variables to CMake variables for CTest +set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Unix Makefiles" ) +set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY") +set_from_env(CTEST_DASHBOARD_ROOT "CTEST_DASHBOARD_ROOT" REQUIRED) +set_from_env(CTEST_SOURCE_DIRECTORY "CTEST_SOURCE_DIRECTORY" REQUIRED) +set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release") +# Legacy support for MAKEJ environment variable +# Please set CTEST_BUILD_FLAGS directly +set_from_env(makej "MAKEJ") +set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS" DEFAULT ${MAKEJ}) -set(CTEST_UPDATE_VERSION_ONLY 1) +# Construct build name based on what is being built +string(SUBSTRING $ENV{CIRCLE_SHA1} 0 7 commit_sha1) +set(CTEST_BUILD_NAME "CircleCI-$ENV{CIRCLE_BRANCH}-${commit_sha1}") +set_from_env(dashboard_git_branch "CIRCLE_BRANCH") +set_from_env(dashboard_model "DASHBOARD_MODEL" DEFAULT "Continuous" ) set(dashboard_loop 0) list(APPEND CTEST_NOTES_FILES diff --git a/itk_common.cmake b/itk_common.cmake index 86399eb972f..8799d621c7a 100644 --- a/itk_common.cmake +++ b/itk_common.cmake @@ -303,6 +303,7 @@ foreach(v ExternalData_OBJECT_STORES CTEST_CMAKE_GENERATOR CTEST_BUILD_CONFIGURATION + CTEST_BUILD_FLAGS CTEST_GIT_COMMAND CTEST_CHECKOUT_COMMAND CTEST_SCRIPT_DIRECTORY