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
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)
74 lines
3.7 KiB
XML
74 lines
3.7 KiB
XML
<?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>
|