go-cursor-help/install.sh
Xx 9237f883c9 feat: Enhance installation script and improve user feedback
- Corrected character encoding issues in binary verification messages in `install.sh`.
- Updated download progress display and error handling for binary downloads.
- Added a new configuration location message in `main.go` for better user guidance.
- Removed obsolete binary files from releases to streamline the project structure.

These changes improve the reliability of the installation process and enhance user experience with clearer feedback and updated messaging.
2024-12-11 17:39:13 +08:00

176 lines
6.0 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
# Version / 版本号
VERSION="v2.0.0"
# Bilingual message functions / 双语消息函数
error() {
echo "❌ Error: $1"
echo "❌ 错误:$2"
exit 1
}
info() {
echo " $1"
echo " $2"
}
success() {
echo "$1"
echo "$2"
}
# Detect OS and architecture / 检测操作系统和架构
detect_platform() {
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$OS" in
linux*)
case "$ARCH" in
x86_64) BINARY_NAME="cursor_id_modifier_${VERSION}_linux_amd64" ;;
*) error "Unsupported Linux architecture: $ARCH" "不支持的Linux架构$ARCH" ;;
esac
;;
darwin*)
case "$ARCH" in
x86_64) BINARY_NAME="cursor_id_modifier_${VERSION}_darwin_amd64_intel" ;;
arm64) BINARY_NAME="cursor_id_modifier_${VERSION}_darwin_arm64_m1" ;;
*) error "Unsupported macOS architecture: $ARCH" "不支持的macOS架构$ARCH" ;;
esac
;;
msys*|mingw*|cygwin*)
case "$ARCH" in
x86_64) BINARY_NAME="cursor_id_modifier_${VERSION}_windows_amd64.exe" ;;
*) error "Unsupported Windows architecture: $ARCH" "不支持的Windows架构$ARCH" ;;
esac
;;
*)
error "Unsupported operating system: $OS" "不支持的操作系统:$OS"
;;
esac
}
# Check system requirements / 检查系统要求
check_requirements() {
info "Checking system requirements..." "正在检查系统要求..."
# 添加网络连接检查
if ! ping -c 1 github.com >/dev/null 2>&1; then
error "No network connection to GitHub" \
"无法连接到 GitHub"
fi
# Check curl
if ! command -v curl >/dev/null 2>&1; then
error "curl is required. Please install curl first." \
"需要安装 curl。请先安装 curl 后再运行此脚本。"
fi
# Check write permissions / 检查写入权限
if [ ! -w "$INSTALL_DIR" ]; then
error "No write permission for $INSTALL_DIR. Please run with sudo." \
"没有 $INSTALL_DIR 的写入权限。请使用 sudo 运行此脚本。"
fi
}
# Verify binary / 验证二进制文件
verify_binary() {
info "Verifying binary..." "正在验证二进制文件..."
if [ ! -f "$TEMP_DIR/$BINARY_NAME" ]; then
error "Binary file download failed or does not exist" \
"二进制文件下载失败或不存在"
fi
# 添加可执行文件格式检查
if ! file "$TEMP_DIR/$BINARY_NAME" | grep -q "executable"; then
error "Downloaded file is not an executable" \
"下载的文件不是可执行文件"
fi
# Check file size / 检查文件大小
local size=$(wc -c < "$TEMP_DIR/$BINARY_NAME")
if [ "$size" -lt 1000000 ]; then # At least 1MB / 至少1MB
error "Downloaded file size is abnormal, download might be incomplete" \
"下载的文件大小异常,可能下载不完整"
fi
}
# Main installation process / 主安装流程
main() {
info "Starting installation of cursor-id-modifier ${VERSION}..." \
"开始安装 cursor-id-modifier ${VERSION}..."
# Initialize installation / 初始化安装
detect_platform
INSTALL_DIR="/usr/local/bin"
if [ ! -d "$INSTALL_DIR" ]; then
if ! mkdir -p "$INSTALL_DIR" 2>/dev/null; then
error "Failed to create installation directory" \
"无法创建安装目录"
fi
fi
# Check requirements / 检查要求
check_requirements
# Create temp directory / 创建临时目录
TEMP_DIR=$(mktemp -d)
trap 'rm -rf "$TEMP_DIR"' EXIT
# Download binary / 下载二进制文件
info "Downloading cursor-id-modifier ($OS-$ARCH)..." \
"正在下载 cursor-id-modifier ($OS-$ARCH)..."
# 使用正确的 URL 格式
DOWNLOAD_URL="https://github.com/yuaotian/go-cursor-help/raw/refs/heads/master/bin/$BINARY_NAME"
info "Temporary file will be saved to: $TEMP_DIR" \
"临时文件将保存到:$TEMP_DIR"
# 使用 curl 显示下载进度
if ! curl -L --progress-bar "$DOWNLOAD_URL" -o "$TEMP_DIR/$BINARY_NAME"; then
error "Failed to download binary from: $DOWNLOAD_URL" \
"从以下地址下载二进制文件失败:$DOWNLOAD_URL"
fi
success "Download completed to: $TEMP_DIR/$BINARY_NAME" \
"下载完成,文件位置:$TEMP_DIR/$BINARY_NAME"
# Verify download / 验证下载
verify_binary
# Set permissions / 设置权限
info "Setting execution permissions..." "正在设置执行权限..."
if ! chmod +x "$TEMP_DIR/$BINARY_NAME"; then
error "Failed to set executable permissions" "无法设置可执行权"
fi
# Handle macOS security / 处理macOS安全设置
if [ "$OS" = "darwin" ]; then
info "Handling macOS security settings..." "正在处理macOS安全设置..."
xattr -d com.apple.quarantine "$TEMP_DIR/$BINARY_NAME" 2>/dev/null || true
fi
# Install binary / 安装二进制文件
info "Installing binary..." "正在安装二进制文件..."
if ! mv "$TEMP_DIR/$BINARY_NAME" "$INSTALL_DIR/cursor-id-modifier"; then
error "Failed to install binary" "安装二进制文件失败"
fi
success "Installation successful! You can now run 'cursor-id-modifier' from anywhere." \
"安装成功!现在可以在任何位置运行 'cursor-id-modifier'。"
success "For help, run 'cursor-id-modifier --help'" \
"如需帮助,请运行 'cursor-id-modifier --help'"
}
cleanup_old_version() {
if [ -f "$INSTALL_DIR/cursor-id-modifier" ]; then
info "Removing old version..." "正在删除旧版..."
rm -f "$INSTALL_DIR/cursor-id-modifier" || \
error "Failed to remove old version" "删除旧版本失败"
fi
}
# Start installation / 开始安装
main