name: Release Build

on:
  release:
    types: [published]

jobs:
  build:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Extract version from tag
        id: version
        shell: bash
        run: |
          # Remove 'v' prefix if present (e.g., "v1.2.3" -> "1.2.3")
          VERSION="${{ github.event.release.tag_name }}"
          VERSION="${VERSION#v}"
          echo "version=${VERSION}" >> $GITHUB_OUTPUT
          echo "Extracted version: ${VERSION}"

      - name: Update package.json version
        shell: bash
        run: |
          node apps/ui/scripts/update-version.mjs "${{ steps.version.outputs.version }}"

      - name: Setup project
        uses: ./.github/actions/setup-project
        with:
          check-lockfile: 'true'

      - name: Build Electron app (macOS)
        if: matrix.os == 'macos-latest'
        shell: bash
        run: npm run build:electron:mac --workspace=apps/ui
        env:
          CSC_IDENTITY_AUTO_DISCOVERY: false

      - name: Build Electron app (Windows)
        if: matrix.os == 'windows-latest'
        shell: bash
        run: npm run build:electron:win --workspace=apps/ui

      - name: Build Electron app (Linux)
        if: matrix.os == 'ubuntu-latest'
        shell: bash
        run: npm run build:electron:linux --workspace=apps/ui

      - name: Upload macOS artifacts
        if: matrix.os == 'macos-latest'
        uses: actions/upload-artifact@v4
        with:
          name: macos-builds
          path: apps/ui/release/*.{dmg,zip}
          retention-days: 30

      - name: Upload Windows artifacts
        if: matrix.os == 'windows-latest'
        uses: actions/upload-artifact@v4
        with:
          name: windows-builds
          path: apps/ui/release/*.exe
          retention-days: 30

      - name: Upload Linux artifacts
        if: matrix.os == 'ubuntu-latest'
        uses: actions/upload-artifact@v4
        with:
          name: linux-builds
          path: apps/ui/release/*.{AppImage,deb}
          retention-days: 30

  upload:
    needs: build
    runs-on: ubuntu-latest
    if: github.event.release.draft == false

    steps:
      - name: Download macOS artifacts
        uses: actions/download-artifact@v4
        with:
          name: macos-builds
          path: artifacts/macos-builds

      - name: Download Windows artifacts
        uses: actions/download-artifact@v4
        with:
          name: windows-builds
          path: artifacts/windows-builds

      - name: Download Linux artifacts
        uses: actions/download-artifact@v4
        with:
          name: linux-builds
          path: artifacts/linux-builds

      - name: Upload to GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          files: |
            artifacts/macos-builds/*
            artifacts/windows-builds/*
            artifacts/linux-builds/*
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
