Files
xgj/config-env/scripts/validate-tools.sh

77 lines
1.9 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE} $1${NC}"
}
log_success() {
echo -e "${GREEN}$1${NC}"
}
log_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
log_error() {
echo -e "${RED}$1${NC}"
}
validate_binary() {
local name="$1"
local required="$2"
local version_cmd="$3"
local output_var="$4"
local version_output=""
if command -v "$name" >/dev/null 2>&1; then
if [[ "$name" == "kubectl" ]]; then
if version_output=$(kubectl version --client --short 2>/dev/null | head -n 1); then
:
else
version_output=$(kubectl version --client 2>/dev/null | head -n 1)
fi
else
version_output=$(bash -c "$version_cmd")
fi
log_success "检测到 $name: $version_output"
printf '%s=%s\n' "$output_var" "$version_output" >> "$GITHUB_OUTPUT"
return 0
fi
if [[ "$required" == "true" ]]; then
log_error "未检测到必需的命令: $name"
exit 1
else
log_warning "未检测到可选命令: $name"
printf '%s=%s\n' "$output_var" "not-found" >> "$GITHUB_OUTPUT"
fi
}
main() {
: "${GITHUB_OUTPUT:?GITHUB_OUTPUT 未设置}" >/dev/null
local enable_validation="${ENABLE_VALIDATION:-true}"
if [[ "$enable_validation" != "true" ]]; then
log_info "已通过统一开关禁用环境校验"
printf 'docker-version=%s\n' "skipped" >> "$GITHUB_OUTPUT"
printf 'kubectl-version=%s\n' "skipped" >> "$GITHUB_OUTPUT"
return 0
fi
validate_binary "docker" "true" "docker --version" "docker-version"
validate_binary "kubectl" "true" "kubectl version --client --short 2>/dev/null || kubectl version --client" "kubectl-version"
}
trap 'log_error "工具校验失败,退出码: $?"' ERR
main "$@"