From 92181afe5c38ccda90b428cf3d0afd576b40b49f Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Tue, 12 May 2026 15:53:06 +0000 Subject: [PATCH 01/13] First pass at updating the global workflow environment --- .../packages/global_workflow_env/package.py | 85 +++++++++++++++++-- 1 file changed, 78 insertions(+), 7 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index a5a8bd23f..5d35f9da1 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -16,21 +16,50 @@ class GlobalWorkflowEnv(BundlePackage): maintainers("AlexanderRichert-NOAA") version("1.0.0") - variant("python", default=True, description="Build Python dependencies") variant("uwtools", default=False, description="Build uwtools") + variant("metplus", default=True, description="Build METplus to support verifiation") + variant("gdas", default=True, description="Build for GDASApp DA support") + variant("gsi", default=True, description="Build for GSI DA support") + variant("ci", default=False, description="Build for automated CI testing") - depends_on("ufs-pyenv", when="+python") + depends_on("ufs-pyenv") depends_on("prod-util") depends_on("grib-util") + depends_on("zlib") + depends_on("pigz") + depends_on("zstd") + depends_on("gettext") + depends_on("sqlite") + depends_on("cmake") + depends_on("libjpeg") + depends_on("jasper") + depends_on("libpng") + depends_on("openjpeg") + depends_on("proj") depends_on("nco") + depends_on("udunits") + depends_on("hdf5") + depends_on("antlr") depends_on("cdo") depends_on("netcdf-c") depends_on("netcdf-fortran") + depends_on("parallel-netcdf") + depends_on("parallelio") + depends_on("gsl") depends_on("esmf") depends_on("bacio") + depends_on("py-mpi4py") + depends_on("py-scipy") + depends_on("py-certifi") + depends_on("py-markupsafe") + depends_on("py-jinja2") + depends_on("py-pytz") + depends_on("py-setuptools") + depends_on("py-six") + depends_on("py-xarray") depends_on("g2") + depends_on("g2c") depends_on("g2tmpl") - depends_on("gh") depends_on("w3nco") depends_on("w3emc") depends_on("sp", when="^ip@:4") @@ -42,11 +71,53 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("sigio") depends_on("bufr") depends_on("wgrib2") - depends_on("met") - depends_on("metplus") - depends_on("gsi-ncdiag") + depends_on("met", when="+metplus") + depends_on("metplus", when="+metplus") depends_on("crtm") - depends_on("py-wxflow", when="+python") + depends_on("py-wxflow") depends_on("uwtools", when="+uwtools") + # Check if the gdas variant is enabled + if "+gdas" in spec: + depends_on("nghttp2") + depends_on("curl") + depends_on("openssl") + depends_on("eccodes") + depends_on("libxt") + depends_on("libxmu") + depends_on("py-pybind11") + depends_on("snappy") + depends_on("libxpm") + depends_on("c-blosc") + depends_on("eckit") + depends_on("libxaw") + depends_on("fckit") + depends_on("fiat") + depends_on("fms") + depends_on("netcdf-cxx4") + depends_on("json") + depends_on("py-packaging") + depends_on("ectrans") + depends_on("qhull") + depends_on("atlas") + depends_on("py-tzdata") + depends_on("gsl-lite") + depends_on("krb5") + depends_on("libtirpc") + depends_on("py-click") + depends_on("hdf") + depends_on("ecbuild") + depends_on("jedi-cmake") + + if "+gsi" in spec: + depends_on("sfcio") + depends_on("wrfio") + depends_on("gsi-ncdiag") + + if "+ci" in spec: + depends_on("pytest") + depends_on("pytest-cov") + depends_on("codecov") + depends_on("pygithub") + depends_on("gh") # There is no need for install() since there is no code. From 6ee7c8016f262a623f416674a0b9ad374f6b4cd7 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Tue, 12 May 2026 16:20:25 +0000 Subject: [PATCH 02/13] Clean up --- .../packages/global_workflow_env/package.py | 58 ++++--------------- 1 file changed, 11 insertions(+), 47 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 5d35f9da1..7d0558e11 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -22,15 +22,14 @@ class GlobalWorkflowEnv(BundlePackage): variant("gsi", default=True, description="Build for GSI DA support") variant("ci", default=False, description="Build for automated CI testing") + depends_on("base-env") depends_on("ufs-pyenv") depends_on("prod-util") depends_on("grib-util") - depends_on("zlib") depends_on("pigz") depends_on("zstd") depends_on("gettext") depends_on("sqlite") - depends_on("cmake") depends_on("libjpeg") depends_on("jasper") depends_on("libpng") @@ -38,32 +37,21 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("proj") depends_on("nco") depends_on("udunits") - depends_on("hdf5") depends_on("antlr") depends_on("cdo") - depends_on("netcdf-c") - depends_on("netcdf-fortran") depends_on("parallel-netcdf") - depends_on("parallelio") depends_on("gsl") depends_on("esmf") - depends_on("bacio") depends_on("py-mpi4py") depends_on("py-scipy") depends_on("py-certifi") depends_on("py-markupsafe") depends_on("py-jinja2") depends_on("py-pytz") - depends_on("py-setuptools") depends_on("py-six") depends_on("py-xarray") - depends_on("g2") depends_on("g2c") - depends_on("g2tmpl") depends_on("w3nco") - depends_on("w3emc") - depends_on("sp", when="^ip@:4") - depends_on("ip") depends_on("nemsio") depends_on("nemsiogfs") depends_on("ncio") @@ -73,49 +61,25 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("wgrib2") depends_on("met", when="+metplus") depends_on("metplus", when="+metplus") - depends_on("crtm") depends_on("py-wxflow") depends_on("uwtools", when="+uwtools") - # Check if the gdas variant is enabled + depends_on("upp-env") + depends_on("ufs-util-env") + + depends_on("ufs-weather-model-env") + if "+gdas" in spec: + depends_on("jedi-fv3-env") + depends_on("jedi-tools-env") + depends_on("jedi-um-env") + depends_on("ioda") depends_on("nghttp2") - depends_on("curl") - depends_on("openssl") - depends_on("eccodes") - depends_on("libxt") - depends_on("libxmu") - depends_on("py-pybind11") - depends_on("snappy") - depends_on("libxpm") - depends_on("c-blosc") - depends_on("eckit") - depends_on("libxaw") - depends_on("fckit") - depends_on("fiat") - depends_on("fms") - depends_on("netcdf-cxx4") - depends_on("json") - depends_on("py-packaging") - depends_on("ectrans") - depends_on("qhull") - depends_on("atlas") depends_on("py-tzdata") - depends_on("gsl-lite") depends_on("krb5") - depends_on("libtirpc") - depends_on("py-click") - depends_on("hdf") - depends_on("ecbuild") - depends_on("jedi-cmake") - if "+gsi" in spec: - depends_on("sfcio") - depends_on("wrfio") - depends_on("gsi-ncdiag") + depends_on("gsi-env", when="+gsi") if "+ci" in spec: - depends_on("pytest") - depends_on("pytest-cov") depends_on("codecov") depends_on("pygithub") depends_on("gh") From 8ca9b477d7be8e068cf44988eb2297c8c1f05213 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 3 Jun 2026 13:58:14 +0000 Subject: [PATCH 03/13] Update esmf for the global-workflow --- configs/templates/unified-dev/spack.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configs/templates/unified-dev/spack.yaml b/configs/templates/unified-dev/spack.yaml index 3d0012eb0..3bd669f36 100644 --- a/configs/templates/unified-dev/spack.yaml +++ b/configs/templates/unified-dev/spack.yaml @@ -11,7 +11,8 @@ spack: - dev-utils-env - ewok-env - geos-gcm-env ^esmf@=9.0.0b11 - - global-workflow-env ^esmf@=8.6.1 ^crtm@=3.1.3 + - global-workflow-env ^esmf@=8.8.0 ^crtm@=3.1.3 + # Is GMAO ready to move to crtm@3.1.3? - gmao-swell-env ^crtm@=v2.4.1-jedi.2 - gsi-env ^crtm@=3.1.3 From 6ad2b40c7710e20951716a3a0054b9bd2c019e68 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 3 Jun 2026 13:59:15 +0000 Subject: [PATCH 04/13] Remove unused packages from the global-wrokflow environment --- .../packages/global_workflow_env/package.py | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 7d0558e11..1c138e093 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -20,7 +20,7 @@ class GlobalWorkflowEnv(BundlePackage): variant("metplus", default=True, description="Build METplus to support verifiation") variant("gdas", default=True, description="Build for GDASApp DA support") variant("gsi", default=True, description="Build for GSI DA support") - variant("ci", default=False, description="Build for automated CI testing") + variant("ci", default=True, description="Build for automated CI testing") depends_on("base-env") depends_on("ufs-pyenv") @@ -28,18 +28,25 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("grib-util") depends_on("pigz") depends_on("zstd") + depends_on("ip") + depends_on("sp", when="^ip@:4") + depends_on("ip2") depends_on("gettext") depends_on("sqlite") depends_on("libjpeg") depends_on("jasper") + depends_on("bufr") depends_on("libpng") + depends_on("bacio") depends_on("openjpeg") - depends_on("proj") depends_on("nco") - depends_on("udunits") + depends_on("nccmp") depends_on("antlr") depends_on("cdo") depends_on("parallel-netcdf") + depends_on("netcdf-c") + depends_on("netcdf-fortran") + depends_on("netcdf-cxx") depends_on("gsl") depends_on("esmf") depends_on("py-mpi4py") @@ -48,40 +55,37 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("py-markupsafe") depends_on("py-jinja2") depends_on("py-pytz") - depends_on("py-six") - depends_on("py-xarray") + depends_on("g2") + depends_on("g2tmpl") depends_on("g2c") + depends_on("sfcio") depends_on("w3nco") + depends_on("w3emc") + depends_on("wrf-io") depends_on("nemsio") depends_on("nemsiogfs") depends_on("ncio") depends_on("landsfcutil") depends_on("sigio") - depends_on("bufr") depends_on("wgrib2") depends_on("met", when="+metplus") depends_on("metplus", when="+metplus") depends_on("py-wxflow") depends_on("uwtools", when="+uwtools") - depends_on("upp-env") - depends_on("ufs-util-env") depends_on("ufs-weather-model-env") - if "+gdas" in spec: - depends_on("jedi-fv3-env") - depends_on("jedi-tools-env") - depends_on("jedi-um-env") - depends_on("ioda") - depends_on("nghttp2") - depends_on("py-tzdata") - depends_on("krb5") + # GDASApp dependencies + depends_on("jedi-fv3-env", when="+gdas") + depends_on("jedi-tools-env", when="+gdas") + depends_on("jedi-um-env", when="+gdas") + depends_on("ioda", when="+gdas") + # GSI dependencies depends_on("gsi-env", when="+gsi") - if "+ci" in spec: - depends_on("codecov") - depends_on("pygithub") - depends_on("gh") + # CI dependencies + depends_on("pygithub", when="+ci") + depends_on("gh", when="+ci") # There is no need for install() since there is no code. From 95799a83c72fb99c6281900ba5b9000d28416871 Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Tue, 14 Jul 2026 14:45:57 -0600 Subject: [PATCH 05/13] working draft --- .../packages/global_workflow_env/package.py | 131 ++++++++++++------ 1 file changed, 89 insertions(+), 42 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 1c138e093..9d4c4ddf0 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -22,67 +22,114 @@ class GlobalWorkflowEnv(BundlePackage): variant("gsi", default=True, description="Build for GSI DA support") variant("ci", default=True, description="Build for automated CI testing") + ''' + variant("python", default=True, description="Include extra Python packages") + variant("ncutils", default=True, description="Include extra NetCDF utilities (cprnc and nccmp)") + + depends_on("cmake", type="run") + depends_on("python", type="run") + + depends_on("bacio", type="run") + depends_on("crtm", type="run") + depends_on("esmf~debug", type="run", when="~debug") + depends_on("esmf+debug", type="run", when="+debug") + depends_on("fms +gfs_phys constants=GFS", type="run") + depends_on("g2", type="run") + depends_on("g2tmpl", type="run") + depends_on("gftl-shared", type="run") + depends_on("hdf5", type="run") + depends_on("ip", type="run") + depends_on("jasper", type="run") + depends_on("libpng", type="run") + depends_on("mapl~debug", type="run", when="~debug") + depends_on("mapl+debug", type="run", when="+debug") + depends_on("netcdf-c", type="run") + depends_on("netcdf-fortran", type="run") + depends_on("parallelio", type="run") + depends_on("scotch", type="run") + depends_on("sp", type="run", when="^ip@:4") + depends_on("w3emc", type="run") + depends_on("zlib-api", type="run") + + depends_on("ufs-pyenv", type="run", when="+python") + depends_on("cprnc", type="run", when="+ncutils") + depends_on("nccmp", type="run", when="+ncutils") + ''' depends_on("base-env") + depends_on("ufs-weather-model-env") depends_on("ufs-pyenv") - depends_on("prod-util") - depends_on("grib-util") - depends_on("pigz") - depends_on("zstd") - depends_on("ip") - depends_on("sp", when="^ip@:4") - depends_on("ip2") - depends_on("gettext") - depends_on("sqlite") - depends_on("libjpeg") - depends_on("jasper") - depends_on("bufr") - depends_on("libpng") - depends_on("bacio") - depends_on("openjpeg") - depends_on("nco") - depends_on("nccmp") - depends_on("antlr") - depends_on("cdo") depends_on("parallel-netcdf") - depends_on("netcdf-c") - depends_on("netcdf-fortran") + depends_on("netcdf-c") #ufs, base-env + depends_on("netcdf-fortran") #ufs, base-env depends_on("netcdf-cxx") - depends_on("gsl") - depends_on("esmf") + depends_on("nccmp") + + depends_on("py-wxflow") depends_on("py-mpi4py") depends_on("py-scipy") depends_on("py-certifi") depends_on("py-markupsafe") depends_on("py-jinja2") depends_on("py-pytz") - depends_on("g2") - depends_on("g2tmpl") - depends_on("g2c") - depends_on("sfcio") - depends_on("w3nco") - depends_on("w3emc") - depends_on("wrf-io") - depends_on("nemsio") - depends_on("nemsiogfs") - depends_on("ncio") - depends_on("landsfcutil") + + depends_on("grib-util") depends_on("sigio") depends_on("wgrib2") + + depends_on("nco") + depends_on("prod-util") + + depends_on("antlr") + depends_on("pigz") + depends_on("zstd") + depends_on("gettext") + depends_on("sqlite") + depends_on("libjpeg") + depends_on("openjpeg") + + depends_on("w3nco") + + depends_on("cdo") + depends_on("gsl") + + depends_on("ip") #ufs + depends_on("sp", when="^ip@:4") #ufs + depends_on("jasper") #ufs + depends_on("libpng") #ufs + depends_on("bacio") #ufs + depends_on("esmf") #ufs + depends_on("g2") #ufs + depends_on("g2tmpl") #ufs + depends_on("g2c") + depends_on("w3emc") #ufs + depends_on("met", when="+metplus") depends_on("metplus", when="+metplus") - depends_on("py-wxflow") depends_on("uwtools", when="+uwtools") - depends_on("ufs-weather-model-env") - # GDASApp dependencies - depends_on("jedi-fv3-env", when="+gdas") - depends_on("jedi-tools-env", when="+gdas") - depends_on("jedi-um-env", when="+gdas") - depends_on("ioda", when="+gdas") + with when("+gdas"): + depends_on("jedi-fv3-env", when="+gdas") + depends_on("jedi-tools-env", when="+gdas") + depends_on("jedi-um-env", when="+gdas") + depends_on("ioda", when="+gdas") + depends_on("wrf-io") + depends_on("nemsio") + depends_on("nemsiogfs") + depends_on("ncio") + depends_on("landsfcutil") + depends_on("sfcio") # GSI dependencies - depends_on("gsi-env", when="+gsi") + with when("+gsi"): + depends_on("gsi-env") + depends_on("bufr") + depends_on("wrf-io") + depends_on("nemsio") + depends_on("nemsiogfs") + depends_on("ncio") + depends_on("landsfcutil") + depends_on("sfcio") # CI dependencies depends_on("pygithub", when="+ci") From 1c6a31e225b11c250523858217b0f2cc5783b575 Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Fri, 17 Jul 2026 11:48:47 -0600 Subject: [PATCH 06/13] draft of updated gw env --- .../spack_stack/packages/global_workflow_env/package.py | 2 +- .../spack_repo/spack_stack/packages/ufs_utils_env/package.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 9d4c4ddf0..8b96ba627 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -57,6 +57,7 @@ class GlobalWorkflowEnv(BundlePackage): ''' depends_on("base-env") depends_on("ufs-weather-model-env") + depends_on("ufs-utils-env") depends_on("ufs-pyenv") depends_on("parallel-netcdf") depends_on("netcdf-c") #ufs, base-env @@ -111,7 +112,6 @@ class GlobalWorkflowEnv(BundlePackage): with when("+gdas"): depends_on("jedi-fv3-env", when="+gdas") depends_on("jedi-tools-env", when="+gdas") - depends_on("jedi-um-env", when="+gdas") depends_on("ioda", when="+gdas") depends_on("wrf-io") depends_on("nemsio") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ufs_utils_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ufs_utils_env/package.py index d4e408458..c2b1cf834 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ufs_utils_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ufs_utils_env/package.py @@ -24,7 +24,6 @@ class UfsUtilsEnv(BundlePackage): depends_on("g2") depends_on("g2tmpl") depends_on("ip") - depends_on("ip2") depends_on("nemsio") depends_on("nemsiogfs") depends_on("sp", when="^ip@:4") From 3bab98fc320f2535ee65c79b273e008f1426a5b9 Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Fri, 17 Jul 2026 14:19:35 -0600 Subject: [PATCH 07/13] catagorize deps --- .../packages/global_workflow_env/package.py | 60 +++++-------------- 1 file changed, 15 insertions(+), 45 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 8b96ba627..51e0d8a0e 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -22,77 +22,44 @@ class GlobalWorkflowEnv(BundlePackage): variant("gsi", default=True, description="Build for GSI DA support") variant("ci", default=True, description="Build for automated CI testing") - ''' - variant("python", default=True, description="Include extra Python packages") - variant("ncutils", default=True, description="Include extra NetCDF utilities (cprnc and nccmp)") - - depends_on("cmake", type="run") - depends_on("python", type="run") - - depends_on("bacio", type="run") - depends_on("crtm", type="run") - depends_on("esmf~debug", type="run", when="~debug") - depends_on("esmf+debug", type="run", when="+debug") - depends_on("fms +gfs_phys constants=GFS", type="run") - depends_on("g2", type="run") - depends_on("g2tmpl", type="run") - depends_on("gftl-shared", type="run") - depends_on("hdf5", type="run") - depends_on("ip", type="run") - depends_on("jasper", type="run") - depends_on("libpng", type="run") - depends_on("mapl~debug", type="run", when="~debug") - depends_on("mapl+debug", type="run", when="+debug") - depends_on("netcdf-c", type="run") - depends_on("netcdf-fortran", type="run") - depends_on("parallelio", type="run") - depends_on("scotch", type="run") - depends_on("sp", type="run", when="^ip@:4") - depends_on("w3emc", type="run") - depends_on("zlib-api", type="run") - - depends_on("ufs-pyenv", type="run", when="+python") - depends_on("cprnc", type="run", when="+ncutils") - depends_on("nccmp", type="run", when="+ncutils") - ''' depends_on("base-env") + + #UFS deps depends_on("ufs-weather-model-env") depends_on("ufs-utils-env") depends_on("ufs-pyenv") - depends_on("parallel-netcdf") - depends_on("netcdf-c") #ufs, base-env - depends_on("netcdf-fortran") #ufs, base-env - depends_on("netcdf-cxx") - depends_on("nccmp") + #global workflow deps depends_on("py-wxflow") - depends_on("py-mpi4py") depends_on("py-scipy") depends_on("py-certifi") depends_on("py-markupsafe") depends_on("py-jinja2") depends_on("py-pytz") - + depends_on("parallel-netcdf") + depends_on("netcdf-cxx") depends_on("grib-util") depends_on("sigio") depends_on("wgrib2") - depends_on("nco") depends_on("prod-util") - depends_on("antlr") depends_on("pigz") depends_on("zstd") depends_on("gettext") - depends_on("sqlite") depends_on("libjpeg") depends_on("openjpeg") - depends_on("w3nco") - depends_on("cdo") depends_on("gsl") + #rocoto deps + depends_on("sqlite") + + #GCAFS deps only + depends_on("py-mpi4py") + + #GFS-utils deps only depends_on("ip") #ufs depends_on("sp", when="^ip@:4") #ufs depends_on("jasper") #ufs @@ -104,8 +71,11 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("g2c") depends_on("w3emc") #ufs + #metplus dependencies depends_on("met", when="+metplus") depends_on("metplus", when="+metplus") + + #uwtools dependencies depends_on("uwtools", when="+uwtools") # GDASApp dependencies From f513641ffda02abb6ed4d38c5be2904232de968d Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Fri, 17 Jul 2026 14:35:23 -0600 Subject: [PATCH 08/13] AI-based comments --- .../packages/global_workflow_env/package.py | 108 ++++++++++-------- 1 file changed, 61 insertions(+), 47 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 51e0d8a0e..5ffde2a5d 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -24,65 +24,77 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("base-env") - #UFS deps + # UFS deps + # sorc/ufs_model.fd: gfs/gefs/sfs/gcafs model builds (sorc/build_ufs.sh); also + # covers NEXUS (gefs/gcafs), whose modulefiles only load a subset of these libs depends_on("ufs-weather-model-env") + # sorc/ufs_utils.fd (sorc/build_ufs_utils.sh); note this env also provides, for all + # variants: nco, prod-util, wgrib2, bufr, sigio, sfcio, nemsio, nemsiogfs, ncio, + # landsfcutil, wrf-io, netcdf-cxx depends_on("ufs-utils-env") + # py-netcdf4/numpy/pandas/pyyaml/f90nml/dateutil/jinja2 loaded at runtime + # (modulefiles/gw_run.common.lua, versions/spack.ver) depends_on("ufs-pyenv") #global workflow deps - depends_on("py-wxflow") - depends_on("py-scipy") - depends_on("py-certifi") - depends_on("py-markupsafe") - depends_on("py-jinja2") - depends_on("py-pytz") - depends_on("parallel-netcdf") - depends_on("netcdf-cxx") - depends_on("grib-util") - depends_on("sigio") - depends_on("wgrib2") - depends_on("nco") - depends_on("prod-util") - depends_on("antlr") - depends_on("pigz") - depends_on("zstd") - depends_on("gettext") - depends_on("libjpeg") - depends_on("openjpeg") - depends_on("w3nco") - depends_on("cdo") - depends_on("gsl") - - #rocoto deps + depends_on("py-wxflow") # workflow framework (ush/python/pygfs, workflow/, sorc/wxflow); also GCAFS venv (versions/requirements_gcafs.txt) + depends_on("py-scipy") # GDASApp/EVA (sorc/gdas.cd modulefiles; member of jedi-base-env); no direct workflow import found + depends_on("py-certifi") # GCAFS venv (versions/requirements_gcafs.txt); also py-requests/py-netcdf4 dep + depends_on("py-markupsafe") # py-jinja2 dep; GCAFS venv + depends_on("py-jinja2") # parm template rendering via wxflow; runtime module (gw_run.common.lua, gw_setup.*); GDASApp; GCAFS venv + depends_on("py-pytz") # py-pandas dep; no direct workflow use found + depends_on("parallel-netcdf") # UFS model PnetCDF I/O; GDASApp modulefiles + depends_on("netcdf-cxx") # ioda dep (GDASApp); no direct workflow use found + depends_on("grib-util") # runtime: cnvgrib/grbindex/tocgrib2 (wave prdgen, AWIPS, prep scripts); gw_run.common.lua + depends_on("sigio") # build: gfs_utils and GSI (spectral sigma I/O); also in ufs-utils-env/gsi-env + depends_on("wgrib2") # runtime: product/stat scripts in ush and scripts; build: gfs_utils + depends_on("nco") # runtime: ncks etc. (ush/ocnice_extractvars.sh, ush/wave_prnc_cur.sh); GDASApp modulefiles + depends_on("prod-util") # runtime: ndate/setpdy, UTILROOT (gw_run.common.lua); GSI build modulefiles + depends_on("antlr") # nco dep; no direct workflow use found + depends_on("pigz") # GDASApp wcoss2 modulefile only; candidate for +gdas + depends_on("zstd") # netcdf compression for UFS model output (UFSATM io); nco dep; wcoss2 modulefiles (ufs/gdas/nexus) + depends_on("gettext") # GDASApp modulefiles only; candidate for +gdas + depends_on("libjpeg") # wcoss2 runtime graphics (gempak/imagemagick, gw_run.wcoss2.lua); GDASApp modulefiles + depends_on("openjpeg") # GRIB2 JPEG2000 codec for wgrib2 and eccodes (GDASApp) + depends_on("w3nco") # grib-util/nemsio/UPP dep; find_package in sorc/CMakeLists.txt (workflow_utils) + depends_on("cdo") # runtime: wave prep (dev/jobs/JGLOBAL_WAVE_PREP), ush/ocnice_extractvars.sh; gw_run.common.lua + depends_on("gsl") # nco and MET dep; runtime module (gw_run.wcoss2.lua) + + #rocoto deps (workflow manager, loaded by gw_setup.* modulefiles) depends_on("sqlite") #GCAFS deps only - depends_on("py-mpi4py") - - #GFS-utils deps only - depends_on("ip") #ufs - depends_on("sp", when="^ip@:4") #ufs - depends_on("jasper") #ufs - depends_on("libpng") #ufs - depends_on("bacio") #ufs - depends_on("esmf") #ufs - depends_on("g2") #ufs - depends_on("g2tmpl") #ufs - depends_on("g2c") - depends_on("w3emc") #ufs - - #metplus dependencies + depends_on("py-mpi4py") # FIXME not referenced anywhere in global-workflow, incl. versions/requirements_gcafs.txt -- verify + + # grib/product-processing libs: gfs_utils and UPP builds, which are built for every + # system ("common" in sorc/build_opts.yaml); most also UFS deps via the envs above + depends_on("ip") # gfs_utils, GSI, UPP, grib-util, wgrib2 #ufs + depends_on("sp", when="^ip@:4") # legacy companion to ip@:4; GSI, UPP, grib-util #ufs + depends_on("jasper") # GRIB2 JPEG2000 codec (g2, grib-util); NEXUS #ufs + depends_on("libpng") # GRIB2 PNG codec (g2, wgrib2); gfs_utils build; NEXUS #ufs + depends_on("bacio") # NCEP binary I/O, used by gfs_utils/GSI/UPP and NCEP libs; NEXUS #ufs + depends_on("esmf") # UFS model, GDASApp, UFS_UTILS, NEXUS; runtime module (gw_run.common.lua) #ufs + depends_on("g2") # gfs_utils build, grib-util, UPP #ufs + depends_on("g2tmpl") # UPP GRIB2 templates; runtime module (gw_run.common.lua) #ufs + depends_on("g2c") # wgrib2, grib-util, and MET dep + depends_on("w3emc") # gfs_utils, GSI, gsi_monitor, UPP, grib-util #ufs + + #metplus dependencies (verification: sorc/verif-global.fd, gw_verif.* modulefiles) + # NOTE per versions/spack.ver, met@11.1.1/metplus@5.1.0 are incompatible with verif-global depends_on("met", when="+metplus") depends_on("metplus", when="+metplus") #uwtools dependencies depends_on("uwtools", when="+uwtools") - # GDASApp dependencies + # GDASApp dependencies (sorc/gdas.cd, JEDI-based DA; sorc/build_gdas.sh) with when("+gdas"): - depends_on("jedi-fv3-env", when="+gdas") - depends_on("jedi-tools-env", when="+gdas") - depends_on("ioda", when="+gdas") + depends_on("jedi-fv3-env") + depends_on("jedi-tools-env") + depends_on("ioda") # requires netcdf-cxx + # The NCEP I/O formats below are also unconditional gfs_utils build deps + # (gfs_utils.fd/modulefiles/gfsutils_common.lua); covered for all variants + # by ufs-utils-env depends_on("wrf-io") depends_on("nemsio") depends_on("nemsiogfs") @@ -90,10 +102,12 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("landsfcutil") depends_on("sfcio") - # GSI dependencies + # GSI dependencies (sorc/gsi_enkf.fd, gsi_utils.fd, gsi_monitor.fd; + # gsi_utils is also built for gdas and gcafs per sorc/build_opts.yaml) with when("+gsi"): depends_on("gsi-env") - depends_on("bufr") + depends_on("bufr") # also unconditional gfs_utils build dep (gfs_bufr, tocsbufr); covered by ufs-utils-env + # same note as +gdas: also unconditional gfs_utils build deps, covered by ufs-utils-env depends_on("wrf-io") depends_on("nemsio") depends_on("nemsiogfs") @@ -101,7 +115,7 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("landsfcutil") depends_on("sfcio") - # CI dependencies + # CI dependencies (dev/ci scripts: utils/githubpr.py, driver_weekly.sh) depends_on("pygithub", when="+ci") depends_on("gh", when="+ci") From b85fecbacb2ca9cb371d43f1a646e170d3b817e5 Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Fri, 17 Jul 2026 14:44:21 -0600 Subject: [PATCH 09/13] AI-generated minimum package set --- .../packages/global_workflow_env/package.py | 89 +++++-------------- 1 file changed, 22 insertions(+), 67 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 5ffde2a5d..c12cfa0b3 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -22,66 +22,35 @@ class GlobalWorkflowEnv(BundlePackage): variant("gsi", default=True, description="Build for GSI DA support") variant("ci", default=True, description="Build for automated CI testing") + # Also pulls in (transitively): python (-> sqlite), git (-> gettext), + # parallelio+pnetcdf (-> parallel-netcdf) depends_on("base-env") # UFS deps # sorc/ufs_model.fd: gfs/gefs/sfs/gcafs model builds (sorc/build_ufs.sh); also - # covers NEXUS (gefs/gcafs), whose modulefiles only load a subset of these libs + # covers NEXUS (gefs/gcafs). Default +python pulls ufs-pyenv (py-jinja2 + # -> py-markupsafe, py-netcdf4 -> py-certifi, py-pandas -> py-pytz, py-numpy, + # py-pyyaml, py-f90nml, py-python-dateutil, ...), the runtime python modules + # loaded by modulefiles/gw_run.common.lua and the py-wxflow prerequisites depends_on("ufs-weather-model-env") - # sorc/ufs_utils.fd (sorc/build_ufs_utils.sh); note this env also provides, for all - # variants: nco, prod-util, wgrib2, bufr, sigio, sfcio, nemsio, nemsiogfs, ncio, - # landsfcutil, wrf-io, netcdf-cxx + # sorc/ufs_utils.fd (sorc/build_ufs_utils.sh); also provides, for all variants: + # nco (-> antlr, gsl, udunits, zstd), prod-util, wgrib2 (-> g2c), bufr, sigio, + # sfcio, nemsio, nemsiogfs, ncio, landsfcutil, wrf-io, netcdf-cxx, esmf, ip, + # sp (^ip@:4), g2, g2tmpl, jasper, libpng, bacio, w3emc -- i.e. everything the + # gfs_utils/UPP/GSI builds and the runtime modulefiles need from NCEPlibs depends_on("ufs-utils-env") - # py-netcdf4/numpy/pandas/pyyaml/f90nml/dateutil/jinja2 loaded at runtime - # (modulefiles/gw_run.common.lua, versions/spack.ver) - depends_on("ufs-pyenv") #global workflow deps depends_on("py-wxflow") # workflow framework (ush/python/pygfs, workflow/, sorc/wxflow); also GCAFS venv (versions/requirements_gcafs.txt) - depends_on("py-scipy") # GDASApp/EVA (sorc/gdas.cd modulefiles; member of jedi-base-env); no direct workflow import found - depends_on("py-certifi") # GCAFS venv (versions/requirements_gcafs.txt); also py-requests/py-netcdf4 dep - depends_on("py-markupsafe") # py-jinja2 dep; GCAFS venv - depends_on("py-jinja2") # parm template rendering via wxflow; runtime module (gw_run.common.lua, gw_setup.*); GDASApp; GCAFS venv - depends_on("py-pytz") # py-pandas dep; no direct workflow use found - depends_on("parallel-netcdf") # UFS model PnetCDF I/O; GDASApp modulefiles - depends_on("netcdf-cxx") # ioda dep (GDASApp); no direct workflow use found - depends_on("grib-util") # runtime: cnvgrib/grbindex/tocgrib2 (wave prdgen, AWIPS, prep scripts); gw_run.common.lua - depends_on("sigio") # build: gfs_utils and GSI (spectral sigma I/O); also in ufs-utils-env/gsi-env - depends_on("wgrib2") # runtime: product/stat scripts in ush and scripts; build: gfs_utils - depends_on("nco") # runtime: ncks etc. (ush/ocnice_extractvars.sh, ush/wave_prnc_cur.sh); GDASApp modulefiles - depends_on("prod-util") # runtime: ndate/setpdy, UTILROOT (gw_run.common.lua); GSI build modulefiles - depends_on("antlr") # nco dep; no direct workflow use found - depends_on("pigz") # GDASApp wcoss2 modulefile only; candidate for +gdas - depends_on("zstd") # netcdf compression for UFS model output (UFSATM io); nco dep; wcoss2 modulefiles (ufs/gdas/nexus) - depends_on("gettext") # GDASApp modulefiles only; candidate for +gdas - depends_on("libjpeg") # wcoss2 runtime graphics (gempak/imagemagick, gw_run.wcoss2.lua); GDASApp modulefiles - depends_on("openjpeg") # GRIB2 JPEG2000 codec for wgrib2 and eccodes (GDASApp) - depends_on("w3nco") # grib-util/nemsio/UPP dep; find_package in sorc/CMakeLists.txt (workflow_utils) - depends_on("cdo") # runtime: wave prep (dev/jobs/JGLOBAL_WAVE_PREP), ush/ocnice_extractvars.sh; gw_run.common.lua - depends_on("gsl") # nco and MET dep; runtime module (gw_run.wcoss2.lua) - - #rocoto deps (workflow manager, loaded by gw_setup.* modulefiles) - depends_on("sqlite") + depends_on("grib-util") # runtime: cnvgrib/grbindex/tocgrib2 (wave prdgen, AWIPS, prep scripts); pulls g2c and w3nco (also UPP/nemsio deps) + depends_on("cdo") # runtime: wave prep (dev/jobs/JGLOBAL_WAVE_PREP), ush/ocnice_extractvars.sh; pulls eccodes -> openjpeg #GCAFS deps only depends_on("py-mpi4py") # FIXME not referenced anywhere in global-workflow, incl. versions/requirements_gcafs.txt -- verify - # grib/product-processing libs: gfs_utils and UPP builds, which are built for every - # system ("common" in sorc/build_opts.yaml); most also UFS deps via the envs above - depends_on("ip") # gfs_utils, GSI, UPP, grib-util, wgrib2 #ufs - depends_on("sp", when="^ip@:4") # legacy companion to ip@:4; GSI, UPP, grib-util #ufs - depends_on("jasper") # GRIB2 JPEG2000 codec (g2, grib-util); NEXUS #ufs - depends_on("libpng") # GRIB2 PNG codec (g2, wgrib2); gfs_utils build; NEXUS #ufs - depends_on("bacio") # NCEP binary I/O, used by gfs_utils/GSI/UPP and NCEP libs; NEXUS #ufs - depends_on("esmf") # UFS model, GDASApp, UFS_UTILS, NEXUS; runtime module (gw_run.common.lua) #ufs - depends_on("g2") # gfs_utils build, grib-util, UPP #ufs - depends_on("g2tmpl") # UPP GRIB2 templates; runtime module (gw_run.common.lua) #ufs - depends_on("g2c") # wgrib2, grib-util, and MET dep - depends_on("w3emc") # gfs_utils, GSI, gsi_monitor, UPP, grib-util #ufs - #metplus dependencies (verification: sorc/verif-global.fd, gw_verif.* modulefiles) # NOTE per versions/spack.ver, met@11.1.1/metplus@5.1.0 are incompatible with verif-global - depends_on("met", when="+metplus") + depends_on("met", when="+metplus") # pulls g2c, gsl, netcdf-cxx4 depends_on("metplus", when="+metplus") #uwtools dependencies @@ -89,34 +58,20 @@ class GlobalWorkflowEnv(BundlePackage): # GDASApp dependencies (sorc/gdas.cd, JEDI-based DA; sorc/build_gdas.sh) with when("+gdas"): + # jedi-base-env member: py-scipy, eccodes, bufr, netcdf-cxx4, + # hdf (-> libjpeg-turbo, the "libjpeg" runtime module), boost, atlas, ... depends_on("jedi-fv3-env") - depends_on("jedi-tools-env") - depends_on("ioda") # requires netcdf-cxx - # The NCEP I/O formats below are also unconditional gfs_utils build deps - # (gfs_utils.fd/modulefiles/gfsutils_common.lua); covered for all variants - # by ufs-utils-env - depends_on("wrf-io") - depends_on("nemsio") - depends_on("nemsiogfs") - depends_on("ncio") - depends_on("landsfcutil") - depends_on("sfcio") + depends_on("jedi-tools-env") # also provides py-pygithub, awscli-v2 + depends_on("ioda") # requires netcdf-cxx (from ufs-utils-env) + depends_on("pigz") # loaded by sorc/gdas.cd wcoss2 modulefile; not provided by any env # GSI dependencies (sorc/gsi_enkf.fd, gsi_utils.fd, gsi_monitor.fd; # gsi_utils is also built for gdas and gcafs per sorc/build_opts.yaml) - with when("+gsi"): - depends_on("gsi-env") - depends_on("bufr") # also unconditional gfs_utils build dep (gfs_bufr, tocsbufr); covered by ufs-utils-env - # same note as +gdas: also unconditional gfs_utils build deps, covered by ufs-utils-env - depends_on("wrf-io") - depends_on("nemsio") - depends_on("nemsiogfs") - depends_on("ncio") - depends_on("landsfcutil") - depends_on("sfcio") + # provides crtm, gsi-ncdiag, bufr, ncio, nemsio, sfcio, sigio, wrf-io, lapack + depends_on("gsi-env", when="+gsi") # CI dependencies (dev/ci scripts: utils/githubpr.py, driver_weekly.sh) - depends_on("pygithub", when="+ci") + depends_on("py-pygithub", when="+ci") # NOTE was "pygithub", which is not a spack package depends_on("gh", when="+ci") # There is no need for install() since there is no code. From 4ad0a6b194ee66f53975f3ae139aab3331e070b1 Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Mon, 20 Jul 2026 10:22:46 -0600 Subject: [PATCH 10/13] installable draft --- .../packages/global_workflow_env/package.py | 67 +++++++++---------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index c12cfa0b3..012346e37 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -22,56 +22,55 @@ class GlobalWorkflowEnv(BundlePackage): variant("gsi", default=True, description="Build for GSI DA support") variant("ci", default=True, description="Build for automated CI testing") - # Also pulls in (transitively): python (-> sqlite), git (-> gettext), - # parallelio+pnetcdf (-> parallel-netcdf) + # Core: python, cmake, git, hdf5, netcdf-c, netcdf-fortran depends_on("base-env") # UFS deps - # sorc/ufs_model.fd: gfs/gefs/sfs/gcafs model builds (sorc/build_ufs.sh); also - # covers NEXUS (gefs/gcafs). Default +python pulls ufs-pyenv (py-jinja2 - # -> py-markupsafe, py-netcdf4 -> py-certifi, py-pandas -> py-pytz, py-numpy, - # py-pyyaml, py-f90nml, py-python-dateutil, ...), the runtime python modules - # loaded by modulefiles/gw_run.common.lua and the py-wxflow prerequisites depends_on("ufs-weather-model-env") - # sorc/ufs_utils.fd (sorc/build_ufs_utils.sh); also provides, for all variants: - # nco (-> antlr, gsl, udunits, zstd), prod-util, wgrib2 (-> g2c), bufr, sigio, - # sfcio, nemsio, nemsiogfs, ncio, landsfcutil, wrf-io, netcdf-cxx, esmf, ip, - # sp (^ip@:4), g2, g2tmpl, jasper, libpng, bacio, w3emc -- i.e. everything the - # gfs_utils/UPP/GSI builds and the runtime modulefiles need from NCEPlibs depends_on("ufs-utils-env") - #global workflow deps - depends_on("py-wxflow") # workflow framework (ush/python/pygfs, workflow/, sorc/wxflow); also GCAFS venv (versions/requirements_gcafs.txt) - depends_on("grib-util") # runtime: cnvgrib/grbindex/tocgrib2 (wave prdgen, AWIPS, prep scripts); pulls g2c and w3nco (also UPP/nemsio deps) - depends_on("cdo") # runtime: wave prep (dev/jobs/JGLOBAL_WAVE_PREP), ush/ocnice_extractvars.sh; pulls eccodes -> openjpeg - - #GCAFS deps only - depends_on("py-mpi4py") # FIXME not referenced anywhere in global-workflow, incl. versions/requirements_gcafs.txt -- verify - - #metplus dependencies (verification: sorc/verif-global.fd, gw_verif.* modulefiles) - # NOTE per versions/spack.ver, met@11.1.1/metplus@5.1.0 are incompatible with verif-global - depends_on("met", when="+metplus") # pulls g2c, gsl, netcdf-cxx4 + # global workflow deps + depends_on("py-wxflow") + depends_on("py-jinja2") + depends_on("py-pyyaml") + depends_on("py-numpy") + depends_on("py-netcdf4") + depends_on("py-xarray") + depends_on("py-pandas") + depends_on("py-python-dateutil") + depends_on("py-f90nml") + depends_on("wgrib2") + depends_on("nco") + depends_on("cdo") + depends_on("grib-util") + depends_on("prod-util") + depends_on("esmf") + depends_on("g2tmpl") + depends_on("crtm") + depends_on("gsi-ncdiag") + depends_on("bufr") + depends_on("jasper") + depends_on("libpng") + + #metplus dependencies + depends_on("met", when="+metplus") depends_on("metplus", when="+metplus") #uwtools dependencies depends_on("uwtools", when="+uwtools") - # GDASApp dependencies (sorc/gdas.cd, JEDI-based DA; sorc/build_gdas.sh) + # GDASApp dependencies with when("+gdas"): - # jedi-base-env member: py-scipy, eccodes, bufr, netcdf-cxx4, - # hdf (-> libjpeg-turbo, the "libjpeg" runtime module), boost, atlas, ... depends_on("jedi-fv3-env") - depends_on("jedi-tools-env") # also provides py-pygithub, awscli-v2 - depends_on("ioda") # requires netcdf-cxx (from ufs-utils-env) - depends_on("pigz") # loaded by sorc/gdas.cd wcoss2 modulefile; not provided by any env + depends_on("jedi-tools-env") + depends_on("ioda") + depends_on("pigz") - # GSI dependencies (sorc/gsi_enkf.fd, gsi_utils.fd, gsi_monitor.fd; - # gsi_utils is also built for gdas and gcafs per sorc/build_opts.yaml) - # provides crtm, gsi-ncdiag, bufr, ncio, nemsio, sfcio, sigio, wrf-io, lapack + # GSI dependencies depends_on("gsi-env", when="+gsi") - # CI dependencies (dev/ci scripts: utils/githubpr.py, driver_weekly.sh) - depends_on("py-pygithub", when="+ci") # NOTE was "pygithub", which is not a spack package + # CI dependencies + depends_on("py-pygithub", when="+ci") depends_on("gh", when="+ci") # There is no need for install() since there is no code. From 1f7584188fb64c626491b8212d3977499fe611bc Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Mon, 20 Jul 2026 12:49:37 -0600 Subject: [PATCH 11/13] add additional missing dependencies --- .../spack_stack/packages/global_workflow_env/package.py | 2 ++ .../spack_stack/spack_repo/spack_stack/packages/ioda/package.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py index 012346e37..44005e0b3 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/global_workflow_env/package.py @@ -45,6 +45,7 @@ class GlobalWorkflowEnv(BundlePackage): depends_on("grib-util") depends_on("prod-util") depends_on("esmf") + depends_on("sp") depends_on("g2tmpl") depends_on("crtm") depends_on("gsi-ncdiag") @@ -55,6 +56,7 @@ class GlobalWorkflowEnv(BundlePackage): #metplus dependencies depends_on("met", when="+metplus") depends_on("metplus", when="+metplus") + depends_on("imagemagick", when="+metplus") #uwtools dependencies depends_on("uwtools", when="+uwtools") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py index 1c61359f1..6cb8cefa1 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import os + from spack_repo.builtin.build_systems.cmake import CMakePackage, generator from spack.package import * From 7dc3756f6ff6692b1ba58a129ce01645158fcffe Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Mon, 20 Jul 2026 14:16:01 -0600 Subject: [PATCH 12/13] lower CRTM version --- configs/templates/unified-dev/spack.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/templates/unified-dev/spack.yaml b/configs/templates/unified-dev/spack.yaml index 3bd669f36..6e22fe91d 100644 --- a/configs/templates/unified-dev/spack.yaml +++ b/configs/templates/unified-dev/spack.yaml @@ -11,7 +11,7 @@ spack: - dev-utils-env - ewok-env - geos-gcm-env ^esmf@=9.0.0b11 - - global-workflow-env ^esmf@=8.8.0 ^crtm@=3.1.3 + - global-workflow-env ^esmf@=8.8.0 ^crtm@=v2.4.1-jedi.2 # Is GMAO ready to move to crtm@3.1.3? - gmao-swell-env ^crtm@=v2.4.1-jedi.2 From a2e8e88945479bb2b672aa59fb4969fdfa7667d1 Mon Sep 17 00:00:00 2001 From: AlexanderHrabski-NOAA Date: Mon, 20 Jul 2026 14:35:21 -0600 Subject: [PATCH 13/13] revert ioda fix (separate PR) --- .../spack_stack/spack_repo/spack_stack/packages/ioda/package.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py index 6cb8cefa1..1c61359f1 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py @@ -3,8 +3,6 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import os - from spack_repo.builtin.build_systems.cmake import CMakePackage, generator from spack.package import *