Skip to content

Commit ff8dba4

Browse files
committed
fix: 增加对linux的gui的编译matrix
1 parent 4fcd47b commit ff8dba4

File tree

1 file changed

+97
-6
lines changed

1 file changed

+97
-6
lines changed

.github/workflows/build.yml

Lines changed: 97 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,16 @@ jobs:
298298
platform: windows
299299
arch: amd64
300300
name: windows-amd64
301+
302+
# Linux builds
303+
- os: ubuntu-latest
304+
platform: linux
305+
arch: arm64
306+
name: linux-arm64
307+
- os: ubuntu-latest
308+
platform: linux
309+
arch: amd64
310+
name: linux-amd64
301311

302312
steps:
303313
- name: Checkout code
@@ -312,6 +322,13 @@ jobs:
312322
- name: Install Fyne CLI
313323
run: go install fyne.io/tools/cmd/fyne@latest
314324

325+
- name: Install Linux dependencies
326+
if: matrix.platform == 'linux'
327+
run: |
328+
sudo apt-get update
329+
sudo apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross
330+
sudo apt-get install -y libgl1-mesa-dev xorg-dev
331+
315332
- name: Configure Git for Private Modules
316333
run: |
317334
git config --global url."https://${{ secrets.GHT }}@github.com/".insteadOf "https://github.com/"
@@ -350,34 +367,82 @@ jobs:
350367
env:
351368
GOPRIVATE: github.com/oneclickvirt/security,github.com/oneclickvirt/privatespeedtest
352369
FYNE_BUILD_FLAGS: "-trimpath -ldflags '-s -w -checklinkname=0'"
370+
GOARCH: ${{ matrix.arch }}
353371
shell: bash
354372
run: |
355373
# macOS 需要特殊处理:先编译再打包
356374
if [ "${{ matrix.platform }}" == "darwin" ]; then
375+
# 使用独立目录避免冲突
376+
BUILD_DIR="build-${{ matrix.name }}"
377+
mkdir -p "$BUILD_DIR"
378+
357379
echo "Building macOS binary with ldflags..."
358-
go build -trimpath -ldflags "-checklinkname=0 -s -w" -o ecs-gui-bin .
380+
go build -trimpath -ldflags "-checklinkname=0 -s -w" -o "$BUILD_DIR/ecs-gui-bin" .
359381
360382
echo "Packaging macOS app with fyne..."
383+
cd "$BUILD_DIR"
361384
fyne package -os darwin -name ecs-gui --exe ecs-gui-bin --app-version "${{ needs.prepare.outputs.app_version }}" --release
385+
cd ..
362386
363-
if [ -d ecs-gui.app ]; then
387+
if [ -d "$BUILD_DIR/ecs-gui.app" ]; then
364388
TARFILE="ecs-gui-${{ matrix.name }}-${{ needs.prepare.outputs.version }}.tar.gz"
365389
echo "Creating tar file: $TARFILE"
366-
tar -czf "$TARFILE" ecs-gui.app
390+
tar -czf "$TARFILE" -C "$BUILD_DIR" ecs-gui.app
367391
echo "✓ macOS app 构建成功"
392+
# 清理构建目录
393+
rm -rf "$BUILD_DIR"
368394
else
369395
echo "✗ macOS app 构建失败"
370396
exit 1
371397
fi
398+
elif [ "${{ matrix.platform }}" == "linux" ]; then
399+
# Linux 构建 - 使用独立目录避免冲突
400+
BUILD_DIR="build-${{ matrix.name }}"
401+
mkdir -p "$BUILD_DIR"
402+
403+
echo "Building Linux binary for ${{ matrix.arch }}..."
404+
if [ "${{ matrix.arch }}" == "arm64" ]; then
405+
# ARM64 交叉编译
406+
CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm64 \
407+
go build -trimpath -ldflags "-checklinkname=0 -s -w" -o "$BUILD_DIR/ecs-gui" .
408+
else
409+
# AMD64 本地编译
410+
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
411+
go build -trimpath -ldflags "-checklinkname=0 -s -w" -o "$BUILD_DIR/ecs-gui" .
412+
fi
413+
414+
echo "Packaging Linux app with fyne..."
415+
cd "$BUILD_DIR"
416+
fyne package -os linux -name ecs-gui --exe ecs-gui --app-version "${{ needs.prepare.outputs.app_version }}" --release
417+
cd ..
418+
419+
# 查找生成的 tar.xz 文件
420+
if [ -f "$BUILD_DIR/ecs-gui.tar.xz" ]; then
421+
mv "$BUILD_DIR/ecs-gui.tar.xz" ecs-gui-${{ matrix.name }}-${{ needs.prepare.outputs.version }}.tar.xz
422+
echo "✓ Linux tar.xz 构建成功"
423+
# 清理构建目录
424+
rm -rf "$BUILD_DIR"
425+
else
426+
echo "✗ Linux tar.xz 构建失败"
427+
ls -la "$BUILD_DIR/"
428+
exit 1
429+
fi
372430
else
373-
# Windows 直接使用 fyne package
431+
# Windows 构建 - 使用独立目录
432+
BUILD_DIR="build-${{ matrix.name }}"
433+
mkdir -p "$BUILD_DIR"
434+
374435
echo "Building ${{ matrix.platform }} with fyne package..."
436+
cd "$BUILD_DIR"
375437
fyne package -os ${{ matrix.platform }} -name ecs-gui --app-version "${{ needs.prepare.outputs.app_version }}" --release
438+
cd ..
376439
377440
if [ "${{ matrix.platform }}" == "windows" ]; then
378-
if [ -f ecs-gui.exe ]; then
379-
mv ecs-gui.exe ecs-gui-${{ matrix.name }}-${{ needs.prepare.outputs.version }}.exe
441+
if [ -f "$BUILD_DIR/ecs-gui.exe" ]; then
442+
mv "$BUILD_DIR/ecs-gui.exe" ecs-gui-${{ matrix.name }}-${{ needs.prepare.outputs.version }}.exe
380443
echo "✓ Windows exe 构建成功"
444+
# 清理构建目录
445+
rm -rf "$BUILD_DIR"
381446
else
382447
echo "✗ Windows exe 构建失败"
383448
exit 1
@@ -401,6 +466,25 @@ jobs:
401466
if [[ "$file" == *.tar.gz ]]; then
402467
# macOS app 需要解压后压缩二进制
403468
echo "正在处理 macOS app: $file"
469+
elif [[ "$file" == *.tar.xz ]]; then
470+
# Linux app 需要解压后压缩二进制
471+
echo "正在处理 Linux app: $file"
472+
mkdir -p ecs-gui-extracted
473+
tar -xJf "$file" -C ecs-gui-extracted
474+
475+
# 查找并压缩 Linux 可执行文件
476+
find ecs-gui-extracted -type f -executable | while read binary; do
477+
if file "$binary" | grep -q "ELF"; then
478+
echo "正在压缩 Linux 二进制: $binary"
479+
upx --best --lzma "$binary" || echo "警告: $binary 压缩失败"
480+
fi
481+
done
482+
483+
# 重新打包
484+
rm "$file"
485+
tar -cJf "$file" -C ecs-gui-extracted .
486+
rm -rf ecs-gui-extracted
487+
echo "压缩后大小: $(du -h "$file")"
404488
tar -xzf "$file"
405489
406490
# 查找并压缩 macOS 可执行文件
@@ -440,3 +524,10 @@ jobs:
440524
done
441525
env:
442526
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
527+
528+
- name: Upload build artifact
529+
uses: actions/upload-artifact@v4
530+
with:
531+
name: ecs-gui-${{ matrix.name }}-${{ needs.prepare.outputs.version }}
532+
path: ecs-gui-${{ matrix.name }}-${{ needs.prepare.outputs.version }}.*
533+
retention-days: 90

0 commit comments

Comments
 (0)