mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 16:53:37 +08:00
feat: 增强 Web 项目发布构建的 GitHub Action,添加自定义版本文件路径支持,优化版本获取逻辑,确保版本号格式一致,更新文档以反映新功能和使用示例。
This commit is contained in:
@@ -11,11 +11,16 @@ inputs:
|
||||
description: '发布命令,例如 npm run release -- --release -V'
|
||||
required: false
|
||||
default: 'npm run release -- --release -V'
|
||||
|
||||
|
||||
node-debug:
|
||||
description: '是否启用Node.js调试模式 (true/false)'
|
||||
required: false
|
||||
default: 'false'
|
||||
|
||||
version-file:
|
||||
description: '自定义版本文件路径,默认为 /tmp/last-version'
|
||||
required: false
|
||||
default: '/tmp/last-version'
|
||||
|
||||
outputs:
|
||||
version:
|
||||
@@ -44,16 +49,57 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
echo "📝 获取版本信息..."
|
||||
VERSION=""
|
||||
|
||||
if [[ ! -f "/tmp/last-version" ]]; then
|
||||
echo "❌ 错误: 版本文件 /tmp/last-version 不存在"
|
||||
echo "请确保发布命令正确执行并生成了版本文件"
|
||||
# 方法1: 从指定版本文件读取(优先级最高)
|
||||
if [[ -f "${{ inputs.version-file }}" ]]; then
|
||||
VERSION=$(cat "${{ inputs.version-file }}" | tr -d ' \n\r' | sed 's/^v//')
|
||||
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//')
|
||||
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//')
|
||||
if [[ -n "$VERSION" && "$VERSION" != "undefined" ]]; then
|
||||
echo "✅ 从 package.json 获取: $VERSION"
|
||||
else
|
||||
VERSION=""
|
||||
fi
|
||||
fi
|
||||
|
||||
# 如果所有方法都失败,尝试解析发布命令输出
|
||||
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//')
|
||||
if [[ -n "$COMMIT_VERSION" ]]; then
|
||||
VERSION="$COMMIT_VERSION"
|
||||
echo "✅ 从提交信息获取: $VERSION"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 最终检查和清理版本号
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
echo "❌ 错误: 无法获取版本信息"
|
||||
echo "请确保:"
|
||||
echo " 1. 发布命令生成 /tmp/last-version 文件,或"
|
||||
echo " 2. 存在有效的 git tag,或"
|
||||
echo " 3. package.json 包含 version 字段,或"
|
||||
echo " 4. 提交信息包含版本号"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$(cat /tmp/last-version)
|
||||
# 确保版本号格式正确(去掉可能的 v 前缀和空白字符)
|
||||
VERSION=$(echo "$VERSION" | sed 's/^v//' | tr -d ' \n\r')
|
||||
VERSION_WITH_DASH=$(echo "$VERSION" | sed 's/\./-/g')
|
||||
|
||||
# 验证版本号格式
|
||||
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-].*)?$ ]]; then
|
||||
echo "⚠️ 警告: 版本号格式可能不标准: $VERSION"
|
||||
fi
|
||||
|
||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "version_with_dash=$VERSION_WITH_DASH" >> $GITHUB_OUTPUT
|
||||
|
||||
|
Reference in New Issue
Block a user