Détectez le risque ADA et EAA à chaque pull request.
L'Action exécute un audit WCAG 2.2 AA complet dans votre propre runner — votre app est buildée et rendue dans un vrai navigateur, sans URL publique, sans crawler, rien ne sort de votre CI. Les nouvelles non-conformités sont postées directement sur la PR, avec des corrections en clair indiquant quel fichier, quelle ligne et quel attribut changer.
Six étapes, quatre minutes.
Create an API key from the API keys page in your ScanAccess dashboard. Keys are prefixed sa_live_ (production) or sa_test_ (sandbox).
Store the key as SCAN_ACCESS_API_KEY in your repository's GitHub Secrets (Settings → Secrets and variables → Actions). Keys are shown once at creation.
Make sure your project has a build step (npm run build) that outputs a static bundle, and that npx serve can serve it on a local port.
Keep the rendering engine pinned to the version shown in the snippet — using another version triggers a runtime error.
Copy this workflow into .github/workflows/a11y.yml. Set your app routes under routes: (one per line). Adjust fail-on if needed (never|minor|moderate|serious|critical|any — default: critical).
Open a pull request. The Action runs, posts findings as a PR check, and uploads a SARIF file to the Security tab of your repository.
À copier tel quel.
name: Accessibility audit
on:
pull_request:
permissions:
contents: read
pull-requests: write
security-events: write
jobs:
a11y:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22"
- run: npm ci
- run: npm run build
- run: npx serve -l 4173 ./dist &
- uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-chromium-1.60.0
- run: npx playwright@1.60.0 install --with-deps chromium
- uses: ghostdog-dev/scan-access-action@v2
id: a11y
with:
api-key: ${{ secrets.SCAN_ACCESS_API_KEY }}
app-url: http://localhost:4173
routes: |
/
/pricing
/about
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: ${{ steps.a11y.outputs.sarif-file }}Important notes
Épinglez Playwright à 1.60.0
Ne changez pas la version de Playwright. L'Action embarque un binaire Chromium compilé pour 1.60.0. Toute discordance provoque une erreur « Executable doesn't exist » qui fera échouer votre workflow silencieusement jusqu'à ce que le cache soit vidé.
Auto-hébergez polices et CSS
Playwright s'exécute dans un runner isolé. Les ressources CDN externes (Google Fonts, Tailwind CDN) peuvent être bloquées ou expirer. Regroupez ou intégrez tous les assets dans votre build avant de servir.
Permissions requises
Le workflow nécessite contents: read, pull-requests: write (pour publier la vérification de PR) et security-events: write (pour importer le fichier SARIF). Sans ces permissions, l'Action échouera avec une erreur 403 à l'étape d'import SARIF.
Ne forcez pas le chemin de cache du navigateur
Définir PLAYWRIGHT_BROWSERS_PATH écrase l'emplacement du cache par défaut et casse l'étape de cache/restauration. Utilisez le chemin de cache ~/.cache/ms-playwright comme indiqué dans le snippet.
Livrez vite sans livrer un procès.
Thème Shopify / application Remix
Bloquez les régressions de contraste et d'alt avant qu'elles n'atteignent vos clients — et voyez quelle app tierce (Klaviyo, Yotpo, Privy) a introduit chacune.
SaaS Next.js / Astro / Vite
S'exécute à chaque preview deploy. Votre app est buildée et rendue dans le runner — aucune URL publique. Chaque route auditée selon WCAG 2.2 AA avant le merge.
Agence numérique (multi-clients)
Un workflow par dépôt client, tous reliés à un seul compte agence. Le plan Agency couvre 1 000 scans CI/mois sur jusqu'à 50 sites — rapports white-label inclus.
Questions courantes de configuration.
Comment obtenir une clé API ?
SCAN_ACCESS_API_KEY dans les GitHub Secrets de votre dépôt. Les clés utilisent le préfixe sa_live_ pour la production et sa_test_ pour le bac à sable.L'Action a-t-elle besoin d'une URL publique ou d'un accès sortant ?
Pourquoi la version du moteur de rendu doit-elle correspondre au snippet ?
Quelles sont les limites du scan ?
Peut-elle bloquer ma build ?
fail-on accepte never | minor | moderate | serious | critical | any. La valeur par défaut est critical. Utilisez never pour le mode consultatif et agissez sur les résultats dans un job en aval via les sorties de l'action.Pourquoi mon application affiche-t-elle des polices ou styles cassés ?
Le résultat est-il identique à un scan manuel ?
Est-ce que cela rend mon site conforme ADA ou EAA ?
Livrez des PRs accessibles — et prouvez-le.
Créez une clé API et ajoutez le workflow. Scanner démarre à 29 $/mois pour 40 scans / mois.