Files
xgj/trigger-version/action.yml

202 lines
8.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: "Trigger Version Info"
description: "获取触发版本信息,支持标签触发、版本分支触发和常规分支触发"
author: "Your Organization"
inputs:
version-prefix:
description: "版本前缀用于匹配版本标签或分支默认v"
required: false
default: "v"
use-latest-version:
description: "在非版本触发时是否使用当前分支最新的版本标签默认false"
required: false
default: "false"
outputs:
ref-type:
description: "引用类型 (tag/branch)"
value: ${{ steps.get-version-info.outputs.ref_type }}
ref-name:
description: "引用名称"
value: ${{ steps.get-version-info.outputs.ref_name }}
is-version-trigger:
description: "是否为版本触发true/false"
value: ${{ steps.get-version-info.outputs.is_version_trigger }}
trigger-version:
description: "触发的版本号标准化为v开头的格式"
value: ${{ steps.get-version-info.outputs.trigger_version }}
trigger-source:
description: "触发源tag/branch"
value: ${{ steps.get-version-info.outputs.trigger_source }}
full-ref:
description: "完整的 Git 引用"
value: ${{ steps.get-version-info.outputs.full_ref }}
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"
steps:
- name: 获取触发版本信息
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 }}"
echo "引用名称: ${{ github.ref_name }}"
echo "完整引用: ${{ github.ref }}"
REF_TYPE="${{ github.ref_type }}"
REF_NAME="${{ github.ref_name }}"
FULL_REF="${{ github.ref }}"
VERSION_PREFIX="${{ inputs.version-prefix }}"
USE_LATEST_VERSION="${{ inputs.use-latest-version }}"
# 获取最新版本号(无论触发方式如何都获取)
get_latest_version "$VERSION_PREFIX"
# 判断是否为标签触发
if [[ "$REF_TYPE" == "tag" ]]; then
# 标准化版本号为v开头格式
if [[ "$REF_NAME" == ${VERSION_PREFIX}* ]]; then
TRIGGER_VERSION=$REF_NAME
else
TRIGGER_VERSION=${VERSION_PREFIX}$REF_NAME
fi
# 生成带横线的版本号
VERSION_WITH_DASH=$(echo "$TRIGGER_VERSION" | sed 's/\./-/g')
echo "🏷️ 标签触发: $REF_NAME"
echo "标准化版本号: $TRIGGER_VERSION"
echo "横线版本号: $VERSION_WITH_DASH"
IS_VERSION_TRIGGER=true
TRIGGER_SOURCE=tag
elif [[ "$REF_TYPE" == "branch" && "$REF_NAME" == ${VERSION_PREFIX}* ]]; then
# 版本分支触发
TRIGGER_VERSION=$REF_NAME
# 生成带横线的版本号
VERSION_WITH_DASH=$(echo "$TRIGGER_VERSION" | sed 's/\./-/g')
echo "🔄 版本分支触发: $REF_NAME"
echo "标准化版本号: $TRIGGER_VERSION"
echo "横线版本号: $VERSION_WITH_DASH"
IS_VERSION_TRIGGER=true
TRIGGER_SOURCE=branch
else
# 常规分支触发
echo "🆕 常规分支触发: $REF_NAME"
if [[ "$USE_LATEST_VERSION" == "true" ]]; then
# 使用已获取的最新版本
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
# 没有找到版本标签
echo "⚠️ 未找到匹配前缀 '${VERSION_PREFIX}' 的版本标签,使用空版本"
IS_VERSION_TRIGGER=false
TRIGGER_VERSION=""
VERSION_WITH_DASH=""
fi
else
# 不使用最新版本
IS_VERSION_TRIGGER=false
TRIGGER_VERSION=""
VERSION_WITH_DASH=""
fi
TRIGGER_SOURCE=branch
fi
# 设置环境变量
echo "IS_VERSION_TRIGGER=$IS_VERSION_TRIGGER" >> $GITHUB_ENV
echo "TRIGGER_VERSION=$TRIGGER_VERSION" >> $GITHUB_ENV
echo "VERSION_WITH_DASH=$VERSION_WITH_DASH" >> $GITHUB_ENV
echo "TRIGGER_SOURCE=$TRIGGER_SOURCE" >> $GITHUB_ENV
# 输出到 step outputs
echo "ref_type=$REF_TYPE" >> $GITHUB_OUTPUT
echo "ref_name=$REF_NAME" >> $GITHUB_OUTPUT
echo "full_ref=$FULL_REF" >> $GITHUB_OUTPUT
echo "is_version_trigger=$IS_VERSION_TRIGGER" >> $GITHUB_OUTPUT
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"
color: "blue"