| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- name: Build Binaries
- # 多平台单文件二进制构建(Nuitka)。
- # 触发:打 v* tag 时自动构建并附到 GitHub Release;也可手动 workflow_dispatch。
- # 不在每次 push 跑 —— 二进制编译慢且耗 runner 分钟。
- on:
- push:
- tags: ["v*"]
- workflow_dispatch:
- inputs:
- onefile:
- description: "1=单文件(默认) / 0=standalone 目录"
- required: false
- default: "1"
- permissions:
- contents: write # 需要写 Release 附件
- jobs:
- build:
- name: build (${{ matrix.label }})
- runs-on: ${{ matrix.os }}
- continue-on-error: ${{ matrix.experimental }}
- strategy:
- fail-fast: false
- matrix:
- include:
- - os: macos-14 # Apple Silicon
- label: macos-arm64
- experimental: false
- - os: macos-13 # Intel
- label: macos-x86_64
- experimental: false
- - os: ubuntu-latest # Linux x86_64
- label: linux-x86_64
- experimental: false
- - os: windows-latest # Windows x86_64(实验性:脚本面向 *nix,可能需适配)
- label: windows-x86_64
- experimental: true
- steps:
- - uses: actions/checkout@v4
- - name: Set up Python 3.11
- uses: actions/setup-python@v5
- with:
- python-version: "3.11"
- - name: Set up Node 20
- uses: actions/setup-node@v4
- with:
- node-version: "20"
- cache: npm
- cache-dependency-path: webui/package-lock.json
- # 前端静态产物(vite build → 仓库根 webui-dist/,供二进制内嵌)
- - name: Build web UI
- working-directory: webui
- run: |
- npm ci
- npm run build
- # Linux: Nuitka standalone 需要 patchelf
- - name: Install patchelf (Linux)
- if: runner.os == 'Linux'
- run: sudo apt-get update && sudo apt-get install -y patchelf
- - name: Build binary
- shell: bash
- env:
- ONEFILE: ${{ github.event.inputs.onefile || '1' }}
- PROVIDERS: "anthropic openai"
- run: |
- chmod +x setup.sh scripts/build_binary.sh
- # Windows runner 只有 `python`,*nix 用 `python3`
- if [ "${{ runner.os }}" = "Windows" ]; then PY=python; else PY=python3; fi
- bash scripts/build_binary.sh "$PY"
- - name: Package artifact
- shell: bash
- run: |
- mkdir -p out
- cd dist-binary
- # 单文件 → 直接打 tar.gz;目录模式 → 整目录打 tar.gz
- if ls *.app >/dev/null 2>&1; then
- tar -czf "../out/agentpaas-${{ matrix.label }}.tar.gz" *.app
- else
- tar -czf "../out/agentpaas-${{ matrix.label }}.tar.gz" agentpaas* 2>/dev/null || \
- tar -czf "../out/agentpaas-${{ matrix.label }}.tar.gz" *
- fi
- ls -lh ../out
- - name: Upload build artifact
- uses: actions/upload-artifact@v4
- with:
- name: agentpaas-${{ matrix.label }}
- path: out/*.tar.gz
- if-no-files-found: error
- release:
- name: Attach to Release
- needs: build
- if: startsWith(github.ref, 'refs/tags/')
- runs-on: ubuntu-latest
- steps:
- - name: Download all artifacts
- uses: actions/download-artifact@v4
- with:
- path: artifacts
- - name: Attach binaries to GitHub Release
- uses: softprops/action-gh-release@v2
- with:
- files: artifacts/**/*.tar.gz
- fail_on_unmatched_files: false
|