CI/CD recipes
For GitHub-hosted repos, the GitHub App is the primary integration — install it once and every PR automatically gets a Roboticks Check Run. The CLI is the fallback (or the secondary surface for advanced workflows like running synthetic tests on a schedule). For non-GitHub CI systems, the CLI is the primary surface. The recipes below are the minimum working YAML/Groovy for each platform.GitHub Actions
For most users, the GitHub App is enough — no workflow YAML required. See GitHub App → Installation. Use the CLI in a workflow when you need to:- Run on a schedule (synthetic tests)
- Push tests for an air-gapped runner pool (see Air-gapped mode)
- Trigger evidence-pack generation from a release workflow
GitLab CI
GitLab CI integration is supported via the CLI. A native GitLab App equivalent to the GitHub App is on the post-MVP roadmap.
Jenkins
CircleCI
BuildKite
Common patterns
Fail the build on test failure
Default behaviour.rbtk test run --wait exits non-zero (code 7) if any test fails. No extra wiring needed.
Don’t wait — fire and forget
Annotate the run with build metadata
rbtk test list --label ... and surface in the dashboard’s run-history view.
Conditional release evidence
BYO ingest
If you run your own CI (your own test framework, your own container, your own runner) you can post results straight to the platform without going through a hosted or self-hosted Roboticks runner. This is the BYO ingest path. It is free on every tier — no BYO connector slot is consumed. The wire format is JUnit-with-confirms. Generate it from any pytest/colcon/launch_testing/gtest run (the SDK does this automatically), or hand-author the<property name="roboticks.confirms" ...> element if you’re plumbing a non-Roboticks test framework.
rbtk test ingest uploads the JUnit to the per-project endpoint, parses out roboticks.confirms / roboticks.nodeid / roboticks.attach.* properties, and creates a sealed TestRun whose status reflects the JUnit outcome. Plan gate is the standard test_runs:write scope; there is no token or storage burn beyond the hot-storage already accounted for by the org’s plan.
What is not free:
- The vendor-specific catalog connectors (Jama, Polarion, codeBeamer, DOORS, LDRA, Polyspace, Coverity) at $149/connector/month — see BYO connectors.
- AI features the ingest results feed into (triage, flakiness, sim-vs-real) — those bill in
ai_tokens.
Secret hygiene
| Platform | Storage |
|---|---|
| GitHub Actions | Use OIDC. No long-lived secret needed. Fallback: repo secret. |
| GitLab CI | Settings → CI/CD → Variables (masked, protected) |
| Jenkins | Credentials Plugin, credentials('...') binding |
| CircleCI | Project Settings → Environment Variables |
| BuildKite | Agent env, secrets manager, or the BuildKite secrets plugin |
Troubleshooting
The CLI prompts for input in CI
The CLI prompts for input in CI
Set
ROBOTICKS_CI=true or run with --quiet. The CLI auto-detects non-TTY but some CI runners present a fake TTY.OIDC exchange fails (`subject does not match policy`)
OIDC exchange fails (`subject does not match policy`)
The workflow’s
sub claim isn’t in the policy at Settings → GitHub OIDC. Add the ref/environment, or tighten the workflow’s run conditions.Evidence pack returns 404 in CI
Evidence pack returns 404 in CI
Make sure the test run completed before you ask for the pack.
rbtk test run --wait (the default) blocks until completion; without --wait, you need to poll rbtk test results <id> until the status is terminal.Next
GitHub App
The primary GitHub integration.
Test commands
Full reference for
rbtk test.