#2475·Sortable

Modern CI Pipeline: Playwright + GitHub Actions (replaces TestCafe/Sauce Labs)

Author: samuelfaCreated Aug 30, 2026Updated Aug 30, 2026

Summary

We've built a complete modern CI pipeline for Sortable in our fork (samuelfa/Sortable) that replaces the legacy TestCafe + Sauce Labs setup with Playwright + GitHub Actions.

What's Working in samuelfa/Sortable

Feature Status
Cross-browser testing ✅ Chromium, Firefox, WebKit, Mobile Chrome/Safari
Code coverage ✅ ~59% statements across 3 browsers (babel-plugin-istanbul)
Linting ✅ ESLint + Prettier
Security audit ✅ npm audit (0 vulnerabilities)
Unused code detection ✅ Knip
Dependency updates ✅ Dependabot + weekly check
Bundle size tracking ✅ Automated PR comments
Static analysis ✅ CodeQL SAST
Code coverage CI ✅ Weekly scheduled run with 80% thresholds

Key Improvements

  1. Playwright instead of TestCafe - Native cross-browser support, faster, better debugging
  2. GitHub Actions instead of Sauce Labs - Free for public repos, no external dependency
  3. Real code coverage - Fixed Istanbul instrumentation to work in browser (babel-plugin-istanbul with coverageGlobalScope: 'window')
  4. 108 tests passing on 4 browser projects
  5. Zero external dependencies - Everything runs on GitHub runners

PRs in samuelfa/Sortable

  • #1: Playwright migration
  • #2: CI documentation
  • #3: Security audit workflow
  • #4: Knip workflow
  • #5: Dependabot + dependency check
  • #6: Coverage baseline
  • #7: CodeQL + bundle size
  • #8: Coverage workflow fix
  • #9: Coverage migration to babel-plugin-istanbul (merged)

Proposal

We'd like to contribute this modern CI pipeline upstream. The changes are:

  1. Phase 1: Docs cleanup - Remove TestCafe/Sauce Labs references, update badges
  2. Phase 2: Toolchain migration - Actual CI workflow files and configuration

Would the maintainers be open to reviewing these changes? We can prepare clean PRs for each phase.

Demo

Run locally:

bash
npm run test        # 108 tests on 4 browsers
npm run coverage    # ~59% cross-browser coverage
npm run lint        # passes
npm audit           # 0 vulnerabilities

See: https://github.com/samuelfa/Sortable/tree/ci/full-suite-coverage