mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
feat: 在 trigger-version GitHub Action 中添加 use-latest-version 输入参数,支持在非版本触发时使用当前分支最新的版本标签,同时更新版本号输出格式,新增横线格式版本号的生成,更新文档以反映新功能和使用示例。
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
- 🔄 **版本分支检测**:识别版本分支(如 `v1.2.x`)并提取版本信息
|
- 🔄 **版本分支检测**:识别版本分支(如 `v1.2.x`)并提取版本信息
|
||||||
- 🆕 **常规分支处理**:对于非版本分支提供基础信息
|
- 🆕 **常规分支处理**:对于非版本分支提供基础信息
|
||||||
- 🎯 **灵活的版本前缀**:支持自定义版本前缀(默认为 `v`)
|
- 🎯 **灵活的版本前缀**:支持自定义版本前缀(默认为 `v`)
|
||||||
|
- 🔧 **版本格式转换**:自动生成横线格式的版本号(如 `v1.2.3` → `v1-2-3`)
|
||||||
- 📤 **环境变量输出**:自动设置环境变量供后续步骤使用
|
- 📤 **环境变量输出**:自动设置环境变量供后续步骤使用
|
||||||
- 📊 **详细的输出信息**:提供完整的引用信息和触发状态
|
- 📊 **详细的输出信息**:提供完整的引用信息和触发状态
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
| `ref-name` | 引用名称 | `v1.2.3`、`main`、`feature/xxx` |
|
| `ref-name` | 引用名称 | `v1.2.3`、`main`、`feature/xxx` |
|
||||||
| `is-version-trigger` | 是否为版本触发 | `true` 或 `false` |
|
| `is-version-trigger` | 是否为版本触发 | `true` 或 `false` |
|
||||||
| `trigger-version` | 触发的版本号(去除前缀) | `1.2.3` |
|
| `trigger-version` | 触发的版本号(去除前缀) | `1.2.3` |
|
||||||
|
| `version-with-dash` | 版本号,点替换为横线 | `1-2-3` |
|
||||||
| `trigger-source` | 触发源 | `tag` 或 `branch` |
|
| `trigger-source` | 触发源 | `tag` 或 `branch` |
|
||||||
| `full-ref` | 完整的 Git 引用 | `refs/tags/v1.2.3` |
|
| `full-ref` | 完整的 Git 引用 | `refs/tags/v1.2.3` |
|
||||||
|
|
||||||
@@ -34,6 +36,7 @@ Action 会自动设置以下环境变量:
|
|||||||
|
|
||||||
- `IS_VERSION_TRIGGER`: 是否为版本触发(true/false)
|
- `IS_VERSION_TRIGGER`: 是否为版本触发(true/false)
|
||||||
- `TRIGGER_VERSION`: 触发的版本号
|
- `TRIGGER_VERSION`: 触发的版本号
|
||||||
|
- `VERSION_WITH_DASH`: 版本号,点替换为横线
|
||||||
- `TRIGGER_SOURCE`: 触发源(tag/branch)
|
- `TRIGGER_SOURCE`: 触发源(tag/branch)
|
||||||
|
|
||||||
## 使用示例
|
## 使用示例
|
||||||
@@ -53,6 +56,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
||||||
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
|
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 }}
|
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
|
||||||
steps:
|
steps:
|
||||||
- name: 获取版本信息
|
- name: 获取版本信息
|
||||||
@@ -63,6 +67,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
|
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
|
||||||
echo "版本号: ${{ steps.version-info.outputs.trigger-version }}"
|
echo "版本号: ${{ steps.version-info.outputs.trigger-version }}"
|
||||||
|
echo "横线版本号: ${{ steps.version-info.outputs.version-with-dash }}"
|
||||||
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
|
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
@@ -73,6 +78,7 @@ jobs:
|
|||||||
- name: 部署版本
|
- name: 部署版本
|
||||||
run: |
|
run: |
|
||||||
echo "部署版本: ${{ needs.get-version-info.outputs.trigger-version }}"
|
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`
|
- `is-version-trigger`: `true`
|
||||||
- `trigger-version`: `1.2.3`
|
- `trigger-version`: `1.2.3`
|
||||||
|
- `version-with-dash`: `v1-2-3`
|
||||||
- `trigger-source`: `tag`
|
- `trigger-source`: `tag`
|
||||||
|
|
||||||
### 版本分支触发
|
### 版本分支触发
|
||||||
@@ -160,6 +167,7 @@ jobs:
|
|||||||
|
|
||||||
- `is-version-trigger`: `true`
|
- `is-version-trigger`: `true`
|
||||||
- `trigger-version`: `1.2.x`
|
- `trigger-version`: `1.2.x`
|
||||||
|
- `version-with-dash`: `v1-2-x`
|
||||||
- `trigger-source`: `branch`
|
- `trigger-source`: `branch`
|
||||||
|
|
||||||
### 常规分支触发
|
### 常规分支触发
|
||||||
@@ -168,14 +176,16 @@ jobs:
|
|||||||
|
|
||||||
- `is-version-trigger`: `false`
|
- `is-version-trigger`: `false`
|
||||||
- `trigger-version`: `""`
|
- `trigger-version`: `""`
|
||||||
|
- `version-with-dash`: `""`
|
||||||
- `trigger-source`: `branch`
|
- `trigger-source`: `branch`
|
||||||
|
|
||||||
## 最佳实践
|
## 最佳实践
|
||||||
|
|
||||||
1. **条件部署**:使用 `is-version-trigger` 来决定是否执行生产部署
|
1. **条件部署**:使用 `is-version-trigger` 来决定是否执行生产部署
|
||||||
2. **版本标记**:在构建产物中使用 `trigger-version` 进行版本标记
|
2. **版本标记**:在构建产物中使用 `trigger-version` 进行版本标记
|
||||||
3. **环境区分**:根据触发源选择不同的部署环境
|
3. **Docker 标签**:使用 `version-with-dash` 作为 Docker 镜像标签(避免点号问题)
|
||||||
4. **日志记录**:记录详细的版本信息用于追踪和调试
|
4. **环境区分**:根据触发源选择不同的部署环境
|
||||||
|
5. **日志记录**:记录详细的版本信息用于追踪和调试
|
||||||
|
|
||||||
## 注意事项
|
## 注意事项
|
||||||
|
|
||||||
|
@@ -7,6 +7,10 @@ inputs:
|
|||||||
description: '版本前缀,用于匹配版本标签或分支(默认:v)'
|
description: '版本前缀,用于匹配版本标签或分支(默认:v)'
|
||||||
required: false
|
required: false
|
||||||
default: 'v'
|
default: 'v'
|
||||||
|
use-latest-version:
|
||||||
|
description: '在非版本触发时是否使用当前分支最新的版本标签(默认:false)'
|
||||||
|
required: false
|
||||||
|
default: 'false'
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
ref-type:
|
ref-type:
|
||||||
@@ -19,7 +23,7 @@ outputs:
|
|||||||
description: '是否为版本触发(true/false)'
|
description: '是否为版本触发(true/false)'
|
||||||
value: ${{ steps.get-version-info.outputs.is_version_trigger }}
|
value: ${{ steps.get-version-info.outputs.is_version_trigger }}
|
||||||
trigger-version:
|
trigger-version:
|
||||||
description: '触发的版本号(去除前缀后的版本)'
|
description: '触发的版本号(标准化为v开头的格式)'
|
||||||
value: ${{ steps.get-version-info.outputs.trigger_version }}
|
value: ${{ steps.get-version-info.outputs.trigger_version }}
|
||||||
trigger-source:
|
trigger-source:
|
||||||
description: '触发源(tag/branch)'
|
description: '触发源(tag/branch)'
|
||||||
@@ -27,6 +31,9 @@ outputs:
|
|||||||
full-ref:
|
full-ref:
|
||||||
description: '完整的 Git 引用'
|
description: '完整的 Git 引用'
|
||||||
value: ${{ steps.get-version-info.outputs.full_ref }}
|
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:
|
runs:
|
||||||
using: 'composite'
|
using: 'composite'
|
||||||
@@ -45,37 +52,81 @@ runs:
|
|||||||
REF_NAME="${{ github.ref_name }}"
|
REF_NAME="${{ github.ref_name }}"
|
||||||
FULL_REF="${{ github.ref }}"
|
FULL_REF="${{ github.ref }}"
|
||||||
VERSION_PREFIX="${{ inputs.version-prefix }}"
|
VERSION_PREFIX="${{ inputs.version-prefix }}"
|
||||||
|
USE_LATEST_VERSION="${{ inputs.use-latest-version }}"
|
||||||
|
|
||||||
# 判断是否为标签触发
|
# 判断是否为标签触发
|
||||||
if [[ "$REF_TYPE" == "tag" ]]; then
|
if [[ "$REF_TYPE" == "tag" ]]; then
|
||||||
# 从标签名提取版本号 (v1.2.3 -> 1.2.3)
|
# 标准化版本号为v开头格式
|
||||||
if [[ "$REF_NAME" == ${VERSION_PREFIX}* ]]; then
|
if [[ "$REF_NAME" == ${VERSION_PREFIX}* ]]; then
|
||||||
TRIGGER_VERSION=${REF_NAME#${VERSION_PREFIX}}
|
|
||||||
else
|
|
||||||
TRIGGER_VERSION=$REF_NAME
|
TRIGGER_VERSION=$REF_NAME
|
||||||
|
else
|
||||||
|
TRIGGER_VERSION=${VERSION_PREFIX}$REF_NAME
|
||||||
fi
|
fi
|
||||||
|
# 生成带横线的版本号
|
||||||
|
VERSION_WITH_DASH=$(echo "$TRIGGER_VERSION" | sed 's/\./-/g')
|
||||||
echo "🏷️ 标签触发: $REF_NAME"
|
echo "🏷️ 标签触发: $REF_NAME"
|
||||||
echo "版本号: $TRIGGER_VERSION"
|
echo "标准化版本号: $TRIGGER_VERSION"
|
||||||
|
echo "横线版本号: $VERSION_WITH_DASH"
|
||||||
IS_VERSION_TRIGGER=true
|
IS_VERSION_TRIGGER=true
|
||||||
TRIGGER_SOURCE=tag
|
TRIGGER_SOURCE=tag
|
||||||
elif [[ "$REF_TYPE" == "branch" && "$REF_NAME" == ${VERSION_PREFIX}* ]]; then
|
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 "🔄 版本分支触发: $REF_NAME"
|
||||||
echo "版本号: $TRIGGER_VERSION"
|
echo "标准化版本号: $TRIGGER_VERSION"
|
||||||
|
echo "横线版本号: $VERSION_WITH_DASH"
|
||||||
IS_VERSION_TRIGGER=true
|
IS_VERSION_TRIGGER=true
|
||||||
TRIGGER_SOURCE=branch
|
TRIGGER_SOURCE=branch
|
||||||
else
|
else
|
||||||
# 常规分支触发
|
# 常规分支触发
|
||||||
echo "🆕 常规分支触发: $REF_NAME"
|
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
|
IS_VERSION_TRIGGER=false
|
||||||
TRIGGER_VERSION=""
|
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
|
TRIGGER_SOURCE=branch
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 设置环境变量
|
# 设置环境变量
|
||||||
echo "IS_VERSION_TRIGGER=$IS_VERSION_TRIGGER" >> $GITHUB_ENV
|
echo "IS_VERSION_TRIGGER=$IS_VERSION_TRIGGER" >> $GITHUB_ENV
|
||||||
echo "TRIGGER_VERSION=$TRIGGER_VERSION" >> $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
|
echo "TRIGGER_SOURCE=$TRIGGER_SOURCE" >> $GITHUB_ENV
|
||||||
|
|
||||||
# 输出到 step outputs
|
# 输出到 step outputs
|
||||||
@@ -84,6 +135,7 @@ runs:
|
|||||||
echo "full_ref=$FULL_REF" >> $GITHUB_OUTPUT
|
echo "full_ref=$FULL_REF" >> $GITHUB_OUTPUT
|
||||||
echo "is_version_trigger=$IS_VERSION_TRIGGER" >> $GITHUB_OUTPUT
|
echo "is_version_trigger=$IS_VERSION_TRIGGER" >> $GITHUB_OUTPUT
|
||||||
echo "trigger_version=$TRIGGER_VERSION" >> $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 "trigger_source=$TRIGGER_SOURCE" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
|
@@ -15,6 +15,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
||||||
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
|
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 }}
|
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
|
||||||
ref-type: ${{ steps.version-info.outputs.ref-type }}
|
ref-type: ${{ steps.version-info.outputs.ref-type }}
|
||||||
ref-name: ${{ steps.version-info.outputs.ref-name }}
|
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.full-ref }}"
|
||||||
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
|
echo "是否版本触发: ${{ steps.version-info.outputs.is-version-trigger }}"
|
||||||
echo "触发版本号: ${{ steps.version-info.outputs.trigger-version }}"
|
echo "触发版本号: ${{ steps.version-info.outputs.trigger-version }}"
|
||||||
|
echo "横线版本号: ${{ steps.version-info.outputs.version-with-dash }}"
|
||||||
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
|
echo "触发源: ${{ steps.version-info.outputs.trigger-source }}"
|
||||||
echo "================================"
|
echo "================================"
|
||||||
|
|
||||||
@@ -43,6 +45,7 @@ jobs:
|
|||||||
echo "========== 环境变量 =========="
|
echo "========== 环境变量 =========="
|
||||||
echo "IS_VERSION_TRIGGER: ${IS_VERSION_TRIGGER}"
|
echo "IS_VERSION_TRIGGER: ${IS_VERSION_TRIGGER}"
|
||||||
echo "TRIGGER_VERSION: ${TRIGGER_VERSION}"
|
echo "TRIGGER_VERSION: ${TRIGGER_VERSION}"
|
||||||
|
echo "VERSION_WITH_DASH: ${VERSION_WITH_DASH}"
|
||||||
echo "TRIGGER_SOURCE: ${TRIGGER_SOURCE}"
|
echo "TRIGGER_SOURCE: ${TRIGGER_SOURCE}"
|
||||||
echo "============================"
|
echo "============================"
|
||||||
|
|
||||||
@@ -59,6 +62,8 @@ jobs:
|
|||||||
if [[ "${{ needs.get-version-info.outputs.is-version-trigger }}" == "true" ]]; then
|
if [[ "${{ needs.get-version-info.outputs.is-version-trigger }}" == "true" ]]; then
|
||||||
echo "✅ 这是一个版本发布触发"
|
echo "✅ 这是一个版本发布触发"
|
||||||
echo "🚀 版本号: ${{ needs.get-version-info.outputs.trigger-version }}"
|
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 }}"
|
echo "📦 触发源: ${{ needs.get-version-info.outputs.trigger-source }}"
|
||||||
else
|
else
|
||||||
echo "ℹ️ 这是一个常规分支推送"
|
echo "ℹ️ 这是一个常规分支推送"
|
||||||
|
@@ -14,6 +14,7 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
is-version-trigger: ${{ steps.version-info.outputs.is-version-trigger }}
|
||||||
trigger-version: ${{ steps.version-info.outputs.trigger-version }}
|
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 }}
|
trigger-source: ${{ steps.version-info.outputs.trigger-source }}
|
||||||
ref-name: ${{ steps.version-info.outputs.ref-name }}
|
ref-name: ${{ steps.version-info.outputs.ref-name }}
|
||||||
deploy-staging: ${{ steps.deployment-strategy.outputs.deploy-staging }}
|
deploy-staging: ${{ steps.deployment-strategy.outputs.deploy-staging }}
|
||||||
@@ -102,8 +103,11 @@ jobs:
|
|||||||
- name: 部署到生产环境
|
- name: 部署到生产环境
|
||||||
run: |
|
run: |
|
||||||
echo "🚀 部署版本 ${{ needs.analyze.outputs.trigger-version }} 到生产环境"
|
echo "🚀 部署版本 ${{ needs.analyze.outputs.trigger-version }} 到生产环境"
|
||||||
|
echo "🐳 Docker标签: myapp:${{ needs.analyze.outputs.version-with-dash }}"
|
||||||
echo "触发源: ${{ needs.analyze.outputs.trigger-source }}"
|
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 "✅ 生产环境部署完成"
|
echo "✅ 生产环境部署完成"
|
||||||
|
|
||||||
- name: 创建 Release
|
- name: 创建 Release
|
||||||
|
Reference in New Issue
Block a user