Skip to content

Merge pull request #2460 from KS-HTK/issues/2430 #3849

Merge pull request #2460 from KS-HTK/issues/2430

Merge pull request #2460 from KS-HTK/issues/2430 #3849

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: pandapower
on:
push:
branches: '*'
paths-ignore:
- 'CHANGELOG.rst'
pull_request:
branches: '*'
paths-ignore:
- 'CHANGELOG.rst'
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12']
# Reminder: when removing the support of an old python version here, then don't forget to
# remove it also in pyproject.toml 'requires-python'
group: [ 1, 2 ]
steps:
- uses: actions/checkout@v4
#- uses: julia-actions/setup-julia@v1.5
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install pytest pytest-split
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
python -m pip install .["all"]
if ${{ matrix.python-version == '3.9' }}; then python -m pip install pypower; fi
if ${{ matrix.python-version != '3.9' }}; then python -m pip install numba; fi
if ${{ matrix.python-version == '3.10' }}; then python -m pip install lightsim2grid; fi
- name: List of installed packages
run: |
python -m pip list
- name: Test with pytest
if: ${{ matrix.python-version != '3.9' }}
run: |
python -m pytest --splits 2 --group ${{ matrix.group }}
- name: Test with pytest, Codecov and Coverage
if: ${{ matrix.python-version == '3.9' }}
run: |
python -m pip install pytest-cov
python -m pytest -n=auto --cov=./ --cov-report=xml --splits 2 --group ${{ matrix.group }}
cp ./coverage.xml ./coverage-${{ matrix.group }}.xml
- name: Upload coverage as artifact
if: ${{ matrix.python-version == '3.9' }}
uses: actions/upload-artifact@v4
with:
name: coverage-${{ matrix.group }}
path: ./coverage-${{ matrix.group }}.xml
julia:
runs-on: ubuntu-latest
timeout-minutes: 60
continue-on-error: true
strategy:
matrix:
python-version: ['3.9']
# Reminder: when removing the support of an old python version here, then don't forget to
# remove it also in pyproject.toml 'requires-python'
group: [ 1, 2 ]
steps:
- uses: actions/checkout@v4
#- uses: julia-actions/setup-julia@v1.5
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install pytest pytest-split
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
python -m pip install .["all"]
python -m pip install pypower
- name: Install Julia
run: |
./.install_julia.sh 1.10.4
python -m pip install julia
python ./.install_pycall.py
- name: List of installed packages
run: |
python -m pip list
- name: Test with pytest, Codecov and Coverage
run: |
python -m pip install pytest-cov
python -m pytest -n=auto --cov=./ --cov-report=xml --splits 2 --group ${{ matrix.group }}
cp ./coverage.xml ./coverage-${{ matrix.group }}.xml
upload-coverage:
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: .
pattern: coverage-*
merge-multiple: true
- name: duplicate reports
run: |
ls -al
cp coverage-1.xml codacy-coverage-1.xml
cp coverage-2.xml codacy-coverage-2.xml
- name: Upload coverage to Codacy
continue-on-error: true
uses: codacy/codacy-coverage-reporter-action@v1.3.0
with:
coverage-reports: codacy-coverage-1.xml,codacy-coverage-2.xml
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
- name: Upload coverage to Codecov
continue-on-error: true
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage-1.xml,./coverage-2.xml
verbose: true
warnings:
# make pytest raise warnings as errors to see if there are warnings
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
matrix:
python-version: ['3.12']
group: [ 1, 2 ]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install pytest pytest-split
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
python -m pip install .["all"]
- name: List of installed packages
run: |
python -m pip list
- name: Test with pytest
run: |
python -m pytest -W error --splits 2 --group ${{ matrix.group }}
relying: # packages that rely on pandapower
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install pytest setuptools
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
python -m pip install .
python -m pip install matplotlib
if ${{ matrix.python-version != '3.9' }}; then python -m pip install numba; fi
- name: Install pandapipes and simbench
run: |
python -m pip install git+https://github.com/e2nIEE/pandapipes@develop#egg=pandapipes
python -m pip install git+https://github.com/e2nIEE/simbench@develop#egg=simbench
- name: List of installed packages
run: |
python -m pip list
- name: Test pandapipes
run: |
python -c 'from pandapipes import pp_dir; import pytest; import sys; ec = pytest.main([pp_dir]); sys.exit(ec)'
- name: Test simbench
run: |
python -c 'from simbench import sb_dir; import pytest; import sys; ec = pytest.main([sb_dir]); sys.exit(ec)'
linting:
# run flake8 and check for errors
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
python-version: ['3.10']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install flake8
python -m pip install .
python -m pip install matplotlib
- name: List of installed packages
run: |
python -m pip list
- name: Lint with flake8 (sytax errors and undefined names)
continue-on-error: true
run: |
# stop the build if there are Python syntax errors or undefined names (omitted by exit-zero)
flake8 . --count --exit-zero --select=E9,F63,F7,F82 --show-source --statistics
- name: Lint with flake8 (all errors and warnings)
run: |
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
postgresql:
# for the one test to cover postgresql
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.12']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install .[test,fileio]
- name: List of installed packages
run: |
python -m pip list
- name: Create PostgreSQL database
run: |
sudo systemctl start postgresql.service
pg_isready
sudo -u postgres psql --command="CREATE USER test_user PASSWORD 'secret'" --command="\du"
sudo -u postgres createdb --owner=test_user sandbox
sudo -u postgres psql --command="\c sandbox" --command="CREATE SCHEMA test_schema AUTHORIZATION test_user"
PGPASSWORD=secret psql --username=test_user --host=localhost --list sandbox
- name: Test pandapower File I/O
run: |
python -c "import os; import json; from pandapower import pp_dir; conn_data={'host': 'localhost', 'user': 'test_user', 'database': 'sandbox', 'password': 'secret', 'schema': 'test_schema'}; fp = open(os.path.join(pp_dir, 'test', 'test_files', 'postgresql_connect_data.json'), 'w'); json.dump(conn_data, fp); fp.close()"
python -c 'from pandapower import pp_dir; import pytest; import sys; import os; ec = pytest.main([os.path.join(pp_dir,"test","api","test_sql_io.py")]); sys.exit(ec)'
tutorial_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install pytest nbmake pytest-xdist igraph numba seaborn
./.install_julia.sh 1.10.4
python -m pip install julia
python ./.install_pycall.py
python -m pip install jupyter
python -m pip install .["all"]
- name: List all installed packages
run: |
python -m pip list
- name: Test with pytest
# Careful when copying this command. The PYTHONPATH setup is Linux specific syntax.
run: |
python -m pytest --nbmake -n=auto --nbmake-timeout=900 "./tutorials"
tutorial_warnings_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install .[all]
python -m pip install pytest nbmake pytest-xdist igraph numba seaborn
./.install_julia.sh 1.10.4
python -m pip install julia
python ./.install_pycall.py
- name: List all installed packages
run: |
python -m pip list
- name: Test with pytest
run: |
python -m pytest -W error --nbmake -n=auto --nbmake-timeout=900 "./tutorials"
docs_check:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ '3.9' ]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Check docs for Python ${{ matrix.python-version }}
uses: e2nIEE/sphinx-action@master
with:
pre-build-command: "apt update && apt upgrade -y && apt install -y build-essential gfortran cmake pkg-config libopenblas-dev;
python -m pip install --upgrade pip;
python -m pip install .[docs];"
build-command: "sphinx-build -b html . _build -W"
docs-folder: "doc/"