From bca9f908fc6c5b285eca58f27207f41bdbff0f60 Mon Sep 17 00:00:00 2001 From: "russ.treadon" Date: Fri, 3 Jan 2025 18:29:04 +0000 Subject: [PATCH] update GH CI workflows --- .github/workflows/gcc.yml | 72 +++++++++++++------------------------ .github/workflows/intel.yml | 60 +++++++++++++------------------ ci/spack.yaml | 17 ++++----- 3 files changed, 59 insertions(+), 90 deletions(-) diff --git a/.github/workflows/gcc.yml b/.github/workflows/gcc.yml index cf35f4c5..eef57cec 100644 --- a/.github/workflows/gcc.yml +++ b/.github/workflows/gcc.yml @@ -1,5 +1,5 @@ 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 @@ -9,77 +9,55 @@ defaults: env: 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 + CC: gcc-13 + FC: gfortran-13 + CXX: g++-13 # The jobs are split into: # 1. a dependency build step (setup), and -# 2. a GSI-utils build step (gsi-utils) +# 2. a GSI build step (gsi) # The setup is run once and the environment is cached, -# so each subsequent build of GSI-utils can reuse the cached dependencies to save time (and compute). +# so each subsequent build of GSI can reuse the cached dependencies to save time (and compute). jobs: setup: runs-on: ubuntu-latest steps: - # 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 + # Checkout the GSI to get the ci/spack.yaml file + - name: checkout if: steps.cache-env.outputs.cache-hit != 'true' uses: actions/checkout@v4 with: - path: gsi-utils + path: gsi # Cache spack, compiler and dependencies - name: cache-env id: cache-env - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | spack ~/.spack - key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }} + key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi/ci/spack.yaml') }} # Install dependencies using Spack - name: install-dependencies-with-spack - if: steps.cache-env.outputs.cache-hit != 'true' + # if: steps.cache-env.outputs.cache-hit != 'true' run: | + sudo apt-get install cmake + 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 gsiutils-env gsi-utils/ci/spack.yaml - spack env activate gsiutils-env + spack env create gsi-env gsi/ci/spack_gcc.yaml + spack env activate gsi-env spack compiler find - sudo apt install cmake spack external find - spack add mpich@3.4.2 spack concretize - spack install -v --fail-fast --dirty - spack clean --all + spack install --fail-fast --dirty + spack clean -a - gsi-utils: + gsi: needs: setup runs-on: ubuntu-latest @@ -87,24 +65,24 @@ jobs: - name: checkout uses: actions/checkout@v4 with: - path: gsi-utils + path: gsi - name: cache-env id: cache-env - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | spack ~/.spack - key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }} + key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi/ci/spack.yaml') }} - name: build run: | source spack/share/spack/setup-env.sh - spack env activate gsiutils-env - cd gsi-utils + spack env activate gsi-env + cd gsi mkdir -p build && cd build - cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_UTIL_ALL=ON .. + cmake -DCMAKE_INSTALL_PREFIX=../install -DGSI_MODE=Regional -DENKF_MODE=GFS -DBUILD_REG_TESTING=OFF .. make -j2 VERBOSE=1 make install env: diff --git a/.github/workflows/intel.yml b/.github/workflows/intel.yml index 3f1ca198..9d2dc4c2 100644 --- a/.github/workflows/intel.yml +++ b/.github/workflows/intel.yml @@ -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 @@ -16,20 +16,11 @@ 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-utils build step (gsi-utils) +# 2. a GSI build step (gsi) # The setup is run once and the environment is cached, -# so each subsequent build of gsi-utils can reuse the cached dependencies to save time (and compute). +# so each subsequent build of GSI can reuse the cached dependencies to save time (and compute). jobs: setup: @@ -41,21 +32,18 @@ jobs: run: | df -h sudo swapoff -a - 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 rm -f /swapfile sudo apt clean - docker rmi $(docker image ls -aq) + DOCKER_IMGS=$(docker image ls -aq) + if [[ ! -z "${DOCKER_IMGS}" ]]; then docker rmi ${DOCKER_IMGS}; fi df -h - - name: checkout # This is for getting spack.yaml + # Checkout the GSI to get the ci/spack.yaml file + - name: checkout if: steps.cache-env.outputs.cache-hit != 'true' uses: actions/checkout@v4 with: - path: gsi-utils + path: gsi # Cache spack, compiler and dependencies - name: cache-env @@ -66,9 +54,10 @@ jobs: spack ~/.spack /opt/intel - key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }} + key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi/ci/spack.yaml') }}-1 - 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 @@ -84,19 +73,18 @@ jobs: run: | sudo mv /usr/local/ /usr_local_mv sudo apt-get install cmake + 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 gsiutils-env gsi-utils/ci/spack.yaml - spack env activate gsiutils-env + spack env create gsi-env gsi/ci/spack_intel.yaml + spack env activate gsi-env spack compiler find - sudo apt install cmake spack external find - spack add intel-oneapi-mpi spack concretize - spack install --dirty --fail-fast -v - spack clean --all + spack install --fail-fast --dirty + spack clean -a - gsi-utils: + gsi: needs: setup runs-on: ubuntu-latest @@ -105,10 +93,10 @@ jobs: run: | echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bash_profile - - name: checkout-gsiutils + - name: checkout uses: actions/checkout@v4 with: - path: gsi-utils + path: gsi - name: cache-env id: cache-env @@ -118,15 +106,17 @@ jobs: spack ~/.spack /opt/intel - key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi-utils/ci/spack.yaml') }} + key: spack-${{ runner.os }}-${{ env.cache_key }}-${{ hashFiles('gsi/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 gsiutils-env - cd gsi-utils + spack env activate gsi-env + cd gsi mkdir -p build && cd build - cmake -DCMAKE_INSTALL_PREFIX=../install -DBUILD_UTIL_ALL=ON .. + cmake -DCMAKE_INSTALL_PREFIX=../install -DGSI_MODE=Regional -DENKF_MODE=GFS -DBUILD_REG_TESTING=OFF .. make -j2 VERBOSE=1 make install env: diff --git a/ci/spack.yaml b/ci/spack.yaml index 0c8d4f79..c3c74e40 100644 --- a/ci/spack.yaml +++ b/ci/spack.yaml @@ -1,13 +1,13 @@ -# 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 environment file to build GSI dependencies spack: packages: all: - compiler: [intel, gcc@10:10] + providers: + mpi: [intel-oneapi-mpi] + compiler: + - intel specs: - - netcdf-c@4.9.2 + - netcdf-c@4.9.2 ~blosc build_system=cmake - netcdf-fortran@4.6.1 - bufr@11.7.0 - bacio@2.4.1 @@ -18,9 +18,10 @@ spack: - sfcio@1.4.1 - nemsio@2.5.4 - wrf-io@1.2.0 - - crtm@2.4.0.1 - ncio@1.1.2 + - crtm@2.4.0.1 - gsi-ncdiag@1.1.2 + - intel-oneapi-mpi@2021.10.0 view: true concretizer: - unify: when_possible + unify: true