fix(ci): headless в CI, UI-бинарь собирается локально

CI (.gitea/workflows/ci.yaml):
- go 1.23 -> 1.25 (modernc.org/sqlite v1.56.0 требует go 1.25; старый CI падал
  на сборке ещё до тестов).
- CGO_ENABLED=0 на уровне workflow: CI собирает/тестирует только headless
  (ui_noui), не тянет Fyne/glfw и C-компилятор.
- timeout 120s -> 300s (worker один ~30-60s на быстрой машине).
- build-and-package: только linux/amd64 (headless). Windows-бинарь с UI — локально.

Локальная сборка UI + публикация:
- scripts/build-publish-ui.ps1: собирает ratatoskr-windows-amd64.exe (CGO_ENABLED=1,
  WinLibs gcc), вшивает commit-<sha7> + updateToken, пишет .version/.sha256 и
  публикует в Gitea Packages в ту же версию, что и CI; самопроверка (U4).
- scripts/.gitea-creds.example + .gitignore (scripts/.gitea-creds) — секреты не
  попадают в репозиторий.

README: CI=headless + публикация Windows-UI локальным скриптом; обновлён intro
(бинарь по умолчанию headless, окно — опционально с cgo).
This commit is contained in:
ki.sagidullin
2026-08-20 17:51:25 +05:00
parent c2272137b3
commit 5e7fb58049
6 changed files with 201 additions and 21 deletions

View File

@@ -0,0 +1,23 @@
# C-тулчейн для cgo-сборки (Fyne/GLFW) на этой машине
WinLibs (BrechtSanders.WinLibs.POSIX.UCRT) установлен через winget как
portable (zip) в:
`C:\Users\darkg\AppData\Local\Microsoft\WinGet\Packages\BrechtSanders.WinLibs.POSIX.UCRT_Microsoft.Winget.Source_8wekyb3d8bbwe\mingw64\bin`
- gcc 16.1.0, target `x86_64-w64-mingw32`, рантайм `x86_64-ucrt-posix-seh`.
- Установлен портативно — НЕ регистрируется в PATH автоматически.
- PATH добавлен в `HKCU\Environment` (WinLibs bin первым), но в новых
PowerShell-процессах opencode окружение НЕ перечитывается, поэтому в каждой
команде, где нужен cgo, добавлять вручную:
$p = "...\mingw64\bin"; $env:Path = "$p;$env:Path"; $env:CGO_ENABLED = "1"
Важно: на машине есть clang-msvc/i686 (D:\Program Files\LLVM, D:\Program
Files (x86)\LLVM) — он НЕ подходит для cgo (msvc-таргет + 32bit). Поэтому
gcc должен идти первым в PATH.
Для сборки окна: `CGO_ENABLED=1 go build ./...` (компилирует ui_cgo.go и
internal/ui/desktop). Без cgo окно не собирается — приложение headless
(ui_noui.go), флаг `--noui` в cmd/ratatoskr/main.go.
Для запуска GUI нужен реальный TG-конфиг (telegram.token/chat_id), иначе app
падает на init.