Skip to content

Commit

Permalink
update intel and gcc GH CI
Browse files Browse the repository at this point in the history
  • Loading branch information
RussTreadon-NOAA committed Jan 3, 2025
1 parent bca9f90 commit bc9c6ec
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 36 deletions.
57 changes: 39 additions & 18 deletions .github/workflows/gcc.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: GCC Linux Build
on: [push, pull_request, workflow_dispatch]
on: [push, pull_request]

# Use custom shell with -l so .bash_profile is sourced
# without having to do it in manually every step
Expand All @@ -13,23 +13,45 @@ env:
FC: gfortran-13
CXX: g++-13

# A note on flushing Action cache and relevance to "cache_key" above.
# There is no way to flush the Action cache, and hence a number (#) is appended
# to the "cache_key" (gcc).
# If the dependencies change, increment this number and a new cache will be
# generated by the dependency build step "setup"
# There is a Github issue to force clear the cache.
# See discussion on:
# https://stackoverflow.com/questions/63521430/clear-cache-in-github-actions

# The jobs are split into:
# 1. a dependency build step (setup), and
# 2. a GSI build step (gsi)
# 2. a GSI-utils build step (gsi-utils)
# The setup is run once and the environment is cached,
# so each subsequent build of GSI can reuse the cached dependencies to save time (and compute).
# so each subsequent build of GSI-utils can reuse the cached dependencies to save time (and compute).

jobs:
setup:
runs-on: ubuntu-latest

steps:
# Checkout the GSI to get the ci/spack.yaml file
- name: checkout
# Free up disk space
- name: free-disk-spack
run: |
df -h
sudo swapoff -a
sudo rm -rf /swapfile
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
sudo apt clean
docker rmi $(docker image ls -aq)
df -h
- name: checkout # This is for getting spack.yaml
if: steps.cache-env.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
path: gsi
path: gsi-utils

# Cache spack, compiler and dependencies
- name: cache-env
Expand All @@ -39,33 +61,32 @@ jobs:
path: |
spack
~/.spack
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi/ci/spack.yaml') }}
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }}

# Install dependencies using Spack
- name: install-dependencies-with-spack
# if: steps.cache-env.outputs.cache-hit != 'true'
run: |
sudo apt-get install cmake
rm -rf spack
rm -rf spack
git clone -c feature.manyFiles=true https://github.com/JCSDA/spack.git
source spack/share/spack/setup-env.sh
spack env create gsi-env gsi/ci/spack_gcc.yaml
spack env activate gsi-env
spack env create gsiutils-env gsi-utils/ci/spack_gcc.yaml
spack env activate gsiutils-env
spack compiler find
spack external find
spack concretize
spack install --fail-fast --dirty
spack clean -a
spack clean --all

gsi:
gsi-utils:
needs: setup
runs-on: ubuntu-latest

steps:
- name: checkout
uses: actions/checkout@v4
with:
path: gsi
path: gsi-utils

- name: cache-env
id: cache-env
Expand All @@ -74,15 +95,15 @@ jobs:
path: |
spack
~/.spack
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi/ci/spack.yaml') }}
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }}

- name: build
run: |
source spack/share/spack/setup-env.sh
spack env activate gsi-env
cd gsi
spack env activate gsiutils-env
cd gsi-utils
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=../install -DGSI_MODE=Regional -DENKF_MODE=GFS -DBUILD_REG_TESTING=OFF ..
cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_UTIL_ALL=ON ..
make -j2 VERBOSE=1
make install
env:
Expand Down
49 changes: 31 additions & 18 deletions .github/workflows/intel.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Intel Linux Build
on: [push, pull_request, workflow_dispatch]
on: [push, pull_request]

# Use custom shell with -l so .bash_profile is sourced which loads intel/oneapi/setvars.sh
# without having to do it in manually every step
Expand All @@ -16,11 +16,20 @@ env:
I_MPI_CC: icc
I_MPI_F90: ifort

# A note on flushing Action cache and relevance to "cache_key" above.
# There is no way to flush the Action cache, and hence a number (#) is appended
# to the "cache_key" (intel).
# If the dependencies change, increment this number and a new cache will be
# generated by the dependency build step "setup"
# There is a Github issue to force clear the cache.
# See discussion on:
# https://stackoverflow.com/questions/63521430/clear-cache-in-github-actions

# The jobs are split into:
# 1. a dependency build step (setup), and
# 2. a GSI build step (gsi)
# 2. a GSI-utils build step (gsi-utils)
# The setup is run once and the environment is cached,
# so each subsequent build of GSI can reuse the cached dependencies to save time (and compute).
# so each subsequent build of gsi-utils can reuse the cached dependencies to save time (and compute).

jobs:
setup:
Expand All @@ -32,18 +41,22 @@ jobs:
run: |
df -h
sudo swapoff -a
sudo rm -f /swapfile
sudo rm -rf /swapfile
sudo rm -rf /usr_local_mv
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
sudo apt clean
DOCKER_IMGS=$(docker image ls -aq)
if [[ ! -z "${DOCKER_IMGS}" ]]; then docker rmi ${DOCKER_IMGS}; fi
df -h
# Checkout the GSI to get the ci/spack.yaml file
- name: checkout
- name: checkout # This is for getting spack.yaml
if: steps.cache-env.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
path: gsi
path: gsi-utils

# Cache spack, compiler and dependencies
- name: cache-env
Expand Down Expand Up @@ -73,18 +86,18 @@ jobs:
run: |
sudo mv /usr/local/ /usr_local_mv
sudo apt-get install cmake
rm -rf spack
rm -rf spack
git clone -c feature.manyFiles=true https://github.com/JCSDA/spack.git
source spack/share/spack/setup-env.sh
spack env create gsi-env gsi/ci/spack_intel.yaml
spack env activate gsi-env
spack env create gsiutils-env gsi-utils/ci/spack_intel.yaml
spack env activate gsiutils-env
spack compiler find
spack external find
spack concretize
spack install --fail-fast --dirty
spack clean -a
spack clean --all

gsi:
gsi-utils:
needs: setup
runs-on: ubuntu-latest

Expand All @@ -93,10 +106,10 @@ jobs:
run: |
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile
- name: checkout
- name: checkout-gsiutils
uses: actions/checkout@v4
with:
path: gsi
path: gsi-utils

- name: cache-env
id: cache-env
Expand All @@ -106,17 +119,17 @@ jobs:
spack
~/.spack
/opt/intel
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi/ci/spack.yaml') }}
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }}

- name: build
run: |
sudo mv /usr/local/ /usr_local_mv
sudo apt-get install cmake libblas-dev liblapack-dev
source spack/share/spack/setup-env.sh
spack env activate gsi-env
cd gsi
spack env activate gsiutils-env
cd gsi-utils
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=../install -DGSI_MODE=Regional -DENKF_MODE=GFS -DBUILD_REG_TESTING=OFF ..
cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_UTIL_ALL=ON ..
make -j2 VERBOSE=1
make install
env:
Expand Down
27 changes: 27 additions & 0 deletions ci/spack_gcc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Spack environment file to build GSI-utils dependencies
spack:
packages:
all:
providers:
mpi: [mpich]
compiler:
- gcc@13
specs:
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
view: true
concretizer:
unify: true
30 changes: 30 additions & 0 deletions ci/spack_intel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Spack environment file to build GSI utilities dependencies
# Note:
# GSI and EnKF are not being built by spack
# GSI and EnKF will be added later; likely as their own builds or some other way
spack:
packages:
all:
providers:
mpi: [intel-oneapi-mpi]
compiler:
- intel
specs:
- [email protected] ~blosc build_system=cmake
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
view: true
concretizer:
unify: true

0 comments on commit bc9c6ec

Please sign in to comment.