QAdottech/run-action repository ships two GitHub Actions you can use from any workflow:
Picking an integration mode:
- Use the Test Run Action for regression suites, scheduled runs, and deployment gates where you decide which tests run.
- Use the Change Review Action when the GitHub App’s automatic PR review is not flexible enough. Common cases: projects with more than one application per PR (where the App’s environment mapping is fiddly), workflows that need to trigger reviews on labels or after a specific deploy job, or pipelines that need to route specific application short IDs to specific preview URLs per PR.
QAdottech/run-action repo. The Change Review Action calls the same review agent the GitHub App runs and requires the GitHub App to be installed at the organization level with access to the repository so the agent can read and review the PR. Unlike the App’s automatic trigger, it does not require you to map the repository to a project in QA.tech (the action passes the repo and preview URLs inline); it just lets you drive the review from CI instead of (or alongside) the App’s automatic trigger.See CI/CD Integration for the broader picture.Test Run Action
Trigger a test plan from a workflow. Use this when you want full control over which tests run, when, and where.Setup
1
Configure Secrets
Add a secret to your GitHub repository (Settings → Secrets and variables → Actions). Create the token in Organization Settings → API Keys. Store it as
QATECH_API_TOKEN. Project-scoped keys are bound to one project. Org-scoped keys can see multiple projects and need projectShortId on API calls.Pass project_short_id on the action. Copy it from the project URL or Settings (for example proj_abc123).2
Create Workflow
Create
.github/workflows/qatech.yml:Implementation patterns
Run on pull requests
Test preview deployments
Test a mobile PR build
Native apps have no preview URL. Build the APK or simulator.app in the workflow, upload it, then pass applicationBuildShortId in applications_config instead of url. Full workflows (test plan and change review) are in PR Testing for Mobile Apps.
Persist environment custom headers
PasscustomHeaders on any environment in applications_config to persist host-pattern header rules (auth and protection bypass). The Test Run Action and Change Review Action both accept this field. The preview deployment example shows it in a full workflow.
customHeaders works with url, shortId, or applicationBuildShortId. Omit the field to leave stored headers unchanged. Pass [] to clear them. The Start Run API uses the same customHeaders shape on applications[].environment (array of application objects, not a map). See Environment custom headers.
Scheduled testing
Use action outputs
Test Run Action reference
Inputs
Outputs
Change Review Action
Trigger a QA.tech autonomous change review on a pull request directly from your workflow. The action callsPOST /v1/chat/change-review with the PR URL and your per-PR environment overrides. QA.tech then runs the same review agent the GitHub App uses: it selects relevant tests, fills coverage gaps, runs everything against your preview, and posts a native PR review on GitHub when it’s done. The action exposes the chat conversation URL as a workflow output, and (in blocking mode) the agent’s final assistant message and status.
The Change Review Action is an explicit trigger. It starts a review and
creates the QA.tech / PR Review GitHub check even when Auto-run on PRs
is disabled in the GitHub App integration. See PR Review check on
GitHub for how check
states differ between automatic, draft, and CI-driven reviews.
Setup
The Change Review Action runs the same agent as the GitHub App, so the GitHub App connection needs to be installed at the organization level with access to the repository. You do not need to map the repository to a project in QA.tech (that mapping only powers the App’s automatic trigger); the action passes the repo and preview URLs inline. The action then drives that agent from CI.1
Install the GitHub App
If you haven’t already, follow Install GitHub App to connect the App at the organization level under Settings → Organization → Connections and grant it access to the repository you want reviewed. Without the App connection (or repo access), the action’s chat will start but the agent has no permission to read your PR. You do not need to create a repository mapping under Settings → Integrations → GitHub App for the action; that mapping is only needed for the App’s automatic PR trigger.
2
Disable Auto-run on PRs (optional)
This step only applies if you have also mapped the repository under Settings
→ Integrations → GitHub App to enable the App’s automatic trigger. If you
want the action to be the only thing that triggers reviews on this repo, open
that page and turn off Auto-run on PRs. With auto-run off, QA.tech does
not create a QA.tech / PR Review check on PR open; the check appears when
this action (or a
@qa.tech comment) runs. Leave auto-run on if you want both
the automatic trigger and on-demand action runs. If you never mapped the
repository, there is no automatic trigger to disable.3
Configure Secrets
Reuse the
QATECH_API_TOKEN secret from the Test Run Action setup. Pass
project_short_id from the project URL or Settings (for example
proj_abc123).4
Find your application short IDs
Copy application short IDs from Settings → Applications & Envs (three-dot
menu → Copy Short ID), for example
app_abc123. Test Plans → API
Integration is a shortcut only when the app is already on a plan. New mobile
apps often have no plan yet. Projects with more than one application should
pass one entry per app so the agent knows which URL to test against.5
Create Workflow
Create On
.github/workflows/qatech-change-review.yml:pull_request events the action reads the PR URL from github.event.pull_request.html_url automatically, so pr_url is optional.Implementation patterns
Block the workflow until the review finishes
By default the action returns as soon as the chat conversation is created and the agent starts working. Setblocking: true to wait for the agent to finish (and post its native PR review) before the workflow step completes. The step fails when the review ends in FAILED or CANCELLED, which makes it suitable as a deployment gate.
chat_response is the agent’s final assistant text in the chat (which may summarize what it did but is not the GitHub review body); use it for logging or further automation, not as a replacement for the PR review.
Post-merge change review (no preview environments)
If you do not have per-PR preview environments, run the change review after merging to your main branch. The workflow deploys to staging/production, extracts the PR number from the merge commit, and reviews the merged PR’s changes against the deployed environment. Results are posted back on the merged PR as a comment.- The PR number is extracted from GitHub’s default merge/squash commit message format (
(#123)). - Direct pushes to
mainwithout a PR are skipped automatically (the review step is gated onsteps.pr.outputs.found). - Results are posted back on the merged PR as a comment, since the PR is already closed.
Route multiple applications to per-PR preview URLs
The most common reason to reach for this action over the GitHub App’s automatic trigger: projects with more than one application per PR (for example a frontend, a backend, and an admin dashboard). Pass one entry per application so the agent knows which preview URL to use for each. Each entry must include anenvironment with at least one of url, shortId, or applicationBuildShortId.
Override the device preset
PassdevicePresetShortId alongside environment to run the review against a specific device preset:
Add free-form context
Use thecontext input to guide the review with PR-specific or repo-wide instructions. You can also generate this context automatically with an AI agent — see PR Testing best practices.
Review a different PR
Setpr_url when the workflow runs outside a pull_request event (for example on workflow_dispatch):
Change Review Action reference
Inputs
Each environment in
applications_config must include one of:
url(plus optionalname) to point the application at a preview URL.shortIdto reference an existing environment short ID.applicationBuildShortIdto reference a previously uploaded mobile build.
customHeaders on any of those shapes persist host-pattern header rules on the environment (auth and protection bypass). Omit the field to leave stored headers unchanged; pass [] to clear them. See Environment custom headers.
See Start change review chat API for the request schema this maps to.
How runs are attributed
Runs started by a change review are labelled with the branch, commit, and author of the change under review, the same way Test Run Action runs are. The action readsbranch, commit_hash, commit_message, actor, and repository from the workflow’s github context and sends them with the request, so no extra inputs are needed.
When the action cannot supply them — for example on older action versions — QA.tech falls back to the head branch and head commit recorded for the pull request, so PR-mode reviews stay attributable either way.
Outputs
The agent posts its review natively on the PR. These outputs let you link to or log the chat conversation from your workflow; they are not the PR review body.How polling works
Whenblocking: true, the action polls GET /v1/chat/{chat_short_id} every 20 seconds until the latest assistant message reaches a terminal status:
Polling stops after an internal 60-minute timeout. Set a shorter
timeout-minutes on the step if you need a tighter cap.
Direct API alternatives
If you prefercurl over the Actions:
- Test runs: use the Start Run API to trigger runs and the Run Status API for polling.
- Change reviews: use the Start change review chat API and poll with Get chat conversation until the latest assistant message reaches
COMPLETED.
Related documentation
- CI/CD Integration - Overview of integration modes
- GitHub App - AI-powered automatic PR reviews via the GitHub App
- GitHub Deployments - Publish preview URLs from Actions for GitHub App reviews
- GitLab - Same patterns for GitLab CI and merge request reviews
- Start Run API - Complete test-run API documentation
- Environment custom headers - Persist auth and protection-bypass headers from Actions or the API
- Start change review chat API - Complete change review API documentation
- Notifications - Slack notification configuration
- PR Testing for Mobile Apps - Upload PR binaries and pin test plans or change reviews