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} permissions: contents: read jobs: static: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: "3.10" - name: Install just run: uv tool install rust-just - 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: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: # Tests currently only pass on ubuntu on GitHub Actions. os: [ubuntu-latest] python-version: ["3.10", "pypy-3.11", "3.13t"] mongodb-version: ["8.0"] name: CPython ${{ matrix.python-version }}-${{ matrix.os }} steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: ${{ matrix.python-version }} - id: setup-mongodb uses: mongodb-labs/drivers-evergreen-tools@master with: version: "${{ matrix.mongodb-version }}" - name: Run tests run: uv run --extra test pytest -v coverage: # This enables a coverage report for a given PR, which will be augmented by # the combined codecov report uploaded in Evergreen. runs-on: ubuntu-latest name: Coverage steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: "3.10" - id: setup-mongodb uses: mongodb-labs/drivers-evergreen-tools@master with: version: "8.0" - name: Install just run: uv tool install rust-just - name: Setup tests run: COVERAGE=1 just setup-tests - name: Run tests run: just run-tests - name: Generate xml report run: uv tool run --with "coverage[toml]" coverage xml - name: Upload test results to Codecov uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5 with: token: ${{ secrets.CODECOV_TOKEN }} doctest: runs-on: ubuntu-latest name: DocTest steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: "3.10" - name: Install just run: uv tool install rust-just - id: setup-mongodb uses: mongodb-labs/drivers-evergreen-tools@master with: version: "8.0" - 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@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: "3.10" - name: Install just run: uv tool install rust-just - name: Install dependencies run: just install - name: Build docs run: just docs linkcheck: name: Link Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: "3.10" - name: Install just run: uv tool install rust-just - 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.10", "3.11"] steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: "${{matrix.python}}" - name: Install just run: uv tool install rust-just - name: Install dependencies run: | just install - name: Run typecheck run: | just typing integration_tests: runs-on: ubuntu-latest name: Integration Tests steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: enable-cache: true python-version: "3.10" - name: Install just run: uv tool install rust-just - name: Install dependencies run: | just install - id: setup-mongodb uses: mongodb-labs/drivers-evergreen-tools@master - name: Run tests run: | just integration-tests - id: setup-mongodb-ssl uses: mongodb-labs/drivers-evergreen-tools@master with: ssl: true - name: Run tests run: | just integration-tests make_sdist: runs-on: ubuntu-latest name: "Make an sdist" steps: - uses: actions/checkout@v6 with: persist-credentials: false - uses: actions/setup-python@v6 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@v7 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@v8 with: path: sdist/ - 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@v6 with: cache: 'pip' cache-dependency-path: 'sdist/test/pyproject.toml' # Test sdist on lowest supported Python python-version: "3.9" - id: setup-mongodb uses: mongodb-labs/drivers-evergreen-tools@master - 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 test_minimum: permissions: contents: read runs-on: ubuntu-latest name: Test minimum dependencies and Python steps: - uses: actions/checkout@v6 with: persist-credentials: false - name: Install uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7 with: python-version: "3.9" - id: setup-mongodb uses: mongodb-labs/drivers-evergreen-tools@master with: version: "8.0" - name: Run tests shell: bash run: | uv venv source .venv/bin/activate uv pip install -e ".[test]" --resolution=lowest-direct --force-reinstall pytest -v test/test_srv_polling.py test/test_dns.py test/asynchronous/test_srv_polling.py test/asynchronous/test_dns.py