Because tests are plain .js in your repo with no proprietary format, CI is
straightforward.
A minimal job
jobs: e2e: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npx @unotest/web install-chromium - run: npx @unotest/web collection smoke --workers=4 env: APP_BASE_URL: ${{ secrets.APP_BASE_URL }} TEST_USER_EMAIL: ${{ secrets.TEST_USER_EMAIL }} TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}Tips
- Browsers: run the bundled Chromium in CI; you can widen
browsersto Firefox/WebKit in your config. - Retries: turn on
retry.countfor CI (off in dev) to absorb transient flakiness — assertion failures still never retry. - Secrets: inject variables from your CI secret store; the runner masks them in logs and artifacts.
- Split:
smokeon every push,regressnightly. - iOS:
unotest mobileneeds macOS runners with Xcode.
Failure artifacts
On failure the bundle (screenshot, console,
semantic DOM, trace) is written under .unotest/failures/ — upload it as a CI
artifact for inspection.