mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 16:53:37 +08:00
feat: 添加最新版本获取功能,更新文档示例以展示如何使用最新版本进行部署
This commit is contained in:
@@ -34,6 +34,12 @@ outputs:
|
||||
version-with-dash:
|
||||
description: "版本号,点替换为横线(例如:v1.2.3 -> v1-2-3)"
|
||||
value: ${{ steps.get-version-info.outputs.version_with_dash }}
|
||||
latest-version:
|
||||
description: "仓库中的最新版本号(始终获取,格式如:v1.2.3)"
|
||||
value: ${{ steps.get-version-info.outputs.latest_version }}
|
||||
latest-version-with-dash:
|
||||
description: "最新版本号,点替换为横线(例如:v1.2.3 -> v1-2-3)"
|
||||
value: ${{ steps.get-version-info.outputs.latest_version_with_dash }}
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
@@ -42,6 +48,59 @@ runs:
|
||||
id: get-version-info
|
||||
shell: bash
|
||||
run: |
|
||||
# 获取最新版本号的函数
|
||||
get_latest_version() {
|
||||
local prefix="$1"
|
||||
local latest_version=""
|
||||
local latest_version_with_dash=""
|
||||
|
||||
echo "🔍 开始获取最新版本号(前缀:${prefix})..."
|
||||
|
||||
# 检查git仓库是否可用
|
||||
if git rev-parse --git-dir > /dev/null 2>&1; then
|
||||
echo "✅ Git仓库可用,开始获取标签..."
|
||||
|
||||
# 确保获取所有标签信息(GitHub Actions 默认是浅克隆)
|
||||
echo "📥 获取远程标签信息..."
|
||||
git fetch --tags --quiet 2>/dev/null || echo "⚠️ 获取远程标签失败,继续使用本地标签"
|
||||
|
||||
# 获取所有匹配的标签
|
||||
echo "🏷️ 查找匹配前缀 '${prefix}' 的标签..."
|
||||
local all_tags=$(git tag --list "${prefix}*" 2>/dev/null)
|
||||
|
||||
if [[ -n "$all_tags" ]]; then
|
||||
echo "找到的标签:"
|
||||
echo "$all_tags"
|
||||
|
||||
# 获取最新的版本标签
|
||||
if command -v sort >/dev/null 2>&1; then
|
||||
# 使用 sort 命令进行版本排序
|
||||
latest_version=$(echo "$all_tags" | sort -V | tail -1)
|
||||
else
|
||||
# 如果没有 sort -V,使用 git 的排序
|
||||
latest_version=$(git tag --list "${prefix}*" --sort=-version:refname 2>/dev/null | head -1)
|
||||
fi
|
||||
|
||||
if [[ -n "$latest_version" ]]; then
|
||||
# 生成带横线的版本号
|
||||
latest_version_with_dash=$(echo "$latest_version" | sed 's/\./-/g')
|
||||
echo "📦 找到最新版本: $latest_version"
|
||||
echo "📦 横线格式版本: $latest_version_with_dash"
|
||||
else
|
||||
echo "⚠️ 未能确定最新版本"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ 未找到匹配前缀 '${prefix}' 的版本标签"
|
||||
fi
|
||||
else
|
||||
echo "❌ Git仓库不可用"
|
||||
fi
|
||||
|
||||
# 设置全局变量
|
||||
LATEST_VERSION="$latest_version"
|
||||
LATEST_VERSION_WITH_DASH="$latest_version_with_dash"
|
||||
}
|
||||
|
||||
# 获取GitHub上下文信息
|
||||
echo "触发方式: ${{ github.event_name }}"
|
||||
echo "引用类型: ${{ github.ref_type }}"
|
||||
@@ -54,6 +113,9 @@ runs:
|
||||
VERSION_PREFIX="${{ inputs.version-prefix }}"
|
||||
USE_LATEST_VERSION="${{ inputs.use-latest-version }}"
|
||||
|
||||
# 获取最新版本号(无论触发方式如何都获取)
|
||||
get_latest_version "$VERSION_PREFIX"
|
||||
|
||||
# 判断是否为标签触发
|
||||
if [[ "$REF_TYPE" == "tag" ]]; then
|
||||
# 标准化版本号为v开头格式
|
||||
@@ -84,49 +146,17 @@ runs:
|
||||
echo "🆕 常规分支触发: $REF_NAME"
|
||||
|
||||
if [[ "$USE_LATEST_VERSION" == "true" ]]; then
|
||||
# 获取当前分支最新的版本标签
|
||||
echo "🔍 查找最新版本标签..."
|
||||
|
||||
# 检查git仓库是否可用
|
||||
if git rev-parse --git-dir > /dev/null 2>&1; then
|
||||
echo "✅ Git仓库可用,开始获取标签..."
|
||||
|
||||
# 确保获取所有标签信息(GitHub Actions 默认是浅克隆)
|
||||
echo "📥 获取远程标签信息..."
|
||||
git fetch --tags --quiet 2>/dev/null || echo "⚠️ 获取远程标签失败,继续使用本地标签"
|
||||
|
||||
# 获取所有匹配的标签
|
||||
echo "🏷️ 查找匹配前缀 '${VERSION_PREFIX}' 的标签..."
|
||||
ALL_TAGS=$(git tag --list "${VERSION_PREFIX}*" 2>/dev/null)
|
||||
# echo "找到的标签: $ALL_TAGS"
|
||||
|
||||
# 获取最新的版本标签
|
||||
if command -v sort >/dev/null 2>&1; then
|
||||
# 使用 sort 命令进行版本排序
|
||||
LATEST_TAG=$(echo "$ALL_TAGS" | sort -V | tail -1)
|
||||
else
|
||||
# 如果没有 sort -V,使用 git 的排序
|
||||
LATEST_TAG=$(git tag --list "${VERSION_PREFIX}*" --sort=-version:refname 2>/dev/null | head -1)
|
||||
fi
|
||||
|
||||
if [[ -n "$LATEST_TAG" ]]; then
|
||||
# 找到了版本标签,使用它
|
||||
TRIGGER_VERSION=$LATEST_TAG
|
||||
VERSION_WITH_DASH=$(echo "$TRIGGER_VERSION" | sed 's/\./-/g')
|
||||
echo "📦 使用最新版本标签: $LATEST_TAG"
|
||||
echo "标准化版本号: $TRIGGER_VERSION"
|
||||
echo "横线版本号: $VERSION_WITH_DASH"
|
||||
IS_VERSION_TRIGGER=true
|
||||
else
|
||||
# 没有找到版本标签
|
||||
echo "⚠️ 未找到匹配前缀 '${VERSION_PREFIX}' 的版本标签,使用空版本"
|
||||
IS_VERSION_TRIGGER=false
|
||||
TRIGGER_VERSION=""
|
||||
VERSION_WITH_DASH=""
|
||||
fi
|
||||
# 使用已获取的最新版本
|
||||
if [[ -n "$LATEST_VERSION" ]]; then
|
||||
TRIGGER_VERSION=$LATEST_VERSION
|
||||
VERSION_WITH_DASH=$LATEST_VERSION_WITH_DASH
|
||||
echo "📦 使用最新版本标签: $LATEST_VERSION"
|
||||
echo "标准化版本号: $TRIGGER_VERSION"
|
||||
echo "横线版本号: $VERSION_WITH_DASH"
|
||||
IS_VERSION_TRIGGER=true
|
||||
else
|
||||
# Git仓库不可用
|
||||
echo "❌ Git仓库不可用,使用空版本"
|
||||
# 没有找到版本标签
|
||||
echo "⚠️ 未找到匹配前缀 '${VERSION_PREFIX}' 的版本标签,使用空版本"
|
||||
IS_VERSION_TRIGGER=false
|
||||
TRIGGER_VERSION=""
|
||||
VERSION_WITH_DASH=""
|
||||
@@ -155,6 +185,16 @@ runs:
|
||||
echo "trigger_version=$TRIGGER_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "version_with_dash=$VERSION_WITH_DASH" >> $GITHUB_OUTPUT
|
||||
echo "trigger_source=$TRIGGER_SOURCE" >> $GITHUB_OUTPUT
|
||||
echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "latest_version_with_dash=$LATEST_VERSION_WITH_DASH" >> $GITHUB_OUTPUT
|
||||
|
||||
# 输出摘要信息
|
||||
echo ""
|
||||
echo "=== 版本信息摘要 ==="
|
||||
echo "🔸 触发版本: $TRIGGER_VERSION"
|
||||
echo "🔸 最新版本: $LATEST_VERSION"
|
||||
echo "🔸 是否版本触发: $IS_VERSION_TRIGGER"
|
||||
echo "🔸 触发源: $TRIGGER_SOURCE"
|
||||
|
||||
branding:
|
||||
icon: "git-branch"
|
||||
|
Reference in New Issue
Block a user