Files
LoreMind/java-pmd-ruleset.xml
IETM_FIXE\ietm6 42c4b53ced
Some checks failed
Qualité & Sécurité / MegaLinter (PMD · Ruff · Bandit · gitleaks · hadolint) (push) Successful in 1m9s
Build & Push Images / build (brain) (push) Successful in 1m10s
Qualité & Sécurité / Trivy (CVE dépendances Maven / pip / npm) (push) Failing after 2m36s
Build & Push Images / build (web) (push) Successful in 1m48s
Build & Push Images / build-switcher (push) Successful in 20s
Build & Push Images / build (core) (push) Successful in 3m9s
Qualité & Sécurité / Web (ESLint · angular-eslint + sonarjs) (push) Successful in 38s
Stack qualité CI (MegaLinter, Trivy, ESLint) et purge du backlog lint web
CI (Gitea Actions) :
- Nouveau workflow quality.yml (séparé de ci.yml, non bloquant pour la release) :
  MegaLinter v9 (PMD, Ruff, Bandit, gitleaks, hadolint), ng lint (web) et
  Trivy (CVE des dépendances Maven/pip/npm), sur main + beta + PR
- Trivy : préchargement du cache Maven avant le scan — sans ça Maven Central
  rate-limite l'IP du runner (429) en résolvant les BOMs du parent Spring Boot
- upload-artifact v4 → v3 : l'API artifacts v4 n'est pas supportée par Gitea
  (corrige aussi l'upload du rapport Playwright de e2e.yml, cassé depuis toujours)
- Ruleset PMD projet (java-pmd-ruleset.xml, auto-détecté par MegaLinter) orienté
  bugs réels, sans le style Lombok-hostile du défaut : 11 337 → 65 findings ;
  PMD en mode rapport (JAVA_PMD_DISABLE_ERRORS) le temps de purger ce backlog

Web :
- angular-eslint 21 + eslint-plugin-sonarjs : les règles Sonar vivent désormais
  dans ESLint (config web/eslint.config.js, réglages justifiés en commentaire)
- tsconfig : skipLibCheck + types:[] + node_modules ré-exclu — répare les builds
  desktop Windows/Linux cassés par le conflit @types/eslint-scope vs ESLint 9
- Purge du backlog lint : 114 erreurs → 0 sur 66 fichiers (ngOnDestroy vides
  supprimés, any typés avec les vrais DTOs, outputs (close) → (closed), regex
  super-linéaires désamorcées, ternaires/fonctions imbriqués dépliés, intention
  documentée sur les catch/error volontairement vides)
- Bug latent corrigé au passage : license.service.disconnect() émettait
  undefined au lieu de true en cas de succès (masqué par un double cast)
2026-07-07 01:05:00 +02:00

74 lines
3.7 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
name="LoreMind"
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">
<description>
Ruleset PMD LoreMind — détecté automatiquement par MegaLinter (JAVA_PMD).
Philosophie : bugs et pièges réels uniquement. Les catégories de STYLE
(codestyle/design/documentation) sont exclues : le défaut MegaLinter y
générait ~11 000 violations hors sujet (conventions incompatibles avec
l'idiome Lombok/slf4j/Spring du projet : champ `log`, DI constructeur…).
</description>
<!-- Bugs probables : null, equals/hashCode, ressources, casts douteux… -->
<rule ref="category/java/errorprone.xml">
<!-- Chaque littéral dupliqué = une violation : du bruit, pas un bug. -->
<exclude name="AvoidDuplicateLiterals"/>
<exclude name="AvoidLiteralsInIfCondition"/>
<!-- Entités JPA/DTO : pas de sérialisation Java native ici. -->
<exclude name="MissingSerialVersionUID"/>
<!-- `this.name = name` en DI/setters : idiome standard. -->
<exclude name="AvoidFieldNameMatchingMethodName"/>
<exclude name="AvoidFieldNameMatchingTypeName"/>
<!-- `while ((x = read()) != null)` : idiome de lecture standard. -->
<exclude name="AssignmentInOperand"/>
<!-- catch(Exception) best-effort : choix assumé du projet (imports,
exports, best-effort serveur) — pas un gate. -->
<exclude name="AvoidCatchingGenericException"/>
<!-- TODO backlog : réactiver et passer les toLowerCase/UpperCase en
Locale.ROOT (27 sites) — bug potentiel (locale turque) mais
changement de comportement à valider posément. -->
<exclude name="UseLocaleWithCaseConversions"/>
</rule>
<!-- Concurrence -->
<rule ref="category/java/multithreading.xml">
<!-- Règle d'époque J2EE : les threads sont légitimes (sidecar, SSE…). -->
<exclude name="DoNotUseThreads"/>
<!-- Flaguerait CHAQUE HashMap, y compris locales à une méthode (×135). -->
<exclude name="UseConcurrentHashMap"/>
</rule>
<!-- Performance (sans les micro-optimisations StringBuilder : le rendu
PDF/HTML fait des milliers d'appends, aucun n'est un point chaud). -->
<rule ref="category/java/performance.xml">
<exclude name="AvoidInstantiatingObjectsInLoops"/>
<exclude name="AppendCharacterWithChar"/>
<exclude name="ConsecutiveLiteralAppends"/>
<exclude name="ConsecutiveAppendsShouldReuse"/>
<exclude name="InsufficientStringBufferDeclaration"/>
</rule>
<!-- Sécurité -->
<rule ref="category/java/security.xml"/>
<!-- Bonnes pratiques (sous-ensemble non-style) -->
<rule ref="category/java/bestpractices.xml">
<!-- slf4j paramétré ({} + args) rend le guard inutile. -->
<exclude name="GuardLogStatement"/>
<!-- Les ports hexagonaux à méthode unique ne sont pas des lambdas. -->
<exclude name="ImplicitFunctionalInterface"/>
<!-- Déclarer List vs ArrayList : style, pas un bug. -->
<exclude name="LooseCoupling"/>
<!-- StringBuilder en champ : pattern builder assumé (export PDF). -->
<exclude name="AvoidStringBufferField"/>
<!-- Style de tests : à l'appréciation du projet, pas un gate. -->
<exclude name="UnitTestAssertionsShouldIncludeMessage"/>
<exclude name="UnitTestContainsTooManyAsserts"/>
<exclude name="UnitTestShouldIncludeAssert"/>
</rule>
</ruleset>