Skip to content

Windows优化

Windows优化 #27

Workflow file for this run

name: Build and Release
on:
push:
branches:
- main
- master
tags:
- 'v*'
pull_request:
branches:
- main
- master
workflow_dispatch:
jobs:
build:
strategy:
matrix:
include:
- os: windows-latest
goos: windows
goarch: amd64
exe_ext: .exe
archive_format: zip
archive_ext: .zip
- os: macos-13
goos: darwin
goarch: amd64
exe_ext: ''
archive_format: zip
archive_ext: .zip
- os: macos-14
goos: darwin
goarch: arm64
exe_ext: ''
archive_format: zip
archive_ext: .zip
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: false
- name: Initialize Go module
run: |
go mod init ech-workers || true
go mod tidy
- name: Build Go executable
run: |
GOOS=${{ matrix.goos }} GOARCH=${{ matrix.goarch }} go build -o ech-workers${{ matrix.exe_ext }} ech-workers.go
shell: bash
- name: Set up Python
if: startsWith(github.ref, 'refs/tags/')
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install PyInstaller and dependencies
if: startsWith(github.ref, 'refs/tags/')
run: |
python -m pip install --upgrade pip
pip install pyinstaller PyQt5 pystray Pillow
- name: Build Python executable
if: startsWith(github.ref, 'refs/tags/')
run: |
# PyInstaller 会自动使用当前系统架构
# macos-13 = Intel (x86_64), macos-14 = Apple Silicon (arm64)
pyinstaller --onefile --windowed --name ECHWorkersGUI gui.py
shell: bash
- name: Prepare release files
if: startsWith(github.ref, 'refs/tags/')
run: |
mkdir -p release
# 复制 Go 可执行文件
cp ech-workers${{ matrix.exe_ext }} release/
# 复制 Python 打包后的可执行文件
if [ "${{ matrix.goos }}" == "windows" ]; then
if [ -f "dist/ECHWorkersGUI.exe" ]; then
cp dist/ECHWorkersGUI.exe release/
fi
else
if [ -f "dist/ECHWorkersGUI" ]; then
cp dist/ECHWorkersGUI release/
chmod +x release/ECHWorkersGUI
fi
fi
# 创建 README
{
echo "ECH Workers Client"
echo ""
echo "Files:"
echo "- ech-workers(.exe): Go compiled core proxy program"
if [ "${{ matrix.goos }}" == "windows" ]; then
echo "- ECHWorkersGUI.exe: Python GUI client (standalone executable)"
else
echo "- ECHWorkersGUI: Python GUI client (standalone executable)"
fi
echo ""
echo "Usage:"
if [ "${{ matrix.goos }}" == "windows" ]; then
echo "1. Double-click ECHWorkersGUI.exe to launch the GUI"
echo "2. Or run ech-workers.exe from command line"
else
echo "1. Run ./ECHWorkersGUI to launch the GUI"
echo "2. Or run ./ech-workers from command line"
fi
echo ""
echo "System Requirements:"
echo "- Windows: Windows 10+"
echo "- macOS: macOS 10.13+"
echo "- No Python installation required (standalone executables)"
} > release/README.txt
shell: bash
- name: Create archive (Windows)
if: startsWith(github.ref, 'refs/tags/') && matrix.goos == 'windows'
run: |
cd release
powershell Compress-Archive -Path * -DestinationPath ../ECHWorkers-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.archive_ext }} -Force
shell: powershell
- name: Create archive (macOS/Linux)
if: startsWith(github.ref, 'refs/tags/') && matrix.goos != 'windows'
run: |
cd release
zip -r ../ECHWorkers-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.archive_ext }} .
shell: bash
- name: Upload artifacts
if: startsWith(github.ref, 'refs/tags/')
uses: actions/upload-artifact@v4
with:
name: ECHWorkers-${{ matrix.goos }}-${{ matrix.goarch }}
path: ECHWorkers-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.archive_ext }}
release:
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Create release
uses: softprops/action-gh-release@v1
with:
files: |
artifacts/**/*.zip
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}