diff --git a/.github/workflows/agents-release.yml b/.github/workflows/agents-release.yml index aae3f8dbe..58de23df3 100644 --- a/.github/workflows/agents-release.yml +++ b/.github/workflows/agents-release.yml @@ -22,64 +22,83 @@ jobs: id: bump shell: bash run: | + LEGACY_REPO="https://github.com/t8y2/dbx-agents.git" + LEGACY_BASE_TAG="v0.2.33" PREV_TAG=$(git tag --sort=-creatordate | grep '^agents-v' | sed -n '2p') - if [ -z "$PREV_TAG" ]; then - echo "No previous tag found, all modules are new" - PREV_TAG=$(git rev-list --max-parents=0 HEAD) - fi - echo "Comparing $PREV_TAG..HEAD" + SKIP_BUMP=false + MIGRATED_FIRST_RELEASE=false VERSIONS=$(cat agents/versions.json) PREV_VERSIONS="$VERSIONS" + + if [ -z "$PREV_TAG" ]; then + echo "No previous agents-v tag found; treating this as the first migrated agents release" + PREV_TAG=$(git rev-list --max-parents=0 HEAD) + + TMP_LEGACY="$(mktemp -d)" + git clone --depth 1 --branch "$LEGACY_BASE_TAG" "$LEGACY_REPO" "$TMP_LEGACY" + PREV_VERSIONS=$(cat "$TMP_LEGACY/versions.json") + rm -rf "$TMP_LEGACY" + + SKIP_BUMP=true + MIGRATED_FIRST_RELEASE=true + fi + echo "Comparing $PREV_TAG..HEAD" + CHANGED=false - for dir in $(echo "$VERSIONS" | python3 -c "import sys,json; [print(k) for k in json.load(sys.stdin)]"); do - if [ -d "agents/drivers/$dir" ] || [ -d "agents/$dir" ] || [ "$dir" = "common" ]; then - if [ -d "agents/drivers/$dir" ]; then - CHECK_DIR="drivers/$dir" - else - CHECK_DIR="$dir" - fi - EXTRA_CHECK_DIR="" - if [ "$dir" = "oracle" ]; then - EXTRA_CHECK_DIR="drivers/oracle-go" - fi - DIFF_PATHS=("agents/$CHECK_DIR/") - if [ -n "$EXTRA_CHECK_DIR" ]; then - DIFF_PATHS+=("agents/$EXTRA_CHECK_DIR/") - fi - # common changes affect all modules - if git diff --quiet "$PREV_TAG"..HEAD -- agents/common/ 2>/dev/null; then - COMMON_CHANGED=false - else - COMMON_CHANGED=true - fi + if [ "$SKIP_BUMP" = "true" ]; then + echo "Skipping automatic module version bump for migrated first release; versions.json was carried over from dbx-agents." + else + for dir in $(echo "$VERSIONS" | python3 -c "import sys,json; [print(k) for k in json.load(sys.stdin)]"); do + if [ -d "agents/drivers/$dir" ] || [ -d "agents/$dir" ] || [ "$dir" = "common" ]; then + if [ -d "agents/drivers/$dir" ]; then + CHECK_DIR="drivers/$dir" + else + CHECK_DIR="$dir" + fi + EXTRA_CHECK_DIR="" + if [ "$dir" = "oracle" ]; then + EXTRA_CHECK_DIR="drivers/oracle-go" + fi + DIFF_PATHS=("agents/$CHECK_DIR/") + if [ -n "$EXTRA_CHECK_DIR" ]; then + DIFF_PATHS+=("agents/$EXTRA_CHECK_DIR/") + fi + # common changes affect all modules + if git diff --quiet "$PREV_TAG"..HEAD -- agents/common/ 2>/dev/null; then + COMMON_CHANGED=false + else + COMMON_CHANGED=true + fi - if git diff --quiet "$PREV_TAG"..HEAD -- "${DIFF_PATHS[@]}" 2>/dev/null && [ "$COMMON_CHANGED" = "false" ]; then - echo " $dir: no changes" - else - echo " $dir: CHANGED" - OLD_VER=$(echo "$VERSIONS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('$dir','0.1.0'))") - IFS='.' read -r major minor patch <<< "$OLD_VER" - NEW_VER="$major.$minor.$((patch + 1))" - VERSIONS=$(echo "$VERSIONS" | python3 -c " + if git diff --quiet "$PREV_TAG"..HEAD -- "${DIFF_PATHS[@]}" 2>/dev/null && [ "$COMMON_CHANGED" = "false" ]; then + echo " $dir: no changes" + else + echo " $dir: CHANGED" + OLD_VER=$(echo "$VERSIONS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('$dir','0.1.0'))") + IFS='.' read -r major minor patch <<< "$OLD_VER" + NEW_VER="$major.$minor.$((patch + 1))" + VERSIONS=$(echo "$VERSIONS" | python3 -c " import sys, json d = json.load(sys.stdin) d['$dir'] = '$NEW_VER' json.dump(d, sys.stdout, indent=2) print() ") - CHANGED=true - echo " $dir: $OLD_VER -> $NEW_VER" + CHANGED=true + echo " $dir: $OLD_VER -> $NEW_VER" + fi fi - fi - done + done + fi echo "$VERSIONS" > agents/versions.json cat agents/versions.json echo "versions=$(cat agents/versions.json | python3 -c 'import sys,json; print(json.dumps(json.load(sys.stdin)))')" >> "$GITHUB_OUTPUT" echo "prev_versions=$(echo "$PREV_VERSIONS" | python3 -c 'import sys,json; print(json.dumps(json.load(sys.stdin)))')" >> "$GITHUB_OUTPUT" echo "prev_tag=$PREV_TAG" >> "$GITHUB_OUTPUT" + echo "migrated_first_release=$MIGRATED_FIRST_RELEASE" >> "$GITHUB_OUTPUT" if [ "$CHANGED" = "true" ]; then git config user.name "github-actions[bot]" diff --git a/agents/scripts/release.sh b/agents/scripts/release.sh index 588506822..90ce756b3 100755 --- a/agents/scripts/release.sh +++ b/agents/scripts/release.sh @@ -7,42 +7,68 @@ set -euo pipefail # ./scripts/release.sh minor # 递增 minor 版本 # ./scripts/release.sh major # 递增 major 版本 # ./scripts/release.sh agents-v0.3.0 # 手动指定版本号 +# ./scripts/release.sh v0.3.0 # 手动指定旧 dbx-agents 版本号,会转换为 agents-v0.3.0 BUMP="${1:-patch}" -# 获取最新的 agents-v 开头的 tag -latest_tag=$(git tag --sort=-v:refname | grep '^agents-v' | head -1) +to_agents_tag() { + case "$1" in + agents-v*) echo "$1" ;; + v*) echo "agents-$1" ;; + *) echo "$1" ;; + esac +} + +bump_tag() { + local tag="$1" + local bump="$2" + local version major minor patch + + version="${tag#agents-v}" + IFS='.' read -r major minor patch <<< "$version" + + case "$bump" in + major) + echo "agents-v$((major + 1)).0.0" + ;; + minor) + echo "agents-v${major}.$((minor + 1)).0" + ;; + patch) + echo "agents-v${major}.${minor}.$((patch + 1))" + ;; + agents-v*|v*) + to_agents_tag "$bump" + ;; + *) + echo "错误: 未知的版本递增方式 '$bump',请使用 patch/minor/major 或 agents-vX.Y.Z" >&2 + return 1 + ;; + esac +} + +# 获取当前仓库最新的 agents-v 开头的 tag +latest_tag=$(git tag --sort=-v:refname | grep '^agents-v' | head -1 || true) if [ -z "$latest_tag" ]; then - echo "未找到任何 Agent 版本 tag,从 agents-v0.1.0 开始" - latest_tag="agents-v0.0.0" + # 迁移后首次发布时,沿用旁边旧 dbx-agents 仓库的 vX.Y.Z tag。 + legacy_tag="" + if git -C ../dbx-agents rev-parse --is-inside-work-tree >/dev/null 2>&1; then + legacy_tag=$(git -C ../dbx-agents tag --sort=-v:refname | grep '^v' | head -1 || true) + fi + + if [ -n "$legacy_tag" ]; then + latest_tag=$(to_agents_tag "$legacy_tag") + echo "当前仓库未找到 Agent 版本 tag,沿用旧 dbx-agents 最新 tag: $legacy_tag" + else + latest_tag="agents-v0.0.0" + echo "未找到任何 Agent 版本 tag,从 agents-v0.1.0 开始" + fi +else + echo "当前最新 tag: $latest_tag" fi -echo "当前最新 tag: $latest_tag" - -# 去掉 agents-v 前缀 -version="${latest_tag#agents-v}" -IFS='.' read -r major minor patch <<< "$version" - -# 计算新版本号 -case "$BUMP" in - major) - new_tag="agents-v$((major + 1)).0.0" - ;; - minor) - new_tag="agents-v${major}.$((minor + 1)).0" - ;; - patch) - new_tag="agents-v${major}.${minor}.$((patch + 1))" - ;; - agents-v*) - new_tag="$BUMP" - ;; - *) - echo "错误: 未知的版本递增方式 '$BUMP',请使用 patch/minor/major 或 agents-vX.Y.Z" - exit 1 - ;; -esac +new_tag=$(bump_tag "$latest_tag" "$BUMP") echo "新版本: $new_tag"