Skip to content

Latest commit

 

History

History
84 lines (58 loc) · 16.4 KB

CI.md

File metadata and controls

84 lines (58 loc) · 16.4 KB

Проверки в CI

Workflow Arkvory gates запускается при push в main и тегах v*, pull request, merge queue, еженедельно (понедельник 02:20 UTC) и вручную. Actions закреплены по commit SHA, доступ — contents: read, credentials checkout не сохраняются. Deploy не выполняется. Команды, тайм-ауты, зависимости и тестовые входы определяет config/gates.json; policy проверяет, что каждый гейт реестра выполняется в CI.

Образы runner’ов

Все jobs используют образы с явной версией: ubuntu-22.04, ubuntu-24.04, windows-2022, windows-2025. Метки *-latest запрещены policy (scripts/policy/runners.mjs) в check и release workflow: GitHub переводит ubuntu-latest на Ubuntu 26 с 2026-10-19, и смена ядра, Docker, shell и системных пакетов не должна незаметно менять гейты. Переход на новый образ — отдельное изменение workflow с прогоном всех lanes.

Lanes

Проверки quick, упаковки и служб выполняются в независимых обязательных заданиях на каждой из четырёх ОС. У каждого задания собственный лимит 15 минут и чистая сборка; лимиты гейтов в config/gates.json не меняются. Это исключает отмену служб из-за времени, уже потраченного quick и упаковкой. Merge gate требует все три матрицы; пропуск ОС или задания запрещён policy.

Job Runner Команда Когда
check (Quality) ubuntu-22.04, ubuntu-24.04, windows-2022/5 npm run gate -- quick всегда
deployment ubuntu-22.04, ubuntu-24.04, windows-2022/5 npm run gate -- deployment всегда
deployment-services ubuntu-22.04, ubuntu-24.04, windows-2022/5 npm run gate -- deployment-services всегда
native ubuntu-24.04, windows-2022 npm run gate -- native-install (включает native-package) всегда
integration ubuntu-24.04 + PostgreSQL 18.4 npm run gate -- integration всегда
browser ubuntu-24.04 + PostgreSQL 18.4 npm run gate -- browser всегда
security ubuntu-24.04 npm run gate -- security всегда
deployment-containers ubuntu-24.04 (Docker Engine) npm run gate -- deployment-containers всегда
stand ubuntu-24.04 (Docker Engine) npm run gate -- deployment-stand (включает native-package): два сайта и обновление с последнего релиза всегда
nas ubuntu-24.04 (Docker Engine) modprobe cifs nfs nfsd, затем npm run gate -- deployment-nas всегда
ha-base ubuntu-24.04 (KVM, libvirt) node scripts/ha-base-image.mjs: образ гостя с DRBD 9 и Pacemaker в кеше Actions всегда
ha-failures, ha-power, ha-operations, ha-three ubuntu-24.04 (KVM, libvirt) npm run gate -- deployment-ha, deployment-ha-power, deployment-ha-operations, deployment-ha-three (ADR 0072) всегда
large ubuntu-24.04 + PostgreSQL 18.4, ×2 npm run gate -- large-full / large-multipart push в main, v*, merge queue, schedule, ручной large_transfers=true
verdict ubuntu-24.04 node scripts/ci-verdict.mjs всегда

Обязательны все lanes, кроме large. Итоговый Arkvory merge gate (verdict) запускается всегда и блокирует результат при missing/failed/cancelled/skipped любого обязательного job. Для push в main, v*, merge queue, расписания и ручного запуска с large_transfers он требует также оба сценария 5 GiB. Обычный pull request может пропустить только large.

Сценарии 5 GiB: large-full (полная передача) и large-multipart (--multipart --verified --traffic --managed, убийство сервера на середине загрузки, resume, Range, SHA-256, RSS клиента/сервера). В check workflow они идут на двух независимых runner’ах. Release workflow их не повторяет: допуск требует успешных обоих заданий в запуске check.yml для того же коммита.

Windows lanes не запускают deployment-containers: на GitHub-hosted Windows нет Linux containers. Контейнерный gate на Windows выполняется локально на хосте с Docker Desktop (см. ниже).

Release workflow

Prepare stable release запускается вручную только с main. admission (node scripts/release-admission.mjs, токен только actions: read) требует успешный запуск check.yml для GITHUB_SHA на push или merge queue в main с Arkvory merge gate и обоими сценариями 5 GiB. Гейты release-профиля здесь не повторяются: их стенды (KVM, модули ядра, одноразовые Windows-службы) готовит только check.yml, поэтому прежний npm run gate -- release в одном job пройти не мог. build (ubuntu-24.04) после допуска выполняет npm run build и собирает один candidate; acceptance на четырёх ОС проверяет этот candidate через deployment deployment-services, а на Linux дополнительно deployment-containers; native (ubuntu-24.04, windows-2022) — native-install; publish повторно проверяет допуск и хеши и создаёт draft. Подробности: ENGINEERING_GATES.

Локальный конвейер

Без GitHub Actions те же lanes выполняются на машине сопровождающего (Windows + Docker Desktop, либо Linux + Docker Engine без windows-lane). Решение и границы: ADR 0053.

npm run ci:local                # verify: все lanes, нужен чистый коммит
npm run ci:local -- release     # плюс оба сценария 5 GiB
npm run ci:local -- --allow-dirty --lane linux,linux-system
npm run release:local -- 1.2.3 --dry-run
npm run release:local -- 1.2.3  # черновик релиза на GitHub
Lane Где Гейты (verify)
windows хост, рабочее дерево; БД npm run test:db:up static, unit, security, integration, browser, deployment, deployment-containers, native-package (+ 5 GiB в release)
linux контейнер scripts/ci/linux.Dockerfile + PostgreSQL 18.4 static, unit, integration, browser, deployment
linux-system одноразовый контейнер с systemd native-package, deployment-services, native-install, deployment-stand

Не выполняются локально (gap): Windows deployment-services и native-install — они ставят службы и пакет на машину; deployment-nas и deployment-ha* на обеих платформах (HA — гостевые ВМ KVM со своим ядром для DRBD) — монтирование SMB и NFS требует модулей ядра cifs, nfs, nfsd на хосте Docker, а гейты не загружают модули ядра на машине разработчика; Linux deployment-containers — Docker Desktop отдаёт файлы Windows без владельцев POSIX, поэтому bind mount с uid 1000 (vault Compose) на Linux-хосте ведёт себя иначе и проверяется только в GitHub Actions. Покрыты другим lane: Linux security, оба сценария 5 GiB. Полнота плана проверяется tests/local-ci.test.mjs: новый гейт в config/gates.json без lane или явного объявления роняет unit-гейт.

Контейнерные lanes тестируют коммит через git bundle. С --allow-dirty они тестируют снимок рабочего дерева (временный индекс; HEAD, индекс и stash не меняются), а evidence помечено dirty. Итог: test-results/local-ci/<commit>-<profile>/evidence.{json,md} и отчёты гейтов по lanes. Первый запуск собирает образ (Ubuntu по digest, Node.js из закреплённого архива поставки, Chromium Playwright) и скачивает нативные зависимости. Потом используются тома arkvory-ci-npm и arkvory-ci-native. --keep-containers оставляет контейнеры для разбора.

release:local создаёт только черновик:

  1. Проверяет main, чистое дерево, HEAD = origin/main (сначала push), gh auth, право записи, отсутствие тега и релиза, версию выше опубликованных.
  2. Через gh api требует успешный запуск check.yml для того же коммита (push или merge queue в main). В нём успешны merge gate, оба сценария 5 GiB и все задания, которые выполняют локальные пробелы. Без этого реальный выпуск останавливается до локальных гейтов; --dry-run только предупреждает.
  3. Берёт свежее evidence release-профиля с localPassed (--reuse-evidence) или запускает его. releasable = localPassed + покрытие пробелов в CI. Запуск CI (id, ссылка) записывается в evidence и заметки.
  4. Упаковывает один candidate в artifacts/<версия>.
  5. Принимает его на Windows и в systemd-контейнере.
  6. Сверяет хеши.
  7. Создаёт gh release create --draft --target <sha> с проверенными файлами, arkvory-local-ci-evidence.json и заметками о пробелах.

Опубликовать черновик на GitHub нужно вручную. До публикации автообновление его не видит.

Состояние GitHub Actions

До вечера 2026-10-01 jobs репозитория падали до первого шага из-за проблемы с биллингом аккаунта GitHub, а не из-за кода. На это время обязательные проверки выполнял локальный конвейер выше. После восстановления биллинга полный merge gate прошёл для 46887cb (run 36909146811), включая Windows-службы и нативный установщик. Первый релиз v0.2.0 собран и принят локальным конвейером (release:local) и опубликован после того же зелёного merge gate.

Если Actions снова станут недоступны, обязательные проверки выполняет npm run ci:local, а PR перечисляет фактически выполненные и невыполненные гейты.

Отчёты

Каждая job публикует итог в logs и job summary даже после ошибки. Архивы test-results загружаются только при repository variable ARKVORY_UPLOAD_ARTIFACTS=true; это дополнительный канал, который требует свободной квоты GitHub. Подробности и локальные эквиваленты: ENGINEERING_GATES.

Окружение — Node.js 24 LTS, npm 11. Измерения локального стенда, запуск. Сценарии HA (ADR 0072) подтверждают jobs ha-* на гостевых ВМ KVM с fence_virsh; агент fencing конкретной площадки (IPMI, Redfish, PDU, гипервизор) ими не проверяется и доказывается на месте arkvory cluster-fence-test.