Aller au contenu

Technologies prises en charge

Détectées automatiquement ; chacune est vérifiée en CI sur un vrai projet avec son outillage (formatage au commit, vérification CI, tests au vert puis cassés).

Domaine Technologies
Java / JVM Maven, Gradle (Java, Kotlin, Groovy) — Spring Boot, Quarkus, Android
JavaScript / TypeScript npm, pnpm, yarn, bun, Deno — React, Next.js, Vue, Angular, Svelte, Nest
Python pip, uv, poetry, pipenv — Django, FastAPI, Flask, scripts
Autres langages Go · Rust · PHP (Laravel, Symfony) · Ruby (Rails) · .NET (C#, F#, ASP.NET) · Dart / Flutter · Swift · Elixir (Phoenix) · C / C++ / Objective-C (CMake, Meson) · Shell
Infrastructure Terraform / OpenTofu · Packer · Ansible · Helm · Kubernetes (kustomize) · Docker (Dockerfile, Compose) · GitHub Actions
Sans langage reconnu Makefile, justfile, Taskfile — ou toute commande via la configuration
Hébergement GitHub, GitLab, Bitbucket, Gitea, serveur Git
CI GitHub Actions (action), GitLab CI (template)
Systèmes Linux, macOS, Windows (Git Bash)
Projets script isolé, projet unique, monorepo, multi-module

Détection

Formatage (pre-commit) — chaque fichier stagé est traité selon :

  1. le projet le plus proche en remontant ses dossiers (backend/pom.xml, apps/web/package.json…) ;
  2. sinon, son extension (script isolé : deploy.sh, outil.py), avec l'outil installé sur le poste.

Tests (pre-push et CI) — seuls les projets touchés sont testés ; un fichier non-code (README) compte pour son projet. Sans langage reconnu : cible test d'un Makefile, justfile ou Taskfile.

Détail par technologie

Langage / outil Détecté par Formatage Tests / validation
Java — Maven pom.xml ¹ Spotless si configuré (fichiers stagés) mvnw verify
Java / Kotlin — Gradle settings.gradle, build.gradle(.kts) ¹ Spotless si configuré (fichiers stagés) gradlew check
JavaScript / TypeScript package.json ² prettier (du projet, sinon global) npm / pnpm / yarn / bun test (selon le lockfile)
Deno deno.json deno fmt deno test
Python pyproject.toml, requirements.txt, setup.py, Pipfile, manage.py ² ruff, sinon black (du projet en priorité) pytest via uv / poetry / pipenv / .venv · manage.py test (Django)
Go go.mod ² gofmt go test ./...
Rust Cargo.toml ¹ ² rustfmt (fichiers stagés) cargo test
PHP composer.json pint, sinon php-cs-fixer composer test · artisan test · pest · phpunit
Ruby Gemfile rubocop -a / standardrb (si dans le Gemfile) rails test · rspec · rake test
.NET *.sln, *.csproj… ¹ dotnet format dotnet test
Dart / Flutter pubspec.yaml ² dart format flutter test / dart test
Swift Package.swift ² swift-format / SwiftFormat si une config existe swift test
Elixir mix.exs mix format mix test
C / C++ / Objective-C CMakeLists.txt, meson.build ¹ ² clang-format si .clang-format recompilation + ctest / meson test
Shell — ² shfmt (.editorconfig, sinon 4 espaces) —
Terraform / OpenTofu *.tf ² terraform fmt / tofu fmt init -backend=false + validate · tflint
Packer *.pkr.hcl ² packer fmt packer validate -syntax-only
Ansible ansible.cfg, galaxy.yml, requirements.yml reformatage YAML (ansible-lint) ansible-lint
Helm Chart.yaml aucun : templates Go, un formateur YAML les casserait helm lint · helm template + kubeconform · helm unittest
Kubernetes (kustomize) kustomization.yaml prettier kubectl kustomize + kubeconform
Docker Dockerfile, Containerfile, compose.yaml — hadolint · docker compose config
GitHub Actions .github/workflows — actionlint
Autre Makefile, justfile, Taskfile.yml — make test · just test · task test

¹ multi-module : build depuis le projet parent le plus haut. ² formate aussi les fichiers isolés, hors de tout projet.

Infrastructure

Pour l'infrastructure, l'étape « tests » est une validation (lint, rendu, schémas) : rien n'est déployé. Schémas Kubernetes et providers Terraform sont mis en cache (~/.cache/repowarden).

Outil absent : ignoré sur le poste (avertissement dans un projet, silence pour un fichier isolé) ; bloquant en CI avec le mode strict.

Versions des outils : celles du projet sont prioritaires (node_modules, .venv / uv, vendor/bin, bundle exec, wrapper Maven / Gradle, plugin Spotless versionné), pour que tout le monde formate à l'identique.

Linters : délégués à MegaLinter (option de la CI).

Ajouter un langage

Créer hooks/lang/<nom>.sh :

register elm "elm.json" '\.elm$' standalone   # nom, marqueurs, regex d'extensions, options
elm_format() { elm-format --yes "$@"; }       # fichiers relatifs au projet
elm_test()   { elm-test; }                    # lancé dans le dossier du projet

Options : standalone (formate hors projet), outermost (multi-module), fallback (tests seulement si rien d'autre). Voir Contribuer pour le projet exemple et la CI.