179 lines
6.0 KiB
Bash
179 lines
6.0 KiB
Bash
#!/usr/bin/env bash
|
|
# Shared Exit Codes Registry
|
|
# Sprint: CI/CD Enhancement - Script Consolidation
|
|
#
|
|
# Purpose: Standard exit codes for all CI/CD scripts
|
|
# Usage: source "$(dirname "${BASH_SOURCE[0]}")/lib/exit-codes.sh"
|
|
#
|
|
# Exit codes follow POSIX conventions (0-125)
|
|
# 126-127 reserved for shell errors
|
|
# 128+ reserved for signal handling
|
|
|
|
# Prevent multiple sourcing
|
|
if [[ -n "${__STELLAOPS_EXIT_CODES_LOADED:-}" ]]; then
|
|
return 0
|
|
fi
|
|
export __STELLAOPS_EXIT_CODES_LOADED=1
|
|
|
|
# ============================================================================
|
|
# Standard Exit Codes
|
|
# ============================================================================
|
|
|
|
# Success
|
|
export EXIT_SUCCESS=0
|
|
|
|
# General errors (1-9)
|
|
export EXIT_ERROR=1 # Generic error
|
|
export EXIT_USAGE=2 # Invalid usage/arguments
|
|
export EXIT_CONFIG_ERROR=3 # Configuration error
|
|
export EXIT_NOT_FOUND=4 # File/resource not found
|
|
export EXIT_PERMISSION=5 # Permission denied
|
|
export EXIT_IO_ERROR=6 # I/O error
|
|
export EXIT_NETWORK_ERROR=7 # Network error
|
|
export EXIT_TIMEOUT=8 # Operation timed out
|
|
export EXIT_INTERRUPTED=9 # User interrupted (Ctrl+C)
|
|
|
|
# Tool/dependency errors (10-19)
|
|
export EXIT_MISSING_TOOL=10 # Required tool not installed
|
|
export EXIT_TOOL_ERROR=11 # Tool execution failed
|
|
export EXIT_VERSION_MISMATCH=12 # Wrong tool version
|
|
export EXIT_DEPENDENCY_ERROR=13 # Dependency resolution failed
|
|
|
|
# Build errors (20-29)
|
|
export EXIT_BUILD_FAILED=20 # Build compilation failed
|
|
export EXIT_RESTORE_FAILED=21 # Package restore failed
|
|
export EXIT_PUBLISH_FAILED=22 # Publish failed
|
|
export EXIT_PACKAGING_FAILED=23 # Packaging failed
|
|
|
|
# Test errors (30-39)
|
|
export EXIT_TEST_FAILED=30 # Tests failed
|
|
export EXIT_TEST_TIMEOUT=31 # Test timed out
|
|
export EXIT_FIXTURE_ERROR=32 # Test fixture error
|
|
export EXIT_DETERMINISM_FAIL=33 # Determinism check failed
|
|
|
|
# Deployment errors (40-49)
|
|
export EXIT_DEPLOY_FAILED=40 # Deployment failed
|
|
export EXIT_ROLLBACK_FAILED=41 # Rollback failed
|
|
export EXIT_HEALTH_CHECK_FAIL=42 # Health check failed
|
|
export EXIT_REGISTRY_ERROR=43 # Container registry error
|
|
|
|
# Validation errors (50-59)
|
|
export EXIT_VALIDATION_FAILED=50 # General validation failed
|
|
export EXIT_SCHEMA_ERROR=51 # Schema validation failed
|
|
export EXIT_LINT_ERROR=52 # Lint check failed
|
|
export EXIT_FORMAT_ERROR=53 # Format check failed
|
|
export EXIT_LICENSE_ERROR=54 # License compliance failed
|
|
|
|
# Security errors (60-69)
|
|
export EXIT_SECURITY_ERROR=60 # Security check failed
|
|
export EXIT_SECRETS_FOUND=61 # Secrets detected in code
|
|
export EXIT_VULN_FOUND=62 # Vulnerabilities found
|
|
export EXIT_SIGN_FAILED=63 # Signing failed
|
|
export EXIT_VERIFY_FAILED=64 # Verification failed
|
|
|
|
# Git/VCS errors (70-79)
|
|
export EXIT_GIT_ERROR=70 # Git operation failed
|
|
export EXIT_DIRTY_WORKTREE=71 # Uncommitted changes
|
|
export EXIT_MERGE_CONFLICT=72 # Merge conflict
|
|
export EXIT_BRANCH_ERROR=73 # Branch operation failed
|
|
|
|
# Reserved for specific tools (80-99)
|
|
export EXIT_DOTNET_ERROR=80 # .NET specific error
|
|
export EXIT_DOCKER_ERROR=81 # Docker specific error
|
|
export EXIT_HELM_ERROR=82 # Helm specific error
|
|
export EXIT_KUBECTL_ERROR=83 # kubectl specific error
|
|
export EXIT_NPM_ERROR=84 # npm specific error
|
|
export EXIT_PYTHON_ERROR=85 # Python specific error
|
|
|
|
# Legacy compatibility
|
|
export EXIT_TOOLCHAIN=69 # Tool not found (legacy, use EXIT_MISSING_TOOL)
|
|
|
|
# ============================================================================
|
|
# Helper Functions
|
|
# ============================================================================
|
|
|
|
# Get exit code name from number
|
|
exit_code_name() {
|
|
local code="${1:-}"
|
|
|
|
case "$code" in
|
|
0) echo "SUCCESS" ;;
|
|
1) echo "ERROR" ;;
|
|
2) echo "USAGE" ;;
|
|
3) echo "CONFIG_ERROR" ;;
|
|
4) echo "NOT_FOUND" ;;
|
|
5) echo "PERMISSION" ;;
|
|
6) echo "IO_ERROR" ;;
|
|
7) echo "NETWORK_ERROR" ;;
|
|
8) echo "TIMEOUT" ;;
|
|
9) echo "INTERRUPTED" ;;
|
|
10) echo "MISSING_TOOL" ;;
|
|
11) echo "TOOL_ERROR" ;;
|
|
12) echo "VERSION_MISMATCH" ;;
|
|
13) echo "DEPENDENCY_ERROR" ;;
|
|
20) echo "BUILD_FAILED" ;;
|
|
21) echo "RESTORE_FAILED" ;;
|
|
22) echo "PUBLISH_FAILED" ;;
|
|
23) echo "PACKAGING_FAILED" ;;
|
|
30) echo "TEST_FAILED" ;;
|
|
31) echo "TEST_TIMEOUT" ;;
|
|
32) echo "FIXTURE_ERROR" ;;
|
|
33) echo "DETERMINISM_FAIL" ;;
|
|
40) echo "DEPLOY_FAILED" ;;
|
|
41) echo "ROLLBACK_FAILED" ;;
|
|
42) echo "HEALTH_CHECK_FAIL" ;;
|
|
43) echo "REGISTRY_ERROR" ;;
|
|
50) echo "VALIDATION_FAILED" ;;
|
|
51) echo "SCHEMA_ERROR" ;;
|
|
52) echo "LINT_ERROR" ;;
|
|
53) echo "FORMAT_ERROR" ;;
|
|
54) echo "LICENSE_ERROR" ;;
|
|
60) echo "SECURITY_ERROR" ;;
|
|
61) echo "SECRETS_FOUND" ;;
|
|
62) echo "VULN_FOUND" ;;
|
|
63) echo "SIGN_FAILED" ;;
|
|
64) echo "VERIFY_FAILED" ;;
|
|
69) echo "TOOLCHAIN (legacy)" ;;
|
|
70) echo "GIT_ERROR" ;;
|
|
71) echo "DIRTY_WORKTREE" ;;
|
|
72) echo "MERGE_CONFLICT" ;;
|
|
73) echo "BRANCH_ERROR" ;;
|
|
80) echo "DOTNET_ERROR" ;;
|
|
81) echo "DOCKER_ERROR" ;;
|
|
82) echo "HELM_ERROR" ;;
|
|
83) echo "KUBECTL_ERROR" ;;
|
|
84) echo "NPM_ERROR" ;;
|
|
85) echo "PYTHON_ERROR" ;;
|
|
126) echo "COMMAND_NOT_EXECUTABLE" ;;
|
|
127) echo "COMMAND_NOT_FOUND" ;;
|
|
*)
|
|
if [[ $code -ge 128 ]] && [[ $code -le 255 ]]; then
|
|
local signal=$((code - 128))
|
|
echo "SIGNAL_${signal}"
|
|
else
|
|
echo "UNKNOWN_${code}"
|
|
fi
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Check if exit code indicates success
|
|
is_success() {
|
|
[[ "${1:-1}" -eq 0 ]]
|
|
}
|
|
|
|
# Check if exit code indicates error
|
|
is_error() {
|
|
[[ "${1:-0}" -ne 0 ]]
|
|
}
|
|
|
|
# Exit with message and code
|
|
exit_with() {
|
|
local code="${1:-1}"
|
|
shift
|
|
if [[ $# -gt 0 ]]; then
|
|
echo "$@" >&2
|
|
fi
|
|
exit "$code"
|
|
}
|