Skip to content

upload tests

Upload JUnit XML or CTRF test results to Drape.

Usage

drape upload tests <glob> [flags]

Examples

# Upload a single file
drape upload tests results.xml --org acme --repo my-service --wait

# Upload multiple files with a glob
drape upload tests "./reports/**/*.xml" --org acme --wait

# Dry run (parse and validate, don't upload)
drape upload tests results.xml --dry-run

Flags

All global flags apply, plus:

Flag Default Description
--wait true Wait for server-side processing and print summary
--timeout 120 Max wait time in seconds
--job-name (auto-detected) Display name for this upload's "Job" column in the dashboard. Auto-detected from GITHUB_JOB but set explicitly for matrix shards so shards don't collapse under the matrix base name.
--group Group label (e.g. python, playwright). Use when multiple test suites upload to the same repo.
--pr-number (auto-detected) PR number for PR-specific ingestion.

Attribution

TestRun.job_name in the dashboard is whatever you pass via --job-name (or the auto-detected GITHUB_JOB if unset). For non-matrix jobs this is correct out of the box. For matrix shards you should pass an explicit name like Test Python (1/3), otherwise all shards collapse into one entry in the "Top Slowest Tests" table.

This is a CLI/workflow responsibility — the server stores whatever the CLI sends verbatim. See the GitHub Actions testing guide for the canonical matrix pattern.

Exit Codes

Code Meaning
0 Success — no unsuppressed failures
1 Test failure — unsuppressed failures exist
2 Usage error — invalid flags or missing required args
3 Upload error — network, auth, or API error
4 Timeout — server processing took too long
5 Parse error — couldn't parse input files

When --wait is used, the CLI waits for server-side processing and prints a summary including suppression status. The exit code reflects whether unsuppressed failures exist.