87 lines
6.3 KiB
Markdown
87 lines
6.3 KiB
Markdown
# 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.
|