diff --git a/.github/workflows/gcc.yml b/.github/workflows/gcc.yml new file mode 100644 index 0000000000..6a5fce0ce7 --- /dev/null +++ b/.github/workflows/gcc.yml @@ -0,0 +1,95 @@ +name: GCC Linux Build +on: [push, pull_request] + +# 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: gcc3 # 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 GSI build step (build) +# The setup is run once and the environment is cached, +# so each build of GSI 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-gsi # This is for getting spack.yaml + if: steps.cache-env.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + path: GSI + + # 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 gsi-env GSI/ci/spack.yaml + spack env activate gsi-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-gsi + uses: actions/checkout@v2 + with: + path: GSI + + - name: cache-env + id: cache-env + uses: actions/cache@v2 + with: + path: | + spack + ~/.spack + key: spack-${{ runner.os }}-${{ env.cache_key }} + + - name: build-gsi + run: | + source spack/share/spack/setup-env.sh + spack env activate gsi-env + export CC=mpicc + export FC=mpif90 + cd GSI + mkdir -p build && cd build + cmake -DCMAKE_INSTALL_PREFIX=../install -DGSI_MODE=Regional -DENKF_MODE=GFS -DBUILD_UTIL_ALL=ON -DBUILD_REG_TESTING=OFF -DBUILD_NCDIAG=OFF .. + make -j2 VERBOSE=1 + make install diff --git a/.github/workflows/intel.yml b/.github/workflows/intel.yml new file mode 100644 index 0000000000..91bec976be --- /dev/null +++ b/.github/workflows/intel.yml @@ -0,0 +1,114 @@ +name: Intel Linux Build +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 +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: intel3 # 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 + +# The jobs are split into: +# 1. a dependency build step (setup), and +# 2. a GSI build step (build) +# The setup is run once and the environment is cached, +# so each build of GSI 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-gsi # This is for getting spack.yaml + if: steps.cache-env.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + with: + path: GSI + + # 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 gsi-env GSI/ci/spack.yaml + spack env activate gsi-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-gsi + uses: actions/checkout@v2 + with: + path: GSI + + - 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-gsi + run: | + source spack/share/spack/setup-env.sh + spack env activate gsi-env + export CC=mpiicc + export FC=mpiifort + cd GSI + mkdir -p build && cd build + cmake -DCMAKE_INSTALL_PREFIX=../install -DGSI_MODE=Regional -DENKF_MODE=GFS -DBUILD_UTIL_ALL=ON -DBUILD_REG_TESTING=OFF -DBUILD_NCDIAG=OFF .. + make -j2 VERBOSE=1 + make install diff --git a/ci/spack.yaml b/ci/spack.yaml new file mode 100644 index 0000000000..a69b21e92a --- /dev/null +++ b/ci/spack.yaml @@ -0,0 +1,23 @@ +# Spack environment file to build GSI dependencies +spack: + packages: + all: + compiler: [intel, gcc] + specs: + - netcdf-c@4.7.4 + - netcdf-fortran@4.5.3 + - bufr@11.5.0 + - bacio@2.4.1 + - w3emc@2.9.2 + - 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 + - ncio@1.0.0 + - crtm@2.3.0 + - gsi-ncdiag@1.0.0 + view: true + concretizer: + unify: true