-
Notifications
You must be signed in to change notification settings - Fork 47
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update Ubuntu CI runner from old AWS c6i ParallelCluster to c6a singl…
…e-node instance (#1085) - Update the Ubuntu CI workflow to (a) run on a newly provisioned c6a single node instead of an old c6i ParallelCluster that is now in a state where it can't be updated anymore, and (b) build Intel and GNU environments in two steps: first create a buildcache, then an actual environment from it. The buildcache can be used to create spack-stack environments for other CI testing by JCSDA (simobs, skylab, ufs-bundle). - Use tag v1.3.0 of the CMakeModules submodule - no code changes here, we tagged the commit that spack-stack was pointing to for several releases as v1.3.0. - Update submodule pointer for spack for a few accumulated changes, including Add -fPIC to hdf-eos2 builds spack#426 which is required for this PR.
- Loading branch information
Showing
5 changed files
with
321 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
name: ubuntu-ci-c6a-x86_64-gnu-build | ||
on: | ||
pull_request: | ||
paths-ignore: | ||
- 'doc/**' | ||
- '**.md' | ||
- '.github/ISSUE_TEMPLATE/*' | ||
- '.gitignore' | ||
workflow_dispatch: | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | ||
cancel-in-progress: true | ||
|
||
defaults: | ||
run: | ||
shell: bash | ||
|
||
jobs: | ||
ubuntu-ci-c6a-x86_64-gnu-build: | ||
runs-on: [ubuntu-ci-c6a-x86_64] | ||
|
||
steps: | ||
- name: cleanup | ||
run: | | ||
pwd | ||
ls -lart | ||
rm -fr * | ||
- name: checkout | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: true | ||
|
||
- name: create-buildcache | ||
run: | | ||
# Get day of week to decide whether to use build caches or not | ||
DOW=$(date +%u) | ||
# Monday is 1 ... Sunday is 7 | ||
if [[ $DOW == 7 ]]; then | ||
export USE_BINARY_CACHE=false | ||
echo "Ignore existing binary cache for creating buildcache environment" | ||
else | ||
export USE_BINARY_CACHE=true | ||
echo "Use existing binary cache for creating buildcache environment" | ||
fi | ||
# spack-stack setup | ||
source ./setup.sh | ||
export ENVNAME=ue-gcc-11.4.0-buildcache | ||
export ENVDIR=$PWD/envs/${ENVNAME} | ||
spack stack create env --site linux.default --template unified-dev --name ${ENVNAME} | ||
spack env activate ${ENVDIR} | ||
export SPACK_SYSTEM_CONFIG_PATH="${ENVDIR}/site" | ||
# Find external packages | ||
spack external find --scope system \ | ||
--exclude bison --exclude openssl \ | ||
--exclude curl --exclude python | ||
spack external find --scope system sed | ||
spack external find --scope system perl | ||
spack external find --scope system wget | ||
spack external find --scope system texlive | ||
spack external find --scope system mysql | ||
# For GNU | ||
spack compiler find --scope system | ||
export -n SPACK_SYSTEM_CONFIG_PATH | ||
# For buildcaches | ||
spack config add config:install_tree:padded_length:200 | ||
# Set compiler and MPI | ||
spack config add "packages:all:providers:mpi:[openmpi@5.0.1]" | ||
spack config add "packages:all:compiler:[gcc@11.4.0]" | ||
sed -i "s/\['\%aocc', '\%apple-clang', '\%gcc', '\%intel'\]/\['\%gcc'\]/g" $ENVDIR/spack.yaml | ||
# Add additional variants for MET packages, different from config/common/packages.yaml | ||
spack config add "packages:met:variants:+python +grib2 +graphics +lidar2nc +modis" | ||
# Concretize and check for duplicates | ||
spack concretize 2>&1 | tee log.concretize.gnu-11.4.0-buildcache | ||
${SPACK_STACK_DIR}/util/show_duplicate_packages.py -d log.concretize.gnu-11.4.0-buildcache -i fms -i crtm -i esmf -i mapl | ||
# Add and update source cache | ||
spack mirror add local-source file:///home/ubuntu/spack-stack/source-cache/ | ||
spack mirror create -a -d /home/ubuntu/spack-stack/source-cache/ | ||
# Add binary cache if requested | ||
if [ "$USE_BINARY_CACHE" = true ] ; then | ||
spack mirror add local-binary file:///home/ubuntu/spack-stack/build-cache/ | ||
spack buildcache update-index local-binary | ||
echo "Packages in spack binary cache:" | ||
spack buildcache list | ||
fi | ||
# Break installation up in pieces and create build caches in between | ||
# This allows us to "spin up" builds that altogether take longer than | ||
# six hours, and/or fail later in the build process. | ||
# base-env | ||
echo "base-env ..." | ||
spack install --fail-fast --source --no-check-signature base-env 2>&1 | tee log.install.gnu-11.4.0-buildcache.base-env | ||
spack buildcache create -a -u /home/ubuntu/spack-stack/build-cache/ base-env | ||
# jedi-base-env | ||
echo "jedi-base-env ..." | ||
spack install --fail-fast --source --no-check-signature jedi-base-env 2>&1 | tee log.install.gnu-11.4.0-buildcache.jedi-base-env | ||
spack buildcache create -a -u /home/ubuntu/spack-stack/build-cache/ jedi-base-env | ||
# the rest | ||
echo "unified-env ..." | ||
spack install --fail-fast --source --no-check-signature 2>&1 | tee log.install.gnu-11.4.0-buildcache.unified-env | ||
spack buildcache create -a -u /home/ubuntu/spack-stack/build-cache/ | ||
# Remove binary cache for next round of concretization | ||
if [ "$USE_BINARY_CACHE" = true ] ; then | ||
spack mirror rm local-binary | ||
fi | ||
# Remove buildcache config settings | ||
spack config remove config:install_tree:padded_length | ||
# Next steps: synchronize source and build cache to a central/combined mirror? | ||
# Cleanup | ||
spack clean -a | ||
spack env deactivate | ||
- name: create-env | ||
run: | | ||
source ./setup.sh | ||
export BUILDCACHE_ENVNAME=ue-gcc-11.4.0-buildcache | ||
export BUILDCACHE_ENVDIR=$PWD/envs/${BUILDCACHE_ENVNAME} | ||
export ENVNAME=ue-gcc-11.4.0 | ||
export ENVDIR=$PWD/envs/${ENVNAME} | ||
rsync -av --exclude='install' --exclude='spack.lock' --exclude='.spack_db' ${BUILDCACHE_ENVDIR}/ ${ENVDIR}/ | ||
spack env activate ${ENVDIR} | ||
# Concretize | ||
spack concretize --force 2>&1 | tee log.concretize.gnu-11.4.0 | ||
${SPACK_STACK_DIR}/util/show_duplicate_packages.py -d log.concretize.gnu-11.4.0 -i fms -i crtm -i esmf -i mapl | ||
# Add binary cache back in and reindex it | ||
spack mirror add local-binary file:///home/ubuntu/spack-stack/build-cache/ | ||
echo "Packages in combined spack build caches:" | ||
spack buildcache list | ||
# base-env | ||
echo "base-env ..." | ||
spack install --fail-fast --source --no-check-signature 2>&1 | tee log.install.gnu-11.4.0.unified-env | ||
${SPACK_STACK_DIR}/util/ldd_check.py $SPACK_ENV 2>&1 | tee log.ldd_check | ||
spack clean -a | ||
spack module tcl refresh -y | ||
spack stack setup-meta-modules | ||
spack env deactivate | ||
# Test environment chaining | ||
echo "Test environment chaining" | ||
spack stack create env --name chaintest --template empty --site linux.default --upstream $(realpath envs/${ENVNAME}/install) | ||
# Retain config from upstream so we don't have to rebuild: | ||
cp -r $PWD/envs/${ENVNAME}/{site,common} $PWD/envs/chaintest/. | ||
spack env activate ${PWD}/envs/chaintest | ||
spack add nccmp@1.8.9.0%gcc | ||
spack concretize | tee envs/chaintest/log.concretize | ||
unwanted_duplicates=$(( cat envs/chaintest/log.concretize | grep -E '^ - ' | grep -Fv 'nccmp@1.8.9.0' || true ) | wc -l) | ||
if [ ${unwanted_duplicates} -gt 0 ]; then echo "Environment chaining test failed"; exit 1; fi | ||
spack env deactivate | ||
- name: test-env | ||
run: | | ||
source /etc/profile.d/modules.sh | ||
module use /home/ubuntu/spack-stack/modulefiles | ||
export ENVNAME=ue-gcc-11.4.0 | ||
export ENVDIR=$PWD/envs/${ENVNAME} | ||
ls -l ${ENVDIR}/install/modulefiles/Core | ||
module use ${ENVDIR}/install/modulefiles/Core | ||
module load stack-gcc/11.4.0 | ||
module load stack-openmpi/5.0.1 | ||
module load stack-python/3.10.13 | ||
module available | ||
module load jedi-ufs-env | ||
module load ewok-env | ||
module load soca-env | ||
module list |
Oops, something went wrong.