Skip to content

Releases: gonzoblasco/a11y-fixer

v0.6.0 - Fixer Engine, CLI, Docker Action

Choose a tag to compare

@gonzoblasco gonzoblasco released this 29 Jul 11:56
888f9c4

🛠️ a11y-fixer v0.6.0 — Fixer Engine, CLI, Docker Action

Accessibility audits for GitHub PRs, without SaaS lock-in.

This release marks a major milestone: the project has evolved from a Node-based MVP to a full Docker action with a CLI, fix suggestions engine, and production-ready infrastructure.


✨ What's new in v0.6.0

Fixer Engine (src/core/fixer.ts)

Generates concrete, actionable fix suggestions for accessibility violations with three fixability levels:

  • auto — safe, deterministic code patches (e.g. fixing aria-labeledbyaria-labelledby)
  • suggest — needs human review but provides replacement HTML (e.g. adding alt="" to images, wrapping content in <main>)
  • explain — cannot be automated, provides detailed guidance (e.g. color contrast ratios)

Supports 8 violation types with code patches in unified diff format.

CLI (a11y-fixer)

Run audits and fixes from the command line:

a11y-fixer audit --url http://localhost:3000
a11y-fixer fix --url http://localhost:3000
a11y-fixer suggest --url http://localhost:3000 --output json

Docker Action

The action now runs inside a Playwright Docker container (mcr.microsoft.com/playwright:v1.61.1-jammy), ensuring browser compatibility across all runners. No more Playwright installation issues.

Production-ready Infrastructure

  • Baseline cache via GitHub Actions artifacts — evolution comparison now works in production
  • Octokit native API — PR comments and check statuses use @actions/github with gh CLI fallback
  • Entry point guard — prevents accidental execution on import
  • target_url input — supports http://host.docker.internal:3000 for Docker container access
  • simple-git-hooks — pre-commit hook runs Biome + tests automatically

📈 Progress from v0.1.0 to v0.6.0

Version Focus Key Changes
v0.1.0 MVP: Core Engine Config, diff analyzer, route resolver, Playwright + axe-core, PR comments
v0.4.0 Docker Action Converted to Docker action for Playwright compatibility
v0.4.1 Execution Fix Added run() invocation at module level
v0.5.0 Container Networking target_url input, gh CLI updated
v0.5.1 PR Comment Fix --repo flag for gh, GITHUB_TOKEN env var
v0.6.0 Fixer + CLI Fix suggestions engine, CLI, GHA artifacts cache, octokit

🧪 Quality

  • 115 tests across 11 test suites
  • TypeScript strict mode
  • Biome lint + format
  • CI pipeline: typecheck → lint → tests → build
  • Integration tests with real axe-core + Playwright
  • Pre-commit hooks with simple-git-hooks

📚 Documentation


🔮 What's next

  • AI-powered fix suggestions with your own API key
  • GitHub Marketplace listing
  • PR suggestion comments (apply fixes directly from the PR)

Full changelog: CHANGELOG.md

v0.5.1 — gh pr comment fix + biome formatting

Choose a tag to compare

@gonzoblasco gonzoblasco released this 28 Jul 14:56
89c31bd

Fixed

  • gh pr comment now works inside Docker container — added --repo owner/repo flag so gh knows which repository to target, and set GITHUB_TOKEN env var in addition to GH_TOKEN for broader compatibility.
  • Biome formatting — fixed code style in github.ts.

Full changelog: CHANGELOG.md

v0.1.0 - MVP: Core Engine

Choose a tag to compare

@gonzoblasco gonzoblasco released this 27 Jul 18:42
17ec7e6

🛠️ a11y-fixer v0.1.0 — MVP: Core Engine

Accessibility audits for GitHub PRs, without SaaS lock-in.

a11y-fixer runs axe-core inside Playwright on every pull request, compares the results against your main branch, and posts a structured comment so your team catches accessibility regressions before they ship.

No external dashboard. No per-seat pricing. Your code, your runners, your keys.


✨ What ships in v0.1.0

Scan what matters

  • Hybrid route resolution: define core routes once, and let the bot auto-detect Next.js App Router pages changed in the PR.
  • Real browser engine: Chromium headless via Playwright, with configurable per-route timeouts.
  • Authenticated routes: cookies, HTTP headers, or Bearer tokens for pages behind login.

Understand the impact

  • Baseline comparison: every PR is compared against main — see what is new, what got fixed, and what remains persistent.
  • Suggested fixes: 8 built-in remediation templates for common axe-core rules (color contrast, alt text, labels, headings, and more).
  • Structured PR comments: clean markdown with status badge, impact severity, affected elements, and next steps.

Stay in control

  • .a11y-fixer.yml configuration: WCAG level, max impact threshold, max new violations, ignore rules.
  • Optional AI explanations using your own OpenAI / Anthropic / OpenRouter key.
  • CI-tested: 79 tests across 8 suites, with a full GitHub Actions pipeline.

🚀 Quick start

# .github/workflows/accessibility.yml
name: Accessibility Audit

on:
  pull_request:
    branches: [main]

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Start my app
        run: npm run dev &

      - uses: gonzoblasco/a11y-fixer@v0.1.0
        with:
          config: .a11y-fixer.yml
# .a11y-fixer.yml
level: AA
max_impact: serious
max_new_violations: 5
routes:
  core:
    - /
    - /login
    - /dashboard

📊 Example output

A failing PR comment looks like this:

Accessibility Check: FAILING — 3 new violations (threshold: 5)

Found 7 accessibility violations (3 new).

Violations

🔴 CRITICAL color-contrast — Ensures buttons have enough contrast

  • Element: .primary-button
  • HTML: &lt;button class=&quot;primary-button&quot;&gt;Submit&lt;/button&gt;
  • Issue: Fix the contrast ratio to at least 4.5:1.

How to fix it:
Adjust foreground and background colors until the contrast ratio is at least 4.5:1 for normal text or 3:1 for large text.

Evolution

  • 🆕 3 new — introduced in this PR
  • 🔄 4 persistent — already existed in main

Trend: ⬇️ This PR worsens accessibility


🧪 Tested and verified

  • ✅ 79 tests passing (8 suites)
  • ✅ TypeScript strict mode
  • ✅ Biome lint + format
  • ✅ CI pipeline: typecheck → lint → tests → build
  • ✅ Integration tests with real axe-core + Playwright

📚 Documentation


🔮 What is next

This release is the foundation. Upcoming phases include:

  • Fase 2: smarter thresholds, impacted-routes reporting, and diff-aware violation grouping
  • Fase 3: AI-powered fix suggestions with your own API key
  • Fase 4: GitHub Marketplace listing and documentation site

Full changelog: see the v0.1.0 milestone and the commit history.