Files
ratatoskr-go/.gitea/workflows/ci.yaml
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

84 lines
3.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: CI
on:
push:
branches: [ main ]
paths-ignore:
- '**.md'
- '.gitea/**'
- 'LICENSE'
pull_request:
workflow_dispatch:
concurrency:
group: ${{ gitea.workflow }}-${{ gitea.ref }}
cancel-in-progress: true
# CI собирает/тестирует ТОЛЬКО headless-вариант: приложение без графического окна
# (internal/app/ui_noui.go). UI (Fyne-окно) требует cgo и C-компилятора, поэтому
# собирается локально и публикуется скриптом scripts/build-publish-ui.ps1.
env:
CGO_ENABLED: '0'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.25'
check-latest: true
- name: Run tests
run: go test ./... -v -count=1 -timeout 300s 2>&1
- name: Vet
run: go vet ./...
build-and-package:
if: always()
needs: test
# Только linux: headless-бинарь для сервера. Windows-бинарь (с UI, cgo)
# публикуется локально через scripts/build-publish-ui.ps1.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.25'
check-latest: true
- name: Build binary
run: |
FILENAME="ratatoskr-linux-amd64"
VERSION="commit-$(echo '${{ gitea.sha }}' | cut -c1-7)"
GOOS=linux GOARCH=amd64 \
go build -ldflags="-s -w -X main.version=${VERSION} -X main.updateToken=${{ secrets.TC_UPDATE_TOKEN }}" -o "${FILENAME}" ./cmd/ratatoskr/
echo "FILENAME=${FILENAME}" >> "${GITEA_ENV}"
echo "VERSION=${VERSION}" >> "${GITEA_ENV}"
- name: Show size
run: ls -lh "$FILENAME"
- name: Upload to Gitea Packages
if: gitea.ref == 'refs/heads/main'
run: |
SHA256_HEX=$(sha256sum "${FILENAME}" | awk '{print $1}')
# <filename>.version — идентификатор версии для авто-обновления
printf '%s' "${VERSION}" > "${FILENAME}.version"
# <filename>.sha256 — контрольная сумма бинаря (проверка U4)
printf '%s' "${SHA256_HEX}" > "${FILENAME}.sha256"
# Всё публикуется в КОНКРЕТНУЮ версию ${VERSION}, НЕ в псевдо-version "latest".
# "latest" в Gitea при параллельных PUT матрицы (6 платформ) переуказывается
# на каждый снимок — companion-файлы и бинарь разъезжаются, ломая checksum (U4).
for f in "${FILENAME}" "${FILENAME}.version" "${FILENAME}.sha256"; do
curl -sS -X PUT \
-H "Authorization: token ${{ secrets.TC_GITEA_TOKEN }}" \
-H "Content-Type: application/octet-stream" \
"${{ vars.GIT_MAIN_URL }}/api/packages/${{ gitea.actor }}/generic/ratatoskr/${VERSION}/${f}" \
--data-binary @"${f}"
done
echo "Published ${VERSION}/{binary,.version,.sha256}"