PYTHON-4981 - Create workaround for asyncio.Task.cancelling support in older Python versions #6015
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
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 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.9" | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
- name: Install Python dependencies | |
run: | | |
python -m pip install -U pip hatch | |
- name: Run linters | |
run: | | |
hatch run lint:run-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: | | |
hatch run typing:check | |
- 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: | |
matrix: | |
os: [ubuntu-20.04] | |
python-version: ["3.9", "pypy-3.9", "3.13", "3.13t"] | |
name: CPython ${{ matrix.python-version }}-${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- if: ${{ matrix.python-version == '3.13t' }} | |
name: Setup free-threaded Python | |
uses: deadsnakes/action@v3.2.0 | |
with: | |
python-version: 3.13 | |
nogil: true | |
- if: ${{ matrix.python-version != '3.13t' }} | |
name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
allow-prereleases: true | |
- name: Install dependencies | |
run: | | |
pip install -U pip | |
if [[ "${{ matrix.python-version }}" == "3.13" ]]; then | |
pip install --pre cffi setuptools | |
pip install --no-build-isolation hatch | |
elif [[ "${{ matrix.python-version }}" == "3.13t" ]]; then | |
# Hatch can't be installed on 3.13t, use pytest directly. | |
pip install . | |
pip install -r requirements/test.txt | |
else | |
pip install hatch | |
fi | |
- name: Start MongoDB | |
uses: supercharge/mongodb-github-action@1.11.0 | |
with: | |
mongodb-version: 6.0 | |
- name: Run tests | |
run: | | |
if [[ "${{ matrix.python-version }}" == "3.13t" ]]; then | |
pytest -v --durations=5 --maxfail=10 | |
else | |
hatch run test:test | |
fi | |
doctest: | |
runs-on: ubuntu-latest | |
name: DocTest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.9" | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
- name: Install dependencies | |
run: | | |
pip install -U hatch pip | |
- name: Start MongoDB | |
uses: supercharge/mongodb-github-action@1.11.0 | |
with: | |
mongodb-version: '8.0.0-rc4' | |
- name: Run tests | |
run: | | |
hatch run doctest:test | |
docs: | |
name: Docs Checks | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- uses: actions/setup-python@v5 | |
with: | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
# Build docs on lowest supported Python for furo | |
python-version: '3.9' | |
- name: Install dependencies | |
run: | | |
pip install -U pip hatch | |
- name: Build docs | |
run: | | |
hatch run doc:build | |
linkcheck: | |
name: Link Check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
persist-credentials: false | |
- uses: actions/setup-python@v5 | |
with: | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
# Build docs on lowest supported Python for furo | |
python-version: '3.9' | |
- name: Install dependencies | |
run: | | |
pip install -U pip hatch | |
- name: Build docs | |
run: | | |
hatch run doc: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 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "${{matrix.python}}" | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
- name: Install dependencies | |
run: | | |
pip install -U pip hatch | |
- name: Run typecheck | |
run: | | |
hatch run typing:check | |
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@1.11.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 |