From f16c2b3a71b2385b40e9b3a8f7d331b9ca35ba2e Mon Sep 17 00:00:00 2001 From: John Gluck <141772680+JohnGluck@users.noreply.github.com> Date: Thu, 28 May 2026 12:04:01 -0700 Subject: [PATCH 1/4] Updated mintlify pages - Created qawolf/rest-overview.mdx - Created qawolf/deploy-success.mdx - Created qawolf/environment_terminated.mdx - Created qawolf/v0-ci-greenlight.mdx - Created qawolf/run-inputs-executables-signed-urls.mdx - Created qawolf/other-ci-node.mdx - Created qawolf/other-ci-webhook.mdx - Updated docs.json Mintlify-Source: dashboard-editor --- docs.json | 49 +++++---- qawolf/deploy-success.mdx | 91 ++++++++++++++++ qawolf/environment_terminated.mdx | 66 ++++++++++++ qawolf/other-ci-node.mdx | 102 ++++++++++++++++++ qawolf/other-ci-webhook.mdx | 75 +++++++++++++ qawolf/rest-overview.mdx | 33 ++++++ qawolf/run-inputs-executables-signed-urls.mdx | 67 ++++++++++++ qawolf/v0-ci-greenlight.mdx | 98 +++++++++++++++++ 8 files changed, 563 insertions(+), 18 deletions(-) create mode 100644 qawolf/deploy-success.mdx create mode 100644 qawolf/environment_terminated.mdx create mode 100644 qawolf/other-ci-node.mdx create mode 100644 qawolf/other-ci-webhook.mdx create mode 100644 qawolf/rest-overview.mdx create mode 100644 qawolf/run-inputs-executables-signed-urls.mdx create mode 100644 qawolf/v0-ci-greenlight.mdx diff --git a/docs.json b/docs.json index 3d30735..5c29b62 100644 --- a/docs.json +++ b/docs.json @@ -299,9 +299,29 @@ ] }, { - "tab": "Libraries", + "tab": "References", "icon": "braces", "pages": [ + { + "group": "@qawolf/emails", + "icon": "mail", + "pages": [ + { + "group": "API Reference", + "pages": [ + "qawolf/libraries/emails/api-reference/index", + "qawolf/libraries/emails/api-reference/mail", + "qawolf/libraries/emails/api-reference/client" + ] + }, + { + "group": "Troubleshooting", + "pages": [ + "qawolf/libraries/emails/troubleshooting" + ] + } + ] + }, { "group": "@qawolf/flows", "icon": "route", @@ -350,23 +370,14 @@ ] }, { - "group": "@qawolf/emails", - "icon": "mail", + "group": "REST", + "icon": "code", "pages": [ - { - "group": "API Reference", - "pages": [ - "qawolf/libraries/emails/api-reference/index", - "qawolf/libraries/emails/api-reference/mail", - "qawolf/libraries/emails/api-reference/client" - ] - }, - { - "group": "Troubleshooting", - "pages": [ - "qawolf/libraries/emails/troubleshooting" - ] - } + "qawolf/rest-overview", + "qawolf/deploy-success", + "qawolf/environment_terminated", + "qawolf/v0-ci-greenlight", + "qawolf/run-inputs-executables-signed-urls" ] } ] @@ -386,7 +397,9 @@ "pages": [ "qawolf/GitHub-GitHub-Actions-2a15b2a994fb800699f6dc99584915d0", "qawolf/GitLab-2a15b2a994fb805d9d14ff27726065ae", - "qawolf/circle-ci" + "qawolf/circle-ci", + "qawolf/other-ci-node", + "qawolf/other-ci-webhook" ] }, { diff --git a/qawolf/deploy-success.mdx b/qawolf/deploy-success.mdx new file mode 100644 index 0000000..7559c19 --- /dev/null +++ b/qawolf/deploy-success.mdx @@ -0,0 +1,91 @@ +--- +title: "webhooks/deploy_success" +description: "Triggers a test run against a deployment." +sidebarTitle: "webhooks/deploy_success" +--- + +`POST https://app.qawolf.com/api/webhooks/deploy_success` + + + If your build server supports `node`, use [`@qawolf/ci-sdk`](/libraries/ci-sdk) instead of calling this endpoint directly. + + +## Request + +```bash +curl -X POST https://app.qawolf.com/api/webhooks/deploy_success \ + -H "Authorization: Bearer $QAWOLF_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "branch": "main", + "sha": "de12adda500f2bc5a29dbd89f4fb1b0e1a31de81", + "deployment_type": "staging", + "deployment_url": "https://staging.example.com", + "hosting_service": "GitHub" + }' +``` + +## Request headers + +| Header | Value | +| --- | --- | +| `Authorization` | `Bearer ` | +| `Content-Type` | `application/json` | + +## Request body + +All fields are optional. + +### Commonly used + +| Field | Type | Description | +| --- | --- | --- | +| `branch` | string | Git branch name. Used to display in the UI and match pull requests on any linked repo. | +| `sha` | string | Git commit SHA. Used to create GitHub commit checks and display a link to the commit in the run UI. | +| `deployment_type` | string | Required if the target trigger is configured to match a deployment type. | +| `deployment_url` | string | Overrides the environment URL. Available in tests as `process.env.URL`. | + +### Advanced + +| Field | Type | Description | +| --- | --- | --- | +| `hosting_service` | string | `"GitHub"` or `"GitLab"`. Defaults to `"GitHub"`. | +| `commit_url` | string | Pass with `sha` if no hosting service repo is configured. Makes the commit ID a clickable link in the QA Wolf UI. | +| `variables` | object | Key/value pairs that override environment variables for every run triggered by this notification. | +| `deduplication_key` | string | Custom key controlling run cancellation behavior. By default, new runs cancel ongoing runs with the same branch/environment combination. | +| `ephemeral_environment` | boolean | Pass with `deployment_url` if the deployment is not associated with a code-hosting integration. | + +## Response + +```json +{ + "results": [ + { + "created_suite_id": "cl1f6i0in15676w115vt43vw2", + "trigger_id": "ckzoog9wy01720xyrvl8ah7gu" + } + ] +} +``` + +`results` is an array of matched triggers. Each entry contains either `created_suite_id` if a run was created, `duplicate_suite_id` if a run for this SHA already exists, or `failure_reason` if the run could not be created. + +## Response codes + +| Code | Description | +| --- | --- | +| `200` | Request accepted. Inspect the response body to confirm a run was created. | +| `401` | Missing or invalid API key. | +| `403` | Forbidden. Usually indicates a disabled team. | +| `404` | Run not found. | +| `405` | Method not allowed. Use `POST`. | +| `500` | Internal server error. Contact support if the issue persists. | + + + A 200 response does not guarantee a run was created. Inspect the response body to confirm. + + +## Related + +- [`@qawolf/ci-sdk`](/libraries/ci-sdk) +- [CI greenlight](/rest/ci-greenlight) \ No newline at end of file diff --git a/qawolf/environment_terminated.mdx b/qawolf/environment_terminated.mdx new file mode 100644 index 0000000..155a74b --- /dev/null +++ b/qawolf/environment_terminated.mdx @@ -0,0 +1,66 @@ +--- +title: "webhooks/environment_terminated" +description: 'Stops all runs targeting the environment and triggers flow promotion to the static base environment. The environment will show as "closed" in QA Wolf.' +--- + +`POST https://app.qawolf.com/api/webhooks/environment_terminated` + + + If your build server supports `node`, use [`@qawolf/ci-sdk`](/libraries/ci-sdk) instead of calling this endpoint directly. + + +## Request + +```bash +curl -X POST https://app.qawolf.com/api/webhooks/environment_terminated \ + -H "Authorization: Bearer $QAWOLF_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{"deploymentUrl": ""}' +``` + +## Request headers + +| Header | Value | +| --- | --- | +| `Authorization` | `Bearer ` | +| `Content-Type` | `application/json` | + +## Request body + +All fields are optional. + +| Field | Type | Description | +| --- | --- | --- | +| `environmentId` | string | ID of the ephemeral environment to terminate. | +| `environmentAlias` | string | Alias of the ephemeral environment to terminate. | +| `deploymentUrl` | string | Preview URL used when the environment was created via `deploy_success` with `ephemeral_environment: true`. | + +## Response + +```json +{ + "results": [ + { + "environmentId": "cl1f6i0in15676w115vt43vw2", + "promotionTaskId": "ckzoog9wy01720xyrvl8ah7gu", + "code": "terminated" + } + ] +} +``` + +## Response codes + +| Code | Description | +| --- | --- | +| `200` | Environment terminated successfully. | +| `401` | Missing or invalid API key. | +| `403` | Forbidden. Usually indicates a disabled team. | +| `404` | Environment not found. | +| `409` | Conflict. Environment is already terminated. | +| `500` | Internal server error. Contact support if the issue persists. | + +## Related + +- [`@qawolf/ci-sdk`](/libraries/ci-sdk) +- [Notify deploy](/qawolf/v0-ci-greenlight) \ No newline at end of file diff --git a/qawolf/other-ci-node.mdx b/qawolf/other-ci-node.mdx new file mode 100644 index 0000000..c336aaf --- /dev/null +++ b/qawolf/other-ci-node.mdx @@ -0,0 +1,102 @@ +--- +title: "Other CI (Node)" +description: "Trigger QA Wolf test runs from any CI system that supports Node.js." +icon: "webhook" +--- + +Use this guide if your CI system supports Node.js but does not have a dedicated QA Wolf integration page. + + + If your CI system does not support Node.js, use [Other CI (webhook)](/qawolf/other-ci-webhook) instead. + + + + Make sure you have: + + - A CI pipeline that runs after a successful deployment + - Node.js 18 or later available in your CI environment + - Admin access to your CI system's secret or environment variable storage + - At least one QA Wolf environment already configured + - A QA Wolf API key + + +## Find the QAWOLF\_API\_KEY + + + + Open the **Workspace name** dropdown in QA Wolf and click **Workspace Settings**. + + + Choose **Integrations** and click the copy icon to the right of **API Key** under **API Access**. + + + +Store the key as a secret in your CI system named `QAWOLF_API_KEY`. + +## Add the notify script to your repository + +Create a file at `.ci/notifyQaWolf.mjs` in the repository that corresponds to the deployments QA Wolf will be testing. + +```javascript +import assert from "assert"; +import { makeQaWolfSdk } from "@qawolf/ci-sdk"; + +const apiKey = process.env.QAWOLF_API_KEY; +assert(apiKey, "QAWOLF_API_KEY is required"); + +const sha = process.env.GIT_COMMIT_SHA; +assert(sha, "GIT_COMMIT_SHA is required"); + +const branch = process.env.GIT_BRANCH; +assert(branch, "GIT_BRANCH is required"); + +const { attemptNotifyDeploy } = makeQaWolfSdk({ apiKey }); + +const result = await attemptNotifyDeploy({ + branch, + sha, + deploymentType: "staging", + hostingService: "GitHub", // or "GitLab" + repository: { + name: "your-repo-name", + owner: "your-org-name", + }, +}); + +if (result.outcome !== "success") { + throw new Error(`Failed to notify QA Wolf: ${JSON.stringify(result)}`); +} +``` + + + Replace `GIT_COMMIT_SHA` and `GIT_BRANCH` with the environment variable names your CI system provides for the current commit SHA and branch. Replace `deploymentType` with the value your QA Wolf representative provides. Set `hostingService` to where your code is hosted — `"GitHub"` or `"GitLab"` — not where your pipeline runs. + + +## Run the notify script in your pipeline + +Add a step to your CI pipeline that runs after your deployment is healthy: + +```bash +npm install @qawolf/ci-sdk +node .ci/notifyQaWolf.mjs +``` + +## Verify the integration + + + + Trigger your CI pipeline with a new deployment. + + + Confirm the notify step completes without errors. + + + Open QA Wolf and confirm a new run appears under the expected environment. + + + +## Related + +- [`@qawolf/ci-sdk`](/libraries/ci-sdk) +- [CI greenlight](/rest/ci-greenlight) +- [Other CI (webhook)](/qawolf/other-ci-webhook) \ No newline at end of file diff --git a/qawolf/other-ci-webhook.mdx b/qawolf/other-ci-webhook.mdx new file mode 100644 index 0000000..27f1556 --- /dev/null +++ b/qawolf/other-ci-webhook.mdx @@ -0,0 +1,75 @@ +--- +title: "Other CI (webhook)" +description: "Trigger QA Wolf test runs from any CI system using the deploy webhook directly." +--- + +Use this guide if your CI system cannot run Node.js. This includes environments such as ArgoCD, locked-down runners, and minimal containers. + + + If your CI system supports Node.js, use [Other CI (Node)](/qawolf/other-ci-node) instead. + + + + Make sure you have: + + - A CI pipeline that runs after a successful deployment + - The ability to make HTTP requests from your CI environment (e.g. `curl`) + - Admin access to your CI system's secret or environment variable storage + - At least one QA Wolf environment already configured + - A QA Wolf API key + + +## Find the QAWOLF\_API\_KEY + + + + Open the **Workspace name** dropdown in QA Wolf and click **Workspace Settings**. + + + Choose **Integrations** and click the copy icon to the right of **API Key** under **API Access**. + + + +Store the key as a secret in your CI system named `QAWOLF_API_KEY`. + +## Add the deploy notification to your pipeline + +Add a step to your CI pipeline that runs after your deployment is healthy: + +```bash +curl -X POST https://app.qawolf.com/api/webhooks/deploy_success \ + -H "Authorization: Bearer $QAWOLF_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "branch": "$GIT_BRANCH", + "sha": "$GIT_COMMIT_SHA", + "deployment_type": "staging", + "hosting_service": "GitHub" + }' +``` + +Replace `$GIT_BRANCH` and `$GIT_COMMIT_SHA` with the environment variable names your CI system provides for the current branch and commit SHA. Replace `deployment_type` with the value your QA Wolf representative provides. Set `hosting_service` to where your code is hosted — `"GitHub"` or `"GitLab"` — not where your pipeline runs. + + + A 200 response does not guarantee a run was created. Inspect the response body to confirm. See [webhooks/deploy\_success](/rest/deploy-success) for full response details. + + +## Verify the integration + + + + Trigger your CI pipeline with a new deployment. + + + Confirm the notify step completes without errors. + + + Open QA Wolf and confirm a new run appears under the expected environment. + + + +## Related + +- [webhooks/deploy\_success](/qawolf/deploy-success) +- [Other CI (Node)](/qawolf/other-ci-node) +- [REST API](/qawolf/rest-overview) \ No newline at end of file diff --git a/qawolf/rest-overview.mdx b/qawolf/rest-overview.mdx new file mode 100644 index 0000000..9831651 --- /dev/null +++ b/qawolf/rest-overview.mdx @@ -0,0 +1,33 @@ +--- +title: "Overview" +description: "The QA Wolf REST API provides direct HTTP access to core platform actions." +--- + + + For most use cases, [`@qawolf/ci-sdk`](/libraries/ci-sdk) is the recommended over direct endpoint access. + + +## Authentication + +All endpoints require a `QAWOLF_API_KEY` passed as a Bearer token. + +```bash +Authorization: Bearer $QAWOLF_API_KEY +``` + +To find your API key, open the **Workspace Name** dropdown in QA Wolf and go to **Workspace Settings → Integrations → API Access**. + +## Base URL + +```text +https://app.qawolf.com +``` + +## Endpoints + +| Endpoint | Method | Description | +| --- | --- | --- | +| [`/api/webhooks/deploy_success`](/qawolf/deploy-success) | `POST` | Notify QA Wolf of a successful deployment to trigger a run. | +| [`/api/webhooks/environment_terminated`](/qawolf/environment-terminated) | `POST` | Notify QA Wolf that an ephemeral environment has been terminated. | +| [`/api/v0/ci-greenlight/{root-run-id}`](/qawolf/v0-ci-greenlight) | `GET` | Poll for the outcome of a run to gate a pipeline. | +| [`/api/v0/run-inputs-executables-signed-urls`](/qawolf/run-inputs-executables-signed-urls) | `GET` \+ `PUT` | Generate a signed URL and upload an executable file. | \ No newline at end of file diff --git a/qawolf/run-inputs-executables-signed-urls.mdx b/qawolf/run-inputs-executables-signed-urls.mdx new file mode 100644 index 0000000..c4585a5 --- /dev/null +++ b/qawolf/run-inputs-executables-signed-urls.mdx @@ -0,0 +1,67 @@ +--- +title: "v0/run-inputs-executables-signed-urls" +description: "Generate a signed URL and upload an executable file to QA Wolf." +--- + +`GET https://app.qawolf.com/api/v0/run-inputs-executables-signed-urls` + + + Only the following file types are accepted: `.apk`, `.aab`, `.deb`, `.ipa`, `.zip`, `.csv`, `.pdf` + + +## Generate a signed URL + +```bash +curl "https://app.qawolf.com/api/v0/run-inputs-executables-signed-urls?file=$DESTINATION_FILE_PATH" \ + -H "Authorization: Bearer $QAWOLF_API_KEY" +``` + +### Query parameters + +| Parameter | Description | +| --- | --- | +| `file` | Destination file path. At minimum the filename and extension. May include directories. | + +### Response + +```json +{ + "fileLocation": "$TEAM_ID/$DESTINATION_FILE_PATH", + "playgroundFileLocation": "$DESTINATION_FILE_PATH", + "signedUrl": "https://..." +} +``` + +| Field | Description | +| --- | --- | +| `fileLocation` | Full path including team ID. Use this to reference the file in run configurations. | +| `playgroundFileLocation` | Path without team ID. Use this to reference the file in the playground. | +| `signedUrl` | Pre-signed URL for uploading the file. Use in the next step. | + +## Upload the file + +`PUT {signedUrl}` + +The signed URL is returned by the previous request. It is not a fixed `/api/` endpoint — it points directly to Google Cloud Storage. + +```bash +curl -X PUT \ + --header "Content-Type: application/octet-stream" \ + --data-binary @some_file.zip \ + $SIGNED_URL +``` + +## Response codes + +| Code | Description | +| --- | --- | +| `200` | Success. | +| `401` | Missing or invalid API key. | +| `403` | Forbidden. Usually indicates a disabled team. | +| `500` | Internal server error. Contact support if the issue persists. | + +## Related + +- [Upload files](/qawolf/Uploading-manually) +- [`@qawolf/ci-sdk`](/libraries/ci-sdk) +- [Notify deploy](/qawolf/deploy-success) \ No newline at end of file diff --git a/qawolf/v0-ci-greenlight.mdx b/qawolf/v0-ci-greenlight.mdx new file mode 100644 index 0000000..b95b502 --- /dev/null +++ b/qawolf/v0-ci-greenlight.mdx @@ -0,0 +1,98 @@ +--- +title: "v0/ci-greenlight" +description: "Returns the outcome of a run for use as a pipeline gate." +--- + +`GET https://app.qawolf.com/api/v0/ci-greenlight/{root-run-id}` + + + If your build server supports `node`, use [`@qawolf/ci-sdk`](/libraries/ci-sdk) instead of calling this endpoint directly. + + +## Request + +```bash +curl https://app.qawolf.com/api/v0/ci-greenlight/ \ + -H "Authorization: Bearer $QAWOLF_API_KEY" +``` + +## Request headers + +| Header | Value | +| --- | --- | +| `Authorization` | `Bearer ` | + +## Query parameters + +| Parameter | Values | Description | +| --- | --- | --- | +| `outcomeWhenBlockingBugsInOtherWorkflows` | `green` \| `red` | Defaults to `green`. When set to `red`, `greenlight` will be `false` if blocking bugs were found in workflows not executed in this run. Experimental. | + +## Response + +| Field | Description | +| --- | --- | +| `greenlight` | `true` when `runStage` is `"completed"` and zero blocking bugs were found. | +| `relevantRunId` | ID of the most recent superseding run, if one exists. Otherwise matches `rootRunId`. | +| `relevantRunUrl` | URL to the relevant run in QA Wolf. | +| `relevantRunWithBugsUrl` | URL to the relevant run filtered to workflows diagnosed as bugs. | +| `rootRunId` | ID of the run passed in the request. | +| `rootRunUrl` | URL to the root run in QA Wolf. | +| `runStage` | One of `"initializing"`, `"underReview"`, `"completed"`, `"canceled"`. | +| `workflowsDisabledAfterRunCount` | Number of workflows disabled after review. | +| `workflowsInRunCount` | Total number of workflows in this run. | +| `workflowsUnderInvestigationCount` | Number of failed workflows requiring investigation. | + +### Conditional fields + +Present when `runStage` is `"underReview"` or `"completed"`, except where noted. + +| Field | Description | +| --- | --- | +| `blockingBugsCount` | Number of blocking bugs found after review. Present when `runStage` is `"completed"`. | +| `nonBlockingBugsCount` | Number of non-blocking bugs found after review. Present when `runStage` is `"completed"`. | +| `workflowsAutoRetryingCount` | Number of workflows still auto-retrying. Present when `runStage` is `"underReview"`. | +| `blockingBugUrls` | Array of URLs to blocking bugs. | +| `nonBlockingBugUrls` | Array of URLs to non-blocking bugs. | +| `reproducedBugs` | Array of detailed bug objects. | + +## Interpreting `greenlight` + +`greenlight` is `true` only when: + +- `runStage` is `"completed"`, and +- Zero blocking bugs were found. + +A bug is blocking if its priority is `"high"` or unset. Newly found bugs are unset by default and count as blocking. You can lower a bug's priority in the QA Wolf UI to make it non-blocking, then retry the greenlight poll. + +## Run stages + +| Stage | Description | +| --- | --- | +| `initializing` | Run is starting up. | +| `underReview` | Run is in progress and under review. | +| `completed` | Run has finished. | +| `canceled` | Run was canceled. Polling should stop — a canceled run cannot be recovered. | + +## Superseding logic + +If a newer run has superseded the root run (identified by matching `deduplication_key`), this endpoint returns the greenlight status for the most recent superseding run. When `relevantRunId` differs from `rootRunId`, you are seeing the superseding run's status. + +When polling, use `relevantRunId` rather than `rootRunId` for faster queries. + +## Response codes + +| Code | Description | +| --- | --- | +| `200` | Success. | +| `401` | Missing or invalid API key. | +| `403` | Forbidden. Usually indicates a disabled team. | +| `404` | Run not found. | +| `405` | Method not allowed. Use `GET`. | +| `410` | Gone. Returned for old or legacy runs. | +| `500` | Internal server error. Contact support if the issue persists. | + +## Related + +- [`@qawolf/ci-sdk`](/libraries/ci-sdk) +- [Notify deploy](/qawolf/deploy-success) \ No newline at end of file From 9f13e3f0694a57f4938a5301174f732e8f7b9861 Mon Sep 17 00:00:00 2001 From: John Gluck <141772680+JohnGluck@users.noreply.github.com> Date: Thu, 28 May 2026 12:34:07 -0700 Subject: [PATCH 2/4] Updated mintlify pages - Updated qawolf/GitLab-2a15b2a994fb805d9d14ff27726065ae.mdx - Updated qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx - Updated qawolf/other-ci-webhook.mdx - Updated qawolf/other-ci-node.mdx - Updated qawolf/circle-ci.mdx Mintlify-Source: dashboard-editor --- ...itLab-2a15b2a994fb805d9d14ff27726065ae.mdx | 18 ++++- ...f-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx | 70 +++++++------------ qawolf/circle-ci.mdx | 8 +-- qawolf/other-ci-node.mdx | 7 +- qawolf/other-ci-webhook.mdx | 3 +- 5 files changed, 48 insertions(+), 58 deletions(-) diff --git a/qawolf/GitLab-2a15b2a994fb805d9d14ff27726065ae.mdx b/qawolf/GitLab-2a15b2a994fb805d9d14ff27726065ae.mdx index cc3ccac..9faa777 100644 --- a/qawolf/GitLab-2a15b2a994fb805d9d14ff27726065ae.mdx +++ b/qawolf/GitLab-2a15b2a994fb805d9d14ff27726065ae.mdx @@ -123,4 +123,20 @@ This job tells QA Wolf that a new deployment is ready for testing. Open QA Wolf and confirm a new run appears under the expected environment. - \ No newline at end of file + + +## Verify the integration + + + + Push a new commit to your main branch and wait for your deployment to complete. + + + Open QA Wolf and confirm a new run appears under the expected environment. + + + +## Related + +- [webhooks/deploy\_success](/qawolf/deploy-success) +- [REST API](/qawolf/rest-overview) \ No newline at end of file diff --git a/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx b/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx index 96884ce..01cb89c 100644 --- a/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx +++ b/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx @@ -1,19 +1,23 @@ --- -title: "How to integrate a mobile build with the QA Wolf SDK" +title: "Other CI (Node) for mobile build testing" description: "Upload mobile build artifacts and trigger test runs from any CI system using the QA Wolf CI SDK." -sidebarTitle: "QA Wolf SDK" +sidebarTitle: "Other CI (Node)" --- -## When to use the QA Wolf SDK +Use this guide if your CI system supports Node.js but is not GitHub Actions or Fastlane. -This guide is for teams that do not use Fastlane or want a single, flexible way to upload mobile builds and trigger test runs from any CI system. Use the QA Wolf CI SDK if your mobile builds are produced directly in CI scripts; you want the same integration approach for mobile and web testing; you are not using GitHub Actions or prefer not to rely on prebuilt actions; or you need fine-grained control over when artifacts are uploaded and runs are triggered. This guide assumes only that your CI system can run Node.js. + + If your CI system does not support Node.js, contact your QA Wolf representative for guidance. + -## Before you begin + + Make sure you have: -1. Make sure you have a CI pipeline that produces a mobile build artifact (APK, AAB, or IPA). -2. Node.js 18 or later is available in your CI environment. -3. A QA Wolf API key is stored as a CI secret (**QAWOLF\_API\_KEY**). -4. Artifact naming conventions are defined for your environments. See [Artifact naming conventions](#artifact-naming-conventions) below. + - A CI pipeline that produces a mobile build artifact (APK, AAB, or IPA) + - Node.js 18 or later available in your CI environment + - Admin access to your CI system's secret or environment variable storage + - A QA Wolf API key + Before mobile test runs can execute, QA Wolf must enable mobile triggers for your workspace. QA Wolf will handle this and may ask you for: @@ -24,25 +28,6 @@ Before mobile test runs can execute, QA Wolf must enable mobile triggers for you Until this step is complete, CI jobs can upload artifacts and send deployment notifications, but mobile test runs will not start automatically. -## How the QA Wolf SDK works - -The CI SDK performs two main tasks: - - - - Upload a mobile build artifact to QA Wolf. - - - Notify QA Wolf of a deployment event to trigger a test run. - - - - - You can upload builds without triggering runs, which is useful during initial setup or validation. - - -You provide the [artifact basename](#artifact-naming-conventions) when uploading. QA Wolf applies the file extension automatically based on the uploaded file. - ## Install the CI SDK Install the SDK in your CI job: @@ -51,21 +36,17 @@ Install the SDK in your CI job: npm install @qawolf/ci-sdk ``` -### Find the QAWOLF\_API\_KEY +## Find the QAWOLF\_API\_KEY - Open the `Workspace name` dropdown in QA Wolf and click **Workspace Settings**. + Open the **Workspace name** dropdown in QA Wolf and click **Workspace Settings**. Choose **Integrations**. Generate your **QAWOLF\_API\_KEY** by clicking the icon to the right of **API Key** under **API Access**. - - - ![](/images/integrating-with-CI-CD/image-16.png) - @@ -77,9 +58,9 @@ Mobile build artifacts must follow consistent naming conventions so QA Wolf can The artifact name is used to identify: -- Which environment the build belongs to -- Whether the build is tied to a pull request -- Which build was used for a given test run +- Which environment the build belongs to. +- Whether the build is tied to a pull request. +- Which build was used for a given test run. ### Static environments @@ -169,7 +150,7 @@ import path from "path"; const { generateSignedUrlForRunInputsExecutablesStorage, attemptNotifyDeploy } = makeQaWolfSdk({ - apiKey: "qawolf_xxxxx", + apiKey: process.env.QAWOLF_API_KEY, }); (async () => { @@ -194,7 +175,6 @@ const { generateSignedUrlForRunInputsExecutablesStorage, attemptNotifyDeploy } = const result = await attemptNotifyDeploy(deployConfig); if (result.outcome !== "success") { - // Fail the job. process.exit(1); } const runId = result.runId; @@ -205,8 +185,6 @@ async function uploadRunArtifact(filePath: string): Promise { const fileName = path.basename(filePath); const signedUrlResponse = await generateSignedUrlForRunInputsExecutablesStorage({ - // for mobile apps, we prefer static filenames based on the environment name - // for example, use `app_staging.apk` for the Staging environment destinationFilePath: fileName, }); @@ -234,10 +212,6 @@ async function uploadRunArtifact(filePath: string): Promise { return ""; } - // for mobile apps, we request that you include this prefix path - // return `/home/wolf/run-inputs-executables/${signedUrlResponse.playgroundFileLocation}`; - - // for other apps return signedUrlResponse.playgroundFileLocation; } return ""; @@ -285,4 +259,8 @@ If mobile triggers have not yet been enabled, this step will complete without st - **If uploads succeed but no runs start:** Mobile triggers may not yet be enabled. Contact QA Wolf to complete platform configuration. - **If the artifact is not found during execution:** Verify that the artifact basename matches your naming conventions, and the returned path is used when triggering the run. - **If you see authentication errors:** Verify that **QAWOLF\_API\_KEY** is configured correctly in your CI environment. -- **If you encounter Node.js errors:** Ensure Node.js 18 or later is available in the CI job. \ No newline at end of file +- **If you encounter Node.js errors:** Ensure Node.js 18 or later is available in the CI job. + +## Related + +- [`@qawolf/ci-sdk`](/libraries/ci-sdk) \ No newline at end of file diff --git a/qawolf/circle-ci.mdx b/qawolf/circle-ci.mdx index 37f8abf..d4f2512 100644 --- a/qawolf/circle-ci.mdx +++ b/qawolf/circle-ci.mdx @@ -17,9 +17,7 @@ sidebarTitle: "CircleCI" - A QA Wolf API key -## Set up your QAWOLF\_API\_KEY - -### Find the QAWOLF\_API\_KEY +## Find the QAWOLF\_API\_KEY @@ -137,4 +135,6 @@ Place it after your deploy job in the workflow so it runs only once your environ -- [QA Wolf CI SDK](/qawolf/Integrate-with-the-QA-Wolf-SDK-2db5b2a994fb8043be61f06f025d9c63) \ No newline at end of file +## Related + +- [QA Wolf CI SDK](/qawolf/qawolf/other-ci-node) \ No newline at end of file diff --git a/qawolf/other-ci-node.mdx b/qawolf/other-ci-node.mdx index c336aaf..71d405e 100644 --- a/qawolf/other-ci-node.mdx +++ b/qawolf/other-ci-node.mdx @@ -1,7 +1,6 @@ --- title: "Other CI (Node)" description: "Trigger QA Wolf test runs from any CI system that supports Node.js." -icon: "webhook" --- Use this guide if your CI system supports Node.js but does not have a dedicated QA Wolf integration page. @@ -27,7 +26,7 @@ Use this guide if your CI system supports Node.js but does not have a dedicated Open the **Workspace name** dropdown in QA Wolf and click **Workspace Settings**. - Choose **Integrations** and click the copy icon to the right of **API Key** under **API Access**. + Choose **Integrations** and click the icon to the right of **API Key** under **API Access**. @@ -97,6 +96,4 @@ node .ci/notifyQaWolf.mjs ## Related -- [`@qawolf/ci-sdk`](/libraries/ci-sdk) -- [CI greenlight](/rest/ci-greenlight) -- [Other CI (webhook)](/qawolf/other-ci-webhook) \ No newline at end of file +- [`@qawolf/ci-sdk`](/libraries/ci-sdk) \ No newline at end of file diff --git a/qawolf/other-ci-webhook.mdx b/qawolf/other-ci-webhook.mdx index 27f1556..9734242 100644 --- a/qawolf/other-ci-webhook.mdx +++ b/qawolf/other-ci-webhook.mdx @@ -26,7 +26,7 @@ Use this guide if your CI system cannot run Node.js. This includes environments Open the **Workspace name** dropdown in QA Wolf and click **Workspace Settings**. - Choose **Integrations** and click the copy icon to the right of **API Key** under **API Access**. + Choose **Integrations** and click the icon to the right of **API Key** under **API Access**. @@ -71,5 +71,4 @@ Replace `$GIT_BRANCH` and `$GIT_COMMIT_SHA` with the environment variable names ## Related - [webhooks/deploy\_success](/qawolf/deploy-success) -- [Other CI (Node)](/qawolf/other-ci-node) - [REST API](/qawolf/rest-overview) \ No newline at end of file From 86119491395cf3ac42c1ca4b8d57d6aeb7fa80cb Mon Sep 17 00:00:00 2001 From: John Gluck <141772680+JohnGluck@users.noreply.github.com> Date: Thu, 28 May 2026 12:36:59 -0700 Subject: [PATCH 3/4] Updated mintlify pages - Updated qawolf/other-ci-node.mdx - Updated qawolf/other-ci-webhook.mdx - Updated qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx Mintlify-Source: dashboard-editor --- ...-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx | 4 ++-- qawolf/other-ci-node.mdx | 3 ++- qawolf/other-ci-webhook.mdx | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx b/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx index 01cb89c..45ef3cf 100644 --- a/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx +++ b/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx @@ -1,7 +1,7 @@ --- -title: "Other CI (Node) for mobile build testing" +title: "How to integrate mobile builds with our SDK" description: "Upload mobile build artifacts and trigger test runs from any CI system using the QA Wolf CI SDK." -sidebarTitle: "Other CI (Node)" +sidebarTitle: "Other CI (Node.js)" --- Use this guide if your CI system supports Node.js but is not GitHub Actions or Fastlane. diff --git a/qawolf/other-ci-node.mdx b/qawolf/other-ci-node.mdx index 71d405e..03f8551 100644 --- a/qawolf/other-ci-node.mdx +++ b/qawolf/other-ci-node.mdx @@ -1,6 +1,7 @@ --- -title: "Other CI (Node)" +title: "How to integrate with our SDK" description: "Trigger QA Wolf test runs from any CI system that supports Node.js." +sidebarTitle: "Other (Node.js)" --- Use this guide if your CI system supports Node.js but does not have a dedicated QA Wolf integration page. diff --git a/qawolf/other-ci-webhook.mdx b/qawolf/other-ci-webhook.mdx index 9734242..5dcaea1 100644 --- a/qawolf/other-ci-webhook.mdx +++ b/qawolf/other-ci-webhook.mdx @@ -1,6 +1,7 @@ --- -title: "Other CI (webhook)" +title: "How to integrate with webhooks" description: "Trigger QA Wolf test runs from any CI system using the deploy webhook directly." +sidebarTitle: "Other (webhooks)" --- Use this guide if your CI system cannot run Node.js. This includes environments such as ArgoCD, locked-down runners, and minimal containers. From f6a99895f2cb4613dfb771ff5972f11c8417d880 Mon Sep 17 00:00:00 2001 From: John Gluck <141772680+JohnGluck@users.noreply.github.com> Date: Thu, 28 May 2026 13:52:41 -0700 Subject: [PATCH 4/4] Updated mintlify pages - Updated qawolf/other-ci-node.mdx - Updated qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx Mintlify-Source: dashboard-editor --- ...ld-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx | 2 +- qawolf/other-ci-node.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx b/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx index 45ef3cf..6c42d68 100644 --- a/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx +++ b/qawolf/Mobile-build-with-the-QA-Wolf-SDK-2db5b2a994fb80cdbd1ec31513f2cc15.mdx @@ -263,4 +263,4 @@ If mobile triggers have not yet been enabled, this step will complete without st ## Related -- [`@qawolf/ci-sdk`](/libraries/ci-sdk) \ No newline at end of file +- [`@qawolf/ci-sdk`](/qawolf/libraries/ci-sdk/api-reference) \ No newline at end of file diff --git a/qawolf/other-ci-node.mdx b/qawolf/other-ci-node.mdx index 03f8551..0e31754 100644 --- a/qawolf/other-ci-node.mdx +++ b/qawolf/other-ci-node.mdx @@ -97,4 +97,4 @@ node .ci/notifyQaWolf.mjs ## Related -- [`@qawolf/ci-sdk`](/libraries/ci-sdk) \ No newline at end of file +- [`@qawolf/ci-sdk`](/qawolf/libraries/ci-sdk/api-reference) \ No newline at end of file