diff --git a/trigger-version/README.md b/trigger-version/README.md index 2f5ab47..deb6045 100644 --- a/trigger-version/README.md +++ b/trigger-version/README.md @@ -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. **日志记录**:记录详细的版本信息用于追踪和调试 ## 注意事项 diff --git a/trigger-version/action.yml b/trigger-version/action.yml index 157519a..a59757c 100644 --- a/trigger-version/action.yml +++ b/trigger-version/action.yml @@ -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: diff --git a/trigger-version/examples/basic-usage.yml b/trigger-version/examples/basic-usage.yml index ae2dc01..d58b1a2 100644 --- a/trigger-version/examples/basic-usage.yml +++ b/trigger-version/examples/basic-usage.yml @@ -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 "ℹ️ 这是一个常规分支推送" diff --git a/trigger-version/examples/conditional-deployment.yml b/trigger-version/examples/conditional-deployment.yml index 3a4c2df..c194b83 100644 --- a/trigger-version/examples/conditional-deployment.yml +++ b/trigger-version/examples/conditional-deployment.yml @@ -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