From 1c508b9a2c10708e6425fe318af85cc411df1d3e Mon Sep 17 00:00:00 2001 From: Wes Bonelli Date: Sat, 7 Oct 2023 13:33:11 -0400 Subject: [PATCH] ci: move compiler compatibility checks into manual workflow --- .github/workflows/ci.yml | 110 ++++------------- .github/workflows/compilers.yml | 208 ++++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+), 87 deletions(-) create mode 100644 .github/workflows/compilers.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6b05ab13acc..46a06b9b29e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,7 +102,7 @@ jobs: - name: Meson test run: meson test --verbose --no-rebuild -C builddir - smoke_test: + smoke: name: Smoke test runs-on: ubuntu-22.04 defaults: @@ -110,18 +110,18 @@ jobs: shell: bash -l {0} env: FC: gfortran - GCC_V: 13 + GCC: 13 steps: - name: Checkout modflow6 uses: actions/checkout@v4 with: path: modflow6 - - name: Setup GNU Fortran ${{ env.GCC_V }} + - name: Setup GNU Fortran ${{ env.GCC }} uses: awvwgk/setup-fortran@main with: compiler: gcc - version: ${{ env.GCC_V }} + version: ${{ env.GCC }} - name: Setup Micromamba uses: mamba-org/setup-micromamba@v1 @@ -164,43 +164,23 @@ jobs: pytest -v -n auto --durations 0 -S fi - test_gfortran: - name: Test (gfortran) + test_gnu: + name: Test GNU Fortran needs: - lint - build - - smoke_test + - smoke runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - # compatible combinations from https://github.com/awvwgk/setup-fortran#runner-compatibility - include: - - {os: ubuntu-20.04, gcc_v: 7, test: false} - - {os: ubuntu-20.04, gcc_v: 8, test: false} - - {os: ubuntu-20.04, gcc_v: 9, test: false} - - {os: ubuntu-20.04, gcc_v: 10, test: false} - - {os: ubuntu-20.04, gcc_v: 11, test: false} - - {os: ubuntu-22.04, gcc_v: 12, test: false} - # only run autotests on latest version on each platform - - {os: ubuntu-22.04, gcc_v: 13, test: true} - - {os: macos-12, gcc_v: 7, test: false} - - {os: macos-12, gcc_v: 8, test: false} - - {os: macos-12, gcc_v: 9, test: false} - - {os: macos-12, gcc_v: 10, test: false} - - {os: macos-12, gcc_v: 11, test: false} - - {os: macos-12, gcc_v: 12, test: false} - - {os: macos-12, gcc_v: 13, test: true} - - {os: windows-2022, gcc_v: 9, test: false} - - {os: windows-2022, gcc_v: 10, test: false} - - {os: windows-2022, gcc_v: 11, test: false} - - {os: windows-2022, gcc_v: 12, test: true} - + os: [ ubuntu-22.04, macos-12, windows-2022 ] defaults: run: shell: bash -l {0} env: FC: gfortran + GCC: 13 steps: - name: Checkout modflow6 uses: actions/checkout@v4 @@ -219,11 +199,11 @@ jobs: repository: MODFLOW-USGS/modflow6-examples path: modflow6-examples - - name: Setup GNU Fortran ${{ matrix.gcc_v }} + - name: Setup GNU Fortran ${{ env.GCC }} uses: awvwgk/setup-fortran@main with: compiler: gcc - version: ${{ matrix.gcc_v }} + version: ${{ runner.os == 'Windows' && 12 || env.GCC }} - name: Setup Micromamba uses: mamba-org/setup-micromamba@v1 @@ -251,12 +231,10 @@ jobs: run: meson test --verbose --no-rebuild -C builddir - name: Update flopy - if: matrix.test working-directory: modflow6/autotest run: python update_flopy.py - name: Get executables - if: matrix.test working-directory: modflow6/autotest env: GITHUB_TOKEN: ${{ github.token }} @@ -264,7 +242,6 @@ jobs: pytest -v --durations 0 get_exes.py - name: Test modflow6 - if: matrix.test working-directory: modflow6/autotest env: REPOS_PATH: ${{ github.workspace }} @@ -276,14 +253,14 @@ jobs: fi - name: Checkout usgslatex - if: matrix.test && runner.os == 'Linux' + if: runner.os == 'Linux' uses: actions/checkout@v4 with: repository: MODFLOW-USGS/usgslatex path: usgslatex - name: Install TeX Live - if: matrix.test && runner.os == 'Linux' + if: runner.os == 'Linux' run: | sudo apt-get update sudo apt install texlive-science \ @@ -293,67 +270,30 @@ jobs: texlive-fonts-extra - name: Install USGS LaTeX style files and Univers font - if: matrix.test && runner.os == 'Linux' + if: runner.os == 'Linux' working-directory: usgslatex/usgsLaTeX run: sudo ./install.sh --all-users - name: Test distribution scripts - if: matrix.test working-directory: modflow6/distribution env: GITHUB_TOKEN: ${{ github.token }} run: pytest -v --durations 0 - test_intel_fortran: - name: Test (Intel) + test_intel: + name: Test Intel Fortran needs: - lint - build - - smoke_test + - smoke runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - ### ifx - ## 2022.2.x autotests disabled - # - mf5to6 test_evt: failure to converge - # - mf6 Keating_[disu_]dev: bad head comparison - - {os: ubuntu-22.04, compiler: intel, version: 2022.2.1, test: false} - - {os: ubuntu-22.04, compiler: intel, version: 2022.2, test: false} - ## 2021.1 segfault in meson serial sim test - # - {os: ubuntu-22.04, compiler: intel, version: 2022.1, test: false} - ## 2022.0 & 2021.[1,2,4] segfault at compile time - # - {os: ubuntu-22.04, compiler: intel, version: "2022.0", test: false} - # - {os: ubuntu-22.04, compiler: intel, version: 2021.4, test: false} - # - {os: ubuntu-22.04, compiler: intel, version: 2021.2, test: false} - # - {os: ubuntu-22.04, compiler: intel, version: 2021.1, test: false} - ## ifx not yet supported on macOS - # - {os: macos-12, compiler: intel, version: 2023.2, test: true} - ## 2023.[0,1] fail to compile - # - {os: windows-2022, compiler: intel, version: 2023.1, test: false} - # - {os: windows-2022, compiler: intel, version: "2023.0", test: false} - - {os: windows-2022, compiler: intel, version: 2022.2, test: false} - ## 2022.1 fail to link - # - {os: windows-2022, compiler: intel, version: 2022.1, test: false} - - ### ifort - ## only autotest latest on each platform - - {os: ubuntu-22.04, compiler: intel-classic, version: "2021.10", test: false} - - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.9, test: false} - - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.8, test: false} - - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.7, test: true} - - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.6, test: false} - - {os: macos-12, compiler: intel-classic, version: "2021.10", test: false} - - {os: macos-12, compiler: intel-classic, version: 2021.9, test: false} - - {os: macos-12, compiler: intel-classic, version: 2021.8, test: false} - - {os: macos-12, compiler: intel-classic, version: 2021.7, test: true} - - {os: macos-12, compiler: intel-classic, version: 2021.6, test: false} - - {os: windows-2022, compiler: intel-classic, version: "2021.10", test: false} - - {os: windows-2022, compiler: intel-classic, version: 2021.9, test: false} - - {os: windows-2022, compiler: intel-classic, version: 2021.8, test: false} - - {os: windows-2022, compiler: intel-classic, version: 2021.7, test: true} - - {os: windows-2022, compiler: intel-classic, version: 2021.6, test: false} + - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.7} + - {os: macos-12, compiler: intel-classic, version: 2021.7} + - {os: windows-2022, compiler: intel-classic, version: 2021.7} defaults: run: @@ -407,19 +347,16 @@ jobs: run: meson test --verbose --no-rebuild -C builddir - name: Update flopy - if: matrix.test working-directory: modflow6/autotest run: python update_flopy.py - name: Get executables - if: matrix.test working-directory: modflow6/autotest env: GITHUB_TOKEN: ${{ github.token }} run: pytest -v --durations 0 get_exes.py - name: Test programs - if: matrix.test working-directory: modflow6/autotest env: REPOS_PATH: ${{ github.workspace }} @@ -431,18 +368,17 @@ jobs: fi - name: Test scripts - if: matrix.test working-directory: modflow6/distribution env: GITHUB_TOKEN: ${{ github.token }} run: pytest -v --durations 0 - parallel_test: - name: Parallel testing + test_parallel: + name: Test mf6 parallel needs: - lint - build - - smoke_test + - smoke runs-on: ${{ matrix.os }} strategy: fail-fast: false diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml new file mode 100644 index 00000000000..b7c3867e0b7 --- /dev/null +++ b/.github/workflows/compilers.yml @@ -0,0 +1,208 @@ +name: MODFLOW 6 compiler compatibility checks +on: + workflow_dispatch: +jobs: + test_gfortran: + name: Test GNU Fortran + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # https://github.com/awvwgk/setup-fortran#runner-compatibility + include: + - {os: ubuntu-20.04, gcc: 7} + - {os: ubuntu-20.04, gcc: 8} + - {os: ubuntu-20.04, gcc: 9} + - {os: ubuntu-20.04, gcc: 10} + - {os: ubuntu-20.04, gcc: 11} + - {os: ubuntu-22.04, gcc: 12} + - {os: ubuntu-22.04, gcc: 13} + - {os: macos-12, gcc: 7} + - {os: macos-12, gcc: 8} + - {os: macos-12, gcc: 9} + - {os: macos-12, gcc: 10} + - {os: macos-12, gcc: 11} + - {os: macos-12, gcc: 12} + - {os: macos-12, gcc: 13} + - {os: windows-2022, gcc: 9} + - {os: windows-2022, gcc: 10} + - {os: windows-2022, gcc: 11} + - {os: windows-2022, gcc: 12} + defaults: + run: + shell: bash -l {0} + env: + FC: gfortran + steps: + - name: Checkout modflow6 + uses: actions/checkout@v4 + with: + path: modflow6 + + - name: Checkout modflow6-testmodels + uses: actions/checkout@v4 + with: + repository: MODFLOW-USGS/modflow6-testmodels + path: modflow6-testmodels + + - name: Checkout modflow6-examples + uses: actions/checkout@v4 + with: + repository: MODFLOW-USGS/modflow6-examples + path: modflow6-examples + + - name: Setup GNU Fortran ${{ matrix.gcc }} + uses: awvwgk/setup-fortran@main + with: + compiler: gcc + version: ${{ matrix.gcc }} + + - name: Setup Micromamba + uses: mamba-org/setup-micromamba@v1 + with: + environment-file: modflow6/environment.yml + init-shell: >- + bash + powershell + cache-environment: true + cache-downloads: true + + - name: Build modflow6 + working-directory: modflow6 + run: | + meson setup builddir -Ddebug=false --prefix=$(pwd) --libdir=bin + meson install -C builddir + + - name: Show build log + if: failure() + working-directory: modflow6 + run: cat builddir/meson-logs/meson-log.txt + + - name: Unit test programs + working-directory: modflow6 + run: meson test --verbose --no-rebuild -C builddir + + - name: Update flopy + working-directory: modflow6/autotest + run: python update_flopy.py + + - name: Get executables + working-directory: modflow6/autotest + env: + GITHUB_TOKEN: ${{ github.token }} + run: | + pytest -v --durations 0 get_exes.py + + - name: Test modflow6 + working-directory: modflow6/autotest + env: + REPOS_PATH: ${{ github.workspace }} + run: pytest -v -n auto --durations 0 + + test_intel_fortran: + name: Test Intel Fortran + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # https://github.com/awvwgk/setup-fortran#runner-compatibility + include: + ### ifx + - {os: ubuntu-22.04, compiler: intel, version: 2023.2} + - {os: ubuntu-22.04, compiler: intel, version: 2023.1} + - {os: ubuntu-22.04, compiler: intel, version: "2023.0"} + - {os: ubuntu-22.04, compiler: intel, version: 2022.2.1} + - {os: ubuntu-22.04, compiler: intel, version: 2022.2} + - {os: ubuntu-22.04, compiler: intel, version: 2022.1} + - {os: ubuntu-22.04, compiler: intel, version: "2022.0"} + - {os: ubuntu-22.04, compiler: intel, version: 2021.4} + - {os: ubuntu-22.04, compiler: intel, version: 2021.2} + - {os: ubuntu-22.04, compiler: intel, version: 2021.1} + - {os: macos-12, compiler: intel, version: 2023.2} + - {os: windows-2022, compiler: intel, version: 2023.1} + - {os: windows-2022, compiler: intel, version: "2023.0"} + - {os: windows-2022, compiler: intel, version: 2022.2} + - {os: windows-2022, compiler: intel, version: 2022.1} + ### ifort + - {os: ubuntu-22.04, compiler: intel-classic, version: "2021.10"} + - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.9} + - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.8} + - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.7} + - {os: ubuntu-22.04, compiler: intel-classic, version: 2021.6} + - {os: macos-12, compiler: intel-classic, version: "2021.10"} + - {os: macos-12, compiler: intel-classic, version: 2021.9} + - {os: macos-12, compiler: intel-classic, version: 2021.8} + - {os: macos-12, compiler: intel-classic, version: 2021.7} + - {os: macos-12, compiler: intel-classic, version: 2021.6} + - {os: windows-2022, compiler: intel-classic, version: "2021.10"} + - {os: windows-2022, compiler: intel-classic, version: 2021.9} + - {os: windows-2022, compiler: intel-classic, version: 2021.8} + - {os: windows-2022, compiler: intel-classic, version: 2021.7} + - {os: windows-2022, compiler: intel-classic, version: 2021.6} + + defaults: + run: + shell: bash -l {0} + + steps: + - name: Checkout modflow6 + uses: actions/checkout@v4 + with: + path: modflow6 + + - name: Checkout modflow6-testmodels + uses: actions/checkout@v4 + with: + repository: MODFLOW-USGS/modflow6-testmodels + path: modflow6-testmodels + + - name: Setup Micromamba + uses: mamba-org/setup-micromamba@v1 + with: + environment-file: modflow6/environment.yml + init-shell: >- + bash + powershell + cache-environment: true + cache-downloads: true + + - name: Setup Intel Fortran + uses: awvwgk/setup-fortran@main + with: + compiler: ${{ matrix.compiler }} + version: ${{ matrix.version }} + + - name: Update version files + working-directory: modflow6/distribution + run: python update_version.py + + - name: Build modflow6 + working-directory: modflow6 + run: | + meson setup builddir -Ddebug=false --prefix=$(pwd) --libdir=bin + meson install -C builddir + + - name: Show build log + if: failure() + working-directory: modflow6 + run: cat builddir/meson-logs/meson-log.txt + + - name: Unit test programs + working-directory: modflow6 + run: meson test --verbose --no-rebuild -C builddir + + - name: Update flopy + working-directory: modflow6/autotest + run: python update_flopy.py + + - name: Get executables + working-directory: modflow6/autotest + env: + GITHUB_TOKEN: ${{ github.token }} + run: pytest -v --durations 0 get_exes.py + + - name: Test modflow6 + working-directory: modflow6/autotest + env: + REPOS_PATH: ${{ github.workspace }} + run: pytest -v -n auto --durations 0