Skip to main content
Every ctrlrun command exits 0 when it did what it was asked, 1 when CTRLRun refused (a CTRLRunError, printed as one line), and 2 on a usage error. ctrlrun verify adds a third code for its own failure, because a verifier that crashed must not look like one that refused.

Every command

A refusal is the command’s exit code and its last line. Nothing is retried on the operator’s behalf and nothing is written on a refusal.

ctrlrun verify

Not applicable never changes the code by itself, and zero applicable guarantees is exit 2, never 0: 0/0 reported as success is the same false green as 8/8 with five N/As. A partial run (--only) writes no badge. The GitHub Action fails the job on any code but 0 and carries the code through as an output.

ctrlrun scan

A file that will not parse is exit 1 and not 2 — the scan ran, and the file is a finding. A suppressed finding keeps the code at 1, because annotating a finding does not change the code it points at, and there is no flag that turns 1 into 0.

ctrlrun gateway

The gateway runs until it is stopped. It exits 2 before listening when its configuration is refused: a non-loopback --listen without --allow-remote, an http:// webhook without --allow-insecure-webhook, a JWT option set without the identity extra, or a policy that will not load.

Next