Private
Public Access
1
0
Files
xcodecli-shells/setup.sh
sususu98 c97d3fbdbb
Some checks failed
Deploy to Cloudflare Pages / deploy (push) Has been cancelled
feat: 添加 VitePress 文档站和 Gitea CI 部署
- 新增 docs/ 目录,使用 VitePress 构建文档站
- 添加 .gitea/workflows/deploy.yaml,部署到 Cloudflare Pages
- 新增 setup.sh 一站式安装脚本(兼容 macOS bash 3.x)
- 修复 Gemini CLI 脚本认证头(改用 Authorization: Bearer)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 10:25:37 +08:00

295 lines
7.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
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
# XCodeCLI Setup Launcher (macOS / Linux)
# 一站式安装和配置 Claude Code, Gemini CLI, Codex
set -e
# ========== 颜色定义 ==========
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# ========== 输出函数 ==========
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
# ========== 工具配置(兼容 bash 3.x==========
TOOL_NAMES_1="Claude Code"
TOOL_NAMES_2="Gemini CLI"
TOOL_NAMES_3="Codex"
TOOL_CMDS_1="claude"
TOOL_CMDS_2="gemini"
TOOL_CMDS_3="codex"
TOOL_PKGS_1="@anthropic-ai/claude-code"
TOOL_PKGS_2="@google/gemini-cli@latest"
TOOL_PKGS_3="@openai/codex"
TOOL_URLS_1="https://gitea.sususu.cf/sususu/xcodecli-shells/raw/branch/main/ClaudeCode/setup-claude-code.sh"
TOOL_URLS_2="https://gitea.sususu.cf/sususu/xcodecli-shells/raw/branch/main/GeminiCLI/setup-gemini.sh"
TOOL_URLS_3="https://gitea.sususu.cf/sususu/xcodecli-shells/raw/branch/main/codex/setup-codex.sh"
# Helper functions to get tool properties
get_tool_name() { eval echo \"\$TOOL_NAMES_$1\"; }
get_tool_cmd() { eval echo \"\$TOOL_CMDS_$1\"; }
get_tool_pkg() { eval echo \"\$TOOL_PKGS_$1\"; }
get_tool_url() { eval echo \"\$TOOL_URLS_$1\"; }
# ========== 帮助信息 ==========
show_help() {
cat << 'EOF'
XCodeCLI Setup Launcher (macOS / Linux)
一站式安装和配置 Claude Code, Gemini CLI, Codex
Usage: ./setup.sh [OPTIONS]
Options:
--key <KEY> 预设 API 密钥(必填)
--help 显示此帮助信息
一行命令快速使用:
API_KEY='YOUR_API_KEY' bash -c "$(curl -fsSL https://gitea.sususu.cf/sususu/xcodecli-shells/raw/branch/main/setup.sh)"
EOF
exit 0
}
# ========== 命令检测 ==========
command_exists() {
command -v "$1" &> /dev/null
}
# ========== 获取包管理器 ==========
get_package_manager() {
if command_exists node; then
local node_version=$(node --version 2>/dev/null | sed 's/v//')
info "检测到 Node.js v$node_version"
echo "npm"
return 0
fi
if command_exists bun; then
local bun_version=$(bun --version 2>/dev/null)
info "检测到 Bun v$bun_version"
echo "bun"
return 0
fi
return 1
}
# ========== 安装 Bun ==========
install_bun() {
echo ""
warning "未检测到 Node.js 或 Bun"
info "推荐安装 Bun轻量级 JavaScript 运行时)"
echo ""
echo -e " 安装命令: ${CYAN}curl -fsSL https://bun.sh/install | bash${NC}"
echo ""
read -p "是否立即安装 Bun? (Y/n) " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Nn]$ ]]; then
return 1
fi
info "正在安装 Bun..."
if curl -fsSL https://bun.sh/install | bash; then
# 刷新 PATH
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
if command_exists bun; then
success "Bun 安装成功!"
return 0
else
warning "Bun 可能已安装,但需要重新打开终端才能生效"
info "请重新打开终端后再运行此脚本"
return 1
fi
else
error "Bun 安装失败"
return 1
fi
}
# ========== 安装工具 ==========
install_tool() {
local tool_num=$1
local pm=$2
local tool_name=$(get_tool_name "$tool_num")
local tool_pkg=$(get_tool_pkg "$tool_num")
info "安装 $tool_name..."
local install_cmd=""
if [[ "$pm" == "npm" ]]; then
install_cmd="npm install -g $tool_pkg"
else
install_cmd="bun add -g $tool_pkg"
fi
echo -e " 执行: ${CYAN}$install_cmd${NC}"
if eval "$install_cmd"; then
hash -r 2>/dev/null || true
success "$tool_name 安装成功!"
return 0
else
error "$tool_name 安装失败"
return 1
fi
}
# ========== 配置工具 ==========
configure_tool() {
local tool_num=$1
local api_key=$2
local tool_name=$(get_tool_name "$tool_num")
local setup_url=$(get_tool_url "$tool_num")
info "配置 $tool_name..."
if API_KEY="$api_key" bash -c "$(curl -fsSL "$setup_url")"; then
success "$tool_name 配置完成!"
return 0
else
error "$tool_name 配置失败"
return 1
fi
}
# ========== 显示状态 ==========
show_status() {
echo ""
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN} XCodeCLI Setup Launcher${NC}"
echo -e "${CYAN}========================================${NC}"
echo ""
echo -e "${YELLOW}工具安装状态:${NC}"
echo ""
for i in 1 2 3; do
local tool_name=$(get_tool_name "$i")
local tool_cmd=$(get_tool_cmd "$i")
local status
local color
if command_exists "$tool_cmd"; then
status="[已安装]"
color="${GREEN}"
else
status="[未安装]"
color="${RED}"
fi
printf " %-12s %b%s%b\n" "$tool_name" "$color" "$status" "$NC"
done
echo ""
}
# ========== 主函数 ==========
main() {
local api_key="${API_KEY:-}"
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
--key)
api_key="$2"
shift 2
;;
--help|-h)
show_help
;;
*)
shift
;;
esac
done
# 显示状态
show_status
# 检查 API Key
if [[ -z "$api_key" ]]; then
echo -e "${YELLOW}请输入 API 密钥:${NC}"
read -r api_key
if [[ -z "$api_key" ]]; then
error "API 密钥不能为空"
exit 1
fi
fi
info "API 密钥: ${api_key:0:8}..."
echo ""
# 获取包管理器
local pm=$(get_package_manager)
if [[ -z "$pm" ]]; then
if ! install_bun; then
exit 1
fi
pm=$(get_package_manager)
if [[ -z "$pm" ]]; then
error "仍未检测到可用的包管理器"
exit 1
fi
fi
echo ""
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN} 开始安装和配置所有工具${NC}"
echo -e "${CYAN}========================================${NC}"
echo ""
local failed=0
# 安装和配置每个工具
for i in 1 2 3; do
local tool_name=$(get_tool_name "$i")
local tool_cmd=$(get_tool_cmd "$i")
echo ""
echo -e "${YELLOW}>>> [$i/3] $tool_name${NC}"
echo ""
# 检测是否已安装
if ! command_exists "$tool_cmd"; then
if ! install_tool "$i" "$pm"; then
failed=$((failed + 1))
continue
fi
else
info "$tool_name 已安装,跳过安装步骤"
fi
# 配置工具
if ! configure_tool "$i" "$api_key"; then
failed=$((failed + 1))
fi
done
# 显示结果
echo ""
echo -e "${CYAN}========================================${NC}"
echo -e "${CYAN} 配置完成${NC}"
echo -e "${CYAN}========================================${NC}"
echo ""
if [[ $failed -eq 0 ]]; then
success "所有工具安装配置成功!"
else
warning "$failed 个工具配置失败"
fi
echo ""
show_status
}
main "$@"