Sybqa

Guide · GitHub Actions and CI

Run a website QA check on every pull request

Save a reviewed Sybqa plan once. Each pull request or deploy then starts a run in a real browser, and your pull request gets a verdict, the most frequent failures, and a link to the evidence report.

Set it up in five minutes

  1. Plan a test. In the Sybqa console, paste your link, say what matters, and review the plan. Select Download plan JSON and commit the file as .sybqa/plan.json.
  2. Create a token. Open Evidence → API tokens, name it after the pipeline, and copy it. It is shown once. A token can start runs and read run results; it cannot change billing or read other workspaces.
  3. Save the secret. In your repository settings, add an Actions secret named SYBQA_API_TOKEN.
  4. Add the workflow. Save this as .github/workflows/sybqa.yml:
name: Sybqa QA
on: pull_request

permissions:
  contents: read
  pull-requests: write   # lets the action post the PR comment

jobs:
  sybqa:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: kavy-sybqa/sybqa/integrations/github-action@main
        with:
          api-token: ${{ secrets.SYBQA_API_TOKEN }}
          plan: .sybqa/plan.json
          target-url: https://staging.example.com
          github-token: ${{ github.token }}

Open a pull request. The job waits for the run, fails when a required check fails, and updates one comment instead of adding a new one on every push. Set fail-on: never for a first week of reporting without blocking merges.

Test each preview deployment

Hosts such as Vercel and Netlify report a preview URL through GitHub deployment events. Trigger on that event and pass the URL as target-url, so the run tests the build that was just deployed rather than a fixed staging site.

on: deployment_status
jobs:
  sybqa:
    if: github.event.deployment_status.state == 'success'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: kavy-sybqa/sybqa/integrations/github-action@main
        with:
          api-token: ${{ secrets.SYBQA_API_TOKEN }}
          plan: .sybqa/plan.json
          target-url: ${{ github.event.deployment_status.environment_url }}

Protected previews need access set up first. See the authenticated preview guide.

What lands on the pull request

Counts

Passed, failed, blocked and needs-review checks. Blocked and needs-review never count as passed.

Top failures

The five most frequent failures, so a long run still reads in ten seconds.

Report link

The full evidence report with screenshots and steps to reproduce. Opening it requires signing in to Sybqa.

Step outputs

verdict, run-id and report-url are available to later steps in the job.

fail-on controls the job result: fail (default) fails on failed checks or an unfinished run, review also fails on blocked or needs-review results, and never only reports.

Not on GitHub Actions?

Any CI can call the same API with the same token. Start a run with POST /api/runs and the exported plan, then poll GET /api/runs/<id> until the status is completed, blocked, failed or cancelled. The result field is pass, issues or incomplete.

RUN_ID=$(jq '{plan: .}' .sybqa/plan.json \
  | curl -sf -X POST https://app.sybqa.com/api/runs \
      -H "Authorization: Bearer $SYBQA_API_TOKEN" \
      -H 'Content-Type: application/json' --data-binary @- \
  | jq -r .id)

What it costs

CI runs use the same plan as runs started in the console. The free plan includes monthly runs without AI review, and every run counts, including reruns. AI review is part of the paid Starter plan. See pricing for the current numbers.

Start with one plan

You need a plan before the workflow has anything to run. Create a free account, point Sybqa at your site, and download the plan.

Run a free QA on my site See a sample report