-
Notifications
You must be signed in to change notification settings - Fork 80
138 lines (116 loc) · 4.71 KB
/
release-beta.yml
File metadata and controls
138 lines (116 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: Release Beta
on:
push:
tags: [ 'v*.*.*-beta*' ]
branches: [ '*-beta*' ]
jobs:
goreleaser:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: latest
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
cache-dependency-path: 'web/pnpm-lock.yaml'
- name: 🏗️ 构建前端并准备嵌入
run: |
echo "📦 安装前端依赖..."
cd web
pnpm install --frozen-lockfile
echo "🏗️ 构建前端静态文件..."
pnpm build
echo "📁 验证构建结果:"
ls -la ../cmd/server/dist/
echo "✅ 前端构建完成,文件已输出到 cmd/server/dist/"
- name: 🔧 安装CGO交叉编译工具
run: |
# 更新包管理器
sudo apt-get update
# 安装 Windows 交叉编译工具
sudo apt-get install -y gcc-mingw-w64-x86-64 gcc-mingw-w64-i686
# 安装 ARM 交叉编译工具
sudo apt-get install -y gcc-aarch64-linux-gnu # ARM64
sudo apt-get install -y gcc-arm-linux-gnueabihf # ARMv7 (hard-float)
sudo apt-get install -y gcc-arm-linux-gnueabi # ARMv6 (soft-float)
# 验证编译器安装
echo "🔍 验证编译器安装:"
x86_64-w64-mingw32-gcc --version | head -1
i686-w64-mingw32-gcc --version | head -1
aarch64-linux-gnu-gcc --version | head -1
arm-linux-gnueabihf-gcc --version | head -1
arm-linux-gnueabi-gcc --version | head -1
echo "✅ 交叉编译工具安装完成"
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true
- name: 📝 获取Beta版本信息
id: get_version
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
# 标签触发处理
RAW_VERSION=${GITHUB_REF#refs/tags/}
# 处理 v*.*.*-beta* 格式的标签
# v2.0.1-beta1 -> 2.0.1-beta1 (保持简洁的版本号)
if [[ $RAW_VERSION =~ ^v([0-9]+\.[0-9]+\.[0-9]+-(beta|alpha|rc)[0-9]*)$ ]]; then
VERSION="${BASH_REMATCH[1]}"
TEMP_TAG="$RAW_VERSION"
IS_TAG_TRIGGER=true
echo "🏷️ Beta tag triggered: $RAW_VERSION → $VERSION"
echo "✅ 使用简洁的Beta版本号: $VERSION"
else
echo "❌ 错误: Beta标签格式不正确,期望格式: v*.*.*-beta*,实际: $RAW_VERSION"
exit 1
fi
else
# 分支触发处理
VERSION=$(node -p "require('./web/package.json').version")
BRANCH_NAME=${GITHUB_REF#refs/heads/}
TEMP_TAG="v${VERSION}"
IS_TAG_TRIGGER=false
echo "🌿 Beta branch triggered: $BRANCH_NAME → $VERSION"
echo "✅ 使用简洁的版本号,不添加分支名和commit hash"
# 创建临时标签
if ! git tag -l | grep -q "^$TEMP_TAG$"; then
echo "📌 Creating temporary tag: $TEMP_TAG"
git tag "$TEMP_TAG"
fi
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag_name=$TEMP_TAG" >> $GITHUB_OUTPUT
echo "is_tag_trigger=$IS_TAG_TRIGGER" >> $GITHUB_OUTPUT
- name: 🚀 运行 GoReleaser (Beta正式发布)
if: steps.get_version.outputs.is_tag_trigger == 'true'
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: 'latest'
args: release --clean --skip=validate
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: 🏗️ 运行 GoReleaser (Beta开发构建)
if: steps.get_version.outputs.is_tag_trigger == 'false'
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: 'latest'
args: release --clean --skip=validate
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: 📢 输出构建信息
run: |
echo "🏷️ 版本: ${{ steps.get_version.outputs.version }}"
echo "🏷️ 标签: ${{ steps.get_version.outputs.tag_name }}"
echo "🏷️ 触发方式: ${{ steps.get_version.outputs.is_tag_trigger == 'true' && 'Tag' || 'Branch' }}"