diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 6d509deb..f2df98ee 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -43,6 +43,54 @@ jobs: PATCH=$(echo $BASE_VERSION | cut -d'.' -f3) echo "📌 Version components: Major=$MAJOR, Minor=$MINOR, Patch=$PATCH" + # 计算下一个版本号 + echo "📊 Calculating next version..." + + # 获取当前提交与最新tag之间的所有提交消息 + COMMIT_MESSAGES=$(git log --oneline --format=%s $LATEST_TAG..HEAD 2>/dev/null || echo "") + + # 统计需要递增的提交次数(过滤重复的提交消息) + INCREMENT_COUNT=0 + if [ -n "$COMMIT_MESSAGES" ]; then + # 使用awk过滤重复的提交消息并计数 + UNIQUE_MESSAGES=$(echo "$COMMIT_MESSAGES" | awk '!seen[$0]++') + INCREMENT_COUNT=$(echo "$UNIQUE_MESSAGES" | wc -l) + echo "📝 Found $INCREMENT_COUNT unique commit(s) since last tag" + else + echo "📝 No new commits since last tag" + fi + + # 计算新的版本号 + NEW_PATCH=$((PATCH + INCREMENT_COUNT)) + NEW_MINOR=$MINOR + NEW_MAJOR=$MAJOR + + # 处理版本号进位逻辑 + if [ $NEW_PATCH -ge 1000 ]; then + NEW_MINOR=$((NEW_MINOR + NEW_PATCH / 1000)) + NEW_PATCH=$((NEW_PATCH % 1000)) + echo "🔄 Patch version overflow, incrementing minor version" + fi + + if [ $NEW_MINOR -ge 10 ]; then + NEW_MAJOR=$((NEW_MAJOR + NEW_MINOR / 10)) + NEW_MINOR=$((NEW_MINOR % 10)) + echo "🔄 Minor version overflow, incrementing major version" + fi + + # 生成下一个版本号 + NEXT_VERSION="v${NEW_MAJOR}.${NEW_MINOR}.${NEW_PATCH}" + NEXT_TAG="${NEXT_VERSION}_sky" + + echo "🚀 Next version: $NEXT_VERSION" + echo "🏷️ Next tag: $NEXT_TAG" + echo "📈 Increment count: $INCREMENT_COUNT" + + # 输出到Github Actions环境变量 + echo "NEXT_VERSION=$NEXT_VERSION" >> $GITHUB_OUTPUT + echo "NEXT_TAG=$NEXT_TAG" >> $GITHUB_OUTPUT + echo "INCREMENT_COUNT=$INCREMENT_COUNT" >> $GITHUB_OUTPUT + # 输出版本信息 echo "✅ Version extraction completed" # 5. 任务完成通知