chore: pyright CI gate (public API) + Python 3.13 matrix + pyproject … #54
Workflow file for this run
This file contains hidden or 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 | |
| # Runs on every push to a branch in this repo and on every pull request | |
| # targeting master. Tags push the same code through publish.yml separately. | |
| on: | |
| push: | |
| branches: | |
| - master | |
| - develop | |
| - "release/**" | |
| - "feature/**" | |
| - "ci/**" | |
| pull_request: | |
| branches: | |
| - master | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| lint: | |
| name: Lint (ruff) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install ruff | |
| run: python -m pip install --upgrade ruff | |
| - name: ruff check | |
| run: ruff check src tests | |
| - name: ruff format check | |
| run: ruff format --check src tests | |
| typecheck: | |
| name: Typecheck (pyright strict — public API) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install package and pyright | |
| run: | | |
| python -m pip install --upgrade pip pyright | |
| python -m pip install -e . | |
| # ---public-API surface: pptx/__init__.py is the literal entrypoint | |
| # ---resolved by `from pptx import Presentation`, plus the modules | |
| # ---it pulls in (api, presentation, util, exc, types). | |
| # ---Strict-mode pyright on the broader codebase still surfaces several | |
| # ---thousand findings (reportUnknownMemberType-heavy in chart and | |
| # ---oxml.simpletypes); those are tracked as future work, not this gate. | |
| - name: pyright (public-API entry points) | |
| run: | | |
| pyright src/pptx/__init__.py src/pptx/api.py src/pptx/presentation.py \ | |
| src/pptx/util.py src/pptx/exc.py src/pptx/types.py | |
| test: | |
| name: Test (Python ${{ matrix.python-version }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["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: Display Python version | |
| run: python -c "import sys; print(sys.version)" | |
| - name: Install package and test deps | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -e . | |
| python -m pip install -r requirements-test.txt | |
| - name: Unit + integration tests (pytest) | |
| run: pytest --cov=pptx --cov-report=term-missing tests | |
| - name: Acceptance tests (behave) | |
| run: behave --stop | |
| build-check: | |
| name: Build sdist and wheel (smoke) | |
| runs-on: ubuntu-latest | |
| needs: test | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install build tooling | |
| run: python -m pip install --upgrade build twine | |
| - name: Build distributions | |
| run: python -m build | |
| - name: Verify metadata renders | |
| run: python -m twine check dist/* | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-${{ github.sha }} | |
| path: dist/ | |
| retention-days: 7 |