Le TCK officiel MicroProfile Metrics 5.1.1 (org.eclipse.microprofile.metrics:microprofile-metrics-tck:5.1.1) valide qu’une implémentation respecte la totalité de la spec — formats d’exposition, scopes, types, configuration. La cible Dirac est 100 % PASS (jalon M8). Le runner est livré dans le module dirac-tck, volontairement détaché du reactor.

Statut

Métrique Valeur

Cible

100 % PASS sur la suite officielle 5.1.1

Jalon

M8 (ROADMAP.md)

Compteur courant

🚧 statut à confirmer dans dirac-tck/target/tck-report.txt

Smoke test (hors Arquillian)

DiracTckSmokeTest opérationnel

Smoke jlink M9

✅ image dirac-image-smoke construite (run-jlink-smoke.sh)

Tant que la suite complète n’est pas verte, le chiffre exact est tracé dans dirac-tck/target/tck-report.txt (regénéré à chaque run par run-official-tck-mp-metrics-5.1.sh). Cette page ne fige pas un score d’avance.

Prérequis

L’artefact org.eclipse.microprofile.metrics:microprofile-metrics-tck:5.1.1 est disponible sur Maven Central. Le runner installe d’abord les modules Dirac requis dans le M2 local, puis exécute Maven sur le dirac-tck/pom.xml détaché.

sdk env                                              # Java 25 + Maven 3.9.16
./mvnw -ntp install -DskipTests                      # build complet du reactor

Exécution du runner

Le script run-official-tck-mp-metrics-5.1.sh à la racine du dépôt orchestre toutes les variantes.

# Smoke test — DiracTckSmokeTest, hors Arquillian
./run-official-tck-mp-metrics-5.1.sh

# Suite complète — TestNG/Arquillian, profil tck-official
./run-official-tck-mp-metrics-5.1.sh all

# Test ciblé — profil tck-official + -Dtest=
./run-official-tck-mp-metrics-5.1.sh -Dtest=CounterTest

Le runner installe dirac-api, dirac-core, dirac-cdi-vauban dans le M2 local (étape 1), puis invoque Maven sur dirac-tck/pom.xml (étape 2). Le rapport synthétique atterrit dans dirac-tck/target/tck-report.txt.

Architecture du runner

dirac-tck est volontairement hors reactor : son pom.xml est en modelVersion 4.0.0 standalone, sans <parent>.

Cette détachement est imposé par ShrinkWrap Maven Resolver 3.3, transitif au TCK officiel, qui ne sait pas parser les POMs Model 4.1.0 et crashe sur le reactor Vidocq. La règle est documentée dans la racine du workspace (§ Contrainte d’architecture critique : TCK runners hors reactor). Ne pas réintégrer dirac-tck au <modules> du reactor parent, ne pas lui ajouter de <parent>, ne pas le builder via mvn -pl. Toujours passer par le script.

Stack assemblée par le runner :

Couche Composant

Spec

microprofile-metrics-api 5.1.1, jakarta.enterprise.cdi-api 4.1, jakarta.interceptor-api 2.2, jakarta.annotation-api 3.0, jakarta.ws.rs-api 4.0

Implémentation Metrics

dirac-api + dirac-core + dirac-cdi-vauban + dirac-rest

Container CDI

Vauban (io.vidocq.vauban.core) en mode embedded

Container Arquillian

Container Dirac qui déploie l’archive, expose /metrics via Cassini + Chappe

Transport HTTP

Chappe (io.vidocq.chappe.http)

Cadre de test

TestNG (contrainte upstream — pas JUnit)

Configuration Arquillian dans dirac-tck/src/test/resources/arquillian.xml. Test de smoke courant : dirac-tck/src/test/java/io/vidocq/dirac/tck/DiracTckSmokeTest.java.

Le smoke jlink valide que toute la stack Dirac peut être assemblée en image Java native sans automatic module sans nom canonique. Le blocker est levé par dirac-mp-metrics-api, qui repackage la spec MP Metrics avec un module-info.class explicite (module microprofile.metrics.api { exports …​; }).

./run-jlink-smoke.sh           # build + jlink + image dirac-image-smoke
./run-jlink-smoke-ci.sh        # wrapper bloquant pour la CI
./mvnw -ntp -N -Pjlink-smoke verify

Détail dans JLINK.md.

Contrat qualité

Toute modification structurelle de dirac-core, dirac-cdi-vauban ou dirac-rest doit préserver le score TCK avant merge. Une régression TCK est bloquante au sens CI : la PR ne passe pas. Tout test exclu (s’il y en a) doit être listé dans la suite TestNG et justifié dans TCK.md (à créer au premier exclusion).

Pour aller plus loin