name: Build Electron

on:
  push:
    branches:
      - main
    tags:
      - 'v*'
  workflow_dispatch:

jobs:
  build:
    name: Build (${{ matrix.os }})
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30
    permissions:
      contents: write
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: macos-latest
            platform: mac-arm64
            build_args: --mac --arm64
          - os: macos-latest
            platform: mac-x64
            build_args: --mac --x64
          - os: windows-latest
            platform: win
            build_args: --win
          - os: ubuntu-latest
            platform: linux
            build_args: --linux

    steps:
      - uses: actions/checkout@v4

      - uses: oven-sh/setup-bun@v2
        with:
          bun-version: latest

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install dependencies
        run: bun install --frozen-lockfile

      - name: Build web (electron target)
        run: bun --bun run build
        env:
          BUILD_TARGET: electron

      - name: Compile electron
        run: bun run electron:compile

      - name: Compile MCP server
        run: bun run mcp:compile

      - name: Build Electron app
        run: npx electron-builder --config electron-builder.yml ${{ matrix.build_args }} --publish never
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CSC_LINK: ${{ secrets.CSC_LINK }}
          CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
          WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }}
          WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }}
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
          APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}

      - name: Rename arm64 update metadata
        if: matrix.platform == 'mac-arm64'
        run: |
          if [ -f dist-electron/latest-mac.yml ]; then
            mv dist-electron/latest-mac.yml dist-electron/latest-mac-arm64.yml
          fi

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: electron-${{ matrix.platform }}
          path: |
            dist-electron/*.dmg
            dist-electron/*.zip
            dist-electron/*.exe
            dist-electron/*.AppImage
            dist-electron/*.deb
            dist-electron/latest*.yml
            dist-electron/*.blockmap
            !dist-electron/builder-debug.yml
          retention-days: 30

  release:
    name: Create Release
    runs-on: ubuntu-latest
    needs: build
    if: startsWith(github.ref, 'refs/tags/v')
    permissions:
      contents: write

    steps:
      - uses: actions/checkout@v4

      - name: Download all artifacts
        uses: actions/download-artifact@v4
        with:
          path: artifacts/
          merge-multiple: true

      - name: Create GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          draft: false
          generate_release_notes: true
          files: artifacts/*
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
