# Gitea-native версия — публикует релиз через прямые вызовы Gitea Release API
# (scripts/gitea-publish-release.mjs), а не через tauri-apps/tauri-action:
# та жёстко ходит в api.github.com, для Gitea не годится (не настраиваемый
# эндпоинт). GitHub-версия пайплайна (.github/workflows/release.yml) не тронута
# и продолжает работать как раньше через tauri-action.
#
# У Gitea нет built-in алиаса /releases/latest/download/<file> как у GitHub —
# эмулируем его: тег "latest" пересоздаётся на каждом релизе с теми же
# ассетами, что и версионный тег. Апдейтер (tauri.conf.json) ходит именно
# по этому стабильному URL.
#
# Только десктоп (Windows/macOS/Linux) — Android/iOS обновляются через сторы,
# самообновление там запрещено политиками платформ (см. src-tauri/src/lib.rs).
# Триггер — тег вида v1.2.3 (совпадает с полем "version" в tauri.conf.json).
#
# Нужные секреты в Gitea: TAURI_SIGNING_PRIVATE_KEY(_PASSWORD) — как и раньше,
# плюс GITEA_SERVER_URL (напр. https://git.example.com, без слэша на конце) и
# GITEA_TOKEN (личный токен с правом записи в этот репозиторий).
#
# shell: bash на windows-latest требует Git for Windows/bash в PATH раннера —
# на GitHub-хостед раннерах это есть из коробки, на самохостед Gitea-раннере
# под Windows нужно проверить отдельно (не проверялось вживую — нет доступа
# к реальному Windows/macOS раннеру в этой среде).
name: Release Desktop

on:
  push:
    tags:
      - "v*"
  workflow_dispatch:

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        include:
          - platform: "macos-latest"
            args: "--target aarch64-apple-darwin"
            updater_key: darwin-aarch64
          - platform: "macos-latest"
            args: "--target x86_64-apple-darwin"
            updater_key: darwin-x86_64
          - platform: "ubuntu-24.04"
            args: ""
            updater_key: linux-x86_64
          - platform: "windows-latest"
            args: ""
            updater_key: windows-x86_64

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

      - uses: pnpm/action-setup@v4
        with:
          version: 9

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

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

      - name: Install Linux system deps (webkit2gtk, etc.)
        if: matrix.platform == 'ubuntu-24.04'
        run: |
          sudo apt-get update
          sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

      - run: pnpm install --frozen-lockfile

      # Tauri CLI напрямую, не tauri-action — она сама публикует релиз на
      # GitHub попутно со сборкой, тут публикация вынесена в отдельный job.
      # Подписывающие переменные окружения читает сам Tauri CLI, без разницы,
      # кто его вызывает — .sig-файлы создаются точно так же, как и раньше.
      - name: Build
        shell: bash
        env:
          TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
          TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
        run: pnpm tauri build ${{ matrix.args }}

      # Собираем только то, что реально нужно апдейтеру (парами файл+.sig) —
      # не гадаем про точные имена/подпапки бандлов на каждой платформе,
      # просто берём всё, что Tauri CLI подписал.
      - name: Collect signed updater bundles
        shell: bash
        run: |
          mkdir -p dist-bundle
          find src-tauri/target -name "*.sig" | while read -r sig; do
            base="${sig%.sig}"
            cp "$sig" dist-bundle/
            cp "$base" dist-bundle/
          done
          ls -la dist-bundle

      - uses: actions/upload-artifact@v4
        with:
          name: bundle-${{ matrix.updater_key }}
          path: dist-bundle/*
          if-no-files-found: error

  publish:
    needs: build
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v4

      - uses: actions/download-artifact@v4
        with:
          path: artifacts

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

      - name: Publish release to Gitea
        env:
          GITEA_SERVER_URL: ${{ secrets.GITEA_SERVER_URL }}
          GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
          GITEA_REPO: ${{ github.repository }}
          RELEASE_VERSION: ${{ github.ref_name }}
        run: node scripts/gitea-publish-release.mjs artifacts
