ci: 03-gftest и 04-cross-build на runs-on: armhf (cross-builder)

- 03-gftest: runs-on host → armhf; текст ошибки инструментов обобщён
  (build-essential вместо apk build-base)
- 04-cross-build: runs-on host → armhf; приёмка тулчейна остаётся
  реальной ARM-компиляцией + разбором e_machine

01-smoke/02-guardrails остаются на host (Alpine act_runner_tools) — не тронуты.
This commit is contained in:
Maxim
2026-07-15 13:12:52 +03:00
parent a4eab6296e
commit a66cc4408b
2 changed files with 20 additions and 23 deletions

View File

@@ -2,10 +2,11 @@
# Нативная (не кросс-) сборка group_fec.c с -DGF_SELFTEST через хостовый cc
# (makefile: цель gftest) и прогон самопроверки GF(256): 774 400 кейсов
# восстановления группового FEC 16+2. Модуль тянет только <string.h>/
# <stdint.h>/<stdio.h>/<stdlib.h> — компилируется и на musl.
# <stdint.h>/<stdio.h>/<stdlib.h> — компилируется любым gcc.
#
# Требует в образе runner: build-base (cc) + make. Пока их нет — job падает
# на шаге "Проверить инструменты" с понятным сообщением, а не посреди сборки.
# Идёт на runs-on: armhf — cross-builder несёт нативный x86 gcc (build-essential).
# Требует в образе: cc + make. Пока их нет — job падает на шаге "Проверить
# инструменты" с понятным сообщением, а не посреди сборки.
name: 03-gftest
@@ -23,18 +24,18 @@ defaults:
jobs:
gftest:
runs-on: host
runs-on: armhf
timeout-minutes: 5
steps:
- name: Проверить инструменты (реальная компиляция, не command -v)
# На Alpine/musl наличие файла ничего не доказывает (см. RUNNER-IMAGE.md
# про glibc-бинари без ld-linux) — поэтому здесь компилируем и запускаем
# крошечный .c, а не просто ищем cc/make на PATH.
# Наличие файла ничего не доказывает (glibc-бинарь без ld-linux даёт
# обманчивый not found) — поэтому компилируем и запускаем крошечный .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"
echo "ОШИБКА: '$t' нет в образе cross-раннера — build-essential в runner-image/Dockerfile"
exit 1
}
done

View File

@@ -1,16 +1,13 @@
# 04-cross-build — проверочный workflow. Приёмочный тест ARM-тулчейна в
# образе runner: пока он не заведён — job закономерно красный, и это его
# основная роль (по аналогии с их 04-toolchain).
# образе cross-раннера (по аналогии с их 04-toolchain).
#
# arm-linux-gnueabihf-gcc и статические либы $XARM собраны под glibc
# (build_deps.sh гоняется на Debian), а базовый образ act_runner — Alpine/
# musl. glibc-хостовый cross-gcc на musl не запустится вовсе, либо запустится,
# но даст бинарь, слинкованный не тем, чем ожидается — поэтому "файл лежит"
# и "command -v нашёл" ничего не доказывают (см. RUNNER-IMAGE.md про
# обманчивый "not found" без ld-linux). Доказательство здесь только одно:
# реальная кросс-компиляция крошечной программы + проверка машинного типа
# результата по ELF-заголовку (e_machine == EM_ARM), а затем настоящая
# сборка tx/rx/bench штатным make all.
# Идёт на runs-on: armhf — отдельный НАТИВНЫЙ x86-64 Debian-runner с
# arm-linux-gnueabihf-gcc (x86-бинарь, выдающий ARM-код; НЕ эмуляция) и
# прекомпилированными статическими либами $XARM. "Файл лежит" и "command -v
# нашёл" ничего не доказывают (glibc-бинарь без ld-linux даёт обманчивый
# not found) — поэтому доказательство здесь одно: реальная кросс-компиляция
# крошечной программы + проверка машинного типа результата по ELF-заголовку
# (e_machine == EM_ARM), а затем настоящая сборка tx/rx/bench штатным make all.
name: 04-cross-build
@@ -28,16 +25,15 @@ defaults:
jobs:
cross-build:
runs-on: host
runs-on: armhf
timeout-minutes: 15
steps:
- name: Проверить кросс-тулчейн (реальная ARM-компиляция, не command -v)
run: |
if ! command -v arm-linux-gnueabihf-gcc >/dev/null 2>&1; then
echo "ОШИБКА: arm-linux-gnueabihf-gcc нет в образе runner."
echo "Нужен отдельный flavor образа (Debian-база с gcc-arm-linux-gnueabihf"
echo "или Alpine + релокейтный prebuilt-тулчейн) — см. план в docs/."
echo "ОШИБКА: arm-linux-gnueabihf-gcc нет в образе cross-раннера (метка armhf)."
echo "Проверь runner-image/Dockerfile: пакет gcc-arm-linux-gnueabihf."
exit 1
fi