mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
162 lines
6.5 KiB
YAML
162 lines
6.5 KiB
YAML
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 }}
|
||
|
||
runs:
|
||
using: "composite"
|
||
steps:
|
||
- name: 获取触发版本信息
|
||
id: get-version-info
|
||
shell: bash
|
||
run: |
|
||
# 获取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 }}"
|
||
|
||
# 判断是否为标签触发
|
||
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
|
||
# 获取当前分支最新的版本标签
|
||
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
|
||
else
|
||
# Git仓库不可用
|
||
echo "❌ Git仓库不可用,使用空版本"
|
||
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
|
||
|
||
branding:
|
||
icon: "git-branch"
|
||
color: "blue"
|