Files
Pluto-SDR/.gitea/workflows/03-gftest.yml
Maxim a4eab6296e ci: offline-тесты на Gitea runner (smoke/guardrails/gftest/cross-build)
Четыре workflow по образу и подобию runner-tests/examples, уровень C:
- 01-smoke — runner жив, какие инструменты/либы есть в образе
- 02-guardrails — grep-страж жёстких правил CLAUDE.md (rate 1920000,
  header_len=12 на TX и RX, только local:, static/ARM-флаги, нет тяжёлых
  зависимостей); логика в scripts/ci_guardrails.sh, гоняется и локально
- 03-gftest — make gftest: нативная (не кросс-) сборка group_fec.c
  с -DGF_SELFTEST, 774 400 кейсов GF(256)
- 04-cross-build — make check-env && make all под armhf; приёмка
  ARM-тулчейна проверяется реальной компиляцией + разбором e_machine
  из ELF-заголовка (od), а не command -v — на Alpine/musl наличие
  файла ничего не доказывает, если это glibc-бинарь без ld-linux

E2E по радио и деплой на платы сознательно вне CI — нужны две живые
Pluto-платы, это остаётся ручным чек-листом (scripts/test_file_link.sh).
2026-07-15 10:32:38 +03:00

62 lines
2.4 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.

# 03-gftest — проверочный workflow.
# Нативная (не кросс-) сборка group_fec.c с -DGF_SELFTEST через хостовый cc
# (makefile: цель gftest) и прогон самопроверки GF(256): 774 400 кейсов
# восстановления группового FEC 16+2. Модуль тянет только <string.h>/
# <stdint.h>/<stdio.h>/<stdlib.h> — компилируется и на musl.
#
# Требует в образе runner: build-base (cc) + make. Пока их нет — job падает
# на шаге "Проверить инструменты" с понятным сообщением, а не посреди сборки.
name: 03-gftest
on:
push:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
gftest:
runs-on: host
timeout-minutes: 5
steps:
- name: Проверить инструменты (реальная компиляция, не command -v)
# На Alpine/musl наличие файла ничего не доказывает (см. RUNNER-IMAGE.md
# про glibc-бинари без ld-linux) — поэтому здесь компилируем и запускаем
# крошечный .c, а не просто ищем cc/make на PATH.
run: |
for t in cc make; do
command -v "$t" >/dev/null 2>&1 || {
echo "ОШИБКА: '$t' нет в образе runner — apk add build-base make в runner-image/Dockerfile"
exit 1
}
done
tmp=$(mktemp -d)
printf 'int main(void){return 42-42;}\n' > "$tmp/probe.c"
cc -O2 "$tmp/probe.c" -o "$tmp/probe"
"$tmp/probe"
echo "OK: cc реально компилирует и линкует исполняемый файл"
rm -rf "$tmp"
- name: Получить код репозитория
env:
REPO_TOKEN: ${{ github.token }}
run: |
rm -rf repo
git clone --quiet "http://x-access-token:${REPO_TOKEN}@localhost:3000/${GITHUB_REPOSITORY}.git" repo
git -C repo checkout --quiet "$GITHUB_SHA"
- name: make gftest (774 400 кейсов GF(256))
run: make -C repo gftest
- name: Убрать за собой
if: always()
run: rm -rf repo