From 98ba829b65ce01a89b73a54cf51efa3d597d026a Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 5 Jan 2024 18:36:55 -0500 Subject: [PATCH] ci --- .github/workflows/ci.yml | 274 +++++++++++++++++++-------------------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af0e20799c..2fd8ea8f17 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,140 +1,140 @@ -# name: 'Test Suite' - -# on: -# push: -# paths: -# - '**.f90' -# - '**.fpp' -# - '**.py' -# - '**.yml' -# - 'mfc.sh' -# - 'golden.txt' -# - 'CMakeLists.txt' -# - 'requirements.txt' - -# pull_request: - -# workflow_dispatch: +name: 'Test Suite' + +on: + push: + paths: + - '**.f90' + - '**.fpp' + - '**.py' + - '**.yml' + - 'mfc.sh' + - 'golden.txt' + - 'CMakeLists.txt' + - 'requirements.txt' + + pull_request: + + workflow_dispatch: -# jobs: -# github: -# name: Github -# strategy: -# matrix: -# os: ['ubuntu', 'macos'] -# mpi: ['mpi', 'no-mpi'] -# debug: ['debug', 'no-debug'] -# intel: [true, false] -# exclude: -# - intel: true -# os: macos -# fail-fast: false -# continue-on-error: true -# runs-on: ${{ matrix.os }}-latest -# steps: -# - name: Clone -# uses: actions/checkout@v3 - -# - name: Setup MacOS -# if: matrix.os == 'macos' -# run: | -# echo "CC=gcc-13" >> $GITHUB_ENV -# echo "CXX=g++-13" >> $GITHUB_ENV -# echo "FC=gfortran-13" >> $GITHUB_ENV -# brew install wget make python make cmake coreutils gcc@13 +jobs: + github: + name: Github + strategy: + matrix: + os: ['ubuntu', 'macos'] + mpi: ['mpi', 'no-mpi'] + debug: ['debug', 'no-debug'] + intel: [true, false] + exclude: + - intel: true + os: macos + fail-fast: false + continue-on-error: true + runs-on: ${{ matrix.os }}-latest + steps: + - name: Clone + uses: actions/checkout@v3 + + - name: Setup MacOS + if: matrix.os == 'macos' + run: | + echo "CC=gcc-13" >> $GITHUB_ENV + echo "CXX=g++-13" >> $GITHUB_ENV + echo "FC=gfortran-13" >> $GITHUB_ENV + brew install wget make python make cmake coreutils gcc@13 -# - name: (MacOS) Build OpenMPI -# if: matrix.os == 'macos' && matrix.mpi == 'mpi' -# run: | -# echo "OMPI_FC=gfortran-13" >> $GITHUB_ENV -# echo "OMPI_CXX=g++-13" >> $GITHUB_ENV -# echo "OMPI_MPICC=gcc-13" >> $GITHUB_ENV -# HOMEBREW_MAKE_JOBS=$(nproc) brew install --cc=gcc-13 --verbose --build-from-source open-mpi - -# - name: Setup Ubuntu -# if: matrix.os == 'ubuntu' && matrix.intel == false -# run: | -# sudo apt update -y -# sudo apt install -y tar wget make cmake gcc g++ python3 python3-dev "openmpi-*" libopenmpi-dev + - name: (MacOS) Build OpenMPI + if: matrix.os == 'macos' && matrix.mpi == 'mpi' + run: | + echo "OMPI_FC=gfortran-13" >> $GITHUB_ENV + echo "OMPI_CXX=g++-13" >> $GITHUB_ENV + echo "OMPI_MPICC=gcc-13" >> $GITHUB_ENV + HOMEBREW_MAKE_JOBS=$(nproc) brew install --cc=gcc-13 --verbose --build-from-source open-mpi + + - name: Setup Ubuntu + if: matrix.os == 'ubuntu' && matrix.intel == false + run: | + sudo apt update -y + sudo apt install -y tar wget make cmake gcc g++ python3 python3-dev "openmpi-*" libopenmpi-dev -# - name: Setup Ubuntu (Intel) -# if: matrix.os == 'ubuntu' && matrix.intel == true -# run: | -# sudo apt install tar wget make cmake python3 python3-dev -# 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 -# rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB -# sudo 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 -y intel-oneapi-common-vars intel-oneapi-compiler-fortran-2022.1.0 intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2022.1.0 intel-oneapi-mkl-2021.4.0 intel-oneapi-mpi-2021.7.1 intel-oneapi-mpi-devel-2021.7.1 -# source /opt/intel/oneapi/setvars.sh -# echo "CXX=$(which icpc)" >> $GITHUB_ENV -# echo "CC=$(which icc)" >> $GITHUB_ENV -# echo "FC=$(which ifort)" >> $GITHUB_ENV -# echo "OMPI_FC=$(which ifort)" >> $GITHUB_ENV -# echo "OMPI_CXX=$(which icpc)" >> $GITHUB_ENV -# echo "OMPI_MPICC=$(which icc)" >> $GITHUB_ENV -# echo "MPI_HOME=/opt/intel/oneapi/mpi/2021.7.1/" >> $GITHUB_ENV -# echo "I_MPI_ROOT=/opt/intel/oneapi/mpi/2021.7.1/" >> $GITHUB_ENV - -# - name: Build -# run: | -# if [ '${{ matrix.intel }}' == 'true' ]; then source /opt/intel/oneapi/setvars.sh; fi -# /bin/bash mfc.sh build -j $(nproc) --${{ matrix.debug }} --${{ matrix.mpi }} - -# - name: Test -# run: | -# if [ '${{ matrix.intel }}' == 'true' ]; then source /opt/intel/oneapi/setvars.sh; fi -# /bin/bash mfc.sh test -j $(nproc) $OPT1 $OPT2 -# env: -# OPT1: ${{ matrix.mpi == 'mpi' && '--test-all' || '' }} -# OPT2: ${{ matrix.debug == 'debug' && '-% 20' || '' }} - -# - name: Ensure empty diff -# run: git diff --exit-code tests/ - -# docker: -# name: Github | Docker -# runs-on: ubuntu-latest -# steps: -# - name: Clone -# uses: actions/checkout@v3 - -# - name: Test -# run: sudo ./mfc.sh docker ./mfc.sh test -j $(nproc) -a - -# - name: Ensure empty diff -# run: git diff --exit-code tests/ - -# self: -# name: Georgia Tech | Phoenix (NVHPC) -# if: github.repository == 'MFlowCode/MFC' -# continue-on-error: true -# strategy: -# matrix: -# device: ['cpu', 'gpu'] -# runs-on: -# group: phoenix -# labels: self-hosted -# steps: -# - name: Clone -# uses: actions/checkout@v3 - -# - name: Build -# run: | -# . ./mfc.sh load -c p -m gpu -# ./mfc.sh build -j 2 $(if [ '${{ matrix.device }}' == 'gpu' ]; then echo '--gpu'; fi) - -# - name: Test -# run: | -# . ./mfc.sh load -c p -m gpu -# mv misc/run-phoenix-release-${{ matrix.device }}.sh ./ -# sbatch run-phoenix-release-${{ matrix.device }}.sh - -# - name: Ensure empty diff -# run: exit $(git status --porcelain tests/ | wc -l) - -# - name: Print -# if: always() -# run: | -# cat test.out + - name: Setup Ubuntu (Intel) + if: matrix.os == 'ubuntu' && matrix.intel == true + run: | + sudo apt install tar wget make cmake python3 python3-dev + 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 + rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB + sudo 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 -y intel-oneapi-common-vars intel-oneapi-compiler-fortran-2022.1.0 intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic-2022.1.0 intel-oneapi-mkl-2021.4.0 intel-oneapi-mpi-2021.7.1 intel-oneapi-mpi-devel-2021.7.1 + source /opt/intel/oneapi/setvars.sh + echo "CXX=$(which icpc)" >> $GITHUB_ENV + echo "CC=$(which icc)" >> $GITHUB_ENV + echo "FC=$(which ifort)" >> $GITHUB_ENV + echo "OMPI_FC=$(which ifort)" >> $GITHUB_ENV + echo "OMPI_CXX=$(which icpc)" >> $GITHUB_ENV + echo "OMPI_MPICC=$(which icc)" >> $GITHUB_ENV + echo "MPI_HOME=/opt/intel/oneapi/mpi/2021.7.1/" >> $GITHUB_ENV + echo "I_MPI_ROOT=/opt/intel/oneapi/mpi/2021.7.1/" >> $GITHUB_ENV + + - name: Build + run: | + if [ '${{ matrix.intel }}' == 'true' ]; then source /opt/intel/oneapi/setvars.sh; fi + /bin/bash mfc.sh build -j $(nproc) --${{ matrix.debug }} --${{ matrix.mpi }} + + - name: Test + run: | + if [ '${{ matrix.intel }}' == 'true' ]; then source /opt/intel/oneapi/setvars.sh; fi + /bin/bash mfc.sh test -j $(nproc) $OPT1 $OPT2 + env: + OPT1: ${{ matrix.mpi == 'mpi' && '--test-all' || '' }} + OPT2: ${{ matrix.debug == 'debug' && '-% 20' || '' }} + + - name: Ensure empty diff + run: git diff --exit-code tests/ + + docker: + name: Github | Docker + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v3 + + - name: Test + run: sudo ./mfc.sh docker ./mfc.sh test -j $(nproc) -a + + - name: Ensure empty diff + run: git diff --exit-code tests/ + + self: + name: Georgia Tech | Phoenix (NVHPC) + if: github.repository == 'MFlowCode/MFC' + continue-on-error: true + strategy: + matrix: + device: ['cpu', 'gpu'] + runs-on: + group: phoenix + labels: self-hosted + steps: + - name: Clone + uses: actions/checkout@v3 + + - name: Build + run: | + . ./mfc.sh load -c p -m gpu + ./mfc.sh build -j 2 $(if [ '${{ matrix.device }}' == 'gpu' ]; then echo '--gpu'; fi) + + - name: Test + run: | + . ./mfc.sh load -c p -m gpu + mv misc/run-phoenix-release-${{ matrix.device }}.sh ./ + sbatch run-phoenix-release-${{ matrix.device }}.sh + + - name: Ensure empty diff + run: exit $(git status --porcelain tests/ | wc -l) + + - name: Print + if: always() + run: | + cat test.out