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)
81 lines
3.0 KiB
JavaScript
81 lines
3.0 KiB
JavaScript
// @ts-check
|
||
const eslint = require("@eslint/js");
|
||
const { defineConfig } = require("eslint/config");
|
||
const tseslint = require("typescript-eslint");
|
||
const angular = require("angular-eslint");
|
||
// Règles qualité "à la Sonar" (bugs, code smells, complexité) portées dans
|
||
// ESLint — remplace l'analyse SonarQube côté TypeScript.
|
||
const sonarjs = require("eslint-plugin-sonarjs");
|
||
|
||
module.exports = defineConfig([
|
||
{
|
||
files: ["**/*.ts"],
|
||
extends: [
|
||
eslint.configs.recommended,
|
||
tseslint.configs.recommended,
|
||
tseslint.configs.stylistic,
|
||
angular.configs.tsRecommended,
|
||
sonarjs.configs.recommended,
|
||
],
|
||
processor: angular.processInlineTemplates,
|
||
rules: {
|
||
"@angular-eslint/directive-selector": [
|
||
"error",
|
||
{
|
||
type: "attribute",
|
||
prefix: "app",
|
||
style: "camelCase",
|
||
},
|
||
],
|
||
"@angular-eslint/component-selector": [
|
||
"error",
|
||
{
|
||
type: "element",
|
||
prefix: "app",
|
||
style: "kebab-case",
|
||
},
|
||
],
|
||
// Modernisation constructeur → inject() : 567 occurrences dans l'existant.
|
||
// Pas un bug — chantier one-shot à mener via la migration officielle
|
||
// `ng generate @angular/core:inject`, puis repasser la règle en "error".
|
||
"@angular-eslint/prefer-inject": "off",
|
||
// Math.random() est légitime ici : tables aléatoires / jets de dés = le
|
||
// domaine métier. Aucun usage cryptographique côté front.
|
||
"sonarjs/pseudo-random": "off",
|
||
// 9 fonctions historiques dépassent le seuil de 15 (jusqu'à 39 sur les
|
||
// graphes campagne/chapitre). Les refactorer "pour le lint" sans filet de
|
||
// tests serait plus risqué qu'utile → warn (visible, non bloquant).
|
||
// Backlog : campaign-graph (×3), chapter-graph (×2), campaign-import,
|
||
// settings, persona-view, sse.util. Repasser en "error" une fois résorbé.
|
||
"sonarjs/cognitive-complexity": "warn",
|
||
// Convention TS standard : un préfixe `_` marque un paramètre/variable
|
||
// volontairement inutilisé (ex. paramètres conservés pour ne pas casser
|
||
// les appelants — cf. campaign-tree.helper.ts).
|
||
"@typescript-eslint/no-unused-vars": [
|
||
"error",
|
||
{
|
||
argsIgnorePattern: "^_",
|
||
varsIgnorePattern: "^_",
|
||
caughtErrorsIgnorePattern: "^_",
|
||
},
|
||
],
|
||
},
|
||
},
|
||
{
|
||
files: ["**/*.html"],
|
||
extends: [
|
||
angular.configs.templateRecommended,
|
||
angular.configs.templateAccessibility,
|
||
],
|
||
rules: {
|
||
// Accessibilité : ~127 findings sur l'existant. En "warn" (visibles,
|
||
// non bloquants) le temps de résorber le backlog — repasser en "error"
|
||
// règle par règle au fil des corrections.
|
||
"@angular-eslint/template/label-has-associated-control": "warn",
|
||
"@angular-eslint/template/click-events-have-key-events": "warn",
|
||
"@angular-eslint/template/interactive-supports-focus": "warn",
|
||
"@angular-eslint/template/no-autofocus": "warn",
|
||
},
|
||
}
|
||
]);
|