submit - Submit Results¶
Package or upload a benchmark result bundle for the BenchBox results platform.
benchbox submit has two destinations:
--outputpackages a local PR-ready bundle for thepublished-resultscontribution flow. This mode does not use the network or credentials.--serviceuploads the same canonical bundle to a hosted ingest API. This mode requires keyring auth,BENCHBOX_SUBMIT_TOKEN, or the lower-precedenceBENCHBOX_SERVICE_TOKENfallback.
Basic Syntax¶
uv run -- benchbox submit [RESULT_FILE] [OPTIONS]
Options¶
Option |
Type |
Default |
Description |
|---|---|---|---|
|
path |
- |
Path to result JSON file (optional) |
|
flag |
- |
Use most recent result file |
|
str |
- |
Filter by benchmark name (with |
|
str |
- |
Filter by platform name (with |
|
path |
|
Output directory for submission package |
|
str |
- |
Upload to hosted ingest API; without a URL uses |
|
choice |
|
Hosted submission visibility |
|
str |
auto |
Hosted retry/resubmit key |
|
flag |
|
Poll for hosted publication before returning |
|
flag |
- |
Preview packaging or upload without writing files or sending bytes |
|
str |
git user |
Override local PR manifest submitter name |
What Gets Created¶
Running benchbox submit --output ./submission creates this layout:
submission/
├── bundle/
│ ├── <result>.json # verbatim copy of the canonical result file
│ ├── <result>.plans.json # companion file - only if present
│ └── <result>.tuning.json # companion file - only if present
├── <result>.manifest.json # metadata and hashes for validation
└── CONTRIBUTING.md # step-by-step instructions for opening the PR
<result>.manifest.json fields¶
Field |
Description |
|---|---|
|
|
|
ISO-8601 UTC timestamp |
|
Filename of the result JSON |
|
SHA-256 hex digest of the result file |
|
Per-file SHA-256 hashes for |
|
Benchmark name (e.g. |
|
Platform name (e.g. |
|
Scale factor used |
|
Submission phase ( |
|
|
|
Explicit flag, |
Phase 2 vs Phase 3¶
benchbox submit --output is the Phase 2 community PR path.
benchbox submit --service is the Phase 3 hosted API path.
Phase |
Workflow |
Auth required |
|---|---|---|
2 (current) |
Package locally → open PR manually |
No |
3 (hosted) |
|
Yes ( |
Both modes use the same canonical schema-v2 result JSON and companion files. There is no second hosted-only wire format.
Hosted API Mode¶
Authenticate once:
uv run -- benchbox auth login
Then submit a result:
uv run -- benchbox submit --last --service
Hosted mode sends a multipart request containing:
bundle: the primary result JSON bytesmanifest: the submission manifest JSON bytescompanions[]:.plans.jsonand.tuning.jsonfiles when presentvisibility:public,unlisted, orprivate
BenchBox sends a stable idempotency key derived from the service URL and bundle
hash unless you pass --idempotency-key. Retrying the same bundle against the
same service reuses that key.
When --wait is enabled, BenchBox polls hosted status until the result is
published or rejected. When --no-wait is used, BenchBox records the
submission id locally and exits after the service accepts the upload.
Hosted submissions are tracked with sidecar files next to the source result:
benchmark_runs/results/<result>.<idempotency-key>.submission.json
List them with:
uv run -- benchbox results --submitted
submit vs publish¶
These commands serve different purposes:
|
|
|
|---|---|---|
Purpose |
Copy artifacts to local dir or cloud storage |
Share results with BenchBox results platform |
Network |
Configured destinations (may be remote) |
None in |
Auth |
Per-destination |
Hosted token only for |
Workflow |
Internal sharing / archival |
Community contribution via PR or hosted API |
Examples¶
# Package a specific result file
uv run -- benchbox submit results/tpch_sf1_duckdb.json
# Package the most recent result
uv run -- benchbox submit --last
# Print exact result paths (one per line, pipeable), then package one result by path
uv run -- benchbox results --paths
uv run -- benchbox submit benchmark_runs/results/tpch_sf001_duckdb_20260401_120000.json --output ./submission
# Or loop over every recent result
uv run -- benchbox results --paths --limit 100 \
| xargs -n1 -I{} uv run -- benchbox submit {} --output ./submissions
# Package the most recent TPC-H result
uv run -- benchbox submit --last --benchmark tpch
# Preview what would be packaged (no files written)
uv run -- benchbox submit --last --dry-run
# Use a custom output directory
uv run -- benchbox submit --last --output ./my-submission
# Log in for hosted submission
uv run -- benchbox auth login
# Upload to hosted API and wait for publication
uv run -- benchbox submit --last --service
# Upload to staging without waiting for publication
uv run -- benchbox submit --last --service https://staging.benchbox.dev/v1 --no-wait
# Show hosted submission history
uv run -- benchbox results --submitted