Update build.yml #17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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-latest | |
| goos: darwin | |
| goarch: amd64 | |
| exe_ext: '' | |
| archive_format: zip | |
| archive_ext: .zip | |
| - os: macos-latest | |
| 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: | | |
| if [ "${{ matrix.goos }}" == "windows" ]; then | |
| pyinstaller --onefile --windowed --name ECHWorkersGUI gui.py | |
| else | |
| # macOS: 根据目标架构设置环境变量 | |
| if [ "${{ matrix.goarch }}" == "arm64" ]; then | |
| # Apple Silicon: 确保使用 arm64 Python | |
| export ARCHFLAGS="-arch arm64" | |
| pyinstaller --onefile --windowed --name ECHWorkersGUI gui.py | |
| else | |
| # Intel: 使用 x86_64 架构(可能需要 Rosetta) | |
| export ARCHFLAGS="-arch x86_64" | |
| # 在 Apple Silicon runner 上,使用 Rosetta 运行 | |
| if [ "$(uname -m)" == "arm64" ]; then | |
| arch -x86_64 pyinstaller --onefile --windowed --name ECHWorkersGUI gui.py || pyinstaller --onefile --windowed --name ECHWorkersGUI gui.py | |
| else | |
| pyinstaller --onefile --windowed --name ECHWorkersGUI gui.py | |
| fi | |
| fi | |
| fi | |
| 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 }} |