Le WordPress d'aujourd'hui, décodé pour les développeurs

Accessibilité

Un pipeline GitLab CI qui refuse un déploiement sous un seuil d’audit

Le schéma d'un pipeline GitLab CI avec une étape d'audit automatisé, un seuil de blocage et un rapport publié en commentaire de merge request.

Par Clément Hadrot • 21 septembre 2024 • 4 min de lecture • Aucun commentaire
Un pipeline GitLab CI qui refuse un déploiement sous un seuil d'audit

Un score d’accessibilité qui redescend sous 90 sur 100 entre deux versions d’un thème WordPress ne devrait jamais atteindre la production sans qu’un humain en soit informé : c’est le principe qui a guidé la mise en place d’un pipeline GitLab CI chez une agence qui gère une dizaine de sites clients sous un thème commun, mutualisé entre plusieurs marques.

Avant cette mise en place, les régressions d’accessibilité n’étaient détectées qu’au moment d’un audit manuel périodique, parfois plusieurs semaines après leur introduction, ce qui rendait leur origine difficile à retrouver parmi les nombreux commits accumulés entre deux audits.

Vue d’ensemble du pipeline

Le pipeline se déclenche à chaque ouverture de merge request et se structure en quatre étapes successives, chacune bloquant la suivante en cas d’échec.

build
  └── deploy_staging
        └── audit_accessibilite
              └── deploy_production (manuel, si audit OK)

L’étape build compile les assets du thème, deploy_staging pousse le résultat vers un environnement éphémère dédié à la merge request, audit_accessibilite exécute l’outil Pa11y en ligne de commande contre plusieurs gabarits de cet environnement, et deploy_production reste déclenchable manuellement uniquement si l’étape précédente a réussi.

La configuration de l’étape d’audit

L’étape s’appuie sur Pa11y CI, configuré pour parcourir une liste de pages représentatives (accueil, fiche produit, page de contact) et calculer un score global à partir du nombre d’anomalies détectées, pondéré par leur gravité.

audit_accessibilite:
  stage: test
  script:
    - npx pa11y-ci --config .pa11yci.json --reporter json > rapport.json
    - node ./scripts/calculer-score.js rapport.json
  artifacts:
    paths:
      - rapport.json
    reports:
      junit: rapport-junit.xml
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

Le script calculer-score.js, écrit spécifiquement pour ce projet, traduit le rapport JSON de Pa11y en un score sur cent, avec un poids plus lourd pour les erreurs de niveau critique (contraste insuffisant, absence de texte alternatif) que pour les avertissements mineurs.

L'essentiel à retenir : L'audit s'exécute sur un environnement de staging, pas en production ; Un score sous le seuil bloque le déploiement, pas la merge request ; Le rapport détaillé reste consultable en pièce jointe du pipeline

Le seuil de blocage et sa justification

Le seuil de 90 sur 100 n’a pas été choisi arbitrairement : il correspond au score mesuré sur le thème existant au moment de la mise en place du pipeline, moins une marge de tolérance de cinq points pour absorber les faux positifs occasionnels de l’outil automatisé sans bloquer inutilement les déploiements.

  • Un score supérieur ou égal à 90 laisse l’étape deploy_production disponible en déclenchement manuel.
  • Un score inférieur fait échouer l’étape audit_accessibilite, ce qui empêche l’apparition même du bouton de déploiement en production dans l’interface GitLab.
  • Le seuil est révisé trimestriellement, à la hausse uniquement, à mesure que les corrections s’accumulent sur le thème commun.

Le rapport en commentaire de merge request

Une étape complémentaire poste automatiquement un résumé du rapport en commentaire de la merge request, via l’API GitLab, avec le score obtenu, la liste des trois anomalies les plus critiques et un lien vers le rapport complet en pièce jointe du pipeline.

curl --request POST \
  --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  --data-urlencode "body=Score accessibilité : 87/100 (seuil 90). Voir rapport joint." \
  "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/notes"

Ce commentaire donne au développeur une information immédiate, sans avoir à ouvrir les journaux détaillés du pipeline pour comprendre pourquoi son déploiement est bloqué.

Ce que ce pipeline ne remplace pas

L’audit automatisé ne détecte qu’une partie des critères d’accessibilité : la navigation au clavier réelle, la pertinence des textes alternatifs ou la cohérence de la hiérarchie de titres selon le contexte éditorial restent hors de portée d’un outil comme Pa11y. Le pipeline complète un audit manuel périodique, il ne s’y substitue pas.

Un score automatisé qui bloque un déploiement rend visible une régression le jour même où elle est introduite, ce qu’un audit manuel trimestriel ne peut jamais garantir.

En résumé

Un seuil de 90 sur 100, calculé à partir du score initial du thème, bloque désormais tout déploiement en production dès qu’une régression d’accessibilité mesurable apparaît dans une merge request. Le rapport publié en commentaire donne une visibilité immédiate au développeur, sans dispenser l’équipe d’un audit manuel périodique pour les critères que l’automatisation ne couvre pas, comme la navigation au clavier ou la pertinence contextuelle des textes alternatifs.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi