#!/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" }