a15adfc3b1
Release / release (push) Successful in 5m9s
Co-authored-by: Cursor <cursoragent@cursor.com>
132 lines
5.4 KiB
YAML
132 lines
5.4 KiB
YAML
# Сборка по тегу v* и выкладка в публичный репо (ветка updates).
|
||
#
|
||
# Метки runs-on = labels твоих act_runner (Админка Gitea → Действия → Раннеры).
|
||
# Не используем windows-latest/macos-latest — это только GitHub-hosted.
|
||
# По умолчанию: одна Linux-сборка Win+NSIS (Wine). macOS — когда будет раннер (см. комментарий в build-macos).
|
||
#
|
||
# Один job без actions/upload-artifact: официальный upload-artifact@v4 с GitHub на Gitea
|
||
# падает (GHESNotSupportedError). Сборка и sync-update-feed идут в одном окружении.
|
||
#
|
||
# Secrets: DND_UPDATE_FEED_URL, DND_UPDATES_SERVER, UPDATES_REPO, DND_UPDATES_PUSH_TOKEN — docs/GITEA_AUTO_UPDATE.md
|
||
|
||
name: Release
|
||
|
||
on:
|
||
push:
|
||
tags:
|
||
- 'v*'
|
||
|
||
env:
|
||
CSC_IDENTITY_AUTO_DISCOVERY: 'false'
|
||
|
||
jobs:
|
||
release:
|
||
runs-on: ubuntu-22.04
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- uses: actions/setup-node@v4
|
||
with:
|
||
node-version: '22'
|
||
cache: 'npm'
|
||
|
||
# Не включаем i386 / wine32: на Debian с репами только amd64 (nginx, sury, …)
|
||
# apt ломается на цепочке libgphoto2/libgd:i386. NSIS — нативный пакет `nsis`;
|
||
# electron-builder подхватывает makensis; wine64 — для win-утилит (rcedit и т.п.).
|
||
# Пакет `wine` (мета) тянет wine32 → снова i386. electron-builder ищет именно `wine` в PATH.
|
||
- name: Зависимости Win-сборки на Linux (amd64, без multiarch i386)
|
||
shell: bash
|
||
run: |
|
||
sudo apt-get update
|
||
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||
ca-certificates \
|
||
nsis \
|
||
wine64
|
||
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||
W64="$(command -v wine64 2>/dev/null || true)"
|
||
if [[ -z "$W64" || ! -x "$W64" ]]; then
|
||
for p in /usr/bin/wine64 /usr/lib/wine/wine64; do
|
||
if [[ -x "$p" ]]; then W64="$p"; break; fi
|
||
done
|
||
fi
|
||
if [[ -z "${W64:-}" || ! -x "$W64" ]]; then
|
||
echo "wine64 binary not found after apt install wine64" >&2
|
||
dpkg -L wine64 2>/dev/null | head -80 >&2 || true
|
||
exit 1
|
||
fi
|
||
printf '%s\n' '#!/bin/sh' "exec $W64 \"\$@\"" | sudo tee /usr/local/bin/wine >/dev/null
|
||
sudo chmod +x /usr/local/bin/wine
|
||
wine --version
|
||
|
||
- name: Версия из тега
|
||
shell: bash
|
||
run: |
|
||
TAG="${GITHUB_REF_NAME:-${GITEA_REF_NAME:-}}"
|
||
VERSION="${TAG#v}"
|
||
npm version "$VERSION" --allow-same-version --no-git-tag-version
|
||
|
||
- run: npm ci
|
||
|
||
# Не используем `npm install`: на Linux npm падает с EBADPLATFORM для win32-пакета.
|
||
- name: sharp (@img/sharp-win32-x64) для Windows-артефакта при сборке на Linux
|
||
shell: bash
|
||
run: |
|
||
set -euo pipefail
|
||
tmp="$(mktemp -d)"
|
||
npm pack @img/sharp-win32-x64@0.34.5 --pack-destination "$tmp"
|
||
mkdir -p node_modules/@img/sharp-win32-x64
|
||
tar -xzf "$tmp/img-sharp-win32-x64-0.34.5.tgz" -C "$tmp"
|
||
cp -a "$tmp/package/." node_modules/@img/sharp-win32-x64/
|
||
test -f node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node
|
||
rm -rf "$tmp"
|
||
|
||
- run: npm run build
|
||
|
||
- name: electron-builder (win)
|
||
shell: bash
|
||
env:
|
||
DND_UPDATE_FEED_URL: ${{ secrets.DND_UPDATE_FEED_URL }}
|
||
run: |
|
||
set -euo pipefail
|
||
if [[ -z "${DND_UPDATE_FEED_URL:-}" ]]; then
|
||
echo "Secret DND_UPDATE_FEED_URL is not set (URL со слэшем в конце)" >&2
|
||
exit 1
|
||
fi
|
||
npx electron-builder --win --publish never \
|
||
--config.publish.provider=generic \
|
||
--config.publish.url="${DND_UPDATE_FEED_URL}"
|
||
|
||
- name: Каталог артефактов для feed (_win)
|
||
shell: bash
|
||
run: |
|
||
mkdir -p _win
|
||
shopt -s nullglob || true
|
||
for f in release/*; do
|
||
[[ -f "$f" ]] || continue
|
||
base=$(basename "$f")
|
||
case "$base" in
|
||
*.yml|*.yaml|*.exe|*.blockmap|*.zip) cp -v "$f" _win/ ;;
|
||
esac
|
||
done
|
||
ls -la _win
|
||
|
||
- name: Пустой каталог mac (пока нет сборки mac в CI)
|
||
run: mkdir -p _mac
|
||
|
||
- name: Push в публичный репозиторий updates
|
||
env:
|
||
DND_UPDATES_SERVER: ${{ secrets.DND_UPDATES_SERVER }}
|
||
UPDATES_REPO: ${{ secrets.UPDATES_REPO }}
|
||
DND_UPDATES_PUSH_TOKEN: ${{ secrets.DND_UPDATES_PUSH_TOKEN }}
|
||
ARTIFACT_WIN: ${{ github.workspace }}/_win
|
||
ARTIFACT_MAC: ${{ github.workspace }}/_mac
|
||
GIT_COMMIT_TAG: ${{ github.ref_name }}
|
||
run: node scripts/sync-update-feed.mjs
|
||
|
||
# Когда появится macOS-раннер: отдельный job build-macos, копирование eb-mac в _mac перед sync
|
||
# или расширить шаг «Каталог артефактов»; сейчас всё в одном job `release`.
|
||
#
|
||
# build-macos:
|
||
# runs-on: macos-14
|
||
# steps: ...
|