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
- Playwright instead of TestCafe - Native cross-browser support, faster, better debugging
- GitHub Actions instead of Sauce Labs - Free for public repos, no external dependency
- Real code coverage - Fixed Istanbul instrumentation to work in browser (babel-plugin-istanbul with coverageGlobalScope: 'window')
- 108 tests passing on 4 browser projects
- 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:
- Phase 1: Docs cleanup - Remove TestCafe/Sauce Labs references, update badges
- 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:
npm run test # 108 tests on 4 browsers
npm run coverage # ~59% cross-browser coverage
npm run lint # passes
npm audit # 0 vulnerabilitiesSee: https://github.com/samuelfa/Sortable/tree/ci/full-suite-coverage
Source: SortableJS/Sortable