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).
1.5 KiB
1.5 KiB
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.