Дока хостится на сервере как набор статических файлов.
Деплоим автоматически, при слиянии пул-реквеста в ветку main в репозитории content или platform.
Проект собирается с помощью GitHub Actions.
В каждом репозитории описан свой воркфлоу для сборки:
- Воркфлоу контента — один сплошной проход: скачать, установить, собрать, отправить на сервер;
- Воркфлоу платформы — три джобы, описаны ниже.
Сайт собирается один раз, а результат разъезжается по джобам артефактами. Раньше его собирали дважды: отдельно для публикации и отдельно для проверки разметки.
- Сборка — переиспользуемый build-site.yml: скачивает контент и кеш, ставит зависимости, подключает статьи симлинками, собирает проект. Выкладывает два артефакта: полный
site-distдля публикации и маленькийsite-htmlтолько со страницами — валидатору картинки не нужны. Рядом кладёт опись: контрольная сумма архива, число файлов и число страниц. - Валидация разметки — берёт
site-htmlи прогоняет W3C-валидатор. - Публикация — берёт
site-dist, сверяет опись и отправляет на сервер.
Публикация зависит только от сборки, но не от валидации: красная разметка выкатку не останавливает.
Публикация идёт через rsync с удалением лишнего, поэтому неполный артефакт опаснее упавшего деплоя: он не оставит старую версию, а сотрёт недостающее. Защита в три рубежа:
- Сверка описи до распаковки. Не сошлась контрольная сумма — деплой не начинается. После распаковки сверяется число файлов, плюс отбивается сборка, выдавшая неправдоподобно мало страниц.
- Удаление только после передачи (
--delete-after). Если передача оборвётся, не удалится ничего: на сервере останется прежняя версия плюс частично долитая новая. - Предел на удаление (
--max-delete), посчитанный от размера сборки. Если удаляемого неправдоподобно много,rsyncпрерывается и не вычищает сайт.
На стороне сервера не происходит никаких действий, кроме публикации переданной папки со сборкой.
Отдельный воркфлоу docker-deploy.yml собирает образ под две архитектуры, каждую на своём нативном раннере, и уже потом навешивает тег на общий манифест. Через эмуляцию QEMU сборка под arm64 падала через раз.