Understand your first report¶
Output formats¶
abicheck compare prints markdown by default; pass --format json for
machine-readable output (CI logic, agents), or --format sarif/html/junit
for Code Scanning, standalone reports, or CI test dashboards respectively:
See Output Formats for the full reference
(field-by-field JSON schema, SARIF/JUnit details, the review digest).
Exit codes and CI¶
By default, abicheck compare exits with the
verdict:
| Exit code | Verdict | Meaning |
|---|---|---|
0 |
NO_CHANGE / COMPATIBLE / COMPATIBLE_WITH_RISK |
Safe — no binary ABI break |
2 |
API_BREAK |
Source-level API break (binary still works) |
4 |
BREAKING |
Binary ABI break |
64 |
— | Invalid invocation (bad args/options, unreadable input) — outside the verdict space |
Passing any --severity-* flag switches compare to a different,
severity-aware exit-code scheme instead — see
Severity Configuration for the full mapping and policy
recipes. Other commands add their own codes on top of this space — scan can
exit 5 (a --budget time guard tripped) and a multi-library release
compare can exit 8 (a library was removed with
--fail-on-removed-library). The full per-command matrix, including
compat mode, is the Exit Codes reference.
Suppressions/policies/baselines all interact with the same pipeline before the exit code is computed — see CI Gating for how those pieces fit together, and the GitHub Action for the fastest way to wire this into CI (it installs Python/castxml/abicheck and runs the comparison in a few lines of YAML).
Next¶
➡️ Choose Your Workflow — map your artifacts and CI policy to the exact command for ongoing use.