Skip to content

Update PULL_REQUEST_TEMPLATE.md (#480) #785

Update PULL_REQUEST_TEMPLATE.md (#480)

Update PULL_REQUEST_TEMPLATE.md (#480) #785

Workflow file for this run

# This workflow will install Python dependencies, run tests and lint with all currently supported python versions on all major plattforms
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: GitHub CI
on:
push:
branches: [ main, dev, release ]
tags:
- '*'
pull_request:
branches: [ main, dev, release ]
schedule:
- cron: '0 0 1 * *'
jobs:
build_wheels:
name: Build wheels
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-13, macos-latest]
fail-fast: false
steps:
- name: Set env variables to handle macOS-13
if: ${{ matrix.os == 'macOS-13'}}
run: |
echo "MACOSX_DEPLOYMENT_TARGET=13.0" >> $GITHUB_ENV
echo "PLAT=macosx-13.0-universal2" >> $GITHUB_ENV
- name: Checkout repository
uses: actions/checkout@v4
- name: Install libomp on macos
if: ${{ matrix.os == 'macos-latest' || matrix.os == 'macOS-13'}}
run: |
brew reinstall --build-from-source --formula wntr/epanet/libepanet/darwin-formula/libomp.rb
- name: Build wheels
uses: pypa/cibuildwheel@79b0dd328794e1180a7268444d46cdf12e1abd01 # v2.21.0
env:
CIBW_ENVIRONMENT: BUILD_WNTR_EXTENSIONS='true'
CIBW_BUILD: cp39-* cp310-* cp311-* cp312-*
CIBW_SKIP: "*-win32 *-manylinux_i686 pp* *-musllinux*"
CIBW_REPAIR_WHEEL_COMMAND: '' # Skip repair step
- name: Fix macos13 wheel names # For some reason, they come out as macos14 instead of macos13
if: ${{ matrix.os == 'macOS-13'}}
run: |
for file in ./wheelhouse/*.whl; do
new_name=$(echo "$file" | sed 's/macosx_14_0/macosx_13_0/')
mv "$file" "$new_name"
done
- name: Upload wheels
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
path: ./wheelhouse/*.whl
test_wheels:
name: Test wheels
needs: build_wheels
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12']
os: [windows-latest, macOS-13, macos-latest, ubuntu-latest]
fail-fast: false
steps:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Download wheel
uses: actions/download-artifact@v4
with:
# name: wntr_${{ matrix.python-version }}_${{ matrix.os }}.whl
pattern: "cibw-wheels-*"
merge-multiple: true
- name: Install wntr
run: |
python -m pip install --upgrade pip
pip install wheel "numpy>=1.2.1,<2.0" scipy networkx pandas matplotlib setuptools
pip install --no-index --pre --find-links=. wntr
- name: Import wntr
run: |
python -c "import wntr"
- name: Checkout requirements.txt
uses: actions/checkout@v4
with:
sparse-checkout: |
requirements.txt
wntr/tests/
examples/
wntr/epanet/libepanet/darwin-formula/libomp.rb
sparse-checkout-cone-mode: false
fetch-depth: 1
- if: ${{ matrix.os == 'macos-latest' || matrix.os == 'macOS-13'}}
run: |
brew reinstall --build-from-source --formula wntr/epanet/libepanet/darwin-formula/libomp.rb
- name: Test wntr
run: |
pip install -r requirements.txt
pytest wntr/tests/ --ignore=wntr/tests/test_demos.py --ignore=wntr/tests/test_examples.py
run_coverage:
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12']
os: [windows-latest, macOS-13, ubuntu-latest, macos-latest]
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- if: ${{ matrix.os == 'macos-latest' || matrix.os == 'macOS-13'}}
run: |
brew reinstall --build-from-source --formula wntr/epanet/libepanet/darwin-formula/libomp.rb
- name: Install dependencies
run: |
python --version
python -m pip install --upgrade pip
pip install -r requirements.txt
python -m pip install -e .
- name: Run Tests
if: ${{ matrix.os != 'macos-latest' }}
run: |
coverage erase
coverage run --context=${{ matrix.os }}.py${{ matrix.python-version }} --source=wntr --omit="*/tests/*","*/sim/network_isolation/network_isolation.py","*/sim/aml/evaluator.py" -m pytest --doctest-modules --doctest-glob="*.rst" wntr
coverage run --context=${{ matrix.os }}.py${{ matrix.python-version }} --source=wntr --omit="*/tests/*","*/sim/network_isolation/network_isolation.py","*/sim/aml/evaluator.py" --append -m pytest --doctest-glob="*.rst" documentation
env:
COVERAGE_FILE: .coverage.${{ matrix.python-version }}.${{ matrix.os }}
- name: Run Tests (ARM-processor)
if: ${{ matrix.os == 'macos-latest'}}
# doctests are not flexible enough to skip EPANET=v2.0 errors on ARM processor, so do not run doctests on ARM system
run: |
coverage erase
coverage run --context=${{ matrix.os }}.py${{ matrix.python-version }} --source=wntr --omit="*/tests/*","*/sim/network_isolation/network_isolation.py","*/sim/aml/evaluator.py" -m pytest --doctest-modules --doctest-glob="*.rst" wntr
env:
COVERAGE_FILE: .coverage.${{ matrix.python-version }}.${{ matrix.os }}
- name: Save coverage
uses: actions/upload-artifact@v4
with:
name: .coverage.${{ matrix.python-version }}.${{ matrix.os }}
path: .coverage.${{ matrix.python-version }}.${{ matrix.os }}
include-hidden-files: true
combine_reports:
needs: [ run_coverage ]
runs-on: ubuntu-latest
steps:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: 3.11
- uses: actions/checkout@v4
- name: Install coverage
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
python -m pip install -e .
pip install coveralls
- name: Download coverage artifacts from test matrix
uses: actions/download-artifact@v4
with:
pattern: .coverage.*.ubuntu-latest # coverage from other OS cause problems
- name: Setup coverage and combine reports
run: coverage combine .coverage.*.ubuntu-latest
- name: Create coverage report
run: |
echo "[paths]" > .coveragerc
echo "source = " >> .coveragerc
echo " wntr/" >> .coveragerc
echo " wntr\\" >> .coveragerc
echo " D:\\a\\WNTR\\WNTR\\wntr" >> .coveragerc
echo " /home/runner/work/WNTR/WNTR/wntr" >> .coveragerc
echo " /Users/runner/work/WNTR/WNTR/wntr" >> .coveragerc
echo " ${{ github.workspace }}/wntr" >> .coveragerc
coverage report
coverage json --pretty-print
coverage html --show-contexts
- name: Save coverage JSON
uses: actions/upload-artifact@v4
with:
name: coverage-json
path: coverage.json
- name: Save coverage html
uses: actions/upload-artifact@v4
with:
name: coverage-html
path: htmlcov
- name: Push to coveralls
run: coveralls --service=github --rcfile=.coveragerc
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build_sdist:
name: Build SDist artifact 📦
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Build SDist
run: pipx run build --sdist
- uses: actions/upload-artifact@v4
with:
name: sdist
path: dist/*.tar.gz
publish-to-pypi:
name: Publish Python 🐍 distribution 📦 to TestPyPI
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
needs: [build_wheels, build_sdist]
runs-on: ubuntu-latest
environment:
name: testpypi
url: https://test.pypi.org/p/kbonney-wntr
permissions:
id-token: write
steps:
- name: Download wheel artifacts from build
uses: actions/download-artifact@v4
with:
pattern: wntr_*
path: dist
merge-multiple: true
- name: Download SDist artifact
uses: actions/download-artifact@v4
with:
name: sdist
path: dist
- name: Publish distribution 📦 to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/