# 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/ как у 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_TOKEN (личный токен с правом записи в этот репозиторий). # GITEA_SERVER_URL (напр. https://git.example.com, без слэша на конце) — это # НЕ секрет (публичный URL сервера), задаётся как repo Variable (vars.*), не # Actions secret. # # 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: ${{ vars.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