build-binaries.yml•2.53 kB
name: Binaries
on:
  workflow_call:
  workflow_dispatch:
concurrency:
  group: binaries-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
env:
  HUSKY: 0
jobs:
  binaries:
    runs-on: ${{ matrix.runner || matrix.os }}
    environment: release
    permissions:
      contents: write
    strategy:
      matrix:
        include:
          # Linux builds
          - os: ubuntu-latest
            platform: linux-x64
            script: sea:binary:linux
            artifact: 1mcp-linux-x64
          - os: ubuntu-latest
            platform: linux-arm64
            script: sea:binary:linux:arm64
            artifact: 1mcp-linux-arm64
            runner: ubuntu-24.04-arm
          # Windows builds
          - os: windows-latest
            platform: win32-x64
            script: sea:binary:win
            artifact: 1mcp-win32-x64.exe
          # macOS builds
          - os: macos-13
            platform: darwin-x64
            script: sea:binary:macos:x64
            artifact: 1mcp-darwin-x64
          - os: macos-latest
            platform: darwin-arm64
            script: sea:binary:macos
            artifact: 1mcp-darwin-arm64
    steps:
      - uses: actions/checkout@v4
        with:
          ref: main
      - name: Setup Node.js and pnpm
        uses: ./.github/actions/setup-node-pnpm
      - name: Build and create SEA binary
        run: |
          pnpm sea:build
          pnpm ${{ matrix.script }}
      - name: Test binary functionality (Unix)
        if: ${{ !startsWith(matrix.platform, 'win32') }}
        run: |
          chmod +x scripts/test-binary-unix.sh
          ./scripts/test-binary-unix.sh ./1mcp ${{ matrix.platform }}
        shell: bash
      - name: Test binary functionality (Windows)
        if: ${{ startsWith(matrix.platform, 'win32') }}
        run: |
          .\scripts\test-binary-windows.ps1 -BinaryPath ".\1mcp.exe" -Platform "${{ matrix.platform }}"
        shell: powershell
      - name: Rename binary for platform-specific archive
        run: |
          if [[ "${{ matrix.platform }}" == win32-* ]]; then
            mv 1mcp.exe ${{ matrix.artifact }}
          else
            mv 1mcp ${{ matrix.artifact }}
          fi
        shell: bash
      - name: Create compressed archive
        run: pnpm archive
      - name: Upload compressed archive artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.artifact }}
          path: |
            *.tar.gz
            *.zip
          retention-days: 1