feat: 在 trigger-version GitHub Action 中添加 use-latest-version 输入参数,支持在非版本触发时使用当前分支最新的版本标签,同时更新版本号输出格式,新增横线格式版本号的生成,更新文档以反映新功能和使用示例。

This commit is contained in:
Lyda
2025-08-21 11:05:24 +08:00
parent 8c5ff61828
commit 52eb45b66f
4 changed files with 82 additions and 11 deletions

View File

@@ -8,6 +8,7 @@
- 🔄 **版本分支检测**:识别版本分支(如 `v1.2.x`)并提取版本信息
- 🆕 **常规分支处理**:对于非版本分支提供基础信息
- 🎯 **灵活的版本前缀**:支持自定义版本前缀(默认为 `v`
- 🔧 **版本格式转换**:自动生成横线格式的版本号(如 `v1.2.3``v1-2-3`
- 📤 **环境变量输出**:自动设置环境变量供后续步骤使用
- 📊 **详细的输出信息**:提供完整的引用信息和触发状态
@@ -25,6 +26,7 @@
| `ref-name` | 引用名称 | `v1.2.3``main``feature/xxx` |
| `is-version-trigger` | 是否为版本触发 | `true``false` |
| `trigger-version` | 触发的版本号(去除前缀) | `1.2.3` |
| `version-with-dash` | 版本号,点替换为横线 | `1-2-3` |
| `trigger-source` | 触发源 | `tag``branch` |
| `full-ref` | 完整的 Git 引用 | `refs/tags/v1.2.3` |
@@ -34,6 +36,7 @@ Action 会自动设置以下环境变量:
- `IS_VERSION_TRIGGER`: 是否为版本触发true/false
- `TRIGGER_VERSION`: 触发的版本号
- `VERSION_WITH_DASH`: 版本号,点替换为横线
- `TRIGGER_SOURCE`: 触发源tag/branch
## 使用示例
@@ -53,6 +56,7 @@ jobs:
outputs:
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
version-with-dash: ${{ steps.version-info.outputs.version-with-dash }}
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
steps:
- name: 获取版本信息
@@ -63,6 +67,7 @@ jobs:
run: |
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
echo "版本号: ${{ steps.version-info.outputs.trigger-version }}"
echo "横线版本号: ${{ steps.version-info.outputs.version-with-dash }}"
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
deploy:
@@ -73,6 +78,7 @@ jobs:
- name: 部署版本
run: |
echo "部署版本: ${{ needs.get-version-info.outputs.trigger-version }}"
echo "Docker标签: myapp:${{ needs.get-version-info.outputs.version-with-dash }}"
```
### 自定义版本前缀
@@ -152,6 +158,7 @@ jobs:
- `is-version-trigger`: `true`
- `trigger-version`: `1.2.3`
- `version-with-dash`: `v1-2-3`
- `trigger-source`: `tag`
### 版本分支触发
@@ -160,6 +167,7 @@ jobs:
- `is-version-trigger`: `true`
- `trigger-version`: `1.2.x`
- `version-with-dash`: `v1-2-x`
- `trigger-source`: `branch`
### 常规分支触发
@@ -168,14 +176,16 @@ jobs:
- `is-version-trigger`: `false`
- `trigger-version`: `""`
- `version-with-dash`: `""`
- `trigger-source`: `branch`
## 最佳实践
1. **条件部署**:使用 `is-version-trigger` 来决定是否执行生产部署
2. **版本标记**:在构建产物中使用 `trigger-version` 进行版本标记
3. **环境区分**:根据触发源选择不同的部署环境
4. **日志记录**:记录详细的版本信息用于追踪和调试
3. **Docker 标签**:使用 `version-with-dash` 作为 Docker 镜像标签(避免点号问题)
4. **环境区分**:根据触发源选择不同的部署环境
5. **日志记录**:记录详细的版本信息用于追踪和调试
## 注意事项

View File

@@ -7,6 +7,10 @@ inputs:
description: '版本前缀用于匹配版本标签或分支默认v'
required: false
default: 'v'
use-latest-version:
description: '在非版本触发时是否使用当前分支最新的版本标签默认false'
required: false
default: 'false'
outputs:
ref-type:
@@ -19,7 +23,7 @@ outputs:
description: '是否为版本触发true/false'
value: ${{ steps.get-version-info.outputs.is_version_trigger }}
trigger-version:
description: '触发的版本号(去除前缀后的版本'
description: '触发的版本号(标准化为v开头的格式'
value: ${{ steps.get-version-info.outputs.trigger_version }}
trigger-source:
description: '触发源tag/branch'
@@ -27,6 +31,9 @@ outputs:
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'
@@ -45,37 +52,81 @@ runs:
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
# 从标签名提取版本号 (v1.2.3 -> 1.2.3)
# 标准化版本号为v开头格式
if [[ "$REF_NAME" == ${VERSION_PREFIX}* ]]; then
TRIGGER_VERSION=${REF_NAME#${VERSION_PREFIX}}
else
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 "标准化版本号: $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_PREFIX}}
TRIGGER_VERSION=$REF_NAME
# 生成带横线的版本号
VERSION_WITH_DASH=$(echo "$TRIGGER_VERSION" | sed 's/\./-/g')
echo "🔄 版本分支触发: $REF_NAME"
echo "版本号: $TRIGGER_VERSION"
echo "标准化版本号: $TRIGGER_VERSION"
echo "横线版本号: $VERSION_WITH_DASH"
IS_VERSION_TRIGGER=true
TRIGGER_SOURCE=branch
else
# 常规分支触发
echo "🆕 常规分支触发: $REF_NAME"
IS_VERSION_TRIGGER=false
TRIGGER_VERSION=""
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
@@ -84,6 +135,7 @@ runs:
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:

View File

@@ -15,6 +15,7 @@ jobs:
outputs:
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
version-with-dash: ${{ steps.version-info.outputs.version-with-dash }}
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
ref-type: ${{ steps.version-info.outputs.ref-type }}
ref-name: ${{ steps.version-info.outputs.ref-name }}
@@ -35,6 +36,7 @@ jobs:
echo "完整引用: ${{ steps.version-info.outputs.full-ref }}"
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
echo "触发版本号: ${{ steps.version-info.outputs.trigger-version }}"
echo "横线版本号: ${{ steps.version-info.outputs.version-with-dash }}"
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
echo "================================"
@@ -43,6 +45,7 @@ jobs:
echo "========== 环境变量 =========="
echo "IS_VERSION_TRIGGER: ${IS_VERSION_TRIGGER}"
echo "TRIGGER_VERSION: ${TRIGGER_VERSION}"
echo "VERSION_WITH_DASH: ${VERSION_WITH_DASH}"
echo "TRIGGER_SOURCE: ${TRIGGER_SOURCE}"
echo "============================"
@@ -59,6 +62,8 @@ jobs:
if [[ "${{ needs.get-version-info.outputs.is-version-trigger }}" == "true" ]]; then
echo "✅ 这是一个版本发布触发"
echo "🚀 版本号: ${{ needs.get-version-info.outputs.trigger-version }}"
echo "🏷️ 横线版本号: ${{ needs.get-version-info.outputs.version-with-dash }}"
echo "🐳 Docker标签: myapp:${{ needs.get-version-info.outputs.version-with-dash }}"
echo "📦 触发源: ${{ needs.get-version-info.outputs.trigger-source }}"
else
echo " 这是一个常规分支推送"

View File

@@ -14,6 +14,7 @@ jobs:
outputs:
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
version-with-dash: ${{ steps.version-info.outputs.version-with-dash }}
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
ref-name: ${{ steps.version-info.outputs.ref-name }}
deploy-staging: ${{ steps.deployment-strategy.outputs.deploy-staging }}
@@ -102,8 +103,11 @@ jobs:
- name: 部署到生产环境
run: |
echo "🚀 部署版本 ${{ needs.analyze.outputs.trigger-version }} 到生产环境"
echo "🐳 Docker标签: myapp:${{ needs.analyze.outputs.version-with-dash }}"
echo "触发源: ${{ needs.analyze.outputs.trigger-source }}"
# 生产部署逻辑
# docker build -t myapp:${{ needs.analyze.outputs.version-with-dash }} .
# docker push myapp:${{ needs.analyze.outputs.version-with-dash }}
echo "✅ 生产环境部署完成"
- name: 创建 Release