Skip to content

Exit Codes

tally uses distinct exit codes so scripts and CI pipelines can react to different outcomes.

Code Name Meaning
0 Success No violations found (or all violations are below --fail-level)
1 Violations One or more violations at or above the configured --fail-level
2 Error Configuration, parse, or I/O error (e.g. invalid config file, permission denied)
3 No files No Dockerfiles to lint (missing file, empty glob, empty directory)
4 Syntax error Dockerfile has fatal syntax issues (unknown instructions, malformed directives)

Examples

# Succeed only when there are zero issues
tally lint .
echo $?  # 0 = clean, 1 = violations

# Fail CI only on errors (ignore warnings)
tally lint --fail-level error .

# Detect "nothing to lint" separately from real errors
tally lint Dockerfile.prod
status=$?
if [ "$status" -eq 3 ]; then
  echo "No Dockerfiles found — skipping lint"
elif [ "$status" -ne 0 ]; then
  exit "$status"
fi
# Detect syntax errors (typo instructions, bad directives)
tally lint Dockerfile
status=$?
if [ "$status" -eq 4 ]; then
  echo "Dockerfile has syntax errors — fix before linting"
fi

CI/CD tips

  • Use --fail-level to control which severities cause exit code 1.
  • Exit code 3 lets you distinguish "the path was wrong" from "the config is broken" (code 2).
  • See CI/CD for pipeline examples.