Skip to content

Merge branch 'develop' of https://github.com/MHKiT-Software/MHKiT-Pyt… #79

Merge branch 'develop' of https://github.com/MHKiT-Software/MHKiT-Pyt…

Merge branch 'develop' of https://github.com/MHKiT-Software/MHKiT-Pyt… #79

Workflow file for this run

name: Py 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.event_name }}" == "pull_request" && "${{ 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.11
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: 'latest'
auto-update-conda: true
python-version: ${{ env.PYTHON_VER }}
activate-environment: TESTconda
use-only-tar-bz2: true
- name: Setup Conda environment
shell: bash -l {0}
run: |
conda install numpy cython pip hdf5 libnetcdf cftime netcdf4 --strict-channel-priority
pip install -e . --force-reinstall
- name: Install dependencies
shell: bash -l {0}
run: |
python -m pip install --upgrade pip wheel
pip install coverage pytest coveralls .
- name: Prepare non-hindcast API data
shell: bash -l {0}
run: |
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.11
if: (needs.check-changes.outputs.should-run-hindcast == 'true')
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: 'latest'
auto-update-conda: true
activate-environment: TEST
python-version: ${{ env.PYTHON_VER }}
use-only-tar-bz2: true
- name: Setup Conda environment
shell: bash -l {0}
run: |
conda install numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 coverage --strict-channel-priority
pip install -e . --force-reinstall
- name: Install dependencies
shell: bash -l {0}
run: |
python -m pip install --upgrade pip wheel
pip install coverage pytest coveralls .
- name: Prepare Wave Hindcast data
shell: bash -l {0}
run: |
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, prepare-wave-hindcast-cache]
runs-on: ubuntu-latest
env:
PYTHON_VER: 3.11
if: (needs.check-changes.outputs.should-run-hindcast == 'true')
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: 'latest'
auto-update-conda: true
activate-environment: TEST
python-version: ${{ env.PYTHON_VER }}
use-only-tar-bz2: true
- name: Setup Conda environment
shell: bash -l {0}
run: |
conda install numpy cython pip pytest hdf5 libnetcdf cftime netcdf4 coverage --strict-channel-priority
pip install -e . --no-deps --force-reinstall
- name: Install dependencies
shell: bash -l {0}
run: |
python -m pip install --upgrade pip wheel
pip install coverage pytest coveralls .
- name: Prepare Wind Hindcast data
shell: bash -l {0}
run: |
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.10', '3.11']
env:
PYTHON_VER: ${{ matrix.python-version }}
steps:
- uses: actions/checkout@v4
- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: 'latest'
auto-update-conda: true
environment-file: environment.yml
activate-environment: TEST
python-version: ${{ matrix.python-version }}
use-only-tar-bz2: false
- name: Create and setup Conda environment
shell: bash -l {0}
run: |
conda install -c conda-forge pytest coverage=7.5.0 coveralls --strict-channel-priority
pip install -e . --force-reinstall
- name: Download data from artifact
uses: actions/download-artifact@v4
with:
name: data
path: ~/.cache/mhkit
- name: Run pytest & generate coverage report
shell: bash -l {0}
run: |
coverage run --rcfile=.github/workflows/.coveragerc --source=./mhkit/ -m pytest -c .github/workflows/pytest.ini
coverage lcov
- name: Upload coverage data to coveralls.io
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: conda-${{ runner.os }}-py${{ matrix.python-version }}
parallel: true
path-to-lcov: ./coverage.lcov
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.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
shell: bash -l {0}
run: |
python -m pip install --upgrade pip wheel
pip install coverage pytest coveralls .
- name: Run pytest & generate coverage report
shell: bash -l {0}
run: |
coverage run --rcfile=.github/workflows/.coveragerc --source=./mhkit/ -m pytest -c .github/workflows/pytest.ini
coverage lcov
- name: Upload coverage data to coveralls.io
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: pip-${{ runner.os }}-py${{ matrix.python-version }}
parallel: true
path-to-lcov: ./coverage.lcov
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.10', '3.11']
steps:
- uses: actions/checkout@v4
- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: 'latest'
auto-update-conda: true
environment-file: environment.yml
activate-environment: TEST
python-version: ${{ matrix.python-version }}
use-only-tar-bz2: false
- name: Setup Conda environment
shell: bash -l {0}
run: |
conda install -c conda-forge pytest coverage=7.5.0 coveralls --strict-channel-priority
pip install -e . --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: |
coverage run --rcfile=.github/workflows/.coveragehindcastrc -m pytest -c .github/workflows/pytest-hindcast.ini
coverage lcov
- name: Upload coverage data to coveralls.io
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: hindcast-${{ runner.os }}-py${{ matrix.python-version }}
parallel: true
path-to-lcov: ./coverage.lcov
notebook-matrix:
runs-on: ubuntu-latest
needs:
[
check-changes,
prepare-nonhindcast-cache,
prepare-wave-hindcast-cache,
prepare-wind-hindcast-cache,
]
if: |
always() &&
(
(
needs.prepare-nonhindcast-cache.result == 'success' &&
needs.prepare-wave-hindcast-cache.result == 'skipped' &&
needs.prepare-wind-hindcast-cache.result == 'skipped' &&
needs.check-changes.outputs.should-run-hindcast == 'false'
) ||
(
needs.prepare-nonhindcast-cache.result == 'success' &&
needs.prepare-wave-hindcast-cache.result == 'success' &&
needs.prepare-wind-hindcast-cache.result == 'success' &&
needs.check-changes.outputs.should-run-hindcast == 'true'
)
)
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.11'
- name: Generate matrix
id: set-matrix
run: |
matrix_json=$(python .github/workflows/generate_notebook_matrix.py)
echo "$matrix_json" >> $GITHUB_OUTPUT
test-notebooks:
needs:
[
notebook-matrix,
check-changes,
prepare-nonhindcast-cache,
prepare-wave-hindcast-cache,
prepare-wind-hindcast-cache,
]
strategy:
matrix: ${{ fromJson(needs.notebook-matrix.outputs.matrix) }}
if: |
always()
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: 'latest'
auto-update-conda: true
python-version: '3.11'
activate-environment: TESTconda
use-only-tar-bz2: true
- name: Install dependencies
shell: bash -l {0}
run: |
conda install numpy cython pip hdf5 libnetcdf cftime netcdf4 --strict-channel-priority
pip install -e . --force-reinstall
python -m pip install --upgrade pip wheel
pip install nbval jupyter
pip install utm folium
- name: Ensure Conda environment is activated
shell: bash -l {0}
run: |
echo "source ~/miniconda3/etc/profile.d/conda.sh" >> ~/.bashrc
echo "conda activate TESTconda" >> ~/.bashrc
source ~/.bashrc
- name: Download non-hindcast data
uses: actions/download-artifact@v4
with:
name: data
path: ~/.cache/mhkit
- name: Download Wave Hindcast data (if available)
if: (needs.check-changes.outputs.should-run-hindcast == 'true')
uses: actions/download-artifact@v4
with:
name: wave-hindcast-data
path: ~/.cache/mhkit/wave-hindcast
- name: Download Wind Hindcast data (if available)
if: (needs.check-changes.outputs.should-run-hindcast == 'true')
uses: actions/download-artifact@v4
with:
name: wind-hindcast-data
path: ~/.cache/mhkit/wind-hindcast
- name: Consolidate hindcast data
if: (needs.check-changes.outputs.should-run-hindcast == 'true')
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: Copy .hscfg file to examples directory
shell: bash -l {0}
run: |
cp .hscfg examples/
- name: Run notebook
shell: bash -l {0}
run: |
if [[ "${{ matrix.notebook }}" == "examples/metocean_example.ipynb" || "${{ matrix.notebook }}" == "examples/WPTO_hindcast_example.ipynb" ]]; then
if [[ "${{ needs.check-changes.outputs.should-run-hindcast }}" == 'true' ]]; then
jupyter nbconvert --to notebook --execute --inplace --ExecutePreprocessor.timeout=${{ matrix.timeout }} "${{ matrix.notebook }}"
else
echo "Skipping ${{ matrix.notebook }}"
fi
else
jupyter nbconvert --to notebook --execute --inplace --ExecutePreprocessor.timeout=${{ matrix.timeout }} "${{ matrix.notebook }}"
fi
coveralls:
name: Indicate completion to coveralls.io
needs:
[
prepare-wave-hindcast-cache,
prepare-wind-hindcast-cache,
conda-build,
pip-build,
hindcast-calls,
]
if: |
always() &&
(
(
needs.conda-build.result == 'success' &&
needs.pip-build.result == 'success' &&
needs.prepare-wave-hindcast-cache.result == 'skipped' &&
needs.prepare-wind-hindcast-cache.result == 'skipped' &&
needs.hindcast-calls.result == 'skipped'
) ||
(
needs.conda-build.result == 'success' &&
needs.pip-build.result == 'success' &&
needs.prepare-wave-hindcast-cache.result == 'success' &&
needs.prepare-wind-hindcast-cache.result == 'success' &&
needs.hindcast-calls.result == 'success'
)
)
runs-on: ubuntu-latest
container: python:3-slim
steps:
- name: Coveralls Finished
uses: coverallsapp/github-action@master
with:
parallel-finished: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}