Files
xinghuoapi/scripts/sync-upstream.sh
huangzhenpc d46653b2c2
Some checks failed
CI / test (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
Security Scan / backend-security (push) Has been cancelled
Security Scan / frontend-security (push) Has been cancelled
添加上游同步自动化工具
新增工具脚本:
- 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>
2026-01-30 01:42:21 +08:00

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 "$@"