diff --git a/.github/workflows/gcc.yml b/.github/workflows/gcc.yml index eef57ce..112430b 100644 --- a/.github/workflows/gcc.yml +++ b/.github/workflows/gcc.yml @@ -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 @@ -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 @@ -39,25 +61,24 @@ 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 @@ -65,7 +86,7 @@ jobs: - name: checkout uses: actions/checkout@v4 with: - path: gsi + path: gsi-utils - name: cache-env id: cache-env @@ -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: diff --git a/.github/workflows/intel.yml b/.github/workflows/intel.yml index 9d2dc4c..c9ef1f2 100644 --- a/.github/workflows/intel.yml +++ b/.github/workflows/intel.yml @@ -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 @@ -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: @@ -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 @@ -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 @@ -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 @@ -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: diff --git a/ci/spack_gcc.yaml b/ci/spack_gcc.yaml new file mode 100644 index 0000000..8dc6729 --- /dev/null +++ b/ci/spack_gcc.yaml @@ -0,0 +1,27 @@ +# Spack environment file to build GSI-utils dependencies +spack: + packages: + all: + providers: + mpi: [mpich] + compiler: + - gcc@13 + specs: + - netcdf-c@4.9.2 + - netcdf-fortran@4.6.1 + - bufr@11.7.0 + - bacio@2.4.1 + - w3emc@2.10.0 + - sp@2.5.0 + - ip@4.3.0 + - sigio@2.3.2 + - sfcio@1.4.1 + - nemsio@2.5.4 + - wrf-io@1.2.0 + - ncio@1.1.2 + - crtm@2.4.0.1 + - gsi-ncdiag@1.1.2 + - mpich@3.4.2 + view: true + concretizer: + unify: true diff --git a/ci/spack_intel.yml b/ci/spack_intel.yml new file mode 100644 index 0000000..b88b9eb --- /dev/null +++ b/ci/spack_intel.yml @@ -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: + - netcdf-c@4.9.2 ~blosc build_system=cmake + - netcdf-fortran@4.6.1 + - bufr@11.7.0 + - bacio@2.4.1 + - w3emc@2.10.0 + - sp@2.5.0 + - ip@4.3.0 + - sigio@2.3.2 + - sfcio@1.4.1 + - nemsio@2.5.4 + - wrf-io@1.2.0 + - crtm@2.4.0.1 + - ncio@1.1.2 + - gsi-ncdiag@1.1.2 + - intel-oneapi-mpi@2021.10.0 + view: true + concretizer: + unify: true