Files
xgj/trigger-version/action.yml

162 lines
6.5 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 }}
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"