Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add spack-based ci. #528

Merged
merged 4 commits into from
Jun 29, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
66 changes: 0 additions & 66 deletions .github/workflows/build_and_test.yml

This file was deleted.

96 changes: 96 additions & 0 deletions .github/workflows/gcc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
name: GCC Linux Build
on: [push, pull_request, workflow_dispatch]


# Use custom shell with -l so .bash_profile is sourced
# without having to do it in manually every step
defaults:
run:
shell: bash -leo pipefail {0}

env:
cache_key: gcc1 # The number (#) following the cache_key "gcc" is to flush Action cache.
CC: gcc-10
FC: gfortran-10
CXX: g++-10

# 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 UPP build step (build)
# The setup is run once and the environment is cached,
# so each build of UPP can reuse the cached dependencies to save time (and compute).

jobs:
setup:
runs-on: ubuntu-latest

steps:
# Cache spack, compiler and dependencies
- name: cache-env
id: cache-env
uses: actions/cache@v2
with:
path: |
spack
~/.spack
key: spack-${{ runner.os }}-${{ env.cache_key }}

- name: checkout-upp # This is for getting spack.yaml
if: steps.cache-env.outputs.cache-hit != 'true'
uses: actions/checkout@v2
with:
path: UPP

# Install dependencies using Spack
- name: install-dependencies-with-spack
if: steps.cache-env.outputs.cache-hit != 'true'
run: |
git clone -c feature.manyFiles=true https://github.com/NOAA-EMC/spack.git
source spack/share/spack/setup-env.sh
spack env create upp-env UPP/ci/spack.yaml
spack env activate upp-env
spack compiler find
spack external find
spack add mpich@3.4.2
spack concretize
spack install --dirty -v

build:
needs: setup
runs-on: ubuntu-latest

steps:
- name: checkout-upp
uses: actions/checkout@v2
with:
path: UPP

- name: cache-env
id: cache-env
uses: actions/cache@v2
with:
path: |
spack
~/.spack
key: spack-${{ runner.os }}-${{ env.cache_key }}

- name: build-upp
run: |
source spack/share/spack/setup-env.sh
spack env activate upp-env
export CC=mpicc
export FC=mpif90
cd UPP
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=../install ..
make -j2 VERBOSE=1
make install
114 changes: 114 additions & 0 deletions .github/workflows/intel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
name: Intel Linux Build
on: [push, pull_request, workflow_dispatch]

# 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
defaults:
run:
shell: bash -leo pipefail {0}

# Set I_MPI_CC/F90 so Intel MPI wrapper uses icc/ifort instead of gcc/gfortran
env:
cache_key: intel1 # The number (#) following the cache_key "intel" is to flush Action cache.
CC: icc
FC: ifort
CXX: icpc
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
aerorahul marked this conversation as resolved.
Show resolved Hide resolved

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

jobs:
setup:
runs-on: ubuntu-latest

steps:
# Cache spack, compiler and dependencies
- name: cache-env
id: cache-env
uses: actions/cache@v2
with:
path: |
spack
~/.spack
/opt/intel
key: spack-${{ runner.os }}-${{ env.cache_key }}

- name: install-intel-compilers
if: steps.cache-env.outputs.cache-hit != 'true'
run: |
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
sudo apt-get update
sudo apt-get install intel-oneapi-dev-utilities intel-oneapi-mpi-devel intel-oneapi-openmp intel-oneapi-compiler-fortran intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile

- name: checkout-upp # This is for getting spack.yaml
if: steps.cache-env.outputs.cache-hit != 'true'
uses: actions/checkout@v2
with:
path: UPP

# Install dependencies using Spack
- name: install-dependencies-with-spack
if: steps.cache-env.outputs.cache-hit != 'true'
run: |
git clone -c feature.manyFiles=true https://github.com/NOAA-EMC/spack.git
source spack/share/spack/setup-env.sh
spack env create upp-env UPP/ci/spack.yaml
spack env activate upp-env
spack compiler find
spack external find
spack add intel-oneapi-mpi
spack concretize
spack install --dirty -v

build:
needs: setup
runs-on: ubuntu-latest

steps:
- name: checkout-upp
uses: actions/checkout@v2
with:
path: UPP

- name: install-intel
run: |
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile

- name: cache-env
id: cache-env
uses: actions/cache@v2
with:
path: |
spack
~/.spack
/opt/intel
key: spack-${{ runner.os }}-${{ env.cache_key }}

- name: build-upp
run: |
source spack/share/spack/setup-env.sh
spack env activate upp-env
export CC=mpiicc
export FC=mpiifort
cd UPP
mkdir -p build && cd build
cmake -DCMAKE_INSTALL_PREFIX=../install ..
make -j2 VERBOSE=1
make install
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ if(BUILD_POSTEXEC)
find_package(sfcio REQUIRED)
find_package(sigio REQUIRED)
find_package(sp REQUIRED)
find_package(w3nco REQUIRED)
find_package(w3emc REQUIRED)
if(BUILD_WITH_WRFIO)
find_package(wrf_io REQUIRED)
endif()
Expand Down
23 changes: 23 additions & 0 deletions ci/spack.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Spack environment file to build UPP dependencies
spack:
packages:
all:
compiler: [intel, gcc]
specs:
- netcdf-c@4.7.4
- netcdf-fortran@4.5.3
- bacio@2.4.1
- w3emc@2.9.2
- g2@3.4.5
- g2tmpl@1.10.0
- sp@2.3.3
- ip@3.3.3
- sigio@2.3.2
- sfcio@1.4.1
- nemsio@2.5.2
- wrf-io@1.2.0
- crtm@2.3.0
view: true
concretizer:
unify: true

2 changes: 1 addition & 1 deletion cmake/PackageConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ find_dependency(ip CONFIG)
#find_dependency(sfcio CONFIG)
#find_dependency(sigio CONFIG)
#find_dependency(sp CONFIG)
#find_dependency(w3nco CONFIG)
#find_dependency(w3emc CONFIG)

# Get the build type from library target
get_target_property(@PROJECT_NAME@_BUILD_TYPES @PROJECT_NAME@::@PROJECT_NAME@ IMPORTED_CONFIGURATIONS)
Expand Down
3 changes: 1 addition & 2 deletions modulefiles/cheyenne
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,5 @@ module load nemsio/2.5.2
module load sfcio/1.4.1
module load sigio/2.3.2
module load sp/2.3.3
module load w3nco/2.4.1
module load w3emc/2.7.3
module load w3emc/2.9.2
module load wrf_io/1.2.0
3 changes: 1 addition & 2 deletions modulefiles/cheyenne_gnu
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,5 @@ module load nemsio/2.5.2
module load sfcio/1.4.1
module load sigio/2.3.2
module load sp/2.3.3
module load w3nco/2.4.1
module load w3emc/2.7.3
module load w3emc/2.9.2
module load wrf_io/1.2.0
3 changes: 1 addition & 2 deletions modulefiles/hera
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,5 @@ module load nemsio/2.5.2
module load sfcio/1.4.1
module load sigio/2.3.2
module load sp/2.3.3
module load w3nco/2.4.1
module load w3emc/2.7.3
module load w3emc/2.9.2
module load wrf_io/1.1.1
3 changes: 1 addition & 2 deletions modulefiles/jet
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,5 @@ module load nemsio/2.5.2
module load sfcio/1.4.1
module load sigio/2.3.2
module load sp/2.3.3
module load w3nco/2.4.1
module load w3emc/2.7.3
module load w3emc/2.9.2
module load wrf_io/1.1.1
3 changes: 1 addition & 2 deletions modulefiles/orion
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,5 @@ module load nemsio/2.5.2
module load sfcio/1.4.1
module load sigio/2.3.2
module load sp/2.3.3
module load w3nco/2.4.1
module load w3emc/2.7.3
module load w3emc/2.9.2
module load wrf_io/1.1.1
3 changes: 1 addition & 2 deletions modulefiles/s4
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,5 @@ module load nemsio/2.5.2
module load sfcio/1.4.1
module load sigio/2.3.2
module load sp/2.3.3
module load w3nco/2.4.1
module load w3emc/2.7.3
module load w3emc/2.9.2
module load wrf_io/1.1.1
2 changes: 0 additions & 2 deletions modulefiles/wcoss2.lua
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,13 @@ load(pathJoin("zlib", zlib_ver))

g2_ver=os.getenv("g2_ver") or "3.4.5"
g2tmpl_ver=os.getenv("g2tmpl_ver") or "1.10.0"
w3nco_ver=os.getenv("w3nco_ver") or "2.4.1"
bacio_ver=os.getenv("bacio_ver") or "2.4.1"
ip_ver=os.getenv("ip_ver") or "3.3.3"
sp_ver=os.getenv("sp_ver") or "2.3.3"
crtm_ver=os.getenv("crtm_ver") or "2.3.0"
w3emc_ver=os.getenv("w3emc_ver") or "2.9.2"
load(pathJoin("g2", g2_ver))
load(pathJoin("g2tmpl", g2tmpl_ver))
load(pathJoin("w3nco", w3nco_ver))
load(pathJoin("bacio", bacio_ver))
load(pathJoin("ip", ip_ver))
load(pathJoin("sp", sp_ver))
Expand Down
3 changes: 1 addition & 2 deletions modulefiles/wcoss_cray
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,5 @@ module load nemsio/2.5.2
module load sfcio/1.4.1
module load sigio/2.3.2
module load sp/2.3.3
module load w3nco/2.4.1
module load w3emc/2.7.3
module load w3emc/2.9.2
module load wrf_io/1.1.1
Loading