Intégration CI/CD pour l'accessibilité RGAA
Détectez les régressions d'accessibilité à chaque déploiement. Intégrez les audits RGAA directement dans votre pipeline CI/CD.
Vous cherchez à récupérer vos résultats par programmation ? Voir le guide API REST RGAA Checker (GET).
Le problème
Les régressions d'accessibilité passent souvent inaperçues jusqu'à ce qu'un utilisateur ou un audit externe les détecte. À ce moment-là, les corriger coûte plus cher et prend plus de temps.
- ✗Régressions non détectées en production
- ✗Corrections coûteuses après déploiement
- ✗Risque de non-conformité RGAA/EAA
La solution
Intégrez les audits RGAA dans votre pipeline CI/CD. Détectez automatiquement les problèmes d'accessibilité avant qu'ils n'arrivent en production.
- Audit automatique à chaque PR
- Bloquer les déploiements non conformes
- Rapports JUnit pour vos outils CI
Comment ça marche ?
Trois étapes simples pour automatiser vos audits d'accessibilité.
Créez une clé API
Depuis votre dashboard, générez une clé API sécurisée. Stockez-la dans les secrets de votre CI (RGAA_CHECKER_API_KEY).
Configurez votre pipeline
Ajoutez notre GitHub Action, CLI npm ou appel API REST dans votre workflow CI/CD.
Recevez les résultats
À chaque PR, obtenez le score RGAA et la liste des erreurs. Bloquez les déploiements si le seuil n'est pas atteint.
Pourquoi intégrer RGAA Checker dans votre CI ?
RGAA Checker scanne vos pages après déploiement sur un environnement de preview ou staging. Il teste le rendu final avec tout le JavaScript exécuté et le contenu réel.
Preview Deployments
Chaque Pull Request crée une preview (Vercel, Netlify, etc.). RGAA Checker scanne automatiquement cette URL et bloque le merge si le score baisse.
PR #42 → preview-pr-42.vercel.app → Scan → Score 85% ✓Contenu dynamique / CMS
Votre code peut être parfait, mais le contenu injecté par un CMS peut créer des problèmes : images sans alt, liens vides, contrastes insuffisants.
Strapi / Contentful / WordPress → Contenu réel testéDétection de régressions
Un développeur modifie un composant et casse l'accessibilité sans le savoir. Le build échoue avant que ça arrive en production.
Score 85% → Commit → Score 72% → Build FAILED ✗Workflow typique avec RGAA Checker
RGAA Checker intervient après le déploiement de votre preview pour tester la page réelle.
Exemple : Scanner automatiquement les previews Vercel
name: Accessibility Check
on:
deployment_status:
types: [success]
jobs:
rgaa-audit:
# Se déclenche uniquement quand le déploiement réussit
if: github.event.deployment_status.state == 'success'
runs-on: ubuntu-latest
steps:
- name: Audit RGAA
uses: rgaa-checker/action@v1
with:
api-key: ${{ secrets.RGAA_CHECKER_API_KEY }}
# Utilise l'URL de preview générée par Vercel/Netlify
url: ${{ github.event.deployment_status.target_url }}
threshold: 80Exemples d'intégration
Choisissez votre méthode d'intégration préférée.
name: Accessibility Check
on:
pull_request:
push:
branches: [main]
jobs:
rgaa-audit:
runs-on: ubuntu-latest
steps:
- uses: rgaa-checker/action@v1
with:
api-key: ${{ secrets.RGAA_CHECKER_API_KEY }}
url: https://staging.example.com
threshold: 80Format de réponse
{
"success": true,
"url": "https://example.com",
"score": 85,
"rgaaScore": 72,
"passed": true,
"threshold": 80,
"stats": {
"total": 106,
"pass": 45,
"fail": 8,
"manual": 18,
"na": 35
},
"issues": [
{
"criterion": "1.1",
"title": "Images",
"status": "fail",
"count": 3,
"samples": ["<img src='logo.png'>"]
}
],
"duration": 12500,
"timestamp": "2024-01-15T10:30:00Z"
}Documentation détaillée
Tout savoir sur l'installation, la configuration et les options disponibles.
Installation
Installez le CLI RGAA Checker via npm pour l'utiliser dans vos pipelines CI/CD ou en local.
Installation globale
npm install -g @rgaa-checker/cliUtilisation avec npx
npx @rgaa-checker/cli scan https://example.com# Ajouter comme dépendance de développement
npm install --save-dev @rgaa-checker/cli
# Puis utiliser via npm scripts dans package.json
{
"scripts": {
"test:a11y": "rgaa-checker scan https://localhost:3000 --threshold 80"
}
}Pré-requis
- • Node.js version 18 ou supérieure
- • Une clé API RGAA Checker (plan Découverte ou Pro)
Fichier de configuration .rgaachecker.json
Créez un fichier .rgaachecker.json à la racine de votre projet pour configurer les options par défaut du CLI.
{
"url": "https://staging.example.com",
"threshold": 80,
"timeout": 60000,
"auth": {
"type": "basic",
"username": "$BASIC_USER",
"password": "$BASIC_PASS"
}
}| Option | Type | Défaut | Description |
|---|---|---|---|
| url | string | - | URL à scanner par défaut |
| threshold | number | 80 | Score minimum requis (0-100) |
| timeout | number | 60000 | Timeout en millisecondes |
| auth | object | - | Configuration Basic Auth |
Note : Les arguments CLI (ex: --threshold 90) ont priorite sur le fichier de configuration.
Authentification Basic Auth
Scannez vos environnements de staging proteges par authentification HTTP Basic. Utilisez des variables d'environnement pour ne pas exposer vos identifiants.
Via le CLI
rgaa-checker scan https://staging.example.com \
--basic-user admin \
--basic-pass secret123Via l'API
{
"url": "https://staging.example.com",
"auth": {
"type": "basic",
"username": "admin",
"password": "secret123"
}
}Variables d'environnement
Dans le fichier .rgaachecker.json, prefixez les valeurs avec $ pour utiliser des variables d'environnement :
"auth": {
"type": "basic",
"username": "$STAGING_USER",
"password": "$STAGING_PASS"
}Rapports JUnit XML
Exportez les resultats au format JUnit XML pour les integrer a vos outils de CI (Jenkins, GitLab, Azure DevOps, etc.). Chaque critere RGAA echoue devient un test case.
# CLI - Exporter au format JUnit
rgaa-checker scan https://example.com --format junit > report.xml
# Ou avec un fichier de sortie
rgaa-checker scan https://example.com --format junit --output accessibility.xml<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="RGAA Checker" tests="106" failures="8" time="12.500">
<testsuite name="RGAA Audit - https://example.com" tests="106" failures="8">
<testcase name="Overall Score" classname="RGAA">
<failure message="Score 75% is below threshold 80%">
The accessibility score does not meet the required threshold.
</failure>
</testcase>
<testcase name="[1.1] Images" classname="RGAA.1.1">
<failure message="3 issues found">
<img src="logo.png">
<img src="banner.jpg">
</failure>
</testcase>
</testsuite>
</testsuites>Rate Limiting et Quotas
L'API CI est soumise a des limites pour garantir la disponibilite du service pour tous les utilisateurs.
Rate Limit
Quotas mensuels
Important : Les scans CI et les scans web partagent le meme quota mensuel. Planifiez vos audits en consequence pour optimiser votre utilisation.
Déclencher un crawl multi-pages
Pour auditer plusieurs pages en une seule requête (site complet, parcours utilisateur), utilisez POST /api/ci/crawl plutôt que d'enchaîner des appels à /api/ci/scan. Le crawl est déclenché de façon asynchrone : la requête répond immédiatement (202), et le résultat est disponible par sondage ou par webhook.
Pré-requis
- • Plan Pro ou Entreprise (le crawl par API n'est pas disponible sur les plans Gratuit et Découverte)
- • Une clé API RGAA Checker
rgaa_ci_*(la même que pour/api/ci/scan)
Requête
curl -X POST https://rgaa-checker.com/api/ci/crawl \
-H "Authorization: Bearer rgaa_ci_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://site.fr", "https://site.fr/contact"],
"webhook_url": "https://hooks.example.com/rgaa"
}'| Paramètre | Type | Description |
|---|---|---|
| urls | string[] | Requis, au moins 2 URL. Pour une seule page, utilisez /api/ci/scan. |
| webhook_url | string | Optionnel. URL publique en https:// qui reçoit une notification à la fin du crawl. |
| withAI | boolean | Optionnel (défaut : false). Active l'analyse IA des images, réservée aux plans avec analyse IA. |
Réponse (202 Accepted)
{
"success": true,
"crawl_id": "8f1e2c3a-4b5d-4e6f-9a1b-2c3d4e5f6a7b",
"pages": 2,
"status": "running",
"status_url": "/api/crawl/8f1e2c3a-4b5d-4e6f-9a1b-2c3d4e5f6a7b",
"page_scan_ids": ["…", "…"],
"job_ids": ["…", "…"],
"webhook": {
"url": "https://hooks.example.com/rgaa",
"secret": "whsec_xxxxxxxxxxxxxxxxxxxxxxxx",
"signature_header": "X-RGAA-Signature",
"algorithm": "HMAC-SHA256 hex, format sha256=<hex>",
"note": "Store this secret now: it is only returned once."
}
}Important : le champ webhook.secret n'est renvoyé qu'une seule fois, dans cette réponse. Stockez-le immédiatement côté CI (variable secrète) : il est ensuite purgé côté serveur et ne peut plus être récupéré.
Quota : N pages = N scans
Chaque URL du tableau urls consomme une unité de votre quota mensuel de scans (le même quota que vos scans web et vos appels /api/ci/scan). Le quota est vérifié et décompté avantle lancement du crawl (fail-closed) : si le quota restant est insuffisant, la requête est rejetée et aucune page n'est scannée.
Suivi de l'avancement
Interrogez l'URL retournée dans status_url (équivalente à GET /api/crawl/:id, détaillée dans le guide API REST) pour suivre la progression :
{
"status": "running",
"pagesProgress": {
"completed": 1,
"failed": 0,
"pending": 1
}
}status passe de running à completed dès que toutes les pages sont sorties de l'état pending. Le sondage reste la source de vérité, que le webhook soit livré ou non.
Webhook de complétion
Si webhook_url est fourni, RGAA Checker envoie un POST à cette URL une fois le crawl terminé (évènement crawl.completed), signé avec le secret reçu à la création. Vérifiez systématiquement la signature avant de traiter le corps de la requête :
const crypto = require('node:crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', secret)
.update(rawBody).digest('hex');
const valid = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(receivedSignature));
// receivedSignature = en-tête X-RGAA-Signature ; rawBody = corps brut, non parsé- • En-tête
X-RGAA-Signature, formatsha256=<hex> - • 3 tentatives de livraison (immédiate, puis +5 s, puis +25 s) ; au-delà, seul le sondage de
status_urlfait foi - • Le secret est purgé côté serveur juste après la dernière tentative de livraison, qu'elle ait réussi ou non
Limites du crawl
| Limite | Valeur |
|---|---|
| Pages par crawl (plan Pro) | 20 |
| Pages par crawl (plan Entreprise) | 50 |
| Crawls par jour et par clé API | 10 |
| Requêtes par minute et par clé API | 10 |
Honnêteté du score : le score renvoyé (par page comme agrégé sur le crawl) reste un score automatisé. Environ 60 % des critères RGAA applicables à une page donnée exigent une vérification humaine que l'outil ne peut pas remplacer. Ne présentez jamais ce résultat comme une preuve de conformité RGAA : c'est un indicateur de suivi, pas une déclaration de conformité.
Reference des commandes CLI
rgaa-checker scan <url>
Lance un audit d'accessibilite sur l'URL specifiee.
| --threshold <n> | Score minimum requis (defaut: 80) |
| --timeout <ms> | Timeout en ms (defaut: 60000) |
| --format <type> | Format de sortie: text, json, junit |
| --output <file> | Fichier de sortie pour le rapport |
| --basic-user <user> | Nom d'utilisateur Basic Auth |
| --basic-pass <pass> | Mot de passe Basic Auth |
rgaa-checker auth set-key <key>
Configure votre cle API. Elle sera stockee dans ~/.rgaa-checker/config.json.
rgaa-checker init
Cree un fichier .rgaachecker.json avec une configuration par defaut.
Fonctionnalites
Tout ce dont vous avez besoin pour automatiser vos audits.
Score RGAA automatique
Obtenez un score de 0 a 100 base sur les 106 criteres RGAA testables automatiquement.
Seuil d'echec configurable
Definissez le score minimum acceptable. Bloquez les deploiements non conformes.
Commentaires PR configurables
Configurez des commentaires avec le score et les erreurs directement sur vos Pull Requests.
Rapports JUnit XML
Exportez les resultats au format JUnit pour une integration avec vos outils de reporting.
Support Basic Auth
Scannez vos environnements de staging proteges par authentification.
Rate limit genereux
30 requetes par minute pour supporter vos pipelines les plus actifs.
Questions frequentes
Comment creer une cle API ?
Connectez-vous a votre dashboard RGAA Checker, accedez a la section "Cles API" et cliquez sur "Nouvelle cle". Copiez la cle generee - elle ne sera affichee qu'une seule fois.
Combien coute l'integration CI/CD ?
L'integration CI/CD est incluse dans les plans Decouverte (69€/mois) et Pro (249€/mois). Les scans CI utilisent le meme quota que vos scans web.
Puis-je scanner des environnements de staging proteges ?
Oui, l'API CI supporte l'authentification Basic Auth. Vous pouvez configurer un nom d'utilisateur et mot de passe pour acceder a vos environnements proteges.
Comment configurer le seuil d'echec ?
Utilisez le parametre 'threshold' (0-100) pour definir le score minimum acceptable. Si le score est inferieur, le scan retourne passed: false, que votre CI peut utiliser pour faire echouer le build.
Le CLI supporte-t-il les monorepos ?
Oui, vous pouvez creer un fichier .rgaachecker.json a la racine de chaque sous-projet avec des configurations differentes (URL, seuils, options).
Inclus dans vos plans Decouverte et Pro
L'integration CI/CD utilise le meme quota que vos scans web. Pas de surcout, pas de plan separe.
Automatisez vos audits d'accessibilite
Detectez les regressions avant qu'elles n'arrivent en production.
Commencer l'integration