Updating the E3SM Spack Fork
E3SM-Unified relies on a custom fork of Spack to build performance-critical
software components that are not managed by Conda. This fork includes
specialized packages (e.g., moab
, tempestremap
, esmf
) and system-aware
configurations to support a wide range of HPC environments.
This page outlines the steps for updating and managing the E3SM Spack fork during an E3SM-Unified release cycle.
Repo Location
The E3SM Spack fork lives at: 🔗 https://github.com/E3SM-Project/spack
Key Tasks
1. Add or Update Package Versions
You may need to:
Add new versions of packages like
nco
,moab
,esmf
,tempestremap
, etc.Update build configurations, variants, or patches
rebase onto new releases of the main spack repo
Follow Spack’s standard packaging conventions. Builds will typically be tested as part of E3SM-Unified deployment (or deployment of Polaris or Compass), so no other testing is typically necessary or practical.
After changes are validated, push them to the appropriate branch or branches (see next section).
2. Create spack_for_mache_<version>
Branches
The main development branch on E3SM’s spack for is develop
. Each release of
mache
also references a specific Spack branch named:
spack_for_mache_<version>
Example:
spack_for_mache_1.32.0
To create one from a local clone of the E3SM spack repo:
git checkout develop
git checkout -b spack_for_mache_1.32.0
git push origin spack_for_mache_1.32.0
This ensures that the version of mache
used for deployment has a stable and
reproducible Spack reference. During development of a mache
version, this
also let you make potentially breaking changes to spack_for_mache_<version>
for testing without breaking the develop
branch. (Make sure to always push
your changes to origin
so they are available during E3SM-Unified deployment.)
Note: Your spack_for_mache_<version>
branch name should not include
rc<n>
even if you are testing a release candidate of mache
as part of your
E3SM-Unified deployment. The deployment scripts automatically strip off the
rc<n>
part when determining the name of the appropriate spack branch.
Once you have a relatively stable spack_for_mache_<version>
branch, you can
push the changes you have made to develop
so they are available for future
mache
versions and other users of E3SM’s spack fork.
git checkout develop
git reset --hard spack_for_mache_1.32.0
git push origin develop
Please be careful not to use git push --force
here. You should only be
adding new commits, not changing the history of develop
.
3. Rebasing develop
onto Spack Releases
One important maintenance task for the E3SM Spack fork is to keep it up-to-date
with the main Spack repo. This requires
interactively rebasing the develop
branch onto the release, interactively
selecting only commits authored within the E3SM Spack fork (i.e., excluding
upstream Spack commits), and troubleshooting any merge conflicts that arise.
Because this will involve a force-push, it is important to coordinate with other users of the fork. Make an issue similar to this exampe and ping relevant developers to arrange a good time for the update.
git checkout develop
git remote add spack/spack git@github.com:spack/spack.git
git fetch --all -p
git rebase -i spack/spack/v0.23.1
# edit the list of commits so the first is "Add v2.1.0 to v2.1.6 to TempestRemap"
git push --force origin develop
You may wish to perform the rebase using a new branch (e.g.,
rebase-onto-v0.23.1
) that you can point to in the issue you post to
coordinate with other developers. This way, you can ask for guidance if you
are unsure about the way you resolved any merge conflicts that arose.
Best Practices
Keep
develop
clean and stable — avoid experimental changesUse branches to track specific
mache
releasesCoordinate with other E3SM package maintainers when rebasing the
develop
branch or updating shared packages
➡ Next: Updating mache