@@ -99,10 +99,48 @@ jobs:
9999 restore-keys : |
100100 ${{ runner.os }}-cargo-test-
101101 ${{ runner.os }}-cargo-
102-
102+
103103 - name : Run unit tests
104104 run : cargo test --workspace --exclude e2e-tests --verbose
105105
106+ coverage :
107+ name : Contract Coverage Gate
108+ runs-on : ubuntu-latest
109+ steps :
110+ - uses : actions/checkout@v4
111+
112+ - name : Install Rust toolchain
113+ uses : dtolnay/rust-toolchain@stable
114+ with :
115+ components : llvm-tools-preview
116+
117+ - name : Cache cargo registry
118+ uses : actions/cache@v4
119+ with :
120+ path : |
121+ ~/.cargo/registry
122+ ~/.cargo/git
123+ target
124+ key : ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }}
125+ restore-keys : |
126+ ${{ runner.os }}-cargo-coverage-
127+ ${{ runner.os }}-cargo-
128+
129+ - name : Install cargo-llvm-cov
130+ uses : taiki-e/install-action@cargo-llvm-cov
131+
132+ - name : Run 95% coverage gate
133+ run : ./scripts/test-coverage.sh --gate 95 --lcov
134+
135+ - name : Upload coverage reports
136+ uses : actions/upload-artifact@v4
137+ if : always()
138+ with :
139+ name : contract-coverage
140+ path : |
141+ target/coverage/
142+ target/coverage-reports/
143+
106144 performance :
107145 name : Performance Regression
108146 runs-on : ubuntu-latest
@@ -132,7 +170,7 @@ jobs:
132170 - uses : actions/checkout@v4
133171
134172 - name : Setup Node.js
135- uses : actions/setup-node@v4
173+ uses : actions/setup-node@v6
136174 with :
137175 node-version : " 20"
138176 cache : " npm"
@@ -159,10 +197,41 @@ jobs:
159197 visual-tests/test-results
160198 visual-tests/tests/__screenshots__
161199
200+ accessibility :
201+ name : Accessibility (WCAG AA)
202+ runs-on : ubuntu-latest
203+ timeout-minutes : 15
204+ steps :
205+ - uses : actions/checkout@v4
206+
207+ - name : Setup Node.js
208+ uses : actions/setup-node@v4
209+ with :
210+ node-version : " 20"
211+ cache : " npm"
212+
213+ - name : Install dependencies
214+ run : npm ci
215+
216+ - name : Install Playwright browsers
217+ run : npx playwright install chromium --with-deps
218+
219+ - name : Run accessibility tests
220+ run : npm run a11y:test
221+
222+ - name : Upload accessibility report
223+ if : always()
224+ uses : actions/upload-artifact@v4
225+ with :
226+ name : accessibility-report
227+ path : |
228+ visual-tests/accessibility-report/
229+ visual-tests/accessibility-reports/
230+
162231 ci-success :
163232 name : CI Success
164233 runs-on : ubuntu-latest
165- needs : [format, clippy, build, test, performance, visual-regression]
234+ needs : [format, clippy, build, test, coverage, performance, visual-regression]
166235 if : always()
167236 steps :
168237 - name : Check all jobs
@@ -171,15 +240,19 @@ jobs:
171240 "${{ needs.clippy.result }}" != "success" || \
172241 "${{ needs.build.result }}" != "success" || \
173242 "${{ needs.test.result }}" != "success" || \
243+ "${{ needs.coverage.result }}" != "success" || \
174244 "${{ needs.performance.result }}" != "success" || \
175- "${{ needs.visual-regression.result }}" != "success" ]]; then
245+ "${{ needs.visual-regression.result }}" != "success" || \
246+ "${{ needs.accessibility.result }}" != "success" ]]; then
176247 echo "One or more CI jobs failed"
177248 echo "Format: ${{ needs.format.result }}"
178249 echo "Clippy: ${{ needs.clippy.result }}"
179250 echo "Build: ${{ needs.build.result }}"
180251 echo "Test: ${{ needs.test.result }}"
252+ echo "Coverage: ${{ needs.coverage.result }}"
181253 echo "Performance: ${{ needs.performance.result }}"
182254 echo "Visual Regression: ${{ needs.visual-regression.result }}"
255+ echo "Accessibility: ${{ needs.accessibility.result }}"
183256 exit 1
184257 fi
185258 echo "✅ All CI jobs passed successfully"
0 commit comments