-
Notifications
You must be signed in to change notification settings - Fork 11
203 lines (169 loc) · 7.09 KB
/
rgaa-audit.yaml
File metadata and controls
203 lines (169 loc) · 7.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
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 }}