DEV: Bump virtualenv from 20.27.0 to 20.36.1 #7559
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
| # This workflow will install Python dependencies, run tests and lint with a variety of Python versions | |
| # For more information see: https://docs.github.com/en/actions/tutorials/build-and-test-code/python | |
| name: CI | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - '**/*.md' | |
| - '**/*.rst' | |
| pull_request: | |
| branches: | |
| - main | |
| paths-ignore: | |
| - '**/*.md' | |
| - '**/*.rst' | |
| workflow_dispatch: | |
| jobs: | |
| test_windows: | |
| name: pytest on windows | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Cache Downloaded Files | |
| id: cache-downloaded-files-windows | |
| uses: actions/cache@v5 | |
| with: | |
| path: '**/tests/pdf_cache/*' | |
| key: cache-downloaded-files-${{ github.run_id }} | |
| restore-keys: | |
| cache-downloaded-files | |
| enableCrossOsArchive: true | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| allow-prereleases: true | |
| - name: Upgrade pip | |
| run: | | |
| python -m pip install --upgrade pip | |
| - name: Install requirements (Python 3.11+) | |
| run: | | |
| pip install -r requirements/ci-3.11.txt | |
| - name: Install cryptography | |
| run: | | |
| pip install cryptography | |
| - name: Install pypdf | |
| run: | | |
| pip install . | |
| - name: Prepare | |
| run: | | |
| python -c "from tests import download_test_pdfs; download_test_pdfs()" | |
| - name: Test with pytest | |
| run: | | |
| python -m pytest tests --cov=pypdf --cov-append -n auto -vv -p no:benchmark | |
| test_macos: | |
| name: pytest on macOS | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Cache Downloaded Files | |
| id: cache-downloaded-files-mac | |
| uses: actions/cache@v5 | |
| with: | |
| path: '**/tests/pdf_cache/*' | |
| key: cache-downloaded-files-${{ github.run_id }} | |
| restore-keys: | |
| cache-downloaded-files | |
| - name: Setup Python (3.11+) | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| allow-prereleases: true | |
| - name: Upgrade pip | |
| run: | | |
| python -m pip install --upgrade pip | |
| - name: Install requirements (Python 3.11+) | |
| run: | | |
| pip install -r requirements/ci-3.11.txt | |
| - name: Install cryptography | |
| run: | | |
| pip install cryptography | |
| - name: Install OS dependencies | |
| run: | |
| brew install ghostscript jbig2dec poppler | |
| - name: Install pypdf | |
| run: | | |
| pip install . | |
| - name: Prepare | |
| run: | | |
| python -c "from tests import download_test_pdfs; download_test_pdfs()" | |
| - name: Test with pytest | |
| run: | | |
| python -m pytest tests --cov=pypdf --cov-append -n auto -vv -p no:benchmark | |
| tests: | |
| name: "pytest on ${{ matrix.python-version }} (crypto-lib: ${{ matrix.use-crypto-lib }})" | |
| runs-on: ubuntu-22.04 | |
| strategy: | |
| matrix: | |
| python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14', 'pypy3.11'] | |
| use-crypto-lib: ['cryptography'] | |
| include: | |
| - python-version: '3.9' | |
| use-crypto-lib: 'pycryptodome' | |
| - python-version: '3.9' | |
| use-crypto-lib: 'none' | |
| steps: | |
| - name: Update APT packages | |
| run: | |
| sudo apt-get update | |
| - name: Install APT dependencies | |
| run: | |
| sudo apt-get install ghostscript jbig2dec poppler-utils | |
| - name: Checkout Code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Cache Downloaded Files | |
| id: cache-downloaded-files | |
| uses: actions/cache@v5 | |
| with: | |
| path: '**/tests/pdf_cache/*' | |
| key: cache-downloaded-files-${{ github.run_id }} | |
| restore-keys: | |
| cache-downloaded-files | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| if: matrix.python-version == '3.9' || matrix.python-version == '3.10' | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| cache-dependency-path: '**/requirements/ci.txt' | |
| - name: Setup Python (3.11+) | |
| uses: actions/setup-python@v6 | |
| if: matrix.python-version != '3.9' && matrix.python-version != '3.10' | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| allow-prereleases: true | |
| cache: 'pip' | |
| cache-dependency-path: '**/requirements/ci-3.11.txt' | |
| - name: Upgrade pip | |
| run: | | |
| python -m pip install --upgrade pip | |
| - name: Install requirements (Python 3) | |
| run: | | |
| pip install -r requirements/ci.txt | |
| if: matrix.python-version == '3.9' || matrix.python-version == '3.10' | |
| - name: Install requirements (Python 3.11+) | |
| run: | | |
| pip install -r requirements/ci-3.11.txt | |
| if: matrix.python-version != '3.9' && matrix.python-version != '3.10' | |
| - name: Remove pycryptodome and cryptography | |
| run: | | |
| pip uninstall pycryptodome cryptography -y | |
| - name: Install cryptography | |
| run: | | |
| pip install cryptography | |
| if: matrix.use-crypto-lib == 'cryptography' | |
| - name: Install pycryptodome | |
| run: | | |
| pip install pycryptodome | |
| if: matrix.use-crypto-lib == 'pycryptodome' | |
| - name: Install pypdf | |
| run: | | |
| pip install . | |
| - name: Download test files | |
| run: | | |
| python -c "from tests import download_test_pdfs; download_test_pdfs()" | |
| - name: Test with pytest | |
| run: | | |
| python -m pytest tests --cov=pypdf --cov-append -n auto -vv -p no:benchmark | |
| if: ${{ !startsWith(matrix.python-version, 'pypy') }} | |
| - name: Test with pytest (PyPy, no coverage) | |
| # Coverage on PyPy is skipped because running coverage with PyPy is slow and CPython test already provides | |
| # complete coverage data for the same code | |
| run: | | |
| python -m pytest tests -n auto -vv -p no:benchmark | |
| if: ${{ startsWith(matrix.python-version, 'pypy') }} | |
| - name: Rename coverage data file | |
| run: mv .coverage ".coverage.$RANDOM" | |
| if: ${{ !startsWith(matrix.python-version, 'pypy') }} | |
| - name: Upload coverage data | |
| uses: actions/upload-artifact@v6 | |
| if: ${{ !startsWith(matrix.python-version, 'pypy') }} | |
| with: | |
| name: coverage-data.${{ matrix.python-version }}-${{ matrix.use-crypto-lib }} | |
| path: .coverage.* | |
| if-no-files-found: ignore | |
| include-hidden-files: true | |
| codestyle: | |
| name: Check code style issues | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| cache: 'pip' | |
| cache-dependency-path: '**/requirements/ci-3.11.txt' | |
| - name: Upgrade pip | |
| run: | | |
| python -m pip install --upgrade pip | |
| - name: Install requirements | |
| run: | | |
| pip install -r requirements/ci-3.11.txt | |
| - name: Install pypdf | |
| run: | | |
| pip install . | |
| - name: Test with ruff | |
| run: | | |
| echo `ruff --version` | |
| ruff check . | |
| - name: Test with mypy | |
| run : | | |
| mypy pypdf | |
| - name: Install docs requirements | |
| run: | | |
| pip install -r requirements/docs.txt | |
| - name: Test docs build | |
| working-directory: ./docs | |
| run: | | |
| sphinx-build --nitpicky --fail-on-warning --keep-going --show-traceback -d _build/doctrees --builder html . _build/html | |
| - name: Test docs examples | |
| working-directory: ./docs | |
| run: | | |
| sphinx-build -d _build/doctrees --builder doctest . _build/doctest | |
| - name: Check with pre-commit | |
| run: | | |
| pip install -r requirements/dev.txt | |
| pre-commit run --all-files --show-diff-on-failure | |
| package: | |
| name: Build & verify package | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - run: python -m pip install flit check-wheel-contents | |
| - run: flit build | |
| - run: ls -l dist | |
| - name: Test CHANGELOG.md present in sdist | |
| run: tar -tzf dist/*.tar.gz | grep -q 'CHANGELOG.md' | |
| - name: Test of bdist | |
| run: check-wheel-contents dist/*.whl | |
| - name: Test installing package | |
| run: python -m pip install . | |
| - name: Test running installed package | |
| working-directory: /tmp | |
| run: python -c "import pypdf;print(pypdf.__version__)" | |
| coverage: | |
| name: Combine & check coverage. | |
| runs-on: ubuntu-latest | |
| needs: tests | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - run: python -m pip install --upgrade coverage[toml] | |
| - uses: actions/download-artifact@v7 | |
| with: | |
| pattern: coverage-data* | |
| merge-multiple: true | |
| - name: Check Number of Downloaded Files | |
| run: | | |
| downloaded_files_count=$(find \.coverage* -type f | wc -l) | |
| if [ $downloaded_files_count -eq 8 ]; then | |
| echo "The expected number of files (8) were downloaded." | |
| else | |
| echo "ERROR: Expected 8 files, but found $downloaded_files_count files." | |
| exit 1 | |
| fi | |
| - name: Combine coverage & create xml report | |
| run: | | |
| python -m coverage combine | |
| python -m coverage xml | |
| - name: Upload Coverage to Codecov | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: ./coverage.xml |