mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 14:23:37 +08:00
feat(trigger-version): 添加标签过滤功能支持通配符匹配和排除
新增 `tag-match` 和 `tag-exclude` 输入参数,支持通过通配符模式匹配和排除特定标签 更新 README 文档并添加示例配置文件展示标签过滤功能的使用场景
This commit is contained in:
@@ -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` 以获取完整的标签历史
|
||||
|
||||
## 触发场景
|
||||
|
||||
### 标签触发
|
||||
|
Reference in New Issue
Block a user