ci: refonte multi-workflows — suppression du monolithe ci-full templates (Fixes #129) #130
No reviewers
Labels
No labels
bug
chore
design
dx:ci
dx:database
dx:dotnet
dx:infra
dx:security
dx:tests
dx:ui
etape-1
etape-2
etape-3
etape-4
etape-5
etape-6
etape-7
feature
priority-high
priority-low
priority-medium
security
spec
tech-debt
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
nonobis/Heimdall!130
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/refonte-multi-workflows"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
La CI actuelle délègue tout à l'action composite monolithe
ci-fulldenonobis/templates: build → tests → Sonar → Docker → Trivy → Dependency-Check dans un seul job, en série. Le runner act/forgejo cache les actions composites par URL (~/.cache/actkeyé par sha256, jamais invalidé) — cause racine des échecs CI récurrents d'août 2026 (ancien contenu exécuté malgré les pushs, purges hôte, runs rouges sur les 3 LXC).Objectif : supprimer cette CI et la refaire de zéro en workflows natifs, plusieurs jobs parallèles (moins long, erreurs visibles par job), avec toutes les fonctionnalités actuelles.
Changements
.forgejo/workflows/ci.yml— 8 jobs parallèles inline (zéro action composite maison) :build: restore + build +dotnet format(gate qualité rapide)test-unit: Domain + Application + Agent + Api (parallèle interne)test-web: bUnit Web.Teststest-db: PostgreSQL CI + Infrastructure (Testcontainers) + Integration, sérialiséssonar: analyse + gate bloquant (avec parampullRequestpour les PR)docker: build images (main + PR), push main (latest+sha), images de testpr-<N>, Trivy bloquant (scan de l'image locale)dependency-check: OWASP bloquant (failOnCVSS 7.0, cache NVD/opt/dc-cache)post-summary: commentaire PR unique agrégé (tests unitaires + bUnit + DB).forgejo/workflows/release.yml— 2 cycles release inline :v*(central Web) etagent-v*(agent, binaires natifs linux-x64/arm64/win-x64), GitVersion double, archives, release Forgejo + notes auto, push Docker Hubscripts/ci/— utilitaires versionnés dans le repo : résumé tests, commentaires PR, rapports CVE (Trivy/DC), injection secrets Infisical, notes de releaserenovate.ymlinchangé (dernière dépendancetemplatesconservée :RENOVATE_TOKENvia Vault — documentée dans le ticket)Seules actions par URL conservées :
checkout@v4etsetup-dotnet@v4(miroirs stables). Plus de checkout.ci/ PATTEMPLATES_PATpour la CI.Tickets liés (obligatoire)
Résultats des tests (obligatoire)
Retours SonarQube (obligatoire)
CVE (obligatoire)
Checklist
ci: refonte multi-workflows — ...)main, à jourCreateCameraAsync, CreateSiteAsync et ConfirmDiscoveryAsync avalaient le corps d'erreur ({ error } / ProblemDetails) et retournaient null → l'UI affichait un message générique. Nouveau type ApiResult<T> (succès + données OU échec + message), helper ReadErrorMessageAsync (formats maison + ValidationProblemDetails), messages FluentValidation RTSP en français explicite. Fix #93.🔍 Revue the-reviewer — Passe 1 (2026-08-14)
Statut : ❌ à corriger (Infisical jobs Sonar/Docker + conflit de merge + périmètre mélangé avec #118)
Code / CI — ✅ / ⚠️
ci-fullde templates (cause racine documentée des échecs d'août : cache d'actions runner par URL jamais invalidé). 8 jobs parallèles inline, timeouts explicites par job, zéro action composite maison — c'est la bonne direction pour stabiliser la CI.sonaret ledockerréutilisent le même bloc d'injection Infisical que le release — le run échoue sur « Infisical export vide — vérifier projectId/env/permissions » sur ces 2 jobs. → the-devops.CI — ❌ bloquant
SonarQubeetDocker + Trivyéchouent (Infisical export vide). Les autres jobs passent (voir ci-dessus).Conformité — ❌ à corriger
Fixes #129présent ✓ — ticket ouvert ✓. Template PR respecté ✓..forgejo/workflows/ci.yml).ci/refonte-multi-workflowscontient aussi tout le contenu de la PR #118 (CamerasPage.razor, HeimdallApiClient.cs, tests Web, validators) — le diff CI est pollué par du code applicatif. À rebaser pour ne garder que la CI, ou coordonner le merge avec #118.scripts/ci/__pycache__/*.pyc(8 fichiers) commités dans la PR — artefacts à exclure (gitignore).Actions
.pycet le périmètre #118 de la branche (rebase sur main).Verdict : refonte CI prometteuse et quasi-verte sur les tests, mais 2 jobs bloqués (Infisical) + conflit + périmètre à nettoyer.
🔄 Passe 2 (2026-08-14 ~23h) — corrections arrivées
Statut : ❌ toujours bloquante (test unitaire rouge + Trivy 4 CVE)
mergeable=true(6 nouveaux commits : revert des fixes CVE → sujet #128, fiabilisation tests sous charge parallèle, exclusions Sonar, gitignore bytecode).0f991b4d) :Heimdall.Agent.Tests— 1 échec réel :AgentRegistrationServiceTests.Heartbeat_UsesXApiKeyHeader_NotBearer(xApiKey null). → à corriger (the-developer).context deadline exceeded) — infra runner, cause commune.Actions mises à jour
Heartbeat_UsesXApiKeyHeader_NotBearer.🔄 Passe 3 (2026-08-15) — corrections en cours, dernier run cancelled
Statut : ❌ en cours de correction (test Heartbeat + infra Docker), refonte CI quasi verte
Heartbeat_UsesXApiKeyHeader_NotBearer(headers manquants sous charge parallèle, cf. run #2237).mergeable=true), périmètre CI nettoyé (revert des CVE → #128).e3b6f468).Actions
0dca372c23ff95ba2cd4🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
Correction de revue (the-developer) — passe du 14/08/2026 soir.
Diagnostic (test rouge Heartbeat_UsesXApiKeyHeader_NotBearer, run #2237)
X-API-Keyaprès registration et jamaisAuthorization: Bearer(AgentRegistrationService.csl.83-84 et l.138-139) — comportement attendu respecté.Correctif (déjà en place sur la branche)
2d40c3c« fix(test): Heartbeat_UsesXApiKeyHeader_NotBearer flaky sous charge (#2237) » : polling surxApiKey(max 10 s) au lieu du delay fixe.2d40c3c) : job Tests unitaires = success ✓ (Build, SonarQube, Web bUnit également verts).Reste à surveiller (hors périmètre de cette correction)
État : test unitaire corrigé, rien à pousser de plus.
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
🛡️ Rapport sécurité — CVE détectées
🛡️ Trivy — Vulnérabilités HIGH,CRITICAL (4)
Généré automatiquement par la CI (Trivy / OWASP Dependency-Check).
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
9db7aa5a5d2fab641d82🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
78bf045b423a85f36cb2🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.
🤖 Résumé des tests
Tests unitaires
Tests Web (bUnit)
Tests DB (Infrastructure + Integration)
Généré automatiquement par la CI.