diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml new file mode 100644 index 00000000..732a2a46 --- /dev/null +++ b/.github/workflows/ubuntu.yml @@ -0,0 +1,95 @@ +name: ubuntu-gnu + +on: + pull_request: + branches: + - main + - dev + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + + builds-and-test: + runs-on: ubuntu-latest + strategy: + matrix: + compiler: [ + {name: 'intel', version: '2024.2'}, + {name: 'gcc', version: 11} + ] + build-type: ["Debug", "Release"] + mpi: ["Yes", "No"] + mtln: ["Yes"] + hdf: ["Yes"] + + include: + - compiler: {name: 'intel-classic', version: '2021.10'} + build-type: "Release" + mpi: "No" + mtln: "No" + hdf: "Yes" + - compiler: {name: 'nvidia-hpc', version: '24.5'} + build-type: "Release" + mpi: "No" + mtln: "No" + hdf: "No" + + + fail-fast: false + + name: ${{matrix.compiler.name}}-${{matrix.build-type}}-mpi(${{matrix.mpi}})-mtln(${{matrix.mtln}})-hdf(${{matrix.hdf}}) + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Setup MPI + if: matrix.mpi=='Yes' && matrix.compiler.name=='intel' + uses: mpi4py/setup-mpi@v1 + with: + mpi: 'intelmpi' + + - name: Install required packages + if: matrix.compiler.name=='gnu' + run: | + sudo apt update + sudo apt install libhdf5-dev libopenmpi-dev + + - name: Setup fortran compiler + uses: fortran-lang/setup-fortran@v1 + id: setup-fortran + with: + compiler: ${{matrix.compiler.name}} + version: ${{matrix.compiler.version}} + + - name: Build application + run: | + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=${{matrix.build-type}} \ + -DSEMBA_FDTD_ENABLE_MPI=${{matrix.mpi}} \ + -DSEMBA_FDTD_ENABLE_HDF=${{matrix.hdf}} \ + -DSEMBA_FDTD_ENABLE_MTLN=${{matrix.mtln}} + cmake --build build -j + + - name: Run fdtd unit tests + run: | + build/bin/fdtd_tests + + - name: Install python wrapper requirements + run: | + python -m pip install -r requirements.txt + + - name: Run all wrapper tests + if: matrix.mtln=='Yes' + run: python -m pytest test/ + + - name: Run non-mtln wrapper tests + if: matrix.mtln=='No' + run: python -m pytest -m 'not mtln' test/ + +