Skip to content

Add Sphinx docs and enable ReadTheDocs build #34

Add Sphinx docs and enable ReadTheDocs build

Add Sphinx docs and enable ReadTheDocs build #34

Workflow file for this run

name: Checks
on:
push:
branches: [main]
tags: ['*']
pull_request:
branches: [main]
env:
PYTEST_ADDOPTS: --color=yes
PIP_PROGRESS_BAR: "off"
defaults:
run:
# -l: login shell, needed when using Conda:
shell: bash -l {0}
jobs:
code-formatting:
name: Check code is formatted (Black)
# OS and/or Python version don't make a difference, so we choose ubuntu and 3.12 as defaults
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install Black
# unlike the other jobs, we don't need to install WaterTAP and/or all the dev dependencies,
# but we still want to specify the Black version to use in requirements-dev.txt for local development
# so we extract the relevant line and pass it to a simple `pip install`
run: |
black_requirement="$(grep '^black==' requirements-dev.txt)"
pip install "$black_requirement"
- name: Run Black to verify that the committed code is formatted
run: |
black --check .
pytest:
name: pytest (${{ matrix.os }}/${{ matrix.python-version }}/${{ matrix.install-mode }})
runs-on: ${{ matrix.os-version }}
needs: [code-formatting]
strategy:
fail-fast: false
matrix:
install-mode:
- dev
- standard
python-version:
- "3.8"
- "3.9"
- "3.10"
- "3.11"
os:
- linux
- win64
include:
- os: linux
os-version: ubuntu-22.04
- os: win64
os-version: windows-2022
- install-mode: dev
python-version: "3.11" # choice of Python version is arbitrary among those in matrix
coverage: "true"
- install-mode: dev
python-version: "3.10"
mpi: "true"
steps:
- if: matrix.install-mode == 'dev'
uses: actions/checkout@v4
- uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
python-version: ${{ matrix.python-version }}
activate-environment: ${{ matrix.install-mode == 'dev' && 'parameter-sweep-dev' || 'parameter-sweep' }}
- if: matrix.install-mode == 'dev'
name: Install (dev)
run: |
pip install -r requirements-dev.txt
- if: matrix.install-mode == 'standard'
name: Install (standard)
run: |
pip install "git+${{ format('{0}/{1}@{2}', github.server_url, github.repository, github.ref) }}"
- name: Set up IDAES solvers
run: |
idaes get-extensions --verbose
- if: matrix.coverage
name: Enable coverage for pytest
run: echo PYTEST_ADDOPTS="$PYTEST_ADDOPTS --cov --cov-report=xml" >> $GITHUB_ENV
- name: Run pytest
run: |
pip install pytest # ensure pytest is installed (should do nothing if already present from requirements-dev.txt)
pytest --pyargs parameter_sweep
- name: Upload coverage report as job artifact
if: matrix.coverage
uses: actions/upload-artifact@v4
with:
name: coverage-report-${{ matrix.os }}
path: coverage.xml
if-no-files-found: error
- if: matrix.mpi
name: Collect coverage for MPI-using code
run: |
conda install --quiet --yes mpi4py
mpiexec -n 2 \
coverage run --parallel-mode \
-m mpi4py -m pytest \
src/parameter_sweep/tests/test*parameter_sweep.py \
src/parameter_sweep/loop_tool/tests/test*loop_tool.py \
--no-cov
# merge into single report
coverage combine
# convert to XML
coverage xml
- name: Upload coverage report as job artifact
if: matrix.mpi
uses: actions/upload-artifact@v4
with:
name: coverage-report-mpi-${{ matrix.os }}
path: coverage.xml
if-no-files-found: error
upload-coverage:
name: Upload coverage report (Codecov)
needs: [pytest]
runs-on: ubuntu-latest
steps:
# the checkout step is needed to have access to codecov.yml
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
pattern: coverage-report-*
- name: Upload coverage report to Codecov
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
verbose: true
# NOTE: secrets are not available for pull_request workflows
# However, as of 2024-02-10, Codecov is still allowing tokenless upload from PRs
# but does require token for other workflows e.g. merge to `main`
# see https://github.com/codecov/codecov-action/issues/1274#issuecomment-1934437359
token: ${{ secrets.CODECOV_TOKEN }}
build-docs:
name: Build docs (Sphinx)
needs: [code-formatting]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- run: pip install -r requirements-dev.txt
- run: make -C docs html