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

Update CI workflow for Intel (and GCC) #103

Merged
merged 3 commits into from
Nov 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
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
61 changes: 28 additions & 33 deletions .github/workflows/gcc.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
name: GCC Linux Build
on: [push, pull_request]
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
Expand All @@ -8,85 +9,79 @@ defaults:
shell: bash -leo pipefail {0}

env:
cache_key: gcc2 # The number (#) following the cache_key "gcc" is to flush Action cache.
cache_key: gcc
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 GSI-monitor build step (build)
# 2. a GSI-monitor build step (gsi-monitor)
# The setup is run once and the environment is cached,
# so each build of GSI-monitor can reuse the cached dependencies to save time (and compute).
# so each subsequent build of GSI-monitor can reuse the cached dependencies to save time (and compute).

jobs:
setup:
runs-on: ubuntu-latest

steps:
- name: checkout # this is to get the ci/spack.yaml file
uses: actions/checkout@v3
with:
path: gsi-monitor

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

- name: checkout-gsi-monitor # This is for getting spack.yaml
if: steps.cache-env.outputs.cache-hit != 'true'
uses: actions/checkout@v2
with:
path: GSI-Monitor
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-monitor/ci/spack.yaml') }}

# 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
git clone -c feature.manyFiles=true https://github.com/JCSDA/spack.git
source spack/share/spack/setup-env.sh
spack env create gsi-monitor-env GSI-Monitor/ci/spack.yaml
spack env create gsi-monitor-env gsi-monitor/ci/spack.yaml
spack env activate gsi-monitor-env
spack compiler find
DavidHuber-NOAA marked this conversation as resolved.
Show resolved Hide resolved
sudo apt install cmake
spack external find
spack add [email protected]
spack concretize
spack install --dirty -v
spack install -v --fail-fast --dirty
spack clean --all

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

steps:
- name: checkout-gsi-monitor
uses: actions/checkout@v2
- name: checkout
uses: actions/checkout@v3
with:
path: GSI-Monitor
path: gsi-monitor

- name: cache-env
id: cache-env
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
spack
~/.spack
key: spack-${{ runner.os }}-${{ env.cache_key }}
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-monitor/ci/spack.yaml') }}

- name: build-gsi-monitor
- name: build
run: |
source spack/share/spack/setup-env.sh
spack env activate gsi-monitor-env
cd GSI-Monitor
export CC=mpicc
export FC=mpif90
cd gsi-monitor
mkdir -p build && cd build
cmake -DBUILD_UTIL_ALLMON=ON ..
make -j2 VERBOSE=1
make install
70 changes: 32 additions & 38 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]
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
Expand All @@ -9,103 +9,97 @@ defaults:

# Set I_MPI_CC/F90 so Intel MPI wrapper uses icc/ifort instead of gcc/gfortran
env:
cache_key: intel5 # The number (#) following the cache_key "intel" is to flush Action cache.
cache_key: intel
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

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

jobs:
setup:
runs-on: ubuntu-latest
runs-on: ubuntu-20.04

steps:
- name: checkout # this is to get the ci/spack.yaml file
uses: actions/checkout@v3
with:
path: gsi-monitor

# Cache spack, compiler and dependencies
- name: cache-env
id: cache-env
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
spack
~/.spack
/opt/intel
key: spack-${{ runner.os }}-${{ env.cache_key }}
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-monitor/ci/spack.yaml') }}

- 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
sudo apt-get install intel-oneapi-dev-utilities intel-oneapi-mpi-devel intel-oneapi-openmp intel-oneapi-compiler-fortran-2023.2.1 intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2023.2.1
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile

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

# 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
git clone -c feature.manyFiles=true https://github.com/JCSDA/spack.git
source spack/share/spack/setup-env.sh
spack env create gsi-monitor-env GSI-Monitor/ci/spack.yaml
spack env create gsi-monitor-env gsi-monitor/ci/spack.yaml
spack env activate gsi-monitor-env
spack compiler find
sudo apt install cmake
spack external find
spack add intel-oneapi-mpi
spack concretize
spack install --dirty -v
spack install --dirty -v --fail-fast
spack clean --all

build:
gsi-monitor:
needs: setup
runs-on: ubuntu-latest
runs-on: ubuntu-20.04

steps:
- name: checkout-gsi-monitor
uses: actions/checkout@v2
with:
path: GSI-Monitor

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

- name: checkout
uses: actions/checkout@v3
with:
path: gsi-monitor

- name: cache-env
id: cache-env
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
spack
~/.spack
/opt/intel
key: spack-${{ runner.os }}-${{ env.cache_key }}
key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-monitor/ci/spack.yaml') }}

- name: build-gsi-monitor
- name: build
run: |
source spack/share/spack/setup-env.sh
spack env activate gsi-monitor-env
cd GSI-Monitor
export CC=mpiicc
export FC=mpiifort
cd gsi-monitor
mkdir -p build && cd build
cmake -DBUILD_UTIL_ALLMON=ON ..
make -j2 VERBOSE=1
make install
2 changes: 1 addition & 1 deletion ci/spack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
spack:
packages:
all:
compiler: [intel, gcc]
compiler: [intel, gcc@10:10]
specs:
- [email protected]
- [email protected]
Expand Down