GitHub Actions browser testing

Run Monito browser tests from GitHub Actions with OIDC, wait for the verdict, and link failed checks to browser evidence on your pull request.

CI/CD · Checked 2026-10-23

Use a project-scoped OIDC binding to run your saved browser tests on pull requests and pushes. The generated workflow waits for results and publishes them in GitHub.

How it works

  1. A pull request, push to the default branch or manual dispatch starts the bound workflow. GitHub issues a short-lived OIDC token.
  2. The CLI launches your project's saved scenarios in Monito's browser and waits for their results.
  3. The verdict appears in the job summary and Monito check, with links to evidence. A failure creates or updates a PR comment; a later pass updates that existing comment.

Set it up

Pro or Team. Creating this integration requires an active plan; browser runs use your Monito credits. Plan details

  1. Create a Monito project and save the scenarios you want to run. Sign in with monito auth login and gh auth login.
  2. Run monito ci plan --execution blocking --auth oidc --project project_123 --json with your project ID. Review the workflow and trust binding before applying them.
  3. Run monito ci apply --execution blocking --auth oidc --project project_123 --yes to write the workflow and register its binding. Copying YAML alone does not establish trust.
  4. Commit the generated workflow through your usual review process. Run monito ci verify --execution blocking --auth oidc --project project_123 --remote-auth --json to verify authentication without running tests or spending credits.
.github/workflows/monito.yml · yaml
# Generated by Monito CLI
# Project: project_123
name: Monito QA
run-name: Monito QA ${{ inputs.verification_id || github.sha }}

on:
  workflow_dispatch:
    inputs:
      auth_check:
        description: Verify the Monito credential without running tests
        required: false
        type: boolean
        default: false
      verification_id:
        description: Correlates an automated credential check
        required: false
        type: string
  pull_request:
  push:
    branches:
      - "main"

permissions:
  checks: write
  pull-requests: write
  contents: read
  id-token: write

jobs:
  monito:
    if: >-
      (github.event_name != 'pull_request' ||
      github.event.pull_request.head.repo.full_name == github.repository)
    runs-on: ubuntu-latest
    timeout-minutes: 15
    env:
      GITHUB_TOKEN: ${{ github.token }}
      MONITO_GITHUB_OIDC: "1"
      MONITO_PROJECT_ID: "project_123"
      PROJECT_ID: "project_123"
    steps:
      - uses: actions/setup-node@v6
        with:
          node-version: 24

      - name: Verify Monito credential
        if: ${{ inputs.auth_check }}
        run: npx -y @monitodev/cli@4 auth status --json

      - name: Run Monito project
        if: ${{ !inputs.auth_check }}
        run: npx -y @monitodev/cli@4 project run "$PROJECT_ID" --wait --github-summary --github-check --github-comment

The exact CLI-generated OIDC workflow in the CI guide, for project_123 and default branch main. Generate it for your own project to register the matching binding.

Example result

Example result: field names from the CLI, values illustrative

Selected fields from project run --wait --json. Each runs entry has its own id, status and sessionId. Add --json to read the full result. Open /session/<sessionId> on Monito, or follow the run report from the dashboard or GitHub summary to inspect browser evidence.

Illustrative result · JSON
{
  "runs": [
    {
      "id": "run_example",
      "scenarioId": "scenario_example",
      "status": "failed",
      "sessionId": "session_example"
    }
  ]
}

Limits to account for

OIDC permits CI status and run operations only for the bound project, including runs against its environments or a base-URL override. Saved logins remain bound to approved origins.

Pull request runs use the workflow from the pull request. Anyone who can push a branch to your repository can use that project access and spend its credits. The generated workflow skips fork pull requests. Keep GitHub's Send write tokens to workflows from pull requests setting off for a bound private or internal repository.

The workflow checks saved scenarios against their configured environment. It does not deploy your branch. Use the deployment_status setup when you need to wait for a preview URL.

The CLI exits 1 for a failed or errored scenario. A GitHub check can be neutral when only Monito-caused errors remain, or when collection stops early. GitHub reporting errors warn without changing the CLI exit code.

Comparable benchmark runs

Our team published these runs in the reliability benchmark. They show comparable browser journeys, not executions of the configuration or illustrative result above. Run your own scenario before relying on this integration.

Benchmark method and limits

Read the full guide