From d9d043ec8e6dba4aa9470cbd16b4dd9f9dc05646 Mon Sep 17 00:00:00 2001 From: "ki.sagidullin" Date: Fri, 21 Aug 2026 23:12:20 +0500 Subject: [PATCH] =?UTF-8?q?feat(scripts):=20GCC=5FPATH=20=D0=B8=D0=B7=20.g?= =?UTF-8?q?itea-creds=20=D0=B4=D0=BB=D1=8F=20gcc=20=D0=B2=20build-publish-?= =?UTF-8?q?ui.ps1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - проверка gcc перенесена после чтения creds (шаг 1a) - GCC_PATH дописывается в PATH (абсолютный или относительно scripts/); без него — gcc из текущего PATH - комментарии в шапку: GCC_PATH и уточнённый PROJECT_PATH --- scripts/build-publish-ui.ps1 | 47 +++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/scripts/build-publish-ui.ps1 b/scripts/build-publish-ui.ps1 index d0aa4bc..a86301f 100644 --- a/scripts/build-publish-ui.ps1 +++ b/scripts/build-publish-ui.ps1 @@ -9,15 +9,21 @@ CI собирает ТОЛЬКО headless-linux (см. .gitea/workflows/ci.yaml) Требования: - Go с доступным C-компилятором (CGO_ENABLED=1). WinLibs gcc: см. память - `mem:toolchain/cgo-winlibs-gcc` — bin нужно добавить в PATH перед запуском. + `mem:binator/cgo-winlibs-gcc`. Каталог с gcc.exe можно задать через + GCC_PATH (ниже); если не задан — gcc должен быть уже в PATH. - Файл scripts/.gitea-creds (git-ignored, см. ниже) с токенами. Формат (по одной `ключ=значение` на строку): GITEA_TOKEN=write:packages-токен UPDATE_TOKEN=read:package-токен GIT_MAIN_URL=http://gitea.hal9000.home - PROJECT_PATH=..\..\foo (опционально) корень собираемого проекта - относительно папки scripts/; без него — - папка рядом со скриптом + PROJECT_PATH=..\..\foo (опционально) корень проекта (где лежат cmd/ + и go.mod); относительно папки scripts/ или + абсолютный; без него — папка рядом с + скриптом + GCC_PATH=D:\MinGW\bin (опционально) каталог, где лежит gcc.exe; + дописывается в PATH перед проверкой и + сборкой; абсолютный или относительно + scripts/; без него — gcc из текущего PATH - Ветка уже запушена в `main` (VERSION = commit- от текущего HEAD). Пример: @@ -32,14 +38,8 @@ $Package = "ratatoskr" $Owner = "kamelion" $Filename = "ratatoskr-windows-amd64.exe" -# --- 0. Проверка C-тулчейна --- +# --- 0. Проверка флага CGO_ENABLED (не зависит от creds) --- if ($env:CGO_ENABLED -eq "0") { Write-Error "CGO_ENABLED=0 — нужен C-компилятор (MinGW). Уберите его из env." } -if (-not (Get-Command gcc -ErrorAction SilentlyContinue)) { - Write-Host "gcc не найден в PATH. Пример (WinLibs):" - Write-Host ' $p = "<...>\mingw64\bin"; $env:Path = "$p;$env:Path"' - Write-Error "C-компилятор gcc не найден." -} -Write-Host "[ok] gcc: $((gcc --version | Select-Object -First 1))" # --- 1. Чтение секретов --- if (-not (Test-Path $CredsFile)) { @@ -59,7 +59,30 @@ $giteaUrl = $creds["GIT_MAIN_URL"] if (-not $giteaToken) { Write-Error "В $CredsFile нет GITEA_TOKEN (нужен write:packages)." } if (-not $giteaUrl) { Write-Error "В $CredsFile нет GIT_MAIN_URL." } -# --- 1a. Корень целевого проекта --- +# --- 1a. C-тулчейн (gcc): GCC_PATH из creds дописывается в PATH --- +# Путь абсолютный либо относительно папки scripts/; без GCC_PATH — gcc +# берётся из уже установленного PATH. +$gccPath = $creds["GCC_PATH"] +if ($gccPath -ne "" -and $gccPath) { + $gccAbs = Join-Path $ScriptDir $gccPath + $gccBin = (Resolve-Path -LiteralPath $gccAbs -ErrorAction SilentlyContinue).Path + if (-not $gccBin) { + $gccAbs = $gccPath # не нашлось относительно scripts/ — пробуем как абсолютный + $gccBin = (Resolve-Path -LiteralPath $gccAbs -ErrorAction SilentlyContinue).Path + } + if (-not $gccBin) { Write-Error "GCC_PATH не найден: $gccPath (или относительно $ScriptDir)" } + $env:Path = "$gccBin;$env:Path" + Write-Host "[gcc] PATH += $gccBin" +} +if (-not (Get-Command gcc -ErrorAction SilentlyContinue)) { + Write-Host "gcc не найден в PATH. Пример (WinLibs):" + Write-Host ' D:\MinGW\bin, затем: + GCC_PATH=D:\MinGW\bin — в scripts/.gitea-creds' + Write-Error "C-компилятор gcc не найден." +} +Write-Host "[ok] gcc: $((gcc --version | Select-Object -First 1))" + +# --- 1b. Корень целевого проекта --- # PROJECT_PATH из .gitea-creds (относительно папки scripts/) либо, если не задан, # папка рядом со скриптом (прежнее поведение). $projPath = $creds["PROJECT_PATH"]