[pre-commit.ci] pre-commit autoupdate #205
Workflow file for this run
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
--- | |
name: CI | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
workflow_dispatch: | |
env: | |
FORCE_COLOR: "1" # Make tools pretty. | |
PIP_DISABLE_PIP_VERSION_CHECK: "1" | |
PIP_NO_PYTHON_VERSION_WARNING: "1" | |
SETUPTOOLS_SCM_PRETEND_VERSION: "1.0" # avoid warnings about shallow checkout | |
permissions: {} | |
jobs: | |
cog-check: | |
name: Ensure cogified files are up-to-date | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
cache: pip | |
python-version: "3.x" | |
- run: python -Im pip install --upgrade wheel nox | |
- run: python -Im nox --session cog -- --check | |
build-package: | |
name: Build & verify package | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: hynek/build-and-inspect-python-package@v2 | |
tests: | |
name: Tests on ${{ matrix.python-version }} | |
needs: build-package | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: | |
# [[[cog | |
# for line in open("pyproject.toml"): | |
# if "Programming Language :: Python :: " in line: | |
# cog.outl(f'- "{line.rsplit(" ")[-1][:-3]}"') | |
# ]]] | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
# [[[end]]] | |
steps: | |
- name: Download pre-built packages | |
uses: actions/download-artifact@v4 | |
with: | |
name: Packages | |
path: dist | |
- run: tar xf dist/*.tar.gz --strip-components=1 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
allow-prereleases: true | |
cache: pip | |
- run: python -Im pip install --upgrade wheel nox | |
- name: Run tests | |
run: | | |
python -Im nox \ | |
--python ${{ matrix.python-version }} \ | |
--tags tests \ | |
-- \ | |
--installpkg dist/*.whl | |
- name: Upload coverage data | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage-data-${{ matrix.python-version }} | |
path: .coverage.* | |
if-no-files-found: ignore | |
coverage: | |
name: Combine & check coverage | |
runs-on: ubuntu-latest | |
needs: tests | |
if: always() | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
cache: pip | |
python-version-file: .python-version-default | |
- uses: actions/download-artifact@v4 | |
with: | |
pattern: coverage-data-* | |
merge-multiple: true | |
- name: Combine coverage & fail if it's <100%. | |
run: | | |
python -Im pip install --upgrade coverage[toml] | |
python -Im coverage combine | |
python -Im coverage html --skip-covered --skip-empty | |
# Report and write to summary. | |
python -Im coverage report --format=markdown >> $GITHUB_STEP_SUMMARY | |
# Report again and fail if under 100%. | |
python -Im coverage report --fail-under=100 | |
- name: Upload HTML report if check failed. | |
uses: actions/upload-artifact@v4 | |
with: | |
name: html-report | |
path: htmlcov | |
if: ${{ failure() }} | |
mypy: | |
name: Mypy on ${{ matrix.python-version }} | |
needs: build-package | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: | |
# [[[cog | |
# for line in open("pyproject.toml"): | |
# if "Programming Language :: Python :: " in line: | |
# cog.outl(f'- "{line.rsplit(" ")[-1][:-3]}"') | |
# ]]] | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
# [[[end]]] | |
steps: | |
- name: Download pre-built packages | |
uses: actions/download-artifact@v4 | |
with: | |
name: Packages | |
path: dist | |
- run: tar xf dist/*.tar.gz --strip-components=1 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
allow-prereleases: true | |
cache: pip | |
- run: python -Im pip install --upgrade wheel nox | |
- run: python -Im nox --session mypy | |
docs: | |
name: Build docs & run doctests | |
needs: build-package | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download pre-built packages | |
uses: actions/download-artifact@v4 | |
with: | |
name: Packages | |
path: dist | |
- run: tar xf dist/*.tar.gz --strip-components=1 | |
- uses: actions/setup-python@v5 | |
with: | |
cache: pip | |
# [[[cog | |
# import yaml | |
# with open(".readthedocs.yaml") as f: | |
# rtd = yaml.safe_load(f) | |
# cog.outl(f'python-version: "{rtd["build"]["tools"]["python"]}"') | |
# ]]] | |
python-version: "3.12" | |
# [[[end]]] | |
- run: python -Im pip install --upgrade wheel nox | |
- run: python -Im nox --session docs | |
install-dev: | |
name: Verify dev env on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version-file: .python-version-default | |
cache: pip | |
- run: python -Im pip install -e .[dev] | |
- run: python -c 'import environ; print(environ.__version__)' | |
# Ensure everything required is passing for branch protection. | |
required-checks-pass: | |
name: Ensure everything required is passing for branch protection | |
if: always() | |
runs-on: ubuntu-latest | |
needs: | |
- coverage | |
- docs | |
- install-dev | |
- mypy | |
steps: | |
- name: Decide whether the needed jobs succeeded or failed | |
uses: re-actors/alls-green@release/v1 | |
with: | |
jobs: ${{ toJSON(needs) }} |