diff --git a/.gitmodules b/.gitmodules index 2f6cb0566..3699e488c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,5 +4,7 @@ branch = spack-stack-dev [submodule "repos/builtin"] path = repos/builtin - url = https://github.com/jcsda/spack-packages - branch = spack-stack-dev + #url = https://github.com/jcsda/spack-packages + #branch = spack-stack-dev + url = https://github.com/climbfuji/spack-packages + branch = bugfix/crtm_fix_link_instead_of_flatten diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index 4db92728e..f86c010a3 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -87,6 +87,12 @@ packages: codee: require: - '@2025.4.7' + crtm_fix: + require: + - ~link-big-endian + - +link-little-endian + - +link-netcdf + - +link-testfiles # Attention - when updating also check the various jcsda-emc-bundles env packages crtm: require: diff --git a/configs/sites/tier1/blueback/config.yaml b/configs/sites/tier1/blueback/config.yaml index 84fe05ab9..77a2e80ad 100644 --- a/configs/sites/tier1/blueback/config.yaml +++ b/configs/sites/tier1/blueback/config.yaml @@ -1,2 +1,2 @@ config: - build_jobs: 8 + build_jobs: 2 diff --git a/configs/sites/tier1/narwhal/config.yaml b/configs/sites/tier1/narwhal/config.yaml index 84fe05ab9..77a2e80ad 100644 --- a/configs/sites/tier1/narwhal/config.yaml +++ b/configs/sites/tier1/narwhal/config.yaml @@ -1,2 +1,2 @@ config: - build_jobs: 8 + build_jobs: 2 diff --git a/configs/sites/tier1/nautilus/config.yaml b/configs/sites/tier1/nautilus/config.yaml index 84fe05ab9..77a2e80ad 100644 --- a/configs/sites/tier1/nautilus/config.yaml +++ b/configs/sites/tier1/nautilus/config.yaml @@ -1,2 +1,2 @@ config: - build_jobs: 8 + build_jobs: 2 diff --git a/repos/builtin b/repos/builtin index d437c53db..cafa2c343 160000 --- a/repos/builtin +++ b/repos/builtin @@ -1 +1 @@ -Subproject commit d437c53db6c031f06b003d2de69c083ee5615c1e +Subproject commit cafa2c3437466ba60e1847b5aa380f17e63ee74b diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py index 15c20eadb..a2886aab6 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ufo/package.py @@ -104,55 +104,38 @@ def setup_build_environment(self, env: EnvironmentModifications) -> None: def check(self): skipped_tests = None with when("@1.10.0.20250821"): - skipped_tests = [ - "ufo_test_tier1_test_ufo_tropics_qc_filters", - ] - # Until issues with crtm fixed data organization are - # resolved, exclude any tests using crtm fixed data - skipped_tests += [ - "_crtm", - "ufo_test_tier1_test_ufo_atms_skylab_filters", - "ufo_test_tier1_test_ufo_amsr2_qc", - "ufo_test_tier1_test_ufo_amsua_qc", - "ufo_test_tier1_test_ufo_amsua_allsky_gfs_gsi_qc", - "ufo_test_tier1_test_ufo_amsua_allsky_gsi_qc", - "ufo_test_tier1_test_ufo_amsua_qc_clwretmw", - "ufo_test_tier1_test_ufo_amsua_qc_filters", - "ufo_test_tier1_test_ufo_amsua_qc_filters_geos", - "ufo_test_tier1_test_ufo_amsua_qc_miss_val", - "ufo_test_tier1_test_ufo_atms_qc_filters", - "ufo_test_tier1_test_ufo_atms_n20_qc_filters_geos", - "ufo_test_tier1_test_ufo_cris_qc", - "ufo_test_tier1_test_ufo_cris_qc_land", - "ufo_test_tier1_test_ufo_amsr2_qc_filters", - "ufo_test_tier1_test_ufo_gmi_skylab_filters", - "ufo_test_tier1_test_ufo_gmi_qc_filters", - "ufo_test_tier1_test_ufo_gmi_qc_filters_geos", - "ufo_test_tier1_test_ufo_mhs_qc_filters_geos", - "ufo_test_tier1_test_ufo_qc_flags_true", - "ufo_test_tier1_test_ufo_gmi_clw_ret", - "ufo_test_tier1_test_ufo_ssmis_f17_gfs_backgroundcheck_bc", - "ufo_test_tier1_test_ufo_ssmis_f17_gfs_backgroundcheck_nbc", - ] - # Additional test failures with Intel oneAPI only + skipped_tests = [] if self.spec.satisfies("%oneapi"): skipped_tests += [ "ufo_test_tier1_test_ufo_obserrorcrossvarcorr", "ufo_test_tier1_test_ufo_obserrorwithingroupcorr", "ufo_test_tier1_test_ufo_obserrordiagonal", + "ufo_test_tier1_test_ufo_gnssrobendmetoffice_qc", "ufo_test_tier1_test_ufo_gnssrobendmetoffice_qc_profile", + "ufo_test_tier1_test_ufo_gnssrobendmetoffice_obserror", "ufo_test_tier1_test_ufo_gnssrorefmetoffice_qc", "ufo_test_tier1_test_ufo_gnssrobndnbam_qc", "ufo_test_tier1_test_ufo_gnssro_obs_error", + "ufo_test_tier1_test_ufo_gnssro_super_refraction_check", "ufo_test_tier1_test_ufo_qc_modelbestfitpressure", "ufo_test_tier1_test_ufo_satwind_inversion_correction", + "ufo_test_tier1_test_ufo_amsua_allsky_gfs_gsi_qc", + "ufo_test_tier1_test_ufo_cris_qc", + "ufo_test_tier1_test_ufo_cris_qc_land", + "ufo_test_tier1_test_ufo_qc_flags_true", "ufo_test_tier1_test_ufo_function_averagetemperaturebelow", "ufo_test_tier1_test_ufo_function_assignvalueequalchannels", "ufo_test_tier1_test_ufo_fov_amsua", "ufo_test_tier1_test_ufo_sample_and_reduce_over_fov", "ufo_test_tier1_test_ufo_opr_gnssrorefmetoffice", "ufo_test_tier1_test_ufo_linopr_gnssrorefmetoffice", + "ufo_test_tier1_test_ufo_opr_gnssrobendmetoffice", + "ufo_test_tier1_test_ufo_linopr_gnssrobendmetoffice", + "ufo_test_tier1_test_ufo_opr_gnssrobendmetoffice_nopseudo", + "ufo_test_tier1_test_ufo_linopr_gnssrobendmetoffice_nopseudo", "ufo_test_tier1_test_ufo_opr_gnssrobendmetoffice_profile", + "ufo_test_tier1_test_ufo_opr_gnssrobendmetoffice_nosupercheck", + "ufo_test_tier1_test_ufo_linopr_gnssrobendmetoffice_nosupercheck", "ufo_test_tier1_test_ufo_opr_groundgnssmetoffice", "ufo_test_tier1_test_ufo_linopr_groundgnssmetoffice", "ufo_test_tier1_test_ufo_opr_logarithm", @@ -162,15 +145,23 @@ def check(self): "ufo_test_tier1_test_ufo_opr_seaicefrac", "ufo_test_tier1_test_ufo_linopr_seaicefrac", "ufo_test_tier1_test_ufo_opr_sfcpcorrected", - "ufo_test_tier1_test_ufo_gnssrobendmetoffice_qc", - "ufo_test_tier1_test_ufo_gnssrobendmetoffice_obserror", - "ufo_test_tier1_test_ufo_gnssro_super_refraction_check", - "ufo_test_tier1_test_ufo_opr_gnssrobendmetoffice", - "ufo_test_tier1_test_ufo_linopr_gnssrobendmetoffice", - "ufo_test_tier1_test_ufo_opr_gnssrobendmetoffice_nopseudo", - "ufo_test_tier1_test_ufo_linopr_gnssrobendmetoffice_nopseudo", - "ufo_test_tier1_test_ufo_opr_gnssrobendmetoffice_nosupercheck", - "ufo_test_tier1_test_ufo_linopr_gnssrobendmetoffice_nosupercheck", + "ufo_test_tier1_test_ufo_opr_abi_ahi_crtm", + "ufo_test_tier1_test_ufo_linopr_abi_ahi_crtm", + "ufo_test_tier1_test_ufo_opr_airs_crtm", + "ufo_test_tier1_test_ufo_linopr_airs_crtm", + "ufo_test_tier1_test_ufo_opr_crtm_vis_albedo", + "ufo_test_tier1_test_ufo_opr_cris_crtm", + "ufo_test_tier1_test_ufo_linopr_cris_crtm", + "ufo_test_tier1_test_ufo_opr_cris_crtm_co2_options", + "ufo_test_tier1_test_ufo_linopr_cris_crtm_co2_options", + "ufo_test_tier1_test_ufo_opr_hirs4_crtm", + "ufo_test_tier1_test_ufo_linopr_hirs4_crtm", + "ufo_test_tier1_test_ufo_opr_iasi_crtm", + "ufo_test_tier1_test_ufo_opr_seviri_crtm", + "ufo_test_tier1_test_ufo_linopr_seviri_crtm", + "ufo_test_tier1_test_ufo_opr_sndrd1-4_crtm", + "ufo_test_tier1_test_ufo_linopr_sndrd1-4_crtm", + "ufo_test_tier1_test_ufo_obsdiag_crtm_airs_optics", ] ctest = Executable(self.spec["cmake"].prefix.bin.ctest) with working_dir(self.build_directory): diff --git a/util/nrl/batch_install.sh b/util/nrl/batch_install.sh index e54fa3bef..e0b0084b5 100755 --- a/util/nrl/batch_install.sh +++ b/util/nrl/batch_install.sh @@ -5,6 +5,19 @@ SPACK_STACK_DIR=$(dirname $(dirname ${SCRIPT_DIR})) set -e +################################################################################################## +# Packages for which to run tests when "-t" is specified; caveat: must be listed in order of # +# their respective dependencies (e.g. A depends on B --> B comes first) # +################################################################################################## + +SPACK_STACK_PACKAGES_TO_TEST=( + "oops" + "ioda" + "ioda-converters" + "ropp-ufo" + "ufo" +) + ################################################################################################## # Options # ################################################################################################## @@ -26,11 +39,13 @@ usage() { echo " requires role 'dev' and mode 'build'" echo " -e Continue builds/install in existing environments;" echo " by default, exit with an error if already exist" + echo " -t Run tests for specific thirdparty dependencies;" + echo " these are currently hardcoded in batch_install.sh" echo " -h display this help" echo } -while getopts r:m:d:c:uhe flag +while getopts r:m:d:c:ueth flag do case "${flag}" in r) @@ -51,6 +66,9 @@ do e) SPACK_STACK_IGNORE_ENV_EXIST="true" ;; + t) + SPACK_STACK_RUN_TESTS="true" + ;; *) usage exit 1 @@ -65,6 +83,7 @@ echo " SPACK_STACK_ENVIRONMENT_DIRS: ${SPACK_STACK_ENVIRONMENT_D echo " SPACK_STACK_BUILDCACHE_DIR: ${SPACK_STACK_BUILDCACHE_DIR:-use default caches}" echo " SPACK_STACK_UPDATE_DEV_CACHES: ${SPACK_STACK_UPDATE_DEV_CACHES:-false}" echo " SPACK_STACK_IGNORE_ENV_EXIST: ${SPACK_STACK_IGNORE_ENV_EXIST:-false}" +echo " SPACK_STACK_RUN_TESTS: ${SPACK_STACK_RUN_TESTS:-false}" if [[ -z ${SPACK_STACK_ROLE} ]]; then echo "ERROR, SPACK_STACK_ROLE not defined. Provide -r ROLE as argument" @@ -332,6 +351,12 @@ fi ignore_env_exist=${SPACK_STACK_IGNORE_ENV_EXIST:-false} +if [[ "${SPACK_STACK_RUN_TESTS}" == "true" ]]; then + test_packages=("${SPACK_STACK_PACKAGES_TO_TEST[@]}") +else + test_packages=() +fi + # Loop through all compilers and templates for this host first_pass="true" for compiler in "${SPACK_STACK_BATCH_COMPILERS[@]}"; do @@ -607,10 +632,31 @@ for compiler in "${SPACK_STACK_BATCH_COMPILERS[@]}"; do exit 1 ;; esac - spack install --verbose ${buildcache_install_flags} 2>&1 | tee log.install.${env_name}.001 - # Run another spack install without redirects to catch build errors - spack install + # If no tests are required, install everything + if [[ ${#test_packages[@]} -eq 0 ]]; then + set -o pipefail + spack install --verbose ${buildcache_install_flags} 2>&1 | tee log.install.${env_name}.001 + set +o pipefail + else + for (( idx=0; idx<${#test_packages[@]}; idx++ )); do + test_package=${test_packages[$idx]} + # First, check if this package is in this environment + set +e + grep -e "${test_package}@" log.concretize.${env_name}.001 || continue + set -e + idx_padded=$(printf "%03d" "$((idx+1))") + set -o pipefail + spack install --verbose ${buildcache_install_flags} --only=dependencies ${test_package} 2>&1 | tee log.install.${env_name}.${idx_padded}.${test_package}-dependencies + spack install --verbose --no-cache --test=root ${test_package} 2>&1 | tee log.install.${env_name}.${idx_padded}.${test_package} + set +o pipefail + done + # idx now equals the length of the array; install the rest + idx_padded=$(printf "%03d" "$((idx+1))") + set -o pipefail + spack install --verbose ${buildcache_install_flags} 2>&1 | tee log.install.${env_name}.${idx_padded} + set +o pipefail + fi # In build mode, update local binary cache if [[ "${update_build_cache}" == "true" ]]; then