9696 run : |
9797 just test-unit-sqlite
9898
99+ # Collect coverage data on the Python 3.12 ubuntu run for the coverage summary job
100+ - name : Run tests with coverage (SQLite Unit)
101+ if : matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' && github.event_name == 'push' && github.ref == 'refs/heads/main'
102+ run : |
103+ BASIC_MEMORY_ENV=test uv run coverage run --data-file=.coverage.sqlite-unit --source=basic_memory -m pytest -p pytest_mock -v --no-cov tests
104+
105+ - name : Upload coverage data
106+ if : matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' && github.event_name == 'push' && github.ref == 'refs/heads/main'
107+ uses : actions/upload-artifact@v4
108+ with :
109+ name : coverage-sqlite-unit
110+ path : .coverage.sqlite-unit
111+ retention-days : 1
112+
99113 test-sqlite-integration :
100114 name : Test SQLite Integration (${{ matrix.os }}, Python ${{ matrix.python-version }})
101115 timeout-minutes : 45
@@ -143,6 +157,19 @@ jobs:
143157 run : |
144158 just test-int-sqlite
145159
160+ - name : Run tests with coverage (SQLite Integration)
161+ if : matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' && github.event_name == 'push' && github.ref == 'refs/heads/main'
162+ run : |
163+ BASIC_MEMORY_ENV=test uv run coverage run --data-file=.coverage.sqlite-int --source=basic_memory -m pytest -p pytest_mock -v --no-cov -m "not semantic" test-int
164+
165+ - name : Upload coverage data
166+ if : matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' && github.event_name == 'push' && github.ref == 'refs/heads/main'
167+ uses : actions/upload-artifact@v4
168+ with :
169+ name : coverage-sqlite-int
170+ path : .coverage.sqlite-int
171+ retention-days : 1
172+
146173 test-postgres-unit :
147174 name : Test Postgres Unit (Python ${{ matrix.python-version }})
148175 timeout-minutes : 30
@@ -184,6 +211,20 @@ jobs:
184211 run : |
185212 just test-unit-postgres
186213
214+ - name : Run tests with coverage (Postgres Unit)
215+ if : matrix.python-version == '3.12' && github.event_name == 'push' && github.ref == 'refs/heads/main'
216+ run : |
217+ timeout --signal=KILL 600 bash -c 'BASIC_MEMORY_ENV=test BASIC_MEMORY_TEST_POSTGRES=1 uv run coverage run --data-file=.coverage.postgres-unit --source=basic_memory -m pytest -p pytest_mock -v --no-cov -m postgres tests' || test $? -eq 137
218+
219+ - name : Upload coverage data
220+ if : matrix.python-version == '3.12' && github.event_name == 'push' && github.ref == 'refs/heads/main'
221+ uses : actions/upload-artifact@v4
222+ with :
223+ name : coverage-postgres-unit
224+ path : .coverage.postgres-unit
225+ retention-days : 1
226+ if-no-files-found : warn
227+
187228 test-postgres-integration :
188229 name : Test Postgres Integration (Python ${{ matrix.python-version }})
189230 timeout-minutes : 45
@@ -225,6 +266,20 @@ jobs:
225266 run : |
226267 just test-int-postgres
227268
269+ - name : Run tests with coverage (Postgres Integration)
270+ if : matrix.python-version == '3.12' && github.event_name == 'push' && github.ref == 'refs/heads/main'
271+ run : |
272+ timeout --signal=KILL 600 bash -c 'BASIC_MEMORY_ENV=test BASIC_MEMORY_TEST_POSTGRES=1 uv run coverage run --data-file=.coverage.postgres-int --source=basic_memory -m pytest -p pytest_mock -v --no-cov -m postgres test-int' || test $? -eq 137
273+
274+ - name : Upload coverage data
275+ if : matrix.python-version == '3.12' && github.event_name == 'push' && github.ref == 'refs/heads/main'
276+ uses : actions/upload-artifact@v4
277+ with :
278+ name : coverage-postgres-int
279+ path : .coverage.postgres-int
280+ retention-days : 1
281+ if-no-files-found : warn
282+
228283 test-semantic :
229284 name : Test Semantic (Python 3.12)
230285 timeout-minutes : 45
@@ -260,11 +315,23 @@ jobs:
260315 run : |
261316 just test-semantic
262317
318+ - name : Run tests with coverage (Semantic)
319+ if : github.event_name == 'push' && github.ref == 'refs/heads/main'
320+ run : |
321+ BASIC_MEMORY_ENV=test uv run coverage run --data-file=.coverage.semantic --source=basic_memory -m pytest -p pytest_mock -v --no-cov -m semantic test-int/semantic/
322+
323+ - name : Upload coverage data
324+ if : github.event_name == 'push' && github.ref == 'refs/heads/main'
325+ uses : actions/upload-artifact@v4
326+ with :
327+ name : coverage-semantic
328+ path : .coverage.semantic
329+ retention-days : 1
330+
263331 coverage :
264- name : Coverage Summary (combined, Python 3.12)
265- timeout-minutes : 60
332+ name : Coverage Summary
333+ timeout-minutes : 10
266334 needs :
267- - static-checks
268335 - test-sqlite-unit
269336 - test-sqlite-integration
270337 - test-postgres-unit
@@ -288,8 +355,6 @@ jobs:
288355 run : |
289356 pip install uv
290357
291- - uses : extractions/setup-just@v3
292-
293358 - name : Create virtual env
294359 run : |
295360 uv venv
@@ -298,9 +363,18 @@ jobs:
298363 run : |
299364 uv pip install -e ".[dev]"
300365
301- - name : Run combined coverage (SQLite + Postgres)
366+ - name : Download all coverage artifacts
367+ uses : actions/download-artifact@v4
368+ with :
369+ pattern : coverage-*
370+ merge-multiple : true
371+
372+ - name : Combine coverage and report
302373 run : |
303- just coverage
374+ ls -la .coverage.* || echo "No coverage files found"
375+ uv run coverage combine .coverage.*
376+ uv run coverage report -m
377+ uv run coverage html
304378
305379 - name : Add coverage report to job summary
306380 if : always()
0 commit comments