Skip to content

feat(#907): rapport HTML en continu d'une capture en direct par l'API #590

feat(#907): rapport HTML en continu d'une capture en direct par l'API

feat(#907): rapport HTML en continu d'une capture en direct par l'API #590

Workflow file for this run

# Couverture incrémentale par PR : commente chaque PR vers `dev` avec la
# couverture totale et le delta vs la base (`dev`), suite de #224.
#
# Principe : la suite etant rapide (~10 s), on execute pytest --cov deux
# fois -- une fois sur le ref de fusion de la PR, une fois sur le SHA de
# base -- puis scripts/pr_coverage_comment.py publie (ou met a jour) un
# commentaire sur la PR. Aucun seuil bloquant ici :
# le seuil bloquant (fail_under, #246) est applique par ci.yml ; ici il est
# neutralise (--cov-fail-under=0) pour que le commentaire soit publie meme
# quand la PR passe dessous -- c'est justement la qu'il est utile.
name: Couverture par PR
on:
pull_request:
branches: [dev]
permissions:
contents: read
pull-requests: write
jobs:
commentaire-couverture:
name: Couverture (delta vs dev)
# Runners maison (groupe maison, Ubuntu 20.04, root) ; repli GitHub :
# variable NETCROSS_RUNS_ON_LEGER = '"ubuntu-latest"'.
runs-on: ${{ fromJSON(vars.NETCROSS_RUNS_ON_LEGER || '{"group":"maison","labels":["self-hosted","linux"]}') }}
steps:
- name: Checkout de la PR (ref de fusion)
uses: actions/checkout@v4
- name: Installation de uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
enable-cache: true
- name: Installation de Python
run: uv python install 3.14
# test_catalogues_a_jour_avec_les_sources compare les catalogues
# regeneres par le gettext installe : celui des runners maison
# (0.19, Ubuntu 20.04) formate autrement que celui du projet. Ce test
# reste execute par ci.yml (conteneur ubuntu:26.04) ; il est retire ici
# des deux mesures (PR et base), le delta reste donc comparable.
- name: Dépendances + couverture de la PR
run: |
uv sync --extra dev
uv run pytest --cov --cov-fail-under=0 --cov-report=json:coverage-pr.json -q --deselect tests/test_i18n.py::test_catalogues_a_jour_avec_les_sources
uv sync --extra dev --extra ai
uv run pytest --cov --cov-report=json:coverage-pr.json -q --deselect tests/test_i18n.py::test_catalogues_a_jour_avec_les_sources
- name: Couverture de la base (SHA de dev)
run: |
git fetch --no-tags --depth=1 origin ${{ github.event.pull_request.base.sha }}
# Runners auto-hébergés : l'espace de travail persiste d'un job à
# l'autre, l'arbre de la base d'un run précédent peut subsister.
BASE_DIR="$RUNNER_TEMP/netcross-base"
rm -rf "$BASE_DIR" ../base # ../base : emplacement des runs précédents
git worktree prune
git worktree add --force "$BASE_DIR" ${{ github.event.pull_request.base.sha }}
cd "$BASE_DIR"
uv sync --extra dev
uv run pytest --cov --cov-fail-under=0 --cov-report=json:coverage-base.json -q --deselect tests/test_i18n.py::test_catalogues_a_jour_avec_les_sources
mv coverage-base.json "$OLDPWD/"
- name: Nettoyage de l'arbre de la base
if: always()
run: |
git worktree remove --force "$RUNNER_TEMP/netcross-base" 2>/dev/null || true
git worktree prune
- name: Publication du commentaire de couverture
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
uv run --no-project --python 3.14 scripts/pr_coverage_comment.py \
--pr-json coverage-pr.json \
--base-json coverage-base.json \
--pr-number "${{ github.event.pull_request.number }}"