# Сборка Windows-релиза на Linux runner Workflow `.gitea/workflows/release.yml` запускается вручную из ветки `master` через Gitea Actions → Desktop Release → Run workflow. Версия берётся из `app_version.py`; для ближайшего релиза это `2.3.0`. ## Настройка раннера - Ваши `runner.labels` в `/config.yaml` уже верно привязывают `ubuntu-latest` к `docker://docker.gitea.com/runner-images:ubuntu-latest`. Менять их не требуется. - В Docker Compose сейчас есть `GITEA_RUNNER_LABELS: "ubuntu-latest,docker,self-hosted"`. Удалите эту переменную или задайте в ней ту же явную схему `ubuntu-latest:docker://...`: при запуске daemon значение переменной может переопределить `runner.labels`, а голая метка `ubuntu-latest` означает выполнение шагов внутри контейнера `gitea-runner`. - Ваше монтирование `/var/run/docker.sock:/var/run/docker.sock` в контейнер раннера оставьте. Job-контейнеру также нужен доступ к этому сокету через настройки `container.docker_host` (значение по умолчанию — автоопределение). Workflow при необходимости установит Docker CLI в job-контейнер. - Docker host должен быть x86_64 и иметь достаточно места. `actions/setup-python` устанавливает Python 3.13 в job-контейнер. - `scripts/install-qt-runtime-deps.sh` ставит системные runtime-библиотеки OpenGL, XCB и X11 для PySide6; список составлен по [требованиям Qt для Linux](https://doc.qt.io/qt-6/linux-requirements.html). - В секретах репозитория нужен `API_TOKEN` с правами записи тегов и релизов. Checkout также должен иметь право отправить git tag в `origin`. - Первый запуск скачает образы `batonogov/pyinstaller-windows:latest` и `amake/innosetup:innosetup6` и установит зависимости Python внутри контейнера Wine. Для образов и артефактов потребуется несколько гигабайт свободного места. Сборка передаёт файлы через `docker cp`, поэтому пути внутри job-контейнера и Docker host могут различаться. ## Что делает workflow 1. Проверяет, что релиза `v2.3.0` ещё нет, затем запускает тесты. 2. Собирает Windows-приложение и ZIP через PyInstaller под Wine. 3. Собирает установщик через Inno Setup под Wine. 4. Проверяет наличие обоих EXE, `version.txt` в ZIP и SHA256 обоих файлов. 5. Создаёт тег и релиз Gitea с четырьмя вложениями: ZIP, его `.sha256`, установщик EXE и его `.sha256`. Имена ZIP и файлов SHA256 сохранены в формате, который читает автообновление. Workflow для ветки `dev` также переведён на `ubuntu-latest` и выпускает ZIP-предрелизы; установщик для них не собирается. Сборка под Wine требует отдельной проверки запуска приложения и установки на реальной Windows. Локально можно собрать и проверить артефакты теми же скриптами `scripts/docker-build-windows.sh` и `scripts/docker-build-installer.sh`, если доступен Linux с Docker.