Files
ratatoskr-go/.serena/memories/toolchain/cgo-winlibs-gcc.md
ki.sagidullin 5e7fb58049 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).
2026-08-20 17:51:46 +05:00

1.5 KiB
Raw Blame History

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.