Aller au contenu
Toutes les intégrationsIntégrations · GitHub

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.

Configuration

Six étapes, quatre minutes.

  1. Create an API key from the API keys page in your ScanAccess dashboard. Keys are prefixed sa_live_ (production) or sa_test_ (sandbox).

  2. 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.

  3. 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.

  4. Keep the rendering engine pinned to the version shown in the snippet — using another version triggers a runtime error.

  5. 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).

  6. 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.

Workflow

À copier tel quel.

.github/workflows/a11y.yml
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.

Cas d'usage

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.

FAQ

Questions courantes de configuration.

Comment obtenir une clé API ?

Connectez-vous à votre tableau de bord ScanAccess, allez dans Paramètres → Clés API et créez une clé. Stockez-la sous 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 ?

Non. L'Action compile votre application et la sert localement dans le runner GitHub. Chaque route est rendue dans un vrai navigateur sur le runner — rien ne sort de votre CI. Aucune règle de pare-feu ni adresse IP de sortie n'est nécessaire.

Pourquoi la version du moteur de rendu doit-elle correspondre au snippet ?

L'Action embarque un binaire de navigateur compilé pour la version indiquée dans le snippet. Utiliser une version différente provoque une erreur d'exécution. Conservez la version exactement telle qu'indiquée dans le snippet, avec l'étape de cache associée.

Quelles sont les limites du scan ?

Chaque scan CI couvre jusqu'à 30 routes. Pour les applications plus grandes, scannez vos routes les plus critiques — ou ouvrez un ticket de support pour des limites plus élevées.

Peut-elle bloquer ma build ?

Oui — l'input 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 ?

Auto-hébergez vos polices et CSS — ne dépendez pas d'URL CDN dans votre build de test. L'audit s'exécute dans un runner isolé ; les ressources externes peuvent être bloquées ou lentes. Intégrez ou regroupez tous les assets avant de servir.

Le résultat est-il identique à un scan manuel ?

Identique — même moteur d'audit, même scoring WCAG 2.2 AA, mêmes résultats. Le PDF de défense horodaté et vérifiable que votre avocat peut réclamer est généré depuis le même scan dans votre tableau de bord.

Est-ce que cela rend mon site conforme ADA ou EAA ?

Aucun outil ne peut le promettre — et ceux qui le font vous exposent (la FTC a sanctionné un éditeur d'overlay de 1 M$ en janvier 2025 pour exactement cette promesse). Les audits automatisés détectent ~25–57 % des problèmes. Ce que cette Action vous donne : une preuve documentée et horodatée d'effort de bonne foi à chaque release — ce que les tribunaux regardent vraiment.

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.