@@ -205,7 +205,7 @@ jobs:
205205 if : always() && steps.launch_services.outcome == 'success'
206206 run : |
207207 cp .env services/api/.env
208- cd services/api
208+ pushd services/api
209209
210210 if [ "${{ matrix.test-group }}" = "group1" ]; then
211211 DIRS=(tests --ignore=tests/gen_table/test_row_ops.py --ignore=tests/gen_table/test_row_ops_v2.py --ignore=tests/routers --ignore=tests/utils)
@@ -224,6 +224,12 @@ jobs:
224224 --junitxml=pytest_regular.xml \
225225 -m "not (${{ matrix.jamai-mode == 'cloud' && 'oss' || 'cloud' }} or stripe)" \
226226 "${DIRS[@]}"
227+
228+ # Shut down owl to allow coverage data to be flushed
229+ popd
230+ docker compose -p jm -f docker/compose.ci.yml down
231+ # Copy Pytest coverage data
232+ sudo find docker_data -type f -name '.coverage.*' -exec cp -v -t services/api/coverage/. {} +
227233 env :
228234 OWL_DB_PATH : postgresql+psycopg://owlpguser:owlpgpassword@localhost:5432/jamaibase_owl
229235 OWL_CLICKHOUSE_HOST : localhost
@@ -243,10 +249,6 @@ jobs:
243249 id : test_stripe
244250 if : matrix.jamai-mode == 'cloud' && matrix.test-group == 'group1' && steps.launch_services.outcome == 'success'
245251 run : |
246- # Shut down owl to allow coverage data to be flushed
247- docker compose -p jm -f docker/compose.ci.yml down
248- # Copy Pytest coverage data
249- sudo cp -r docker_data docker_data_tmp
250252 sudo rm -rf docker_data
251253
252254 # Relaunch
@@ -274,9 +276,11 @@ jobs:
274276 -m stripe \
275277 tests
276278
277- # Move existing coverage data
279+ # Shut down owl to allow coverage data to be flushed
278280 popd
279- mv docker_data_tmp/owl/db/* docker_data/owl/db/. 2>/dev/null || true
281+ docker compose -p jm -f docker/compose.ci.yml down
282+ # Move existing coverage data
283+ sudo find docker_data -type f -name '.coverage.*' -exec cp -v -t services/api/coverage/. {} +
280284 env :
281285 STRIPE_API_KEY : ${{ secrets.OWL_STRIPE_API_KEY }}
282286 OWL_STRIPE_API_KEY : ${{ secrets.OWL_STRIPE_API_KEY }}
@@ -313,15 +317,6 @@ jobs:
313317 [Link to logs (${{ matrix.jamai-mode }}, ${{ matrix.test-group }})](${{ steps.upload_logs.outputs.artifact-url }})
314318 comment-tag : logs_comment_${{ matrix.jamai-mode }}-${{ matrix.test-group }}
315319
316- - name : Upload pytest coverage file
317- uses : actions/upload-artifact@v4
318- if : always() && steps.python_sdk_test.outcome == 'success'
319- with :
320- name : pytest-coverage-data-${{ matrix.jamai-mode }}-${{ matrix.test-group }}
321- path : services/api/coverage
322- include-hidden-files : true
323- if-no-files-found : error
324-
325320 - name : Merge JUnit XML and Coverage data
326321 id : merge_test_data
327322 if : always() && steps.launch_services.outcome == 'success'
@@ -331,7 +326,7 @@ jobs:
331326
332327 # Combine coverage data
333328 coverage combine --keep --data-file=services/api/coverage/.coverage --rcfile=services/api/pyproject.toml \
334- docker_data/owl/db services/api/coverage
329+ services/api/coverage
335330
336331 # Merge JUnit XML files
337332 mkdir -p services/api/junit_xml
@@ -341,8 +336,8 @@ jobs:
341336 uses : actions/upload-artifact@v4
342337 if : always() && steps.merge_test_data.outcome == 'success'
343338 with :
344- name : docker_data -coverage-data -${{ matrix.jamai-mode }}-${{ matrix.test-group }}
345- path : docker_data/owl/db
339+ name : owl -coverage-${{ matrix.jamai-mode }}-${{ matrix.test-group }}
340+ path : services/api/coverage
346341 include-hidden-files : true
347342 if-no-files-found : error
348343
@@ -353,12 +348,6 @@ jobs:
353348 name : junit-xml-data-${{ matrix.jamai-mode }}-${{ matrix.test-group }}
354349 path : services/api/junit_xml
355350
356- - name : Log coverage data files
357- run : |
358- find docker_data/owl/db -type f | head -50
359- find services/api/coverage -type f | head -50
360- find services/api/junit_xml -type f | head -50
361-
362351 - name : Generate coverage reports
363352 id : generate_coverage_report
364353 if : always() && steps.merge_test_data.outcome == 'success'
@@ -413,18 +402,11 @@ jobs:
413402 pushd services/api
414403 uv pip install --system -e .[test]
415404
416- - name : Download pytest coverage data artifacts
417- uses : actions/download-artifact@v4
418- if : needs.sdk_tests.result == 'success'
419- with :
420- pattern : pytest-coverage-data-*
421- path : ./
422-
423405 - name : Download coverage data artifacts
424406 uses : actions/download-artifact@v4
425407 if : needs.sdk_tests.result == 'success'
426408 with :
427- pattern : docker_data -coverage-data -*
409+ pattern : owl -coverage-*
428410 path : ./
429411
430412 - name : Download junit xml artifacts
@@ -437,29 +419,36 @@ jobs:
437419 - name : Log coverage data files
438420 if : needs.sdk_tests.result == 'success'
439421 run : |
440- find docker_data-coverage-data-* -type f | head -50
441- find pytest-coverage-data-* -type f | head -50
422+ find owl-coverage-* -type f | head -50
442423 find junit-xml-data -type f | head -50
443424
444425 - name : Merge JUnit XML and Coverage data (${{ matrix.jamai-mode }})
445426 id : merge_coverage
446427 if : needs.sdk_tests.result == 'success'
447428 run : |
448429 coverage combine --keep --data-file=services/api/coverage/.coverage --rcfile=services/api/pyproject.toml \
449- ./docker_data-coverage-data-${{ matrix.jamai-mode }}-group[1-4] \
450- ./pytest-coverage-data-${{ matrix.jamai-mode }}-group[1-4]
430+ ./owl-coverage-${{ matrix.jamai-mode }}-group[1-4]
451431
452432 # Merge JUnit XML files
453- junitparser merge --glob "junit-xml-data/junit-xml-data-${{ matrix.jamai-mode }}-*/pytest_ *.xml" \
433+ junitparser merge --glob "junit-xml-data/junit-xml-data-${{ matrix.jamai-mode }}*/pytest- *.xml" \
454434 junit-xml-data/pytest-${{ matrix.jamai-mode }}.xml
455435
456436 - name : Generate coverage report
457437 if : always() && steps.merge_coverage.outcome == 'success'
458438 run : |
459439 cd services/api
440+ coverage html --data-file=coverage/.coverage -d coverage/html-${{ matrix.jamai-mode }}
460441 coverage xml --data-file=coverage/.coverage -o coverage/coverage-${{ matrix.jamai-mode }}.xml
461442 coverage report --data-file=coverage/.coverage
462443
444+ - name : Upload ${{ matrix.jamai-mode }} coverage HTML report
445+ id : upload_coverage_html
446+ uses : actions/upload-artifact@v4
447+ if : always() && steps.merge_coverage.outcome == 'success'
448+ with :
449+ name : pytest-coverage-${{ matrix.jamai-mode }}
450+ path : services/api/coverage/html-${{ matrix.jamai-mode }}
451+
463452 - name : Pytest coverage comment
464453 uses : MishaKav/pytest-coverage-comment@main
465454 if : always() && github.event_name == 'pull_request' && steps.merge_coverage.outcome == 'success'
@@ -475,11 +464,10 @@ jobs:
475464 if : needs.sdk_tests.result == 'success' && matrix.jamai-mode == 'oss'
476465 run : |
477466 coverage combine --keep --data-file=services/api/coverage/.coverage --rcfile=services/api/pyproject.toml \
478- ./docker_data-coverage-data-oss-group[1-4] \
479- ./pytest-coverage-data-oss-group[1-4]
467+ ./owl-coverage-oss-group[1-4]
480468
481469 # Merge JUnit XML files
482- junitparser merge --glob "junit-xml-data/junit-xml-data-*/pytest_ *.xml" junit-xml-data/pytest.xml
470+ junitparser merge --glob "junit-xml-data/junit-xml-data-*/pytest- *.xml" junit-xml-data/pytest.xml
483471
484472 - name : Generate coverage reports
485473 id : generate_coverage_report
@@ -496,7 +484,6 @@ jobs:
496484 with :
497485 title : Coverage Report (all)
498486 pytest-xml-coverage-path : services/api/coverage/coverage.xml
499- junitxml-path : junit-xml-data/pytest.xml
500487 unique-id-for-comment : coverage_report_comment_all
501488 report-only-changed-files : true
502489
0 commit comments