CI/CD
Every flow, load test, and assertion you built in the app runs unchanged in your pipeline. Install-free via npx, exit-code gated, reports shipped as artifacts. GitHub Actions, GitLab CI, Windows runners, anywhere a shell runs.
Exit Code Is Your Deploy Gate
Every assertion and every threshold rolls up into a single exit code. 0 ships,1 blocks. No log scraping, no custom scripts to decide if the run passed.
Install-Free with npx
npx --yes @atrahasis/cli in any Node-capable runner — no setup step, no cache warmup, no waiting for a brew tap.
Reports as Artifacts
Your After All script ships HTML, PDF, or OpenTelemetry JSON to S3, Slack, email, or your artifact store. Every CI run ends with a report your reviewers can open.
Drop This Into Your Pipeline
Copy, paste, done. The CLI binary is available on every major platform, and npx keeps the install optional when a Node runtime is already around.
- name: API Health Check
run: |
curl -sSL https://cli.atrahasis.dev | sh
atra GET https://api.example.com \
-a "status eq 200" \
-a "response_time lt 2000"- name: API Health Check
run: npx --yes @atrahasis/cli GET https://api.example.com \
-a "status eq 200"- name: API Health Check
shell: pwsh
run: |
irm https://cli.atrahasis.dev | iex
atra GET https://api.example.com -a "status eq 200"api-test:
script:
- curl -sSL https://cli.atrahasis.dev | sh
- atra GET https://api.example.com -a "status eq 200"- name: Run API Flow Tests
run: |
curl -sSL https://cli.atrahasis.dev | sh
atra run ./tests -f smoke-test -e ci- name: Load Test
run: |
curl -sSL https://cli.atrahasis.dev | sh
atra run ./load-tests -s checkout-api -t load -e prodExit Code Is Your Deploy Gate
Every assertion, every threshold verdict, every step result collapses into a single exit code. Pipelines read it and decide — no extra parsing, no custom glue.
Running checkout-api... ✓ status eq 200 (125ms) ✓ response_time lt 1000 (125ms) ✓ $.orderId exists (125ms) All 3 assertions passed. Exit code: 0
Running checkout-api... ✗ status eq 200 — expected 200, got 500 response_time lt 1000 — passed (125ms) 1 assertion failed. Exit code: 1
HTTP Assertions
Status, response time, headers, body, and JSON path gates — any failure flips exit to 1.
Flow Runner
Step failure, assertion failure, or pre/post-script error → non-zero exit. Stop-on-failure ends the run immediately on the first broken step.
Load Test Thresholds
Set P95, P99, throughput, or error-rate gates. Any missed threshold fails the run — a real pass/fail signal, not a number to eyeball.
Secrets From the Shell
The desktop app keeps secrets in the OS keychain; the CLI reads the same variables from the shell. Export your CI secrets as env vars and your flow resolves the exact same {{ENV_VAR}} references it did on your laptop.
Vault connections follow the same rule — a desktop connection named prod-vault expects VAULT_AUTH_PROD_VAULT on the CI runner.
- name: Run Flow Against Prod
env:
API_TOKEN: ${{ secrets.API_TOKEN }}
VAULT_AUTH_PROD_VAULT: ${{ secrets.VAULT_TOKEN }}
run: |
curl -sSL https://cli.atrahasis.dev | sh
atra run ./tests -f user-journey -e prod// Runs at the end of every CI invocation
const pdf = await at.export.pdf();
await fetch(at.environment.get("S3_UPLOAD_URL"), {
method: "PUT",
headers: { "Content-Type": "application/pdf" },
body: pdf,
});
// Notify the team
await fetch(at.environment.get("SLACK_WEBHOOK"), {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
text: "Load test finished — report at ${report_url}"
}),
});Reports as Artifacts
The same After All script you wrote on your desktop ships the HTML, PDF, or OpenTelemetry JSON from the CI runner. Upload to S3, attach to Slack, forward to an OTLP collector — no extra workflow step, no custom uploader.
Reviewers click straight from the PR into the report that CI just produced.
See ReportingWorks Everywhere a Shell Runs
Native binaries for macOS (Apple Silicon and Intel), Linux (arm64 and x86_64), and Windows (x86_64). Install via npm, Homebrew, curl, wget, or PowerShell — or skip the install entirely with npx.
Ready to gate your deploys with real tests?
Copy one of the blocks above into your workflow file and your next push becomes a verified release candidate.