Update pre-commit configuration, enhance documentation, and refine mo… #1593
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 | |
--- | |
name: Tests | |
on: [push, pull_request] | |
jobs: | |
cpython: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14-dev'] | |
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 wheel | |
pip install -e ".[tests]" | |
- name: Test with pytest | |
run: | | |
pytest tests | |
cpython-lxml: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] | |
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 wheel | |
pip install -e ".[tests, lxml]" | |
- name: Test with pytest | |
run: | | |
pytest tests --cov=fastkml --cov=tests --cov-fail-under=95 --cov-report=xml | |
- name: "Upload coverage to Codecov" | |
if: ${{ matrix.python-version==3.11 }} | |
uses: codecov/codecov-action@v4 | |
with: | |
fail_ci_if_error: true | |
verbose: true | |
token: ${{ secrets.CODECOV_TOKEN }} | |
doctest-lxml: | |
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 wheel | |
pip install -e ".[tests, lxml, docs]" | |
- name: test the pythoncode in the documentation | |
run: | | |
python -m doctest docs/*.rst -v | |
- name: Run the pythoncode in the examples | |
run: | | |
python examples/read_kml.py | |
python examples/shp2kml.py | |
python examples/shp2kml_timed.py | |
python examples/simple_example.py | |
python examples/transform_cascading_style.py | |
static-tests: | |
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 wheel | |
pip install -e ".[typing, complexity, linting, tests]" | |
- name: Typecheck | |
run: | | |
mypy fastkml tests | |
- name: Linting | |
run: | | |
flake8 fastkml examples docs | |
black --check fastkml examples docs | |
yamllint .github/ | |
yamllint .*.y*ml | |
- name: Check complexity | |
run: | | |
radon cc --min B fastkml | |
radon mi --min B fastkml | |
lizard fastkml | |
pypy: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
pypy-version: ['pypy-3.8', 'pypy-3.9', 'pypy-3.10'] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.pypy-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.pypy-version }} | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip wheel setuptools | |
python -m pip install -e ".[tests]" | |
- name: Test with pytest | |
run: | | |
pytest tests | |
build-package: | |
name: Build & inspect our package. | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: hynek/build-and-inspect-python-package@v2 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- name: Check with pyroma | |
run: | | |
python -m pip install pyroma | |
pyroma . | |
- name: Check tag name | |
if: >- | |
github.event_name == 'push' && | |
startsWith(github.ref, 'refs/tags') | |
run: | | |
python -m pip install vercheck | |
vercheck $GITHUB_REF_NAME fastkml/about.py | |
test-publish: | |
if: >- | |
github.event_name == 'push' && | |
github.repository == 'cleder/fastkml' && | |
startsWith(github.ref, 'refs/tags') | |
needs: [cpython, static-tests, pypy, cpython-lxml, doctest-lxml, build-package] | |
name: Test install on TestPyPI | |
runs-on: ubuntu-latest | |
environment: test-release | |
permissions: | |
id-token: write | |
steps: | |
- name: Download packages built by build-package | |
uses: actions/download-artifact@v4 | |
with: | |
name: Packages | |
path: dist | |
- name: Upload package to Test PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
repository-url: https://test.pypi.org/legacy/ | |
publish: | |
if: >- | |
github.event_name == 'push' && | |
github.repository == 'cleder/fastkml' && | |
github.ref == 'refs/heads/main' | |
needs: [cpython, static-tests, pypy, cpython-lxml, doctest-lxml, build-package] | |
name: Publish to PyPI on push to main | |
runs-on: ubuntu-latest | |
environment: release | |
permissions: | |
id-token: write | |
steps: | |
- name: Download packages built by build-package | |
uses: actions/download-artifact@v4 | |
with: | |
name: Packages | |
path: dist | |
- name: Publish distribution 📦 to PyPI for push to main | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
... |