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 LATEST_TAG=$(git tag --list "${VERSION_PREFIX}*" --sort=-version:refname 2>/dev/null | head -1) 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 "⚠️ 未找到版本标签,使用空版本" 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'