# GSCORD Desktop CI Workflow собирает Fluxer Desktop для Windows x64 (portable EXE) и Linux x64 (AppImage, DEB). Патчи находятся в `patches/`, порядок — в `patches/series`. `node scripts/apply-patches.mjs fluxer-src` сначала проверяет всю серию через `git apply --check`, затем применяет её через `git apply`. ## Изменения - `0001-self-hosted-instance.patch`: `STABLE_APP_URL`, `CANARY_APP_URL`, desktop homepage и адреса миграции — `https://ds.gandc.ru`. Новый встроенный renderer начинает discovery с этого сервера; явный launch override сохраняет приоритет. - `0002-sso-navigation.patch`: точный origin `https://sso.gandc.ru` и возврат на `https://ds.gandc.ru` разрешены для navigation/redirect. Проверка доверия к IPC и разрешениям остаётся upstream: внешняя SSO-страница не становится локальным доверенным renderer. - `0003-webrtc-livekit.patch`: `relay → all` в main world для конструктора `RTCPeerConnection` и `setConfiguration()`. Сохранён существовавший workaround LiveKit offer-with-join через `CompressionStream`/`WebSocket`. - `0004-gitea-updates.patch`: проверка последнего релиза через Gitea API, ссылки на реальные assets с учётом платформы и архитектуры. Windows и Linux, включая AppImage, используют ручное скачивание обновления. Для DEB не предлагаются отсутствующие RPM/tar.gz assets. Пустой список ведёт на releases. Проверок, валящих сборку при новых дефолтных Fluxer hostnames, нет. Неизменённые upstream-адреса могут оставаться в исходниках. Если upstream изменит строки, затрагиваемые патчами, обычный конфликт `git apply` остановит сборку. ## Workflow 1. `shared-renderer` получает текущий upstream `main`, выдаёт его SHA для обоих платформенных заданий, применяет патчи и собирает общий renderer на Linux. 2. Windows и Linux скачивают тот же SHA, применяют ту же серию и собирают native modules + Electron с `--use-shared-renderer`. 3. Сохраняются существующие runner labels и Linux Nexus/RAM-настройки. Node.js — 26, как в текущем upstream build workflow. Версия pnpm читается из upstream `package.json` (`11.27.0` на проверенном commit), а зависимости ставятся с `--frozen-lockfile --prod=false`, чтобы `NODE_ENV=production` не исключал инструменты сборки. Rust stable обновляется перед сборкой; для renderer нужен `wasm32-unknown-unknown`, clang с WASM backend и llvm-ar. Путь `$CARGO_HOME/bin` добавлен в RAM action, поскольку upstream устанавливает туда `wasm-bindgen`. `FLUXER_MODULES=0` сохраняет полный локальный renderer: Gitea releases не являются сервером Fluxer module manifests. `FLUXER_OFFLINE=0` сохраняет обычный сетевой клиент. Теперь web-renderer обновляется вместе с desktop-сборкой, а не просто подгружается как страница сервера. Совместимость renderer с API вашего сервера нужно проверить запуском готового клиента. В Windows добавлен checkout CI-репозитория и явные проверки exit code внешних команд. `.gitattributes` сохраняет LF в патчах на Windows. ## Локальная проверка Из корня этого репозитория с Node.js 24+ и Git: ```sh node scripts/prepare-upstream.mjs node scripts/apply-patches.mjs fluxer-src --check node scripts/apply-patches.mjs fluxer-src node --test scripts/customizations.test.mjs ``` `prepare-upstream.mjs` требует отсутствия `fluxer-src`, чтобы не затереть чужие изменения. Для проверки конкретной версии передайте `UPSTREAM_SHA` с полным SHA. Для тестов против другой директории можно задать `FLUXER_SOURCE`. ## Проверено 11 октября 2026 - Исходный GSCORD commit: `703bf076e2fe3a253cb6cf6591d64f6ddad54343`. - Upstream `main`: `575a5adbeff0b46390fb08901c7166649255204c`. - Все четыре патча прошли `git apply --check --whitespace=error-all` и реальное применение на чистом checkout этого upstream commit. - 12 проверок: адреса/начальный сервер, SSO allowlist, ICE constructor и setConfiguration, subclass/default behavior, LiveKit, Gitea assets/архитектуры, download links и выбор manual updater. - YAML workflow и composite action разобраны; Bash-блоки прошли `bash -n`. - Workflow прошёл actionlint 1.7.12. Для этого GitHub-ориентированного валидатора только в временной копии заменён `gitea.run_number` на `github.run_number` и указаны два пользовательских runner label; shellcheck/pyflakes отключены. - JavaScript helper scripts и изменённый TypeScript проверены на синтаксис. Полная установка зависимостей, TypeScript typecheck, native-сборка, упаковка и живые проверки SSO/звонков здесь не запускались. Их нужно выполнить на ваших CI runner; успешное применение патчей не подтверждает совместимость серверного API или наличие всех системных библиотек в builder image.