948f15d44a
tauri-apps/tauri-action жёстко ходит в api.github.com для создания релиза и загрузки апдейтер-артефактов — не настраиваемый эндпоинт, для Gitea не годится ни при какой замене секретов. Вместо неё: - scripts/gitea-publish-release.mjs — публикует релиз через прямые вызовы Gitea Release API: собирает latest.json (формат манифеста Tauri v2 updater) из .sig-файлов подписанных бандлов, создаёт версионный релиз (тег = версия, для истории) и пересоздаёт релиз "latest" — у Gitea нет built-in алиаса /releases/latest/download/<file> как у GitHub, поэтому тег "latest" удаляется и создаётся заново на каждом релизе с теми же ассетами, чтобы URL апдейтера был стабильным. Оба релиза удаляются-и-пересоздаются — идемпотентно к повторному прогону тега. - .gitea/workflows/release.yml — job "build" (та же матрица платформ) вызывает `tauri build` напрямую (подпись через TAURI_SIGNING_PRIVATE_KEY читает сам Tauri CLI, без разницы кто его вызывает), собирает пары <файл>+.sig в dist-bundle/ и грузит артефактом bundle-<updater_key>; job "publish" скачивает все артефакты и вызывает скрипт выше. - tauri.conf.json: добавлен второй updater-эндпоинт (Gitea, плейсхолдер CHANGE_ME_GITEA_SERVER — заполнить реальным адресом) рядом с существующим GitHub — апдейтер пробует оба по порядку. GitHub-версия пайплайна не тронута, продолжает работать через tauri-action как раньше. Не проверено вживую на реальном Gitea/Windows/macOS раннере — нет доступа в этой среде. Нужные секреты в Gitea: GITEA_SERVER_URL, GITEA_TOKEN (личный токен с правом записи в репозиторий), плюс уже существующие TAURI_SIGNING_PRIVATE_KEY(_PASSWORD).
129 lines
5.4 KiB
YAML
129 lines
5.4 KiB
YAML
# 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
|