Skip to content
Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Attestable

Le relevé automatisé des non-conformités RGAA d'un site, rattachées aux critères numérotés du référentiel. Un audit dit où vous en étiez ; un relevé dit où vous en êtes, à chaque déploiement.

Un relevé n'est pas un audit et ne conclut jamais à la conformité : seul l'examen humain des 106 critères du RGAA en est capable (ADR-0002). Ce que le relevé donne, c'est un constat opposable sur la part du référentiel qu'une machine peut vérifier, et il dit toujours quelle part elle n'a pas regardée.

Deux faces, un seul moteur : l'analyse publique gratuite sur attestable.fr, et le contrôle en intégration continue documenté ici.

Le relevé en ligne de commande

pnpm install
pnpm --filter @attestable/moteur exec playwright install --with-deps chromium

node packages/moteur/src/cli.ts releve https://exemple.fr --fail-on=critical

Node 22.18 ou plus récent : la CLI est du TypeScript exécuté directement. Une fois le paquet lié, la commande s'appelle attestable releve <url>.

L'adresse d'accueil suffit, le périmètre en est déduit : les pages que déclare sitemap.xml s'il existe, sinon celles atteignables depuis l'URL de départ jusqu'à trois niveaux de liens, avec un plafond de 20 pages. Le robots.txt du site est respecté.

La sortie donne le score de conformité, la part du référentiel laissée non examinée, puis chaque non-conformité constatée avec sa gravité, son critère RGAA, la règle axe qui l'a produite, son nombre d'occurrences et les pages où elle apparaît.

Les seuils de gravité

--fail-on nomme la gravité à partir de laquelle le relevé fait échouer le contrôle. Le seuil est absolu : il nomme une gravité et ne se compare jamais à un relevé antérieur, donc un site déjà fautif ne passe pas au motif qu'il ne s'est pas dégradé.

Seuil Fait échouer
critical les non-conformités critiques
major les critiques et les majeures
minor les critiques, les majeures, les mineures
none rien : le relevé est rendu, sans verdict

La décision lit des gravités, jamais des quantités : une seule non-conformité critique fait échouer un seuil critical, et cinq cents mineures ne le font pas. Le défaut de la CLI est none, celui de l'Action critical.

Les codes de sortie

Code Sens Ce qu'il faut en faire
0 Relevé rendu, seuil non atteint Laisser passer
1 Relevé rendu, seuil atteint Bloquer : le site viole le référentiel
2 Aucun relevé n'a pu être produit Avertir, ne pas bloquer : rien n'a été vérifié

Les codes 1 et 2 sont distincts par construction. Un 1 est un constat sur le site ; un 2 est un constat sur le relevé — usage invalide, seuil inconnu, site injoignable, authentification requise, ou robots.txt qui interdit le crawl. Une panne réseau ne doit pas bloquer une mise en production, et un site interdit n'est pas un site fautif.

node packages/moteur/src/cli.ts releve "$SITE" --fail-on=critical
case $? in
  0) ;;
  1) echo "Seuil atteint" ; exit 1 ;;
  2) echo "Relevé impossible : le seuil n'a pas été vérifié" ;;
esac

L'Action GitHub

name: Accessibilité
on: [push]

jobs:
  releve:
    runs-on: ubuntu-latest
    steps:
      - uses: floperrier/attestable@v1
        with:
          site: https://exemple.fr
          fail_on: critical
Entrée Requise Défaut Sens
site oui URL de départ ; le périmètre en est déduit
fail_on non critical Le seuil de gravité, ou none

L'Action reprend la distinction des codes de sortie : un seuil atteint fait échouer le job, tandis qu'un relevé impossible est rendu en ::warning et laisse le build passer, en disant que le seuil n'a pas été vérifié.

L'étiquette @v1 suit les versions compatibles ; @main résout aussi, au prix de ce qui vient d'y être poussé.

Le provisionnement

Les services que le produit consomme s'installent une fois, et plusieurs de ces étapes ne peuvent être faites que par un humain devant un navigateur : acheter le domaine, vérifier un domaine d'envoi, lier une facturation.

./scripts/setup.sh

Le script ouvre chaque page au bon endroit, dit quoi y faire, et écrit ce qu'il récolte dans packages/app/.env — c'est le fichier que Next lit, et dont le worker lancé depuis l'application hérite. Il est relançable : chaque valeur déjà présente est proposée par défaut, et rien n'est créé deux fois.

Variable Lue par
DATABASE_URL l'application et le worker
RESEND_API_KEY l'annonce du relevé par email
APP_URL le lien vers le rapport, dans l'email
CRAWL_JOB le job Cloud Run à déclencher, absent en développement
CRAWL_JOB_AUDIENCE, CRAWL_JOB_ACCOUNT la fédération qui autorise ce déclenchement (ADR-0008)

Sans RESEND_API_KEY ni APP_URL, le relevé est produit et enregistré : il n'est simplement pas annoncé. Sans CRAWL_JOB, l'application lance le worker d'à côté au lieu du job Cloud Run — c'est ce qu'une machine de développement fait, et il n'y a rien à configurer pour ça.

Le dépôt

Paquet Rôle
packages/moteur Le moteur, la CLI et le worker de crawl
packages/app L'application : formulaire, progression, rapport
packages/vitrine Le site vitrine
pnpm test        # tous les paquets
pnpm typecheck
pnpm dev         # l'application
pnpm vitrine     # le site vitrine
pnpm worker      # consomme le plus ancien relevé en attente

CONTEXT.md porte le vocabulaire du projet, contraint par le référentiel et par le contrôle administratif ; docs/adr/ porte les décisions difficiles à revenir dessus, dont la définition du score et le refus de conclure.

La licence

FSL-1.1-ALv2 : la Functional Source License, avec bascule en Apache 2.0 au deuxième anniversaire de chaque version. Lire, modifier, exécuter, relever ses propres sites et ceux de ses clients : tout cela est permis. Ce qui ne l'est pas, c'est en faire un service concurrent de celui-ci.

Le choix suit ce que le projet vend, qui n'est pas le code : le service hébergé, la surveillance continue, et la table de correspondance tenue à jour au fil des versions du RGAA et d'axe-core.

About

Le relevé automatisé des non-conformités RGAA d'un site, à chaque déploiement — CLI, GitHub Action et analyse publique sur attestable.fr

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages