on:
  push:
    tags:
      - 'v*.*.*-*'

name: 🚀 Release on GitHub
jobs:
  release:
    permissions:
      contents: write
    strategy:
      fail-fast: false
      matrix:
        include:
          - platform: 'macos-15'
            args: '--target aarch64-apple-darwin'
            arch: 'aarch64-apple-darwin'
          - platform: 'macos-15'
            args: '--target x86_64-apple-darwin'
            arch: 'x86_64-apple-darwin'
          - platform: 'ubuntu-22.04'
            args: ''
            arch: ''
          - platform: 'windows-latest'
            args: ''
            arch: ''

    runs-on: ${{ matrix.platform }}
    steps:
      - name: 🚚 Checkout repository
        uses: actions/checkout@v4

      - name: 🛠️ Install dependencies
        if: matrix.platform == 'ubuntu-22.04'
        run: |
          sudo apt-get update
          sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

      - name: 📦 Setup node
        uses: actions/setup-node@v4
        with:
          node-version: '22.11.0'
          cache: 'npm'

      - name: 🛠️ install Rust stable
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.platform == 'macos-15' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}

      - name: 🛠️ Rust cache
        uses: swatinem/rust-cache@v2
        with:
          workspaces: './src-tauri -> target'

      - name: 🛠️ Install frontend dependencies
        run: npm install

      - name: 📄 Read CHANGELOG (Unix)
        if: matrix.platform != 'windows-latest'
        id: changelog_unix
        shell: bash
        run: |
          if [ -f CHANGELOG.md ]; then
            CONTENT=$(cat CHANGELOG.md)
            echo "content<<EOF" >> $GITHUB_OUTPUT
            echo "$CONTENT" >> $GITHUB_OUTPUT
            echo "EOF" >> $GITHUB_OUTPUT
          else
            echo "content=No changelog found" >> $GITHUB_OUTPUT
          fi

      - name: 📄 Read CHANGELOG (Windows)
        if: matrix.platform == 'windows-latest'
        id: changelog_windows
        shell: pwsh
        run: |
          if (Test-Path "CHANGELOG.md") {
            $content = Get-Content -Path CHANGELOG.md -Raw
            "content<<EOF" >> $env:GITHUB_OUTPUT
            $content >> $env:GITHUB_OUTPUT
            "EOF" >> $env:GITHUB_OUTPUT
          } else {
            "content=No changelog found" >> $env:GITHUB_OUTPUT
          }

      - name: 🚀 Build and publish
        uses: tauri-apps/tauri-action@v0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TARGET_ARCH: ${{ matrix.arch }}
          TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
          TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
        with:
          tagName: ${{ github.ref_name }}
          releaseName: ${{ github.event.repository.name }}-${{ github.ref_name }}
          releaseBody: ${{ matrix.platform == 'windows-latest' && steps.changelog_windows.outputs.content || steps.changelog_unix.outputs.content }}
          releaseDraft: true
          prerelease: false
          includeUpdaterJson: true
          updaterJsonPreferNsis: true
          args: ${{ matrix.args }}