File: test-python.yml

package info (click to toggle)
pymongo 4.15.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 23,376 kB
  • sloc: python: 107,945; ansic: 4,601; javascript: 137; makefile: 38; sh: 10
file content (272 lines) | stat: -rw-r--r-- 7,788 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
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@v5
        with:
          persist-credentials: false
      - name: Install uv
        uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
        with:
          enable-cache: true
          python-version: "3.9"
      - 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.9", "pypy-3.10", "3.13t"]
        mongodb-version: ["8.0"]

    name: CPython ${{ matrix.python-version }}-${{ matrix.os }}
    steps:
      - uses: actions/checkout@v5
        with:
          persist-credentials: false
      - name: Install uv
        uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
        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

  doctest:
    runs-on: ubuntu-latest
    name: DocTest
    steps:
      - uses: actions/checkout@v5
        with:
          persist-credentials: false
      - name: Install uv
        uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
        with:
          enable-cache: true
          python-version: "3.9"
      - 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@v5
        with:
          persist-credentials: false
      - name: Install uv
        uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
        with:
          enable-cache: true
          python-version: "3.9"
      - 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@v5
        with:
          persist-credentials: false
      - name: Install uv
        uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
        with:
          enable-cache: true
          python-version: "3.9"
      - 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.9", "3.11"]
    steps:
      - uses: actions/checkout@v5
        with:
          persist-credentials: false
      - name: Install uv
        uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
        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

  make_sdist:
    runs-on: ubuntu-latest
    name: "Make an sdist"
    steps:
      - uses: actions/checkout@v5
        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'
        - 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 using minimum dependencies and supported Python
      steps:
        - uses: actions/checkout@v5
          with:
            persist-credentials: false
        - name: Install uv
          uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
          with:
            python-version: '3.9'
        - id: setup-mongodb
          uses: mongodb-labs/drivers-evergreen-tools@master
          with:
            version: "8.0"
        # Async and our test_dns do not support dnspython 1.X, so we don't run async or dns tests here
        - name: Run tests
          shell: bash
          run: |
            uv venv
            source .venv/bin/activate
            uv pip install -e ".[test]" --resolution=lowest-direct
            pytest -v test/test_srv_polling.py

  test_minimum_for_async:
      permissions:
        contents: read
      runs-on: ubuntu-latest
      name: Test async's minimum dependencies and Python
      steps:
        - uses: actions/checkout@v5
          with:
            persist-credentials: false
        - name: Install uv
          uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v5
          with:
            python-version: '3.9'
        - id: setup-mongodb
          uses: mongodb-labs/drivers-evergreen-tools@master
          with:
            version: "8.0"
        # The lifetime kwarg we use in srv resolution was added to the async resolver API in dnspython 2.1.0
        - name: Run tests
          shell: bash
          run: |
            uv venv
            source .venv/bin/activate
            uv pip install -e ".[test]" --resolution=lowest-direct dnspython==2.1.0 --force-reinstall
            pytest -v test/test_srv_polling.py test/test_dns.py test/asynchronous/test_srv_polling.py test/asynchronous/test_dns.py