♿ RGAA Daily Audit #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "♿ RGAA Daily Audit" | |
| on: | |
| schedule: | |
| # Every weekday at 06:00 UTC (08:00 Paris time) | |
| - cron: "0 6 * * 1-5" | |
| workflow_dispatch: | |
| inputs: | |
| site_url: | |
| description: "URL to audit (leave empty for alpha deployment)" | |
| required: false | |
| type: string | |
| concurrency: | |
| group: rgaa-audit | |
| cancel-in-progress: true | |
| jobs: | |
| scan: | |
| name: "axe-core scan" | |
| runs-on: ubuntu-latest | |
| outputs: | |
| site_url: ${{ steps.url.outputs.site_url }} | |
| audit_date: ${{ steps.date.outputs.today }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: alpha | |
| - name: Get current date | |
| id: date | |
| run: echo "today=$(date -u +%Y-%m-%d)" >> "$GITHUB_OUTPUT" | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: ".nvmrc" | |
| cache: pnpm | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Install Playwright browsers | |
| run: pnpm playwright:install | |
| - name: Compute alpha deployment URL | |
| if: ${{ !inputs.site_url }} | |
| id: env | |
| uses: socialgouv/kontinuous/.github/actions/env@v1 | |
| with: | |
| branch: alpha | |
| - name: Set site URL | |
| id: url | |
| env: | |
| INPUT_SITE_URL: ${{ inputs.site_url }} | |
| SUBDOMAIN: ${{ steps.env.outputs.subdomain }} | |
| run: | | |
| if [ -n "$INPUT_SITE_URL" ]; then | |
| echo "site_url=$INPUT_SITE_URL" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "site_url=https://${SUBDOMAIN}.ovh.fabrique.social.gouv.fr" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Wait for app to be ready | |
| env: | |
| SITE_URL: ${{ steps.url.outputs.site_url }} | |
| run: | | |
| for i in $(seq 1 10); do | |
| HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$SITE_URL" 2>/dev/null || echo "000") | |
| if [ "$HTTP_CODE" = "200" ]; then | |
| echo "App is ready!" | |
| exit 0 | |
| fi | |
| echo "Health check returned $HTTP_CODE (attempt $i/10). Waiting 10s..." | |
| sleep 10 | |
| done | |
| echo "::error::App not ready after 100 seconds" | |
| exit 1 | |
| - name: Run RGAA audit | |
| run: pnpm test:rgaa | |
| env: | |
| SITE_URL: ${{ steps.url.outputs.site_url }} | |
| PLAYWRIGHT_BASE_URL: ${{ steps.url.outputs.site_url }} | |
| CI: "true" | |
| - name: Upload axe-core results | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: rgaa-results | |
| path: packages/app/rgaa-results.json | |
| retention-days: 30 | |
| report: | |
| name: "Claude report & wiki publish" | |
| needs: scan | |
| if: always() && needs.scan.result != 'cancelled' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| id-token: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: alpha | |
| - name: Download axe-core results | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: rgaa-results | |
| path: . | |
| - name: Run Claude Code — Generate report & publish to wiki | |
| id: claude | |
| uses: anthropics/claude-code-action@9d86c9b0c946914e9c71ac5ee1c008959cbfa9af # v1 | |
| with: | |
| claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} | |
| show_full_output: true | |
| prompt: | | |
| Tu es un expert accessibilité RGAA. Tu dois rédiger un rapport d'audit RGAA à partir des résultats axe-core ci-dessous, puis le publier sur le wiki GitHub. | |
| ## Données | |
| - URL auditée : ${{ needs.scan.outputs.site_url }} | |
| - Commit : ${{ github.sha }} | |
| - Date : ${{ needs.scan.outputs.audit_date }} | |
| - Fichier de résultats : `rgaa-results.json` (à la racine du repo) | |
| ## Instructions | |
| 1. **Lis le fichier `rgaa-results.json`** qui contient les résultats axe-core pour chaque page auditée. | |
| 2. **Rédige un rapport Markdown** avec cette structure : | |
| ``` | |
| # Rapport RGAA — Egapro | |
| > Dernier audit : YYYY-MM-DD | Commit : SHA | URL : ... | Pages : N | |
| ## Résumé | |
| | Sévérité | Violations | | |
| |----------|-----------| | |
| | 🔴 Critique | N | | |
| | 🟠 Sérieuse | N | | |
| | 🟡 Modérée | N | | |
| | 🔵 Mineure | N | | |
| | **Total** | **N** | | |
| ## Actions prioritaires | |
| Liste numérotée des violations les plus impactantes, regroupées quand la même violation apparaît sur plusieurs pages. Pour chaque action : | |
| - Sévérité et règle axe-core | |
| - Pages concernées | |
| - Éléments CSS ciblés | |
| - **Suggestion de correction concrète** en utilisant les composants et classes DSFR (utilise le MCP dsfr pour vérifier) | |
| ## Détail par page | |
| ### Nom de la page (chemin) | |
| ✅ N règles passées | ⚠️ N incomplètes | ❌ N violations | |
| | Règle | Sévérité | WCAG | Élément | Description | Correction suggérée | | |
| |-------|----------|------|---------|-------------|-------------------| | |
| ``` | |
| 3. Pour le mapping WCAG → RGAA, utilise ces correspondances principales : | |
| - WCAG 1.1.1 → RGAA 1 (Images) | |
| - WCAG 1.3.x → RGAA 9 (Structure) | |
| - WCAG 1.4.x → RGAA 3 (Couleurs) et 10 (Présentation) | |
| - WCAG 2.1.x → RGAA 7 (Scripts) et 12 (Navigation) | |
| - WCAG 2.4.x → RGAA 12 (Navigation) | |
| - WCAG 3.1.x → RGAA 8 (Éléments obligatoires) | |
| - WCAG 4.1.x → RGAA 7 (Scripts) | |
| 4. **Utilise le MCP `dsfr`** pour chercher les composants et classes appropriés dans tes suggestions de correction. | |
| 5. **Publie le rapport sur le wiki GitHub** : | |
| ```bash | |
| git config --global user.name "github-actions[bot]" | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| git clone "https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}.wiki.git" /tmp/wiki | |
| # Écris le rapport dans /tmp/wiki/RGAA-Audit-Report.md | |
| cd /tmp/wiki | |
| git add RGAA-Audit-Report.md | |
| git diff --cached --quiet || git commit -m "Update RGAA audit report — ${{ needs.scan.outputs.audit_date }}" | |
| git push | |
| ``` | |
| 6. Ta réponse finale doit confirmer la publication et inclure un résumé des violations trouvées. | |
| claude_args: >- | |
| --max-turns 15 | |
| --mcp-config '{"mcpServers":{"dsfr":{"command":"npx","args":["-y","dsfr-mcp"]}}}' | |
| --allowedTools "Read,Bash(git *),Bash(cat *),mcp__dsfr__list_components,mcp__dsfr__get_component_doc,mcp__dsfr__search_components,mcp__dsfr__search_icons,mcp__dsfr__get_color_tokens" | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |