feat: 更新 Web 项目发布构建的 GitHub Action,确保版本号输出统一添加 v 前缀,优化版本获取逻辑,更新文档以反映新格式和使用示例。

This commit is contained in:
Lyda
2025-08-20 19:29:45 +08:00
parent da4e1db20d
commit e4063690cd
5 changed files with 53 additions and 45 deletions

View File

@@ -29,11 +29,11 @@ inputs:
outputs:
version:
description: '发布的版本号'
description: '发布的版本号(带 v 前缀)'
value: ${{ steps.get_var.outputs.version }}
version-with-dash:
description: '版本号(点号替换为横线)'
description: '版本号(带 v 前缀,点号替换为横线)'
value: ${{ steps.get_var.outputs.version_with_dash }}
release-status:
@@ -82,15 +82,15 @@ runs:
# 方法1: 从指定版本文件读取(优先级最高)
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"
# 方法2: 从最新的 git tag 获取
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"
# 方法3: 从 package.json 获取
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
echo "✅ 从 package.json 获取: $VERSION"
else
@@ -102,7 +102,7 @@ runs:
if [[ -z "$VERSION" ]]; then
echo "⚠️ 无法通过常规方法获取版本,尝试解析最近的提交信息..."
# 尝试从最近的提交消息中解析版本(如 "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
VERSION="$COMMIT_VERSION"
echo "✅ 从提交信息获取: $VERSION"
@@ -113,19 +113,26 @@ runs:
if [[ -z "$VERSION" ]]; then
echo "❌ 错误: 无法获取版本信息"
echo "请确保:"
echo " 1. 发布命令生成 /tmp/last-version 文件,或"
echo " 2. 存在有效的 git tag或"
echo " 1. 发布命令生成版本文件(推荐格式: v1.2.3,或"
echo " 2. 存在有效的 git tag(格式: v1.2.3,或"
echo " 3. package.json 包含 version 字段,或"
echo " 4. 提交信息包含版本号"
echo " 4. 提交信息包含版本号(格式: release: v1.2.3"
exit 1
fi
# 确保版本号格式正确(去掉可能的 v 前缀和空白字符
VERSION=$(echo "$VERSION" | sed 's/^v//' | tr -d ' \n\r')
# 确保版本号格式正确(清理空白字符并确保 v 前缀
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')
# 验证版本号格式
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-].*)?$ ]]; then
# 验证版本号格式(应该以 v 开头)
if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+([.-].*)?$ ]]; then
echo "⚠️ 警告: 版本号格式可能不标准: $VERSION"
fi