Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
429203f
Pin py-numpy to version 1 to avoid duplicate packages; update
climbfuji Jan 12, 2026
53ce67f
Update syntax for preferred compiler in configs/common/packages_{clan…
climbfuji Jan 12, 2026
c2d22f5
Remove external compiler runtime packages for tier 2 sites bounty and…
climbfuji Jan 12, 2026
05d4c75
Update submodule pointer for spack
climbfuji Jan 12, 2026
8b32c9e
Merge branch 'develop' of https://github.com/jcsda/spack-stack into f…
climbfuji Jan 12, 2026
1d0ef40
Remove external/non-buildable runtime packages from .github/workflows…
climbfuji Jan 12, 2026
fd687ef
Set variants/versions for snappy and py-lxml in configs/common/packag…
climbfuji Jan 12, 2026
a22ae76
Attempt to fix spack-ext/lib/jcsda-emc/spack-stack/tests/test_setup_m…
climbfuji Jan 12, 2026
523380e
Update .github/workflows/ubuntu-ci-x86_64-*.yaml: remove old prefer s…
climbfuji Jan 13, 2026
afda902
configs/common/packages.yaml: set variant generator=make for libaec t…
climbfuji Jan 13, 2026
c9c5fab
configs/common/packages_*.yaml: Upde syntax for preferred compilers
climbfuji Jan 13, 2026
ce21e16
spack-ext/lib/jcsda-emc/spack-stack/stack/meta_modules.py: Update met…
climbfuji Jan 13, 2026
44bce84
Update spack-ext unit tests
climbfuji Jan 13, 2026
5b1f3ad
Update .gitmodules and submodule pointer for repos/builtin for code r…
climbfuji Jan 13, 2026
e0ce0fa
Bump bufr-query to 0.0.5
climbfuji Jan 13, 2026
7169e1e
Revert .gitmodules and update submodule pointer for repos/builtin
climbfuji Jan 14, 2026
75a0d1f
Remove all external compiler runtime packages from all site configs
climbfuji Jan 14, 2026
1e89d69
Revert .gitmodules for repos/builtin and update submodule pointer for…
climbfuji Jan 14, 2026
ea635da
Merge branch 'develop' of https://github.com/jcsda/spack-stack into f…
climbfuji Jan 14, 2026
fe7d1a5
configs/sites/tier1/atlantis/packages_clang-21.1.0.yaml: add variants…
climbfuji Jan 20, 2026
ad72515
Apply suggestions from code review
climbfuji Jan 21, 2026
7b6b850
Add JEDI components oops, ioda, ioda-converters, ropp-ufo, and ufo to…
climbfuji Jan 21, 2026
1cab583
Merge branch 'feature/update_spack-stack-dev_from_develop' of https:/…
climbfuji Jan 21, 2026
75c80ce
Merge branch 'develop' of https://github.com/jcsda/spack-stack into f…
climbfuji Jan 22, 2026
018b780
configs/common/packages_{gcc,oneapi}.yaml: use new syntax to specify …
climbfuji Jan 22, 2026
414481e
Fix compiler dependencies (build-time only) in new JEDI packages
climbfuji Jan 22, 2026
e6dc22b
Turn off jedi variant for neptune-dev for GitHub actions workflows (n…
climbfuji Jan 22, 2026
744ca1b
Clean up repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptu…
climbfuji Jan 22, 2026
8f534bf
Update versions/date tags of JEDI components, set versions in jedi-ne…
climbfuji Jan 23, 2026
ba6bd07
Add patch for repos/spack_stack/spack_repo/spack_stack/packages/ioda_…
climbfuji Jan 26, 2026
0f3f083
Merge branch 'develop' of https://github.com/jcsda/spack-stack into f…
climbfuji Jan 29, 2026
5e23e33
Run unit tests minus failing ones for oops and ioda
climbfuji Feb 3, 2026
b52034e
Merge branch 'develop' of https://github.com/jcsda/spack-stack into f…
climbfuji Feb 3, 2026
6763fa1
Merge branch 'develop' of https://github.com/jcsda/spack-stack into f…
climbfuji Feb 4, 2026
515d35c
Update .gitmodules and submodule pointer repos/builtin for code revie…
climbfuji Feb 4, 2026
d303faa
Update JEDI packages: run ctests, current exclude list is with GCC
climbfuji Feb 6, 2026
550ddb8
Merge branch 'develop' of https://github.com/jcsda/spack-stack into f…
climbfuji Feb 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/ubuntu-ci-x86_64-gnu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,10 @@ jobs:
spack stack create env --site linux.default --template ${TEMPLATE} --name ${ENVNAME} --compiler gcc
spack env activate ${ENVDIR}

# Turn off variant "adp" for neptune-dev (NRL internal only)
# Turn off variants "adp" and "jedi" for neptune-dev (NRL internal only)
if [[ "${TEMPLATE}" == *"neptune-dev"* ]]; then
sed -i 's/+adp/~adp/g' ${ENVDIR}/spack.yaml
sed -i 's/+jedi/~jedi/g' ${ENVDIR}/spack.yaml
fi

unset SPACK_DISABLE_LOCAL_CONFIG
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/ubuntu-ci-x86_64-oneapi-ifx.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,10 @@ jobs:
spack stack create env --site linux.default --template ${TEMPLATE} --name ${ENVNAME} --compiler oneapi
spack env activate ${ENVDIR}

# Turn off variant "adp" for neptune-dev (NRL internal only)
# Turn off variants "adp" and "jedi" for neptune-dev (NRL internal only)
if [[ "${TEMPLATE}" == *"neptune-dev"* ]]; then
sed -i 's/+adp/~adp/g' ${ENVDIR}/spack.yaml
sed -i 's/+jedi/~jedi/g' ${ENVDIR}/spack.yaml
fi

unset SPACK_DISABLE_LOCAL_CONFIG
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/ubuntu-ci-x86_64-oneapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,10 @@ jobs:
spack stack create env --site linux.default --template ${TEMPLATE} --name ${ENVNAME} --compiler oneapi
spack env activate ${ENVDIR}

# Turn off variant "adp" for neptune-dev (NRL internal only)
# Turn off variants "adp" and "jedi" for neptune-dev (NRL internal only)
if [[ "${TEMPLATE}" == *"neptune-dev"* ]]; then
sed -i 's/+adp/~adp/g' ${ENVDIR}/spack.yaml
sed -i 's/+jedi/~jedi/g' ${ENVDIR}/spack.yaml
fi

unset SPACK_DISABLE_LOCAL_CONFIG
Expand Down
6 changes: 4 additions & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -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 = feature/crtm_checks
3 changes: 3 additions & 0 deletions configs/common/packages_gcc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,6 @@ packages:
ectrans:
require:
- +fftw
oops:
require:
- ~mkl
3 changes: 3 additions & 0 deletions configs/common/packages_oneapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ packages:
nco:
require:
- '%c,cxx=gcc'
oops:
require:
- +mkl
parallel-netcdf:
require:
- +shared-intel
Expand Down
2 changes: 1 addition & 1 deletion configs/templates/neptune-dev/spack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ spack:
- neptune-env ~debug ~openmp +espc +ncview ^esmf@=8.9.1
- neptune-env +debug ~openmp +espc +ncview ^esmf@=8.9.1
- neptune-python-env +gittools ^neptune-env ~debug +openmp +espc +ncview ^esmf@=8.9.1
- jedi-neptune-env +adp ^neptune-env ~debug +openmp +espc +ncview ^esmf@=8.9.1
- jedi-neptune-env +adp +jedi ^neptune-env ~debug +openmp +espc +ncview ^esmf@=8.9.1
- crtm@3.1.2
- crtm@v2.4.1-jedi.2

Expand Down
2 changes: 1 addition & 1 deletion repos/builtin
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
--- a/cmake/ioda-import.cmake.in
+++ b/cmake/ioda-import.cmake.in
@@ -65,6 +65,15 @@
if(@odc_FOUND@)
find_dependency( odc 1.0.2 REQUIRED )
endif()
+
+if(@bufr_FOUND@)
+ find_dependency( bufr 12.0.1 REQUIRED )
+endif()
+
+if(@bufr_query_FOUND@)
+ find_dependency( bufr_query 0.0.4 REQUIRED )
+endif()
+
# Header-only. Not exposed.
#find_dependency( Boost 1.64.0 )

111 changes: 111 additions & 0 deletions repos/spack_stack/spack_repo/spack_stack/packages/ioda/package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack_repo.builtin.build_systems.cmake import CMakePackage, generator

from spack.package import *


class Ioda(CMakePackage):
"""Interface for Observation Data Access"""

homepage = "https://github.com/JCSDA/ioda"
git = "https://github.com/JCSDA/ioda.git"

maintainers("climbfuji")

version("develop", branch="develop", no_cache=True)
version("2.9.0.20250826", commit="6e76616001067384f7d0ca4341ad78e81527af8b")

patch("ioda_cmake_import.patch", when="@2.9.0.20250826")

variant("doc", default=False, description="Build IODA documentation")
# Let's always assume IODA_BUILD_LANGUAGE_FORTRAN=on.
# variant('fortran', default=True, description='Build the ioda Fortran interface')
variant("odc", default=True, description="Build ODC bindings")
# ioda has no explicit OpenMP calls, but header files from Eigen and oops do use openmp.
variant("openmp", default=True, description="Build with OpenMP support")
# Let's always BUILD_PYTHON_BINDINGS.
# variant('python', default=True, description='Build the ioda Python interface')

generator("make")

# Project doesn't list "c" as a dependency in CMakeLists.txt, but cmake step fails w/o it
depends_on("c", type=("build"))
depends_on("cxx", type=("build"))
depends_on("fortran", type=("build"))

depends_on("boost@1.64.0:")
depends_on("bufr")
depends_on("bufr@12.0.1:", when="@2.9:")
depends_on("bufr-query@0.0.4:", when="@2.9:")
depends_on("cmake", type=("build"))
depends_on("cmake@3.14:", type=("build"), when="@2.9:")
depends_on("ecbuild", type=("build"))
depends_on("ecbuild@3.3.2:", type=("build"), when="@2.9:")
depends_on("eckit")
depends_on("eckit@1.23.0:", when="@2.9:")
depends_on("eigen")
depends_on("fckit")
depends_on("fckit@0.10.1:", when="@2.9:")
depends_on("gsl-lite")
depends_on("hdf5@1.12.0: +mpi")
depends_on("hdf5@1.14.0: +mpi", when="@2.9:")
depends_on("ioda-data", type=("build", "test"))
depends_on("ioda-data@2.9.0.20250805", type=("build", "test"), when="@2.9:")
depends_on("jedi-cmake", type=("build"))
depends_on("llvm-openmp", when="+openmp %apple-clang", type=("build", "link", "run"))
depends_on("mpi")
depends_on("nccmp", type=("build", "test"))
depends_on("netcdf-cxx", when="@2.9:")
depends_on("odc", when="+odc")
depends_on("odc@1.4.6:", when="@2.9: +odc")
depends_on("oops+openmp", when="+openmp")
depends_on("oops~openmp", when="~openmp")
depends_on("oops@1.10", when="@2.9:")
depends_on("python")
depends_on("python@3.9:3.11", when="@2.9:")
depends_on("py-pybind11")
depends_on("py-pycodestyle", type=("build", "test"))
depends_on("py-netcdf4", type=("build", "test"))
depends_on("udunits")
depends_on("udunits@2.2.0:", when="@2.9:")

def cmake_args(self):
res = [
self.define("BUILD_TESTING", self.run_tests),
self.define_from_variant("ENABLE_IODA_DOC", "doc"),
]
return res

def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""This needs to be set at build time, not at test time,
to prevent IODA from downloading test data from S4"""
env.set("IODA_TESTFILES", self.spec["ioda-data"].prefix)

def check(self):
skipped_tests = None
with when("@2.9.0.20250826"):
# No time to deal with the bufr Python dependency
skipped_tests = [
"test_ioda_bufr_python_encoder",
"test_ioda_bufr_python_parallel",
]

ctest = Executable(self.spec["cmake"].prefix.bin.ctest)
with working_dir(self.build_directory):
if skipped_tests:
ctest("--timeout", "120", "-E", "|".join(skipped_tests))
else:
ctest("--timeout", "120")

@run_after("install")
def fix_ioda_yaml_root_path(self):
with when("@2.9.0.20250826"):
filter_file(
join_path(self.build_directory, "share/test/testinput/"),
join_path(self.prefix, "share/ioda/yaml"),
join_path(self.prefix, "lib64/cmake/ioda/ioda-import.cmake"),
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack_repo.builtin.build_systems.cmake import CMakePackage, generator

from spack.package import *


class IodaConverters(CMakePackage):
"""Interface for Observation Data Access"""

homepage = "https://github.com/JCSDA/ioda-converters"
git = "https://github.com/JCSDA/ioda-converters.git"

maintainers("climbfuji")

version("develop", branch="develop", no_cache=True)
version("0.0.1.20250830", commit="a91f432d9d50940910605e689cd1cf93a1ce3798")

patch(
"https://github.com/JCSDA/ioda-converters/commit/2c09857aac09b7dd9029fdd23e33f712933c40c4.patch?full_index=1",
sha256="c31342a5bcffdcb77a99ee5f16a5ba2d74e9d822f1fe2d44b3ee772765800d83",
when="@0.0.1.20250830",
)

generator("make")

# Project doesn't list "c" as a dependency in CMakeLists.txt, but cmake step fails w/o it
depends_on("c", type=("build"))
depends_on("cxx", type=("build"))
depends_on("fortran", type=("build"))

extends("python")

depends_on("ecbuild", type=("build"))
depends_on("ecbuild@3.3.2:", type=("build"), when="@0.0.1:")

depends_on("bufr@12:")
depends_on("eccodes")
depends_on("eckit")
depends_on("eigen@3")
depends_on("gsl-lite")
depends_on("ioda")
depends_on("jedi-cmake", type=("build"))
depends_on("mpi")
depends_on("netcdf-cxx")
depends_on("netcdf-fortran")
depends_on("oops")
depends_on("py-cartopy")
depends_on("py-pybind11")

# For running checks
depends_on("nccmp")
depends_on("py-eccodes")
depends_on("py-h5py")
depends_on("py-netcdf4")
depends_on("py-pandas")
depends_on("py-pyhdf")
depends_on("py-pyyaml")
depends_on("py-xarray")

def check(self):
skipped_tests = None
#with when("@0.0.1.20250830"):
# skipped_tests = [
# ]
#
ctest = Executable(self.spec["cmake"].prefix.bin.ctest)
with working_dir(self.build_directory):
if skipped_tests:
ctest("-E", "|".join(skipped_tests))
else:
ctest()
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack_repo.builtin.build_systems.cmake import CMakePackage, generator

from spack.package import *


class IodaData(CMakePackage):
"""Test data for IODA (Interface for Observation Data Access)"""

homepage = "https://github.com/JCSDA-internal/ioda-data"
git = "https://github.com/JCSDA-internal/ioda-data.git"

maintainers("climbfuji")

version("develop", branch="develop", no_cache=True)
version("2.9.0.20250805", commit="c6f8842648ea473eebc9f66d7c27e2204e5220d6")

# patch("ioda_cmake_import.patch", when="@2.9.0.20250826")
#
# variant("doc", default=False, description="Build IODA documentation")
# # Let's always assume IODA_BUILD_LANGUAGE_FORTRAN=on.
# # variant('fortran', default=True, description='Build the ioda Fortran interface')
# variant("odc", default=True, description="Build ODC bindings")
# # ioda has no explicit OpenMP calls, but header files from Eigen and oops do use openmp.
# variant("openmp", default=True, description="Build with OpenMP support")
# # Let's always BUILD_PYTHON_BINDINGS.
# # variant('python', default=True, description='Build the ioda Python interface')

generator("make")

depends_on("c", type=("build"))
depends_on("cxx", type=("build"))

depends_on("cmake", type=("build"))
depends_on("cmake@3.12:", type=("build"), when="@2.9:")
depends_on("ecbuild", type=("build"))
depends_on("ecbuild@3.3.2:", type=("build"), when="@2.9:")

def install(self, spec, prefix):
install_tree(self.stage.source_path, prefix)
# JEDI dependencies expect ioda test data in subdirectory
# ioda-data of the IODA_TESTFILES environment variable
mkdirp(join_path(prefix, "ioda-data"))
symlink(
join_path(prefix, "testinput_tier_1"),
join_path(prefix, "ioda-data", "testinput_tier_1"),
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack_repo.builtin.build_systems.bundle import BundlePackage

from spack.package import *


Expand All @@ -20,11 +21,19 @@ class JediNeptuneEnv(BundlePackage):

variant("adp", default=False, description="Build ADP preprocessors")

variant("jedi", default=False, description="Build JEDI components required for JEDI-NEPTUNE")

depends_on("jedi-base-env", type="run")
depends_on("neptune-env", type="run")
depends_on("neptune-python-env", type="run")

with when("+adp"):
depends_on("adp-preprocessors", type="run")

# There is no need for install() since there is no code.
with when("+jedi"):
depends_on("oops@1.10.0.20250827", type="run")
depends_on("crtm@v2.4.1-jedi.2", type="run")
depends_on("ioda@2.9.0.20250826", type="run")
depends_on("ioda-converters@0.0.1.20250830", type="run")
depends_on("ropp-ufo@11.0.20251022", type="run")
depends_on("ufo@1.10.0.20250821 +crtm-v2 +ropp", type="run")
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
--- a/src/oops/base/ParameterTraitsObsVariables.h
+++ b/src/oops/base/ParameterTraitsObsVariables.h
@@ -7,6 +7,7 @@

#pragma once

+#include <algorithm>
#include <string>
#include <vector>

Loading