feat(trigger-version): 添加标签过滤功能支持通配符匹配和排除

新增 `tag-match` 和 `tag-exclude` 输入参数,支持通过通配符模式匹配和排除特定标签
更新 README 文档并添加示例配置文件展示标签过滤功能的使用场景
This commit is contained in:
Lyda
2025-08-22 13:22:31 +08:00
parent b53d899f41
commit 6fff7a90e1
3 changed files with 310 additions and 21 deletions

View File

@@ -9,16 +9,19 @@
- 🆕 **常规分支处理**:对于非版本分支提供基础信息
- 📦 **最新版本获取**:始终获取仓库中的最新版本号,无论触发方式如何
- 🎯 **灵活的版本前缀**:支持自定义版本前缀(默认为 `v`
- 🔍 **标签过滤功能**:支持通配符模式匹配和排除特定标签
- 🔧 **版本格式转换**:自动生成横线格式的版本号(如 `v1.2.3``v1-2-3`
- 📤 **环境变量输出**:自动设置环境变量供后续步骤使用
- 📊 **详细的输出信息**:提供完整的引用信息和触发状态
## 输入参数
| 参数名 | 描述 | 必需 | 默认值 |
| -------------------- | -------------------------------- | ---- | ------- |
| `version-prefix` | 版本前缀,用于匹配版本标签或分支 | 否 | `v` |
| `use-latest-version` | 在非版本触发时是否使用最新版本 | 否 | `false` |
| 参数名 | 描述 | 必需 | 默认值 |
| -------------------- | ------------------------------------------------------------ | ---- | ------- |
| `version-prefix` | 版本前缀,用于匹配版本标签或分支 | 否 | `v` |
| `use-latest-version` | 在非版本触发时是否使用最新版本 | 否 | `false` |
| `tag-match` | 标签匹配模式,支持通配符(如:`v*.*.*``v[0-9]*`),用于进一步过滤标签 | 否 | `""` |
| `tag-exclude` | 标签排除模式,支持通配符(如:`*-alpha*``*-beta*`),匹配的标签将被排除 | 否 | `""` |
## 输出参数
@@ -119,6 +122,73 @@ jobs:
uses: actions/xgj/trigger-version@v1
with:
version-prefix: "release-"
```
### 标签过滤功能
#### 排除预发布版本
```yaml
- name: 获取稳定版本(排除预发布)
id: stable-version
uses: ./trigger-version
with:
version-prefix: "v"
use-latest-version: true
tag-exclude: "*-alpha*" # 排除包含 alpha 的版本
- name: 显示稳定版本
run: |
echo "最新稳定版本: ${{ steps.stable-version.outputs.latest-version }}"
```
#### 匹配特定版本模式
```yaml
- name: 获取标准语义版本
id: semver
uses: ./trigger-version
with:
version-prefix: "v"
use-latest-version: true
tag-match: "v[0-9]*.[0-9]*.[0-9]*" # 只匹配 v1.2.3 格式
- name: 显示语义版本
run: |
echo "语义版本: ${{ steps.semver.outputs.latest-version }}"
```
#### 复合过滤条件
```yaml
- name: 获取 v2.x 稳定版本
id: v2-stable
uses: ./trigger-version
with:
version-prefix: "v"
use-latest-version: true
tag-match: "v2.*.*" # 只匹配 v2.x.x 版本
tag-exclude: "*-*" # 排除所有预发布版本(包含连字符)
- name: 显示 v2.x 稳定版本
run: |
echo "v2.x 最新稳定版本: ${{ steps.v2-stable.outputs.latest-version }}"
```
#### 获取预发布版本
```yaml
- name: 获取最新 beta 版本
id: beta-version
uses: ./trigger-version
with:
version-prefix: "v"
use-latest-version: true
tag-match: "*-beta*" # 只匹配包含 beta 的版本
- name: 显示 beta 版本
run: |
echo "最新 beta 版本: ${{ steps.beta-version.outputs.latest-version }}"
````
### 完整的 CI/CD 流程
@@ -180,6 +250,44 @@ jobs:
echo "部署版本 ${{ needs.analyze.outputs.trigger-version }} 到生产环境"
```
## 标签过滤功能详解
### 通配符模式支持
`tag-match` 和 `tag-exclude` 参数支持 bash 通配符模式:
- `*`:匹配任意字符序列
- `?`:匹配单个字符
- `[...]`:匹配括号内的任意字符
- `[!...]`:匹配不在括号内的任意字符
### 常用过滤模式
| 模式 | 描述 | 示例匹配 |
| ------------------- | ------------------------------ | --------------------------- |
| `v*.*.*` | 匹配标准三段式版本号 | `v1.2.3`, `v2.0.1` |
| `v[0-9]*.[0-9]*.*` | 匹配数字开头的版本号 | `v1.2.3`, `v10.0.1` |
| `*-alpha*` | 匹配包含 alpha 的版本 | `v1.0.0-alpha1` |
| `*-beta*` | 匹配包含 beta 的版本 | `v1.0.0-beta2` |
| `*-rc*` | 匹配包含 rc 的版本 | `v1.0.0-rc1` |
| `*-*` | 匹配所有包含连字符的版本 | `v1.0.0-alpha`, `v1.0.0-1` |
| `v2.*` | 匹配 v2 开头的所有版本 | `v2.0.0`, `v2.1.5` |
| `v[12].*.*` | 匹配 v1 或 v2 开头的版本 | `v1.0.0`, `v2.3.1` |
### 过滤优先级
1. 首先应用 `version-prefix` 过滤(获取匹配前缀的标签)
2. 然后应用 `tag-match` 过滤(保留匹配模式的标签)
3. 最后应用 `tag-exclude` 过滤(排除匹配模式的标签)
4. 对剩余标签进行版本排序,选择最新版本
### 注意事项
- 标签过滤主要影响 `latest-version` 的获取,不影响当前触发版本的识别
- 当通过标签触发时,`trigger-version` 始终是触发的标签,过滤只影响 `latest-version`
- 如果过滤后没有匹配的标签,`latest-version` 将为空
- 建议在使用过滤功能时设置 `fetch-depth: 0` 以获取完整的标签历史
## 触发场景
### 标签触发