Files
xgj/release-web/action.yml

201 lines
5.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: 'Web项目发布构建'
description: '自动化Web项目发布流程包括版本发布、Docker镜像构建和推送'
author: 'Your Organization'
branding:
icon: 'upload-cloud'
color: 'green'
inputs:
gitea-token:
description: 'Gitea访问令牌'
required: true
app-env:
description: '应用环境 (development, production等)'
required: false
default: 'production'
release-command:
description: '发布命令,默认为 npm run release -- --release -V'
required: false
default: 'npm run release -- --release -V'
docker-registry:
description: 'Docker仓库地址'
required: false
default: 'docker-registry.bjxgj.com'
docker-context:
description: 'Docker构建上下文路径'
required: false
default: '.'
dockerfile-path:
description: 'Dockerfile路径'
required: false
default: './container/dev/Dockerfile'
docker-tags:
description: '额外的Docker标签 (每行一个标签)'
required: false
default: ''
enable-docker-build:
description: '是否执行Docker构建 (true/false)'
required: false
default: 'true'
node-debug:
description: '是否启用Node.js调试模式 (true/false)'
required: false
default: 'false'
outputs:
version:
description: '发布的版本号'
value: ${{ steps.get_var.outputs.version }}
version-with-dash:
description: '版本号(点号替换为横线)'
value: ${{ steps.get_var.outputs.version_with_dash }}
docker-image-digest:
description: 'Docker镜像摘要'
value: ${{ steps.build.outputs.digest }}
docker-image-tags:
description: 'Docker镜像标签列表'
value: ${{ steps.build.outputs.tags }}
runs:
using: 'composite'
steps:
- name: 验证必需参数
shell: bash
run: |
echo "🔍 验证输入参数..."
if [[ -z "${{ inputs.gitea-token }}" ]]; then
echo "❌ 错误: gitea-token 参数是必需的"
exit 1
fi
if [[ "${{ inputs.enable-docker-build }}" == "true" ]]; then
if [[ ! -f "${{ inputs.dockerfile-path }}" ]]; then
echo "❌ 错误: Dockerfile 不存在: ${{ inputs.dockerfile-path }}"
exit 1
fi
fi
echo "✅ 参数验证通过"
- name: 发布构建
shell: bash
run: |
echo "🚀 开始发布构建..."
echo "执行命令: ${{ inputs.release-command }}"
${{ inputs.release-command }}
echo "✅ 发布构建完成"
env:
NODE_DEBUG: ${{ inputs.node-debug == 'true' && 'release-it:*' || '' }}
GITEA_TOKEN: ${{ inputs.gitea-token }}
APP_ENV: ${{ inputs.app-env }}
- name: 获取版本信息
id: get_var
shell: bash
run: |
echo "📝 获取版本信息..."
if [[ ! -f "/tmp/last-version" ]]; then
echo "❌ 错误: 版本文件 /tmp/last-version 不存在"
echo "请确保发布命令正确执行并生成了版本文件"
exit 1
fi
VERSION=$(cat /tmp/last-version)
VERSION_WITH_DASH=$(echo "$VERSION" | sed 's/\./-/g')
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "version_with_dash=$VERSION_WITH_DASH" >> $GITHUB_OUTPUT
echo "📦 发布版本: $VERSION"
echo "📦 带横线版本: $VERSION_WITH_DASH"
- name: 准备Docker标签
if: ${{ inputs.enable-docker-build == 'true' }}
id: docker_tags
shell: bash
run: |
echo "🏷️ 准备Docker标签..."
REPO_NAME="${{ github.event.repository.name }}"
REGISTRY="${{ inputs.docker-registry }}"
VERSION="${{ steps.get_var.outputs.version }}"
# 基础标签(保留版本标签)
TAGS="${TAGS}\n${REGISTRY}/${REPO_NAME}:${VERSION}"
# 添加用户自定义标签
if [[ -n "${{ inputs.docker-tags }}" ]]; then
while IFS= read -r tag; do
if [[ -n "$tag" ]]; then
# 如果标签不包含仓库地址,则添加默认仓库前缀
if [[ "$tag" != *"/"* ]]; then
TAGS="${TAGS}\n${REGISTRY}/${REPO_NAME}:${tag}"
else
TAGS="${TAGS}\n${tag}"
fi
fi
done <<< "${{ inputs.docker-tags }}"
fi
echo "Docker标签列表:"
echo -e "$TAGS" | sed 's/^/ - /'
# 将标签转换为多行格式供后续步骤使用
echo -e "$TAGS" > /tmp/docker-tags.txt
# 输出标签给后续步骤使用
{
echo "tags<<EOF"
echo -e "$TAGS"
echo "EOF"
} >> $GITHUB_OUTPUT
- name: 构建并推送Docker镜像
if: ${{ inputs.enable-docker-build == 'true' }}
id: build
uses: docker/build-push-action@v6
with:
context: ${{ inputs.docker-context }}
file: ${{ inputs.dockerfile-path }}
push: true
tags: ${{ steps.docker_tags.outputs.tags }}
- name: 发布总结
shell: bash
run: |
echo "🎉 发布流程完成!"
echo ""
echo "📋 发布信息:"
echo " - 版本号: ${{ steps.get_var.outputs.version }}"
echo " - 应用环境: ${{ inputs.app-env }}"
echo " - Sentry启用: ${{ inputs.enable-sentry }}"
echo ""
if [[ "${{ inputs.enable-docker-build }}" == "true" ]]; then
echo "🐳 Docker信息:"
echo " - 仓库: ${{ inputs.docker-registry }}"
echo " - 项目名: ${{ github.event.repository.name }}"
echo " - 主要标签:"
echo " - ${{ steps.get_var.outputs.version }}"
if [[ -n "${{ steps.build.outputs.digest }}" ]]; then
echo " - 镜像摘要: ${{ steps.build.outputs.digest }}"
fi
else
echo "🐳 Docker构建已跳过"
fi