name: Python Tests on: push: branches: ["master", "v**"] pull_request: workflow_dispatch: concurrency: group: tests-${{ github.ref }} cancel-in-progress: true defaults: run: shell: bash -eux {0} jobs: static: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Install just uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install uv uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v5 with: enable-cache: true python-version: "3.9" - name: Install Python dependencies run: | just install - name: Run linters run: | just lint-manual - name: Run compilation run: | export PYMONGO_C_EXT_MUST_BUILD=1 pip install -v -e . python tools/fail_if_no_c.py - name: Run typecheck run: | just typing - run: | sudo apt-get install -y cppcheck - run: | cppcheck --force bson cppcheck pymongo build: # supercharge/mongodb-github-action requires containers so we don't test other platforms runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest] python-version: ["3.9", "pypy-3.10", "3.13", "3.13t"] name: CPython ${{ matrix.python-version }}-${{ matrix.os }} steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Install just uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install uv uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v5 with: enable-cache: true python-version: ${{ matrix.python-version }} - name: Install dependencies run: just install - name: Start MongoDB uses: supercharge/mongodb-github-action@90004df786821b6308fb02299e5835d0dae05d0d # 1.12.0 with: mongodb-version: 6.0 - name: Run tests run: just test doctest: runs-on: ubuntu-latest name: DocTest steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Install just uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install uv uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v5 with: enable-cache: true python-version: "3.9" - name: Start MongoDB uses: supercharge/mongodb-github-action@90004df786821b6308fb02299e5835d0dae05d0d # 1.12.0 with: mongodb-version: '8.0.0-rc4' - name: Install dependencies run: just install - name: Run tests run: | just setup-tests doctest just run-tests docs: name: Docs Checks runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v5 with: enable-cache: true python-version: "3.9" - name: Install just uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install dependencies run: just install - name: Build docs run: just docs linkcheck: name: Link Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v5 with: enable-cache: true python-version: "3.9" - name: Install just uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install dependencies run: just install - name: Build docs run: just docs-linkcheck typing: name: Typing Tests runs-on: ubuntu-latest strategy: matrix: python: ["3.9", "3.11"] steps: - uses: actions/checkout@v4 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@6b9c6063abd6010835644d4c2e1bef4cf5cd0fca # v5 with: enable-cache: true python-version: "${{matrix.python}}" - name: Install just uses: extractions/setup-just@e33e0265a09d6d736e2ee1e0eb685ef1de4669ff # v3 - name: Install dependencies run: | just install - name: Run typecheck run: | just typing make_sdist: runs-on: ubuntu-latest name: "Make an sdist" steps: - uses: actions/checkout@v4 with: persist-credentials: false - uses: actions/setup-python@v5 with: cache: 'pip' cache-dependency-path: 'pyproject.toml' # Build sdist on lowest supported Python python-version: '3.9' - name: Build SDist shell: bash run: | pip install build python -m build --sdist - uses: actions/upload-artifact@v4 with: name: "sdist" path: dist/*.tar.gz test_sdist: runs-on: ubuntu-latest needs: [make_sdist] name: Install from SDist and Test timeout-minutes: 20 steps: - name: Download sdist uses: actions/download-artifact@v4 - name: Unpack SDist shell: bash run: | cd sdist ls mkdir test tar --strip-components=1 -zxf *.tar.gz -C ./test ls test - uses: actions/setup-python@v5 with: cache: 'pip' cache-dependency-path: 'sdist/test/pyproject.toml' # Test sdist on lowest supported Python python-version: '3.9' - name: Start MongoDB uses: supercharge/mongodb-github-action@90004df786821b6308fb02299e5835d0dae05d0d # 1.12.0 - name: Run connect test from sdist shell: bash run: | cd sdist/test ls which python pip install -e ".[test]" PYMONGO_MUST_CONNECT=1 pytest -v -k client_context