Files
pzmanager/.gitea/workflows/ci.yml
T
mrleo1nidandClaude Opus 5 49d549463a
CI / test (push) Successful in 56s
CI/CD в Gitea Actions и установка одной командой
Workflow CI гоняет gofmt, vet, тесты и сборку на каждый push в main;
workflow Release по тегу v* собирает бинарники под linux/amd64 и arm64,
считает контрольные суммы и публикует релиз через API Gitea.

Оба workflow забирают код через git, а не actions/checkout: это
JS-действие, которому нужен Node внутри контейнера, а в образе golang его
нет. Заодно сборка перестала зависеть от доступности github.com, что для
self-hosted инстанса существенно.

Скрипт deploy/get.sh ставит последний релиз одной командой: определяет
архитектуру, забирает файлы релиза, сверяет sha256 (бинарник ставится с
правами root) и передаёт управление install.sh. Обновление — та же
команда.

Версия сборки попадает в бинарник через ldflags, доступна как
`pzmanager version` и видна в панели на вкладке «Настройки»: без неё
нельзя понять, какой релиз стоит на сервере.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 19:27:30 +03:00

51 lines
1.8 KiB
YAML

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
# Собираем в официальном образе Go: версия компилятора фиксирована и
# совпадает с релизной сборкой.
container: golang:1.24
steps:
# Код забираем сами, а не через actions/checkout: это JS-действие, ему
# нужен Node внутри контейнера, которого в образе golang нет. Заодно
# сборка перестаёт зависеть от доступности github.com.
- name: Забрать код
env:
TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -eu
git config --global --add safe.directory "$PWD"
git init -q .
git remote add origin "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git"
git -c http.extraheader="Authorization: token ${TOKEN}" \
fetch --depth 1 origin "${GITHUB_SHA}"
git checkout -q FETCH_HEAD
- name: Проверить форматирование
run: |
unformatted="$(gofmt -l cmd internal web)"
if [ -n "$unformatted" ]; then
echo "Не отформатировано (запустите gofmt -w):"
echo "$unformatted"
exit 1
fi
- name: go vet
run: go vet ./...
- name: Тесты
run: go test ./...
- name: Проверить сборку под Linux
run: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /dev/null ./cmd/pzmanager
- name: Проверить синтаксис скриптов установки
run: bash -n deploy/install.sh && bash -n deploy/get.sh