新增工具脚本: - scripts/sync-upstream.sh: 主同步脚本,自动从上游拉取并应用配置 - scripts/apply-branding.sh: 自动应用StarFireAPI品牌化修改 - scripts/apply-deploy-config.sh: 自动应用部署配置 - scripts/README.md: 工具使用说明 功能特性: ✅ 自动备份当前分支 ✅ 从上游仓库拉取最新代码 ✅ 自动应用品牌化修改(Sub2API → StarFireAPI) ✅ 自动应用部署配置(端口、Redis、镜像等) ✅ 智能提示和确认 ✅ 支持回滚操作 使用方法: chmod +x scripts/*.sh ./scripts/sync-upstream.sh 修改 .gitignore 以允许追踪自定义同步工具 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
202 lines
5.6 KiB
Bash
202 lines
5.6 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# 上游同步脚本 - StarFireAPI
|
|
# =============================================================================
|
|
# 功能:从上游 sub2api 仓库拉取最新代码并重新应用自定义配置
|
|
# 用法:./scripts/sync-upstream.sh
|
|
# =============================================================================
|
|
|
|
set -e # 遇到错误立即退出
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 配置
|
|
UPSTREAM_REPO="https://github.com/Wei-Shaw/sub2api.git"
|
|
UPSTREAM_BRANCH="main"
|
|
BACKUP_BRANCH_PREFIX="backup"
|
|
|
|
# 日志函数
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 获取当前分支名
|
|
get_current_branch() {
|
|
git rev-parse --abbrev-ref HEAD
|
|
}
|
|
|
|
# 获取当前提交哈希
|
|
get_current_commit() {
|
|
git rev-parse HEAD
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
log_info "=========================================="
|
|
log_info "StarFireAPI 上游同步工具"
|
|
log_info "=========================================="
|
|
echo ""
|
|
|
|
# 1. 检查是否在 git 仓库中
|
|
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
|
log_error "当前目录不是 Git 仓库"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. 检查工作目录是否干净
|
|
if [[ -n $(git status -s) ]]; then
|
|
log_warning "工作目录有未提交的修改"
|
|
read -p "是否继续?未提交的修改可能丢失 (y/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
log_info "已取消操作"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
CURRENT_BRANCH=$(get_current_branch)
|
|
CURRENT_COMMIT=$(get_current_commit)
|
|
|
|
log_info "当前分支: $CURRENT_BRANCH"
|
|
log_info "当前提交: $CURRENT_COMMIT"
|
|
echo ""
|
|
|
|
# 3. 创建备份分支
|
|
BACKUP_BRANCH="${BACKUP_BRANCH_PREFIX}-$(date +%Y%m%d-%H%M%S)"
|
|
log_info "创建备份分支: $BACKUP_BRANCH"
|
|
git branch $BACKUP_BRANCH
|
|
log_success "备份分支已创建"
|
|
echo ""
|
|
|
|
# 4. 检查并添加上游仓库
|
|
log_info "配置上游仓库..."
|
|
if git remote get-url upstream > /dev/null 2>&1; then
|
|
CURRENT_UPSTREAM=$(git remote get-url upstream)
|
|
if [[ "$CURRENT_UPSTREAM" != "$UPSTREAM_REPO" ]]; then
|
|
log_warning "上游仓库地址不匹配,正在更新..."
|
|
git remote set-url upstream $UPSTREAM_REPO
|
|
fi
|
|
else
|
|
log_info "添加上游仓库: $UPSTREAM_REPO"
|
|
git remote add upstream $UPSTREAM_REPO
|
|
fi
|
|
log_success "上游仓库配置完成"
|
|
echo ""
|
|
|
|
# 5. 获取上游最新代码
|
|
log_info "从上游获取最新代码..."
|
|
git fetch upstream
|
|
log_success "上游代码获取完成"
|
|
echo ""
|
|
|
|
# 6. 查看上游最新版本
|
|
UPSTREAM_LATEST=$(git rev-parse upstream/$UPSTREAM_BRANCH)
|
|
UPSTREAM_SHORT=$(git rev-parse --short upstream/$UPSTREAM_BRANCH)
|
|
UPSTREAM_MESSAGE=$(git log -1 --pretty=format:"%s" upstream/$UPSTREAM_BRANCH)
|
|
|
|
log_info "上游最新版本:"
|
|
echo " 提交: $UPSTREAM_SHORT"
|
|
echo " 消息: $UPSTREAM_MESSAGE"
|
|
echo ""
|
|
|
|
# 7. 确认是否继续
|
|
read -p "是否重置到上游最新版本并重新应用自定义配置?(y/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
log_info "已取消操作"
|
|
log_info "备份分支已保留: $BACKUP_BRANCH"
|
|
exit 0
|
|
fi
|
|
|
|
# 8. 重置到上游最新版本
|
|
log_info "重置到上游最新版本..."
|
|
git reset --hard upstream/$UPSTREAM_BRANCH
|
|
log_success "已重置到上游最新版本"
|
|
echo ""
|
|
|
|
# 9. 应用自定义配置
|
|
log_info "应用自定义配置..."
|
|
|
|
# 调用品牌化脚本
|
|
if [[ -f "$(dirname "$0")/apply-branding.sh" ]]; then
|
|
bash "$(dirname "$0")/apply-branding.sh"
|
|
else
|
|
log_warning "品牌化脚本不存在,跳过"
|
|
fi
|
|
|
|
# 调用部署配置脚本
|
|
if [[ -f "$(dirname "$0")/apply-deploy-config.sh" ]]; then
|
|
bash "$(dirname "$0")/apply-deploy-config.sh"
|
|
else
|
|
log_warning "部署配置脚本不存在,跳过"
|
|
fi
|
|
|
|
log_success "自定义配置应用完成"
|
|
echo ""
|
|
|
|
# 10. 提交修改
|
|
if [[ -n $(git status -s) ]]; then
|
|
log_info "提交自定义配置..."
|
|
git add -A
|
|
|
|
COMMIT_MESSAGE="同步上游并重新应用自定义配置
|
|
|
|
上游版本: $UPSTREAM_SHORT
|
|
上游消息: $UPSTREAM_MESSAGE
|
|
同步时间: $(date '+%Y-%m-%d %H:%M:%S')
|
|
|
|
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
|
|
|
|
git commit -m "$COMMIT_MESSAGE"
|
|
log_success "修改已提交"
|
|
echo ""
|
|
else
|
|
log_info "没有需要提交的修改"
|
|
echo ""
|
|
fi
|
|
|
|
# 11. 显示摘要
|
|
log_success "=========================================="
|
|
log_success "同步完成!"
|
|
log_success "=========================================="
|
|
echo ""
|
|
echo "备份分支: $BACKUP_BRANCH"
|
|
echo "上游版本: $UPSTREAM_SHORT"
|
|
echo "当前提交: $(get_current_commit | cut -c1-7)"
|
|
echo ""
|
|
|
|
# 12. 询问是否推送
|
|
read -p "是否推送到远程仓库?(y/N): " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
log_info "推送到远程仓库..."
|
|
git push origin $CURRENT_BRANCH --force
|
|
log_success "推送完成"
|
|
else
|
|
log_info "已跳过推送,请稍后手动执行: git push origin $CURRENT_BRANCH --force"
|
|
fi
|
|
|
|
echo ""
|
|
log_info "如需回滚,请执行: git reset --hard $BACKUP_BRANCH"
|
|
}
|
|
|
|
# 执行主函数
|
|
main "$@"
|