Skip to content

Pipelines tab

The Pipelines tab of the CI/CD Pipelines screen (/pipelines?tab=pipelines) is where you define pipeline mappings — the rules that say “when this pipeline triggers, run this” — and generate the CI config that calls them.

Pipelines tab listing pipeline mappings with their targets and actions

Each card shows the target type (Suite, Cycle, or Command), the mapping name, what it runs, any overrides, a commit sync marker when enabled, and when it was last triggered. Three actions sit on the right:

ActionWhat it does
Config iconOpens Wire into CI — the CLI snippet and generated pipeline config.
PencilEdit the mapping.
TrashDelete the mapping.
New Pipeline Mapping dialog — name, execution target, overrides, commit sync, and status push-back options

This is what CI passes to identify the run. Because the name is embedded in generated config files and commands, it accepts only letters, numbers, spaces, dots, dashes, and underscores, must start with a letter or number, and is capped at 60 characters. The hint under the field shows the exact CLI command your name produces, updating as you type.

TargetUse it whenNotes
SuiteThe common case — a regression or smoke suite.Runs with the suite’s saved browser matrix, concurrency, and retries.
CycleRelease gates that should update cycle tracking.Pick a plan, then a cycle. Cycles with no mapped automation scripts are disabled — a CI trigger could not run them.
CommandA one-off filter, e.g. npx playwright test --grep @smoke.The command carries its own browser/environment, so overrides are hidden for this target.

For suite and cycle targets you can pin an Environment and a Browser for this pipeline — for example the same regression suite running staging + Chrome for the PR gate and the full matrix nightly. Both pickers use the same icons as the rest of Testver. Leave them on Default to inherit the target’s saved settings.

Three layers decide how a triggered run executes, highest first:

  1. Trigger-time overrides — a small whitelist (environment, browser) passed in the trigger payload. Audit-logged with the run.
  2. Mapping overrides — what you set here. Persistent and visible in the UI.
  3. The suite’s or cycle’s saved settings — the default. With no overrides at all, a CI trigger runs exactly what clicking Run in the UI would run.

Check out the triggering commit before running. When enabled, Testver checks out the commit from the trigger payload before executing, then restores the previous branch afterwards. This guarantees the gate tests the same code the build is building.

It is deliberately conservative: if the workspace has uncommitted changes, sync is skipped and a warning is recorded on the run rather than disturbing your working copy. The same applies when the commit can’t be reached — the run proceeds on the current tree and says so.

Push commit statuses to the git host. Testver posts a pending status when the run starts and a success / failure status when it finishes, so pull requests show the verdict. This is also what makes fire-and-forget mode possible.

ProviderRepository formatToken needs
GitHubowner/repoPAT with repo:status (classic) or Commit statuses read/write (fine-grained).
GitLabgroup/project or the numeric project idAccess token with api scope.
Azure DevOpsorg/project/repoPAT with Code (Status) scope.
Bitbucketworkspace/repousername:app_password with Repositories:Write (or a workspace/repository access token).

A base URL field supports self-hosted installs (GitHub Enterprise, self-managed GitLab, Azure DevOps Server). The token is stored on the server and never returned to the browser — when editing an existing mapping the field shows a mask; leave it untouched to keep the saved token, or type a new value to replace it.

Disabling a mapping keeps it configured but rejects triggers — useful for temporarily muting a gate without deleting it or touching the CI config.

Wire into CI dialog — CLI snippet, platform picker, gate mode toggle, and the generated workflow preview

The config icon on a mapping opens the Wire into CI dialog:

  • Testver server URL — the address your CI runners will call. Defaults to the address you’re browsing; change it if runners reach the server by a different hostname.
  • CLI snippet — a ready testver trigger … command for scripts, cron jobs, or a quick manual test.
  • Platform — pick one of the six supported CI systems: GitHub Actions, GitLab CI, Jenkins, Azure Pipelines, Bitbucket Pipelines, or CircleCI. The selected card shows a ✓, and the panel below it tells you exactly where that platform expects the TESTVER_CI_TOKEN secret.
  • Gate modeWait & gate or Fire-and-forget; see below.
  • Generate Config → an editable preview → Save to project, which writes the file into your repository for you to commit.
ModeHow the build gets its verdictUse when
Wait & gate (exit code)The job polls until the run finishes and exits 0 or 1.The default. Simple, self-contained, works without any git-host token.
Fire-and-forget (status push-back)The job triggers and exits immediately; the commit status Testver pushes carries the verdict.Long suites, where holding a hosted CI runner open would waste CI minutes.
PlatformGenerated fileSecret setup
GitHub Actions.github/workflows/testver-gate.ymlTESTVER_CI_TOKEN repository secret.
GitLab CI.gitlab-ci.ymlTESTVER_CI_TOKEN masked CI/CD variable.
JenkinsJenkinsfile.testver-gateSecret Text credential with id testver-ci-token; agent needs curl + jq.
Azure Pipelinesazure-testver-gate.ymlTESTVER_CI_TOKEN secret pipeline variable.
Bitbucket Pipelinesbitbucket-pipelines.ymlTESTVER_CI_TOKEN as a secured repository variable.
CircleCI.circleci/config.ymlTESTVER_CI_TOKEN as a project environment variable (or context).
SymptomLikely cause / fix
Create/Save button stays disabledThe name is empty or contains disallowed characters, no target is selected, or status push-back is enabled without a repo and token.
A cycle is greyed out in the dropdownIt has no mapped automation scripts. Map them under Script Mapping.
Overrides disappeared when I chose CommandExpected — a raw command carries its own browser/environment, so overrides don’t apply.
Editing a mapping shows a masked tokenBy design: status-push tokens are never sent back to the browser. Leave the mask to keep the token, or type a new one to replace it.
⚠ “Commit sync skipped — workspace has uncommitted changes”Intentional: Testver never disturbs a dirty working copy. Commit or stash, or leave commit sync off on that server.
Status push warning on a runThe git host rejected the status. Check the token scope, the repository format for that provider, and the base URL for self-hosted installs.