Exit Status
Credo succeeds with an exit status of 0 (like any other program).
Credo fails with an exit status between 1 and 127 if it shows any issues.
Exit statuses above or equal to 128 indicate an actual runtime error during analysis itself.
This enables shell based pipeline workflows (e.g. on CI systems) which test Credo compliance.
Issue Statuses
The exit status of each check is used to construct a bit map of the types of issues which were encountered by or-ing them together to produce the final result:
use Bitwise
issues
|> Enum.map(&(&1.exit_status))
|> Enum.reduce(0, &(&1 ||| &2))
This way you can reason about the encountered issues right from the exit status.
Default values for the checks are based on their category:
consistency: 1
design: 2
readability: 4
refactor: 8
warning: 16
Let's see what this means using an example:
$ mix credo
[...snip...]
$ echo $?
12
So an exit status of 12
tells you that you have only Readability Issues (4
) and Refactoring Opportunities (8
), but e.g. no Warnings.
Naturally, custom checks and plugins can provide their own exit statuses.
<custom category>: 32
<custom category>: 64
Actual & Custom Errors
To also allow for actual errors, an exit status of >= 128
signals something went wrong during analysis itself.
Since one cannot combine these, they do not follow the bitwise notation described above:
Generic Credo error: 128
Credo Config errors: 129-131
Reserved errors: 132-191
Naturally, plugins can provide their own exit statuses.
<custom errors>: 192-255