Merge pull request #2460 from KS-HTK/issues/2430 #3849
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
# 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/" |