Netlify
Automatically run QA against every Netlify deploy preview and report the result via your linked GitHub repository.
The Netlify integration watches deploy previews and production deploys via webhook. When a deploy reaches the ready state, Autonomy runs the configured test case or test plan against the immutable per-deploy permalink and, if a GitHub repository is linked, reports the result as a GitHub check run on the commit.
What it does
- Receives a webhook on every deploy state change (
deploy_created,deploy_building,deploy_succeeded,deploy_failed,deploy_request_pending). - Filters by deploy context (deploy-preview, production, or branch-deploy) and branch name.
- Runs the configured test case or test plan against the immutable per-deploy permalink URL.
- Reports the result as a GitHub check run on the commit when a GitHub repository is linked.
- Netlify has no native check surface — status reporting relies entirely on the linked GitHub repository.
- For forked-PR deploys held by Netlify for team-owner approval (
deploy_request_pending), the event appears with state "pending" in the dashboard until the deploy is approved.
Why the permalink
Autonomy targets the immutable per-deploy permalink (https://<deploy_id>--site.netlify.app) rather than the mutable branch-scoped URL. This ensures QA results attribute to an exact commit — a newer push to the same PR cannot change what the runner sees mid-test. The branch-scoped deploy URL (deploy_ssl_url) is used only as a fallback when the permalink is absent.
Setup
Before you start
- A Netlify account with at least one site that produces deploy previews.
- At least one Autonomy test case that passes against a web target.
- An Autonomy environment with a web target.
- For status reporting: the Autonomy GitHub App installed on the repository that Netlify deploys from.
- For self-hosted Autonomy: NETLIFY_CLIENT_ID and NETLIFY_CLIENT_SECRET configured on the Convex backend.
- Open Settings → Integrations in the Autonomy dashboard.
- Click Connect on the Netlify card. You are redirected to Netlify to authorize the OAuth application.
- Back in Autonomy, click Link Site. Autonomy lists the Netlify sites visible to your connected account — pick the one you want to test.
- Choose a Test Case or Test Plan as the default run target.
- Choose the Environment whose configuration should apply.
- Under Trigger contexts, select which deploy types start a run — typically
preview. Add Branch filters to limit runs to specific branches. - To report results back as a GitHub check, enable Report checks and select the Linked repository. The Autonomy GitHub App must be installed on that repository.
- Open a pull request and confirm that a run starts when the Netlify deploy preview is ready.
How a run is triggered
When Netlify sends a deploy_succeeded webhook:
- Autonomy looks up the linked site by the Netlify site ID.
- The Netlify deploy context (
deploy-preview,production,branch-deploy) is normalized to Autonomy's vocabulary:preview,production, orbranch. - The context is checked against the site's trigger contexts and the branch against branch filters.
- If a default test target is configured, Autonomy creates a run targeting the immutable per-deploy permalink URL.
Forked-PR deploys
When a deploy comes from a forked pull request, Netlify holds it for team-owner approval and sends a deploy_request_pending webhook. Autonomy records the event with state "pending" — it appears in the dashboard as awaiting approval. Once the deploy is approved and succeeds, a deploy_succeeded webhook triggers the run as usual.
Password-protected sites
If the Netlify site has password protection enabled (site-wide or per-deploy), the runner cannot reach the deploy preview. To configure bypass:
- In Autonomy, open the linked site's settings.
- Paste the site password into Preview access secret.
Autonomy injects the password as required by Netlify's protection mechanism. The secret never leaves the backend.
Status reporting
Netlify does not expose a native check or status surface for third-party integrations. Autonomy cannot post results directly to the Netlify dashboard.
To report results, link a GitHub repository to the Netlify site in Autonomy. When enabled, Autonomy posts a GitHub check run on the commit — the same mechanism the GitHub App uses. The check appears on the pull request and can be made a required status check under branch protection.
Important: If Report checks is enabled but no GitHub repository is linked, results will only appear in the Autonomy dashboard — not on the pull request or anywhere in Netlify. The dashboard shows a warning when this is the case.
Monorepo and multiple sites
A single GitHub repository can deploy multiple Netlify sites. Link each site independently in Autonomy — each gets its own test target, environment, trigger contexts, and branch filters. All linked sites can share the same linked GitHub repository for status reporting.
When Netlify sends a webhook, Autonomy matches it to the correct linked site by the Netlify site ID.
Environment variables (self-hosted)
| Variable | Required | Description |
|---|---|---|
| NETLIFY_CLIENT_ID | Yes | OAuth client ID from the Netlify OAuth application settings. |
| NETLIFY_CLIENT_SECRET | Yes | OAuth client secret from the Netlify OAuth application settings. |
Troubleshooting
No run starts when a deploy preview is ready
Check the following:
- The Netlify account is connected and showing Active in Autonomy.
- The Netlify site is linked. Autonomy only watches linked sites.
- The site is enabled. A disabled site records the event but skips the run (
project disabled). - The deploy context is in the site's trigger contexts. Netlify's
deploy-previewmaps topreview,productionmaps toproduction, andbranch-deploymaps tobranch. A mismatch skips withcontext <x> not enabled. - The branch matches the site's branch filters. A mismatch skips with
branch <x> filtered. - A default test case or test plan is selected. Without one the event is skipped with
no default test target. - The deploy reached the
readystate. A deploy inbuildingorerrorstate does not trigger a run (deployment not ready). - The deploy preview URL is present. If the webhook included no preview URL, the event is skipped with
no preview URL.
A deploy is stuck as "pending"
If a deploy appears as "pending" in Autonomy and never triggers a run, it is likely a forked-PR deploy held by Netlify for team-owner approval (deploy_request_pending). Approve the deploy in Netlify — a deploy_succeeded webhook will follow and trigger the run.
The run cannot reach the deploy preview
The deploy preview URL may be blocked by site-level password protection. If the run fails on a password page, add the site password as the Preview access secret.
No check appears on the pull request
Netlify has no native check surface. Status reporting requires:
- Report checks enabled on the linked site.
- A Linked repository selected.
- The Autonomy GitHub App installed on that repository.
If any of these are missing, the event's report status is unsupported and no check is posted. If checks are enabled but no repository is linked, results appear only in the Autonomy dashboard.
Duplicate runs for the same deploy
Autonomy deduplicates by a key that includes the Netlify deploy ID and state. A redelivered webhook produces no second run.