Fix hanging Hindcast tests #869
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Py 3.8, 3.9, 3.10, 3.11 | Windows Mac Linux | |
on: | |
push: | |
branches: | |
- master | |
- develop | |
pull_request: | |
branches: | |
- master | |
- develop | |
jobs: | |
set-os: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix_os: ${{ steps.set-matrix.outputs.matrix_os }} | |
steps: | |
- id: set-matrix | |
run: | | |
if [[ "${{ github.base_ref }}" == "develop" ]]; then | |
echo "matrix_os=[\"ubuntu-latest\"]" >> $GITHUB_OUTPUT | |
else | |
echo "matrix_os=[\"windows-latest\", \"ubuntu-latest\", \"macos-latest\"]" >> $GITHUB_OUTPUT | |
fi | |
check-changes: | |
runs-on: ubuntu-latest | |
outputs: | |
wave_io_hindcast_changed: ${{ steps.changes.outputs.wave_io_hindcast }} | |
should-run-hindcast: ${{ steps.hindcast-logic.outputs.should-run-hindcast }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Check for changes in wave/io/hindcast | |
id: changes | |
uses: dorny/paths-filter@v3 | |
with: | |
filters: | | |
wave_io_hindcast: | |
- 'mhkit/wave/io/hindcast/**' | |
- 'mhkit/tests/wave/io/hindcast/**' | |
- id: hindcast-logic | |
run: | | |
if [[ "${{ github.event.pull_request.base.ref }}" == "master" || "${{ steps.changes.outputs.wave_io_hindcast }}" == "true" ]]; then | |
echo "should-run-hindcast=true" >> "$GITHUB_OUTPUT" | |
else | |
echo "should-run-hindcast=false" >> "$GITHUB_OUTPUT" | |
fi | |
prepare-nonhindcast-cache: | |
runs-on: ubuntu-latest | |
env: | |
PYTHON_VER: 3.9 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Conda | |
uses: s-weigand/setup-conda@v1 | |
with: | |
activate-conda: false | |
conda-channels: conda-forge | |
- name: Python setup | |
shell: bash -l {0} | |
run: | | |
conda create --name TEST python=${{ env.PYTHON_VER }} numpy cython pip hdf5 libnetcdf cftime netcdf4 --strict-channel-priority | |
source activate TEST | |
export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" | |
pip install -e . --no-deps --force-reinstall | |
- name: Install dependencies | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
python -m pip install --upgrade pip wheel | |
pip install coverage pytest coveralls . | |
- name: Prepare non-hindcast API data | |
run: | | |
source activate TEST | |
pytest mhkit/tests/river/test_io_usgs.py | |
pytest mhkit/tests/tidal/test_io.py | |
pytest mhkit/tests/wave/io/test_cdip.py | |
- name: Upload data as artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: data | |
path: ~/.cache/mhkit | |
prepare-wave-hindcast-cache: | |
needs: [check-changes] | |
runs-on: ubuntu-latest | |
env: | |
PYTHON_VER: 3.9 | |
if: (needs.check-changes.outputs.should-run-hindcast == 'true') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Conda | |
uses: s-weigand/setup-conda@v1 | |
with: | |
activate-conda: false | |
conda-channels: conda-forge | |
- name: Python setup | |
shell: bash -l {0} | |
run: | | |
conda create --name TEST python=${{ env.PYTHON_VER }} numpy cython pip hdf5 libnetcdf cftime netcdf4 --strict-channel-priority | |
source activate TEST | |
export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" | |
pip install -e . --no-deps --force-reinstall | |
- name: Install dependencies | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
python -m pip install --upgrade pip wheel | |
pip install coverage pytest coveralls . | |
- name: Prepare Wave Hindcast data | |
run: | | |
source activate TEST | |
pytest mhkit/tests/wave/io/hindcast/test_hindcast.py | |
- name: Upload Wave Hindcast data as artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wave-hindcast-data | |
path: ~/.cache/mhkit | |
prepare-wind-hindcast-cache: | |
needs: [check-changes] | |
runs-on: ubuntu-latest | |
env: | |
PYTHON_VER: 3.9 | |
if: (needs.check-changes.outputs.should-run-hindcast == 'true') | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Conda | |
uses: s-weigand/setup-conda@v1 | |
with: | |
activate-conda: false | |
conda-channels: conda-forge | |
- name: Python setup | |
shell: bash -l {0} | |
run: | | |
conda create --name TEST python=${{ env.PYTHON_VER }} numpy cython pip hdf5 libnetcdf cftime netcdf4 --strict-channel-priority | |
source activate TEST | |
export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" | |
pip install -e . --no-deps --force-reinstall | |
- name: Install dependencies | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
python -m pip install --upgrade pip wheel | |
pip install coverage pytest coveralls . | |
- name: Prepare Wind Hindcast data | |
run: | | |
source activate TEST | |
pytest mhkit/tests/wave/io/hindcast/test_wind_toolkit.py | |
- name: Upload Wind Hindcast data as artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wind-hindcast-data | |
path: ~/.cache/mhkit | |
conda-build: | |
name: conda-${{ matrix.os }}/${{ matrix.python-version }} | |
needs: [set-os, prepare-nonhindcast-cache] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ${{fromJson(needs.set-os.outputs.matrix_os)}} | |
python-version: ['3.8', '3.9', '3.10', '3.11'] | |
env: | |
PYTHON_VER: ${{ matrix.python-version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Conda | |
uses: s-weigand/setup-conda@v1 | |
with: | |
activate-conda: false | |
conda-channels: conda-forge | |
- name: Python ${{ matrix.python-version }} | |
shell: bash -l {0} | |
run: | | |
conda create --name TEST python=${PYTHON_VER} numpy cython pip hdf5 libnetcdf cftime netcdf4 --strict-channel-priority | |
source activate TEST | |
export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" # so setup.py finds nc-config | |
pip install -e . --no-deps --force-reinstall | |
- name: Install dependencies | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
python -m pip install --upgrade pip wheel | |
pip install coverage pytest coveralls . | |
- name: Download data from artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: data | |
path: ~/.cache/mhkit | |
- name: Run pytest | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
coverage run --rcfile=.github/workflows/.coveragerc --source=./mhkit/ -m pytest -c .github/workflows/pytest.ini | |
- name: Upload coverage data to coveralls.io | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
coveralls --service=github | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
COVERALLS_FLAG_NAME: ${{ matrix.python-version }} | |
COVERALLS_PARALLEL: true | |
pip-build: | |
name: pip-${{ matrix.os }}/${{ matrix.python-version }} | |
needs: [set-os, prepare-nonhindcast-cache] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ${{fromJson(needs.set-os.outputs.matrix_os)}} | |
python-version: ['3.8', '3.9', '3.10', '3.11'] | |
steps: | |
- uses: conda-incubator/setup-miniconda@v3 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Set up Git repository | |
uses: actions/checkout@v4 | |
- name: Download data from artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: data | |
path: ~/.cache/mhkit | |
- name: Update and install packages | |
run: | | |
python -m pip install --upgrade pip wheel | |
pip install coverage pytest coveralls . | |
- name: Run pytest | |
run: | | |
coverage run --rcfile=.github/workflows/.coveragerc --source=./mhkit/ -m pytest -c .github/workflows/pytest.ini | |
- name: Upload coverage data to coveralls.io | |
run: coveralls --service=github | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
COVERALLS_FLAG_NAME: ${{ matrix.python-version }} | |
COVERALLS_PARALLEL: true | |
hindcast-calls: | |
name: hindcast-${{ matrix.os }}/${{ matrix.python-version }} | |
needs: | |
[ | |
check-changes, | |
prepare-wave-hindcast-cache, | |
prepare-wind-hindcast-cache, | |
set-os, | |
] | |
if: (needs.check-changes.outputs.should-run-hindcast == 'true') | |
runs-on: ${{ matrix.os }} | |
strategy: | |
max-parallel: 1 | |
fail-fast: false | |
matrix: | |
os: ${{fromJson(needs.set-os.outputs.matrix_os)}} | |
python-version: ['3.8', '3.9', '3.10', '3.11'] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Conda | |
uses: s-weigand/setup-conda@v1 | |
with: | |
activate-conda: false | |
conda-channels: conda-forge | |
- name: Python ${{ matrix.python-version }} | |
shell: bash -l {0} | |
run: | | |
conda create --name TEST python=${{ matrix.python-version }} numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 coverage --strict-channel-priority | |
source activate TEST | |
export PATH="${CONDA_PREFIX}/bin:${CONDA_PREFIX}/Library/bin:$PATH" # so setup.py finds nc-config | |
pip install -e . --no-deps --force-reinstall | |
- name: Download Wave Hindcast data from artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: wave-hindcast-data | |
path: ~/.cache/mhkit/wave-hindcast | |
- name: Download Wind Hindcast data from artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: wind-hindcast-data | |
path: ~/.cache/mhkit/wind-hindcast | |
- name: Consolidate hindcast data | |
run: | | |
mkdir -p ~/.cache/mhkit/hindcast | |
mv ~/.cache/mhkit/wave-hindcast/hindcast/* ~/.cache/mhkit/hindcast/ | |
mv ~/.cache/mhkit/wind-hindcast/hindcast/* ~/.cache/mhkit/hindcast/ | |
shell: bash | |
- name: Install MHKiT and run pytest | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
python -m pip install --upgrade pip wheel | |
pip install coveralls . | |
coverage run --rcfile=.github/workflows/.coveragehindcastrc -m pytest -c .github/workflows/pytest-hindcast.ini | |
- name: Upload coverage data to coveralls.io | |
shell: bash -l {0} | |
run: | | |
source activate TEST | |
coveralls --service=github | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
COVERALLS_FLAG_NAME: ${{ matrix.python-version }} | |
COVERALLS_PARALLEL: true | |
coveralls: | |
name: Indicate completion to coveralls.io | |
needs: [conda-build, pip-build, hindcast-calls] | |
if: | | |
always() && | |
needs.conda-build.result == 'success' && | |
needs.pip-build.result == 'success' && | |
(needs.hindcast-calls.result == 'success' || needs.hindcast-calls.result == 'skipped') | |
runs-on: ubuntu-latest | |
container: python:3-slim | |
steps: | |
- name: Finished | |
run: | | |
pip3 install --upgrade coveralls | |
coveralls --finish | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |