version.sh
Rama main · réplica de lectura del repositorio original.
#!/bin/bash
# Scout Agent 版本管理脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
NC='\033[0m'
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# 读取当前版本
get_current_version() {
if [[ -f "VERSION" ]]; then
cat VERSION | tr -d '[:space:]'
else
echo "unknown"
fi
}
# 读取版本号
VERSION=$(get_current_version)
# 显示帮助信息
show_help() {
echo -e "${BLUE}╔═══════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ 🧭 Scout Agent 版本管理工具 ║${NC}"
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${GREEN}当前版本:${NC} ${PURPLE}v${VERSION}${NC}"
echo ""
echo -e "${YELLOW}用法:${NC}"
echo " $0 [命令]"
echo ""
echo -e "${YELLOW}命令:${NC}"
echo " info 显示详细版本信息"
echo " check 检查是否有新版本"
echo " bump <type> 升级版本号 (major|minor|patch)"
echo " set <ver> 设置指定版本号"
echo " history 显示版本历史"
echo " help 显示此帮助信息"
echo ""
echo -e "${YELLOW}示例:${NC}"
echo " $0 info # 显示版本详情"
echo " $0 check # 检查更新"
echo " $0 bump patch # 补丁版本 +1 (0.1.0 -> 0.1.1)"
echo " $0 bump minor # 次要版本 +1 (0.1.0 -> 0.2.0)"
echo " $0 bump major # 主要版本 +1 (0.1.0 -> 1.0.0)"
echo " $0 set 1.2.3 # 设置为 1.2.3"
echo ""
}
# 显示详细版本信息
show_info() {
echo -e "${BLUE}╔═══════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ 🧭 Scout Agent 版本信息 ║${NC}"
echo -e "${BLUE}╚═══════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${GREEN}版本号:${NC} ${PURPLE}v${VERSION}${NC}"
echo -e "${GREEN}Python:${NC} $(python3 --version 2>&1 | awk '{print $2}')"
echo -e "${GREEN}Conda环境:${NC} $(conda env list | grep '*' | awk '{print $1}')"
echo ""
# 显示依赖版本
echo -e "${YELLOW}核心依赖:${NC}"
if command -v pip &> /dev/null; then
echo -e " • openai: $(pip show openai 2>/dev/null | grep Version | awk '{print $2}' || echo '未安装')"
echo -e " • fastapi: $(pip show fastapi 2>/dev/null | grep Version | awk '{print $2}' || echo '未安装')"
echo -e " • uvicorn: $(pip show uvicorn 2>/dev/null | grep Version | awk '{print $2}' || echo '未安装')"
echo -e " • pydantic: $(pip show pydantic 2>/dev/null | grep Version | awk '{print $2}' || echo '未安装')"
fi
echo ""
# 显示系统信息
echo -e "${YELLOW}系统信息:${NC}"
echo -e " • 操作系统: $(uname -s)"
echo -e " • 内核版本: $(uname -r)"
echo -e " • 架构: $(uname -m)"
echo ""
# 显示 Git 信息
if [[ -d ".git" ]]; then
echo -e "${YELLOW}Git 信息:${NC}"
echo -e " • 分支: $(git branch --show-current 2>/dev/null || echo 'unknown')"
echo -e " • 最后提交: $(git log -1 --format='%h %s' 2>/dev/null || echo 'unknown')"
echo -e " • 提交时间: $(git log -1 --format='%ci' 2>/dev/null || echo 'unknown')"
echo ""
fi
}
# 检查更新
check_update() {
echo -e "${BLUE}检查更新...${NC}"
echo ""
# 这里可以添加远程仓库检查逻辑
# 暂时只显示当前版本
echo -e "${GREEN}当前版本:${NC} v${VERSION}"
echo ""
echo -e "${YELLOW}提示:${NC}"
echo " • 使用 'bash update.sh' 更新到最新版本"
echo " • 使用 'git pull' 手动拉取最新代码"
echo ""
}
# 同步 pyproject.toml 的 version 字段(消除 VERSION/pyproject 双份漂移)
# 用法: sync_pyproject <新版本号>
sync_pyproject() {
local ver="$1"
[[ -z "$ver" ]] && return 0
if [[ -f "pyproject.toml" ]] && grep -q '^version *= *"' pyproject.toml; then
# -i.bak 写法 GNU/BSD sed 通用;成功后删除备份
sed -i.bak -E "s/^version *= *\"[0-9.]+\"/version = \"${ver}\"/" pyproject.toml && rm -f pyproject.toml.bak
echo -e "${GREEN}✓ pyproject.toml 已同步${NC} version = \"${ver}\""
fi
}
# 升级版本号
bump_version() {
local type=$1
if [[ -z "$type" ]]; then
echo -e "${RED}错误:${NC} 请指定版本升级类型 (major|minor|patch)"
exit 1
fi
# 解析当前版本(兼容 3 段 X.Y.Z 与 4 段 X.Y.Z.BUILD,4 段时保留 build 段)
IFS='.' read -r major minor patch build <<< "$VERSION"
build="${build:-0}"
# 根据类型升级
case $type in
major)
major=$((major + 1))
minor=0
patch=0
build=0
;;
minor)
minor=$((minor + 1))
patch=0
build=0
;;
patch)
patch=$((patch + 1))
build=0
;;
*)
echo -e "${RED}错误:${NC} 无效的升级类型: $type"
echo -e "${YELLOW}用法:${NC} $0 bump <major|minor|patch>"
exit 1
;;
esac
NEW_VERSION="${major}.${minor}.${patch}.${build}"
echo "$NEW_VERSION" > VERSION
sync_pyproject "$NEW_VERSION"
echo -e "${GREEN}✓ 版本已升级${NC}"
echo -e " ${PURPLE}v${VERSION}${NC} → ${GREEN}v${NEW_VERSION}${NC}"
echo ""
echo -e "${YELLOW}提示:${NC} 一键发版: bash release.sh(bump+tag+构建+Release);或手动:"
echo " git add VERSION pyproject.toml"
echo " git commit -m 'Bump version to ${NEW_VERSION}'"
echo " git tag v${NEW_VERSION} && git push origin main --tags"
}
# 设置版本号
set_version() {
local new_version=$1
if [[ -z "$new_version" ]]; then
echo -e "${RED}错误:${NC} 请指定版本号"
exit 1
fi
# 验证版本格式(支持 X.Y.Z 或 X.Y.Z.BUILD)
if ! [[ $new_version =~ ^[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then
echo -e "${RED}错误:${NC} 无效的版本格式: $new_version"
echo -e "${YELLOW}正确格式:${NC} X.Y.Z 或 X.Y.Z.BUILD (例如: 1.2.3 / 1.0.0.0)"
exit 1
fi
echo "$new_version" > VERSION
sync_pyproject "$new_version"
echo -e "${GREEN}✓ 版本已设置${NC}"
echo -e " ${PURPLE}v${VERSION}${NC} → ${GREEN}v${new_version}${NC}"
}
# 显示版本历史
show_history() {
echo -e "${BLUE}版本历史:${NC}"
echo ""
if [[ -d ".git" ]]; then
git log --tags --simplify-by-decoration --pretty="format:%C(yellow)%d%C(reset) %s %C(green)(%ci)%C(reset)" | head -20
else
echo -e "${YELLOW}未找到 Git 仓库,无法显示版本历史${NC}"
fi
echo ""
}
# 主逻辑
case "${1:-}" in
info)
show_info
;;
check)
check_update
;;
bump)
bump_version "$2"
;;
set)
set_version "$2"
;;
history)
show_history
;;
help|--help|-h)
show_help
;;
"")
show_help
;;
*)
echo -e "${RED}错误:${NC} 未知命令: $1"
echo ""
show_help
exit 1
;;
esac