@devant-net/bun-test-reporter
v0.1.2
Published
Bun test reporter for Devant Cloud — wraps `bun test`, parses its JUnit output, and streams runs/results into /v1/runs/*.
Downloads
375
Maintainers
Readme
@devant-net/bun-test-reporter
bun test wrapper that streams test runs into Devant Cloud.
Why this is a wrapper, not a "reporter"
Bun's test runner does not (yet) expose a programmatic reporter API — see
oven-sh/bun#26191. The
documented extension point is the --reporter=junit --reporter-outfile=...
flag pair. This package wraps it: it spawns bun test, forwards your
stdout/stderr live, then parses the JUnit XML at the end and POSTs into
the Devant Cloud /v1/runs/* API.
When Bun ships a real Reporter API, this package will switch to that without changing its CLI surface.
Install
bun add -d @devant-net/bun-test-reporterUse
Swap bun test for devq-bun-test in your package.json:
{
"scripts": {
"test": "devq-bun-test"
}
}Everything you'd normally pass to bun test still works:
DEVQ_PROJECT_ID=7 DEVQ_TOKEN=dq_ci_... \
devq-bun-test src/**.test.ts --coverage --timeout 10000Or pass devq options as flags:
devq-bun-test --project-id 7 --api-url https://<tenant>.devant.net \
--api-token "$DEVQ_TOKEN" -- src/**.test.ts-- is a hard divider — every arg after it is forwarded to bun test
verbatim, even if it looks like a devq flag.
Reserved flags
The wrapper sets --reporter and --reporter-outfile itself; passing
either errors out so you notice the misconfiguration instead of
silently double-routing your output.
What gets reported
| Bun test event | Devant Cloud action |
| -------------------------- | ---------------------------------------------------- |
| process start (before run) | POST /v1/runs — create the run, capture CI info |
| every <testcase> in XML | POST /v1/runs/:id/results — status, duration, err |
| process exit | POST /v1/runs/:id/complete — stamp finished_at |
Skipped tests, error stacks, and stdout/stderr captures all flow through. JUnit doesn't carry per-test retries, so each test reports exactly one attempt.
Test-case identity
When a result arrives, the reporter resolves it to a test_case in
this order:
<property name="devq-key">DEF-AB12</property>(viabun:test's property metadata, when present)@DEF-AB12token embedded in the test name- Exact full-name match in the project
- Auto-create — the reporter prints
@KEYso you can paste it back into source to lock the binding
Orchestrated runs
If DEVQ_RUN_ID is set (or you pass --external-run), the wrapper
attaches to that run and skips createRun + completeRun. The
orchestrator owns the run lifecycle; this wrapper only streams results.
Exit codes
devq-bun-test exits with the same status as bun test so CI keeps
its pass/fail signal. A 2 exit means the wrapper itself failed
(argument error or upload failure) — distinct from Bun's 1 for test
failures.
License
See LICENSE.
