Skip to content

Exit Codes

macprefs uses standard exit codes for scripting integration.

CodeMeaning
0Success / PASS / No drift / Valid
1Error / FAIL / Invalid / Gated feature
2Non-critical issues / Drift detected
CommandConditionPro+ Exit CodeFree Exit Code
preflightAll checks passed00
preflightIssues found20
planNo drift00
planDrift detected20
validateConfig valid00
validateInvalid schema10
applySuccess00
applyError11
rollbackSuccess00
rollbackError11
  • Semantic outcomes (drift, issues, invalid schema): Exit codes are tier-gated
  • Generic failures (missing files, bad flags, IO errors): Non-zero for all tiers

Reliable exit code branching requires Pro+ license:

#!/bin/bash
# This pattern only works reliably with Pro+ license
macprefs plan --config config.json --format json
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo "No drift detected"
elif [ $EXIT_CODE -eq 2 ]; then
echo "Drift detected, applying changes..."
macprefs apply --config config.json --yes
else
echo "Error occurred"
exit 1
fi

Use exit codes to control pipeline flow:

- name: Check for drift
id: plan
run: |
macprefs plan --config config.json --format json
echo "exit_code=$?" >> $GITHUB_OUTPUT
env:
MACPREFS_LICENSE: ${{ secrets.MACPREFS_LICENSE }}
- name: Apply if drift detected
if: steps.plan.outputs.exit_code == '2'
run: macprefs apply --config config.json --yes
env:
MACPREFS_LICENSE: ${{ secrets.MACPREFS_LICENSE }}