Skip to content

CI Trigger CLI

ewyct edited this page Jul 4, 2026 · 1 revision

CI Trigger CLI & Embedded Browsers

This page replaces the old "Remote Runners" page. The standalone runner daemon that executed Playwright on remote machines has been retired. All test execution now happens inside Embedded Browsers (EBs), and CI integrates by triggering builds with the browser-free @lastest/runner CLI.


How execution works now

There is no local-Playwright fallback and no remote-runner daemon. Every test — run or recording — executes inside an Embedded Browser: a containerized Chromium with CDP live streaming back to the UI. If no EB is available, the run fails rather than falling back to the host.

EBs come in two flavors:

Flavor What it is When to use
System-managed (default) EBs auto-provisioned into your cluster — k3d locally, your Kubernetes cluster in production — from an on-demand pool (one EB per test, worker-pool per build, warm-pool keep-alive, restricted egress). The default for almost everyone. Nothing to install.
Bring-your-own (BYO) You run the lastest-eb container yourself and register it in Settings → Runners to get a token. The browser runs on the machine/network/OS you choose. The replacement for old "remote runners" — run the browser near a private environment, on a specific OS, or on your own hardware.

Registering a BYO Embedded Browser

  1. Go to Settings → Runners & API Access (admin only) and click Create.
  2. Name it and copy the token (shown only once).
  3. Start the container on the target machine:
docker run -d --name lastest-eb \
  -e LASTEST_TOKEN=YOUR_TOKEN \
  -e LASTEST_URL=https://your-lastest-server \
  -p 9223:9223 -p 9224:9224 \
  ewyc/lastest-eb:latest

The registered EB reports its status in Settings → Runners and is used for both running and recording.


The @lastest/runner CLI (CI trigger)

@lastest/runner is a lightweight, browser-free npm client. It creates a build on your Lastest server and polls for the result — it never launches a browser and executes nothing locally. The EB pool does all the work server-side.

npx @lastest/runner trigger -r owner/repo -t YOUR_TOKEN -s https://your-lastest-server

Get YOUR_TOKEN from Settings → Runners & API Access (shown once at create time).

trigger options

Option Description Default
-r, --repo <id-or-name> Repository ID or full name (e.g. owner/repo) required
-t, --token <token> Authentication token
-s, --server <url> Lastest server URL
--timeout <ms> Timeout waiting for the build to complete 300000
--branch <branch> Git branch (defaults to $GITHUB_HEAD_REF / $GITHUB_REF_NAME)
--commit <sha> Git commit SHA (defaults to $GITHUB_SHA)
--target-url <url> Override base URL for test execution
--fail-on-changes Exit 1 when visual changes are detected (review_required) off

Exits 0 on passed / safe_to_merge (or review_required without --fail-on-changes); exits 1 on failed / blocked / timeout. Writes GITHUB_OUTPUT and GITHUB_STEP_SUMMARY automatically.

List repositories

lastest-runner repos -t YOUR_TOKEN -s https://your-lastest-server

-t / -s can be omitted if a previous run saved them to ~/.lastest/runner.config.json.


CI examples

GitHub Actions (CLI)

jobs:
  visual-tests:
    runs-on: ubuntu-latest
    steps:
      - name: Run visual regression tests
        run: |
          npx @lastest/runner trigger \
            -r ${{ github.repository }} \
            -t ${{ secrets.LASTEST_TOKEN }} \
            -s ${{ vars.LASTEST_SERVER }}

GitLab CI

visual-tests:
  image: node:20-bookworm
  script:
    - npx @lastest/runner trigger -r my-group/my-repo -t $LASTEST_TOKEN -s $LASTEST_SERVER

Reusable GitHub Action

Zero-config CI — no local Playwright, no browser. The action triggers a build on your server (executed in the EB pool) and surfaces status + build URL + counts. See CI/CD Integration.

- name: Run visual regression tests
  uses: las-team/lastest/action@main
  with:
    server-url: ${{ secrets.LASTEST_SERVER_URL }}
    runner-token: ${{ secrets.LASTEST_TOKEN }}
    fail-on-changes: 'false'

Troubleshooting

Symptom Fix
Build never completes / times out Confirm an EB (system or BYO) is available for the team; increase --timeout for large suites; open the printed build URL for diagnostics.
trigger fails immediately Verify the server URL is reachable from CI; check the token wasn't revoked in Settings → Runners; confirm --repo matches a repo ID or owner/repo your team owns.
Runs fail with "no embedded browser available" For BYO, check the container is running and reachable on ports 9223/9224; for system EBs, check cluster capacity and the EB image is imported.

See also

Clone this wiki locally