Files
netrunner-app/.gitea/workflows/release.yml
T
nineap 948f15d44a Gitea-native механизм публикации релиза (без tauri-action)
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).
2026-07-09 14:36:08 +07:00

129 lines
5.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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