mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 03:53:37 +08:00
feat: 更新 Web 项目发布构建的 GitHub Action,确保版本号输出统一添加 v 前缀,优化版本获取逻辑,更新文档以反映新格式和使用示例。
This commit is contained in:
@@ -121,7 +121,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
hooks: {
|
hooks: {
|
||||||
'before:release': [
|
'before:release': [
|
||||||
`echo '\${version}' > /tmp/last-version`,
|
`echo 'v\${version}' > /tmp/last-version`,
|
||||||
'git add --all',
|
'git add --all',
|
||||||
'npm run build'
|
'npm run build'
|
||||||
],
|
],
|
||||||
|
@@ -80,7 +80,8 @@ Action 自动处理各种版本格式,确保输出一致:
|
|||||||
# - package.json: "v1.2.3" 或 "1.2.3"
|
# - package.json: "v1.2.3" 或 "1.2.3"
|
||||||
# - 提交信息: "release: v1.2.3" 或 "release: 1.2.3"
|
# - 提交信息: "release: v1.2.3" 或 "release: 1.2.3"
|
||||||
|
|
||||||
# 输出始终为: "1.2.3" (不含 v 前缀)
|
# 输出始终为: "v1.2.3" (统一添加 v 前缀)
|
||||||
|
# 带横线版本: "v1-2-3" (保持 v 前缀)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 输入参数
|
## 输入参数
|
||||||
@@ -125,8 +126,8 @@ Action 支持通过 `env` 传递**任意数量**的环境变量给发布命令
|
|||||||
|
|
||||||
| 参数名 | 描述 |
|
| 参数名 | 描述 |
|
||||||
| ------------------- | -------------------------------------- |
|
| ------------------- | -------------------------------------- |
|
||||||
| `version` | 发布的版本号 |
|
| `version` | 发布的版本号(带 v 前缀) |
|
||||||
| `version-with-dash` | 版本号(点号替换为横线) |
|
| `version-with-dash` | 版本号(带 v 前缀,点号替换为横线) |
|
||||||
| `release-status` | 发布命令执行状态 (`success`/`failure`) |
|
| `release-status` | 发布命令执行状态 (`success`/`failure`) |
|
||||||
| `exit-code` | 发布命令退出码(仅在失败时有值) |
|
| `exit-code` | 发布命令退出码(仅在失败时有值) |
|
||||||
|
|
||||||
@@ -303,10 +304,10 @@ steps:
|
|||||||
2. **智能版本获取**: 只在发布成功时执行,通过多种方法自动获取版本号
|
2. **智能版本获取**: 只在发布成功时执行,通过多种方法自动获取版本号
|
||||||
|
|
||||||
- 优先从版本文件读取(`/tmp/last-version` 或自定义路径)
|
- 优先从版本文件读取(`/tmp/last-version` 或自定义路径)
|
||||||
- 回退到最新 git tag(自动去除 `v` 前缀)
|
- 回退到最新 git tag(保持原始格式)
|
||||||
- 回退到 `package.json` 中的版本
|
- 回退到 `package.json` 中的版本
|
||||||
- 最后尝试从提交信息解析(支持 `v1.2.3` 和 `1.2.3` 格式)
|
- 最后尝试从提交信息解析(支持 `v1.2.3` 和 `1.2.3` 格式)
|
||||||
- **所有方法都确保输出不包含 `v` 前缀**
|
- **所有方法都确保输出统一包含 `v` 前缀**
|
||||||
|
|
||||||
3. **发布总结**: 显示详细的发布状态信息
|
3. **发布总结**: 显示详细的发布状态信息
|
||||||
|
|
||||||
@@ -342,7 +343,7 @@ steps:
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
hooks: {
|
hooks: {
|
||||||
"before:release": [
|
"before:release": [
|
||||||
"echo '${version}' > /tmp/last-version",
|
"echo 'v${version}' > /tmp/last-version",
|
||||||
"npm run build",
|
"npm run build",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -465,7 +466,7 @@ A: Action 会按优先级尝试多种方法获取版本:
|
|||||||
```javascript
|
```javascript
|
||||||
// .release-it.js
|
// .release-it.js
|
||||||
hooks: {
|
hooks: {
|
||||||
'before:release': ['echo \'${version}\' > /tmp/last-version']
|
'before:release': ['echo \'v${version}\' > /tmp/last-version']
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -486,9 +487,9 @@ A: Action 会按优先级尝试多种方法获取版本:
|
|||||||
4. **提交信息**:在提交信息中包含版本号
|
4. **提交信息**:在提交信息中包含版本号
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git commit -m "release: 1.2.3"
|
|
||||||
# 或者
|
|
||||||
git commit -m "release: v1.2.3"
|
git commit -m "release: v1.2.3"
|
||||||
|
# 或者
|
||||||
|
git commit -m "release: 1.2.3"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Q: Gitea Token 权限不足
|
### Q: Gitea Token 权限不足
|
||||||
|
@@ -29,11 +29,11 @@ inputs:
|
|||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
version:
|
version:
|
||||||
description: '发布的版本号'
|
description: '发布的版本号(带 v 前缀)'
|
||||||
value: ${{ steps.get_var.outputs.version }}
|
value: ${{ steps.get_var.outputs.version }}
|
||||||
|
|
||||||
version-with-dash:
|
version-with-dash:
|
||||||
description: '版本号(点号替换为横线)'
|
description: '版本号(带 v 前缀,点号替换为横线)'
|
||||||
value: ${{ steps.get_var.outputs.version_with_dash }}
|
value: ${{ steps.get_var.outputs.version_with_dash }}
|
||||||
|
|
||||||
release-status:
|
release-status:
|
||||||
@@ -82,15 +82,15 @@ runs:
|
|||||||
|
|
||||||
# 方法1: 从指定版本文件读取(优先级最高)
|
# 方法1: 从指定版本文件读取(优先级最高)
|
||||||
if [[ -f "${{ inputs.version-file }}" ]]; then
|
if [[ -f "${{ inputs.version-file }}" ]]; then
|
||||||
VERSION=$(cat "${{ inputs.version-file }}" | tr -d ' \n\r' | sed 's/^v//')
|
VERSION=$(cat "${{ inputs.version-file }}" | tr -d ' \n\r')
|
||||||
echo "✅ 从版本文件获取: $VERSION"
|
echo "✅ 从版本文件获取: $VERSION"
|
||||||
# 方法2: 从最新的 git tag 获取
|
# 方法2: 从最新的 git tag 获取
|
||||||
elif git describe --tags --abbrev=0 2>/dev/null; then
|
elif git describe --tags --abbrev=0 2>/dev/null; then
|
||||||
VERSION=$(git describe --tags --abbrev=0 | tr -d ' \n\r' | sed 's/^v//')
|
VERSION=$(git describe --tags --abbrev=0 | tr -d ' \n\r')
|
||||||
echo "✅ 从 git tag 获取: $VERSION"
|
echo "✅ 从 git tag 获取: $VERSION"
|
||||||
# 方法3: 从 package.json 获取
|
# 方法3: 从 package.json 获取
|
||||||
elif [[ -f "package.json" ]] && command -v node >/dev/null; then
|
elif [[ -f "package.json" ]] && command -v node >/dev/null; then
|
||||||
VERSION=$(node -p "require('./package.json').version" 2>/dev/null | tr -d ' \n\r' | sed 's/^v//')
|
VERSION=$(node -p "require('./package.json').version" 2>/dev/null | tr -d ' \n\r')
|
||||||
if [[ -n "$VERSION" && "$VERSION" != "undefined" ]]; then
|
if [[ -n "$VERSION" && "$VERSION" != "undefined" ]]; then
|
||||||
echo "✅ 从 package.json 获取: $VERSION"
|
echo "✅ 从 package.json 获取: $VERSION"
|
||||||
else
|
else
|
||||||
@@ -102,7 +102,7 @@ runs:
|
|||||||
if [[ -z "$VERSION" ]]; then
|
if [[ -z "$VERSION" ]]; then
|
||||||
echo "⚠️ 无法通过常规方法获取版本,尝试解析最近的提交信息..."
|
echo "⚠️ 无法通过常规方法获取版本,尝试解析最近的提交信息..."
|
||||||
# 尝试从最近的提交消息中解析版本(如 "release: 1.2.3" 或 "release: v1.2.3" 格式)
|
# 尝试从最近的提交消息中解析版本(如 "release: 1.2.3" 或 "release: v1.2.3" 格式)
|
||||||
COMMIT_VERSION=$(git log -1 --pretty=format:"%s" | grep -oE 'v?[0-9]+\.[0-9]+\.[0-9]+' | head -1 | sed 's/^v//')
|
COMMIT_VERSION=$(git log -1 --pretty=format:"%s" | grep -oE 'v?[0-9]+\.[0-9]+\.[0-9]+' | head -1)
|
||||||
if [[ -n "$COMMIT_VERSION" ]]; then
|
if [[ -n "$COMMIT_VERSION" ]]; then
|
||||||
VERSION="$COMMIT_VERSION"
|
VERSION="$COMMIT_VERSION"
|
||||||
echo "✅ 从提交信息获取: $VERSION"
|
echo "✅ 从提交信息获取: $VERSION"
|
||||||
@@ -113,19 +113,26 @@ runs:
|
|||||||
if [[ -z "$VERSION" ]]; then
|
if [[ -z "$VERSION" ]]; then
|
||||||
echo "❌ 错误: 无法获取版本信息"
|
echo "❌ 错误: 无法获取版本信息"
|
||||||
echo "请确保:"
|
echo "请确保:"
|
||||||
echo " 1. 发布命令生成 /tmp/last-version 文件,或"
|
echo " 1. 发布命令生成版本文件(推荐格式: v1.2.3),或"
|
||||||
echo " 2. 存在有效的 git tag,或"
|
echo " 2. 存在有效的 git tag(格式: v1.2.3),或"
|
||||||
echo " 3. package.json 包含 version 字段,或"
|
echo " 3. package.json 包含 version 字段,或"
|
||||||
echo " 4. 提交信息包含版本号"
|
echo " 4. 提交信息包含版本号(格式: release: v1.2.3)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 确保版本号格式正确(去掉可能的 v 前缀和空白字符)
|
# 确保版本号格式正确(清理空白字符并确保 v 前缀)
|
||||||
VERSION=$(echo "$VERSION" | sed 's/^v//' | tr -d ' \n\r')
|
VERSION=$(echo "$VERSION" | tr -d ' \n\r')
|
||||||
|
|
||||||
|
# 确保版本号有 v 前缀
|
||||||
|
if [[ ! "$VERSION" =~ ^v ]]; then
|
||||||
|
VERSION="v$VERSION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 创建带横线的版本号(保持 v 前缀)
|
||||||
VERSION_WITH_DASH=$(echo "$VERSION" | sed 's/\./-/g')
|
VERSION_WITH_DASH=$(echo "$VERSION" | sed 's/\./-/g')
|
||||||
|
|
||||||
# 验证版本号格式
|
# 验证版本号格式(应该以 v 开头)
|
||||||
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-].*)?$ ]]; then
|
if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+([.-].*)?$ ]]; then
|
||||||
echo "⚠️ 警告: 版本号格式可能不标准: $VERSION"
|
echo "⚠️ 警告: 版本号格式可能不标准: $VERSION"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@@ -28,7 +28,7 @@ jobs:
|
|||||||
- name: 发布(自定义版本文件)
|
- name: 发布(自定义版本文件)
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
with:
|
with:
|
||||||
release-command: "echo '1.2.3' > ./custom-version.txt"
|
release-command: "echo 'v1.2.3' > ./custom-version.txt"
|
||||||
version-file: "./custom-version.txt"
|
version-file: "./custom-version.txt"
|
||||||
env:
|
env:
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
@@ -63,7 +63,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
git config user.name "github-actions"
|
git config user.name "github-actions"
|
||||||
git config user.email "github-actions@github.com"
|
git config user.email "github-actions@github.com"
|
||||||
git commit --allow-empty -m "release: 1.2.6"
|
git commit --allow-empty -m "release: v1.2.6"
|
||||||
|
|
||||||
- name: 发布(基于提交信息)
|
- name: 发布(基于提交信息)
|
||||||
uses: actions/xgj/release-web@main
|
uses: actions/xgj/release-web@main
|
||||||
|
@@ -37,13 +37,13 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
|
||||||
- name: 验证版本输出(不应包含 v)
|
- name: 验证版本输出(应包含 v 前缀)
|
||||||
run: |
|
run: |
|
||||||
echo "版本输出: ${{ steps.test1.outputs.version }}"
|
echo "版本输出: ${{ steps.test1.outputs.version }}"
|
||||||
if [[ "${{ steps.test1.outputs.version }}" == "1.2.3" ]]; then
|
if [[ "${{ steps.test1.outputs.version }}" == "v1.2.3" ]]; then
|
||||||
echo "✅ 正确:版本文件 v 前缀已去除"
|
echo "✅ 正确:版本文件 v 前缀保持不变"
|
||||||
else
|
else
|
||||||
echo "❌ 错误:版本应该是 1.2.3,实际是 ${{ steps.test1.outputs.version }}"
|
echo "❌ 错误:版本应该是 v1.2.3,实际是 ${{ steps.test1.outputs.version }}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -67,10 +67,10 @@ jobs:
|
|||||||
- name: 验证 git tag 版本输出
|
- name: 验证 git tag 版本输出
|
||||||
run: |
|
run: |
|
||||||
echo "Git tag 版本输出: ${{ steps.test2.outputs.version }}"
|
echo "Git tag 版本输出: ${{ steps.test2.outputs.version }}"
|
||||||
if [[ "${{ steps.test2.outputs.version }}" == "1.2.4" ]]; then
|
if [[ "${{ steps.test2.outputs.version }}" == "v1.2.4" ]]; then
|
||||||
echo "✅ 正确:Git tag v 前缀已去除"
|
echo "✅ 正确:Git tag v 前缀保持不变"
|
||||||
else
|
else
|
||||||
echo "❌ 错误:版本应该是 1.2.4,实际是 ${{ steps.test2.outputs.version }}"
|
echo "❌ 错误:版本应该是 v1.2.4,实际是 ${{ steps.test2.outputs.version }}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -93,10 +93,10 @@ jobs:
|
|||||||
- name: 验证 package.json 版本输出
|
- name: 验证 package.json 版本输出
|
||||||
run: |
|
run: |
|
||||||
echo "Package.json 版本输出: ${{ steps.test3.outputs.version }}"
|
echo "Package.json 版本输出: ${{ steps.test3.outputs.version }}"
|
||||||
if [[ "${{ steps.test3.outputs.version }}" == "1.2.5" ]]; then
|
if [[ "${{ steps.test3.outputs.version }}" == "v1.2.5" ]]; then
|
||||||
echo "✅ 正确:Package.json v 前缀已去除"
|
echo "✅ 正确:Package.json 版本已添加 v 前缀"
|
||||||
else
|
else
|
||||||
echo "❌ 错误:版本应该是 1.2.5,实际是 ${{ steps.test3.outputs.version }}"
|
echo "❌ 错误:版本应该是 v1.2.5,实际是 ${{ steps.test3.outputs.version }}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -120,10 +120,10 @@ jobs:
|
|||||||
- name: 验证提交信息版本输出
|
- name: 验证提交信息版本输出
|
||||||
run: |
|
run: |
|
||||||
echo "提交信息版本输出: ${{ steps.test4.outputs.version }}"
|
echo "提交信息版本输出: ${{ steps.test4.outputs.version }}"
|
||||||
if [[ "${{ steps.test4.outputs.version }}" == "1.2.6" ]]; then
|
if [[ "${{ steps.test4.outputs.version }}" == "v1.2.6" ]]; then
|
||||||
echo "✅ 正确:提交信息 v 前缀已去除"
|
echo "✅ 正确:提交信息 v 前缀保持不变"
|
||||||
else
|
else
|
||||||
echo "❌ 错误:版本应该是 1.2.6,实际是 ${{ steps.test4.outputs.version }}"
|
echo "❌ 错误:版本应该是 v1.2.6,实际是 ${{ steps.test4.outputs.version }}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -131,18 +131,18 @@ jobs:
|
|||||||
- name: 验证版本带横线格式
|
- name: 验证版本带横线格式
|
||||||
run: |
|
run: |
|
||||||
echo "版本带横线: ${{ steps.test4.outputs.version-with-dash }}"
|
echo "版本带横线: ${{ steps.test4.outputs.version-with-dash }}"
|
||||||
if [[ "${{ steps.test4.outputs.version-with-dash }}" == "1-2-6" ]]; then
|
if [[ "${{ steps.test4.outputs.version-with-dash }}" == "v1-2-6" ]]; then
|
||||||
echo "✅ 正确:版本横线格式正确"
|
echo "✅ 正确:版本横线格式正确"
|
||||||
else
|
else
|
||||||
echo "❌ 错误:版本横线格式应该是 1-2-6,实际是 ${{ steps.test4.outputs.version-with-dash }}"
|
echo "❌ 错误:版本横线格式应该是 v1-2-6,实际是 ${{ steps.test4.outputs.version-with-dash }}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: 测试总结
|
- name: 测试总结
|
||||||
run: |
|
run: |
|
||||||
echo "🎉 所有版本处理测试通过!"
|
echo "🎉 所有版本处理测试通过!"
|
||||||
echo "✅ 版本文件 v 前缀处理正确"
|
echo "✅ 版本文件 v 前缀保持不变"
|
||||||
echo "✅ Git tag v 前缀处理正确"
|
echo "✅ Git tag v 前缀保持不变"
|
||||||
echo "✅ Package.json v 前缀处理正确"
|
echo "✅ Package.json 版本自动添加 v 前缀"
|
||||||
echo "✅ 提交信息 v 前缀处理正确"
|
echo "✅ 提交信息 v 前缀保持不变"
|
||||||
echo "✅ 版本横线格式正确"
|
echo "✅ 版本横线格式包含 v 前缀"
|
||||||
|
Reference in New Issue
Block a user