# Сборка по тегу v* и выкладка в публичный репо (ветка updates). # # Метки runs-on = labels твоих act_runner (Админка Gitea → Действия → Раннеры). # Не используем windows-latest/macos-latest — это только GitHub-hosted. # По умолчанию: одна Linux-сборка Win+NSIS (Wine). macOS — когда будет раннер (см. комментарий в build-macos). # # 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: # Сборка Windows-установщика на Linux (типичный self-hosted Gitea без облачных раннеров). build-windows: 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 - 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: Собрать артефакты win shell: bash run: | mkdir -p _artifact_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" _artifact_win/ ;; esac done ls -la _artifact_win - uses: actions/upload-artifact@v4 with: name: eb-win path: _artifact_win/ # Когда появится macOS-раннер: раскомментируй job и выставь runs-on под метку раннера; # в publish-update-feed добавь needs: [build-windows, build-macos] и download eb-mac. # # build-macos: # runs-on: macos-14 # steps: ... publish-update-feed: runs-on: ubuntu-22.04 needs: [build-windows] steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v4 with: name: eb-win path: _win - name: Пустой каталог mac (пока нет сборки mac в CI) run: mkdir -p _mac - uses: actions/setup-node@v4 with: node-version: '22' - 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