- Python 95%
- Shell 5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
Testing / build_new_org_images_pr (push) Has been skipped
Testing / check_altflow_test_files (push) Has been cancelled
Testing / test_org_configs (push) Has been cancelled
Testing / test_altflow (push) Has been cancelled
Testing / test_renderer (push) Has been cancelled
Testing / test_repoteka (push) Has been cancelled
Testing / build_new_org_images_main (push) Has been cancelled
Reviewed-on: #35 |
||
| .ash | ||
| .forgejo/workflows | ||
| cfg | ||
| core | ||
| docs | ||
| org | ||
| tests | ||
| .gitignore | ||
| book.toml | ||
| config.py | ||
| flowforge.py | ||
| LICENSE | ||
| README.md | ||
flowforge
NOTICE Репозиторий архивирован из-за переноса основной разработки в cloud/flowforge
Сборщик OCI-образов, который использует altflow/altflow как backend, а repoteka в качестве инструмента проверки обновлений бинарных пакетов. Концепция работы altflow описана в документации altflow.
Проект во многом вдохновлён cloud/image-forge. Цели:
- автоматизировать процесс сборки OCI-образов для целевого
Registry; - дать широкому кругу контрибьютеров понятный алгоритм, чтобы они могли участвовать в добавлении новых
восстребованных образов в автоматизированный пайплайн
flowforge.
Полная документация проекта flowforge
Периодическая пересборка образов
Flowforge CI с заданной периодичностью сравнивает зафиксированные в репозитории версии бинарных пакетов с
актуальной информацией от repoteka.mskdc.altlinux.org. Образы, бинарные пакеты которых обнововились, отправляются
на пересборку. Образы, чьи source-образы обновились, также отправляются на пересборку.
Состояние последних успешно обработанных сборок хранится в ветках *-artefacts.
Там же хранится служебное состояние пересборок, вызванных обновлением source-образов.
Подробнее об этом написано в org/README.md.
Участие в добавлении новых образов в flowforge
Вы имеете право предложить новые образы в автоматизированный пайплайн flowforge. В первую очередь заведите новую
задачу в Issues (Задачах) репозитория с обоснованием необходимости добавления новых образов.
После появления задачи либо один из контрибьютеров flowforge может согласиться её выполнить, либо вы можете
выполнить задачу самостоятельно. В последнем случае следуйте инструкции:
- Сделайте форк текущего репозитория.
- Дополните одну или несколько организаций каталога
org/спецификациями новых образов, которые вы предлагаете добавить. Спецификация образа содержит:
- Dockerfile.template
- altflow-test
- info.yaml *
- README.md (желательно)
- Сделайте Pull Request (PR) в ветку main данного основного репозитория.
- Дождитесь выполнения тестов. На этом этапе
flowforgeзапустит тестовую сборку образов по вашим спецификациям. Если тестовая сборка завершится красными индикаторами, изучите логи сборки в PR и поправьте ошибки в файлах спецификации. - Когда PR успешно прошёл полный prepare-deploy цикл подключаются администраторы репозитория. Поправьте ваши коммиты по их замечаниям.
- При выполнении всех условий администратор отправляет ваши коммиты в ветку main.
- CI flowforge автоматически запустит сборку образов и отправит их в целевой
Registry.
Примечание: Рекомендуем изучить корректное заполнении info.yaml и правила создания distroless-образов на базе flowforge в полной документации проекта.
Поддержка архитектур
В настоящее время поддерживаются следующие архитектуры: x86_64, aarch64, i586, loongarch64, riscv64
Данное ограничение связано с возможностями сборочницы OCI-образов altflow.
Локальная разработка
Основные положения
PR с функциональными изменениями скорее всего не будут приняты. Исключения возможны.
- Если есть предложение по улучшению, создайте Issue и опишите его.
- Если есть багрепорт, создайте Issue с описанием проблемы. Будет полезно, если вы опишете способ воспроизведения.
- [В БУДУЩЕМ] Если PR не выглядит poorly vibecoded, изменения с использованием AI могут быть приняты. AI можно использовать для PR, но будьте готовы обсуждать и защищать каждое предложенное изменение.
Ожидаемые рабочие конфигурации
Организации: alt, base, k8s-core, k8s-extra, kubevirt
Архитектуры: amd64, arm64
Ветки: sisyphus
Зависимости
python3-module-aiohttppython3-module-pydanticpython3-module-pydantic-settingspython3-module-logurupython3-module-jinja2python3-module-yaml
Использование
Переменные среды, которые использует скрипт:
DRY-> включает dry-run режимTEST-> отправляет задания в altflow без тегов. Финальный push в registry становится фиктивнымEMAIL_NOTIFICATION-> включает email-уведомления об ошибках сборкиEMAIL_TO-> список получателей email-уведомлений. Можно перечислять через запятую или пробелLOG_LEVEL-> уровень логированияALTFLOW_URL-> URL экземпляра altflowALTFLOW_AUTH-> токен авторизации для altflowSOT_REPO-> Source Of Truth репозиторий. Из этого репозитория altflow забирает спецификацию образаSOT_BRANCH-> Source Of Truth ветка. В неё рендерятся Dockerfile перед тем, как altflow их прочитаетSOT_FORCE_PUSH-> разрешает force push вSOT_BRANCHREGISTRY_URL-> адрес целевого registryREGISTRY_AUTH-> авторизация дляREGISTRY_URLSOURCE_REGISTRY-> registry, из которого берутся базовые образыREPOTEKA_URL-> URL экземпляра repotekaREPOTEKA_COMPONENT-> компонент repotekaREPOTEKA_SSL_VERIFY-> включает SSL verify для запросов в repotekaREPOTEKA_CONCURRENCY-> максимальное количество одновременных запросов к repotekaSMTP_SERVER-> SMTP-сервер для email-уведомленийSMTP_PORT-> SMTP-порт для email-уведомленийSMTP_FROM-> адрес отправителя email-уведомленийSMTP_USERNAME-> SMTP-пользователь для email-уведомленийSMTP_PASSWORD-> SMTP-пароль для email-уведомленийSMTP_SSL-> включает implicit TLS для SMTP. Для порта465включается автоматически
Подробнее в config.py
Доступные CLI-аргументы:
$ ./flowforge.py --help
Или можно посмотреть их в flowforge.py
Собрать один образ:
$ ./flowforge.py -i alt/redis
Собрать группу образов организации:
$ ./flowforge.py -o alt
Принудительно пересобрать образ, даже если сохранённые артефакты показывают, что он актуален:
$ ./flowforge.py -f -i alt/redis
Флаг -f не делает reset ветки *-artefacts, но весь выбранный набор образов проходит обычный цикл сборки
с учётом уровней source_images. Dockerfile.<branch> заново рендерится и пушится в SOT_BRANCH, а после
успешной сборки обновляется соответствующий info.*.yaml. Если в выбранном наборе есть source-образы и
зависимые от них образы, artefacts-состояние обновится для обеих групп.
Отправить тестовую сборку без публикации тегов в registry:
$ TEST=1 ./flowforge.py -i alt/redis
Все примеры предполагают, что нужные переменные среды уже экспортированы.
Source Of Truth ветка
flowforge не отправляет локальное содержимое Dockerfile напрямую в altflow. Он рендерит Dockerfile.<branch>
в SOT_BRANCH, пушит эту ветку, а затем отправляет в altflow SOT_REPO, SOT_BRANCH и путь к Dockerfile.
Если SOT_BRANCH не задана, она вычисляется как <current-branch>-artefacts.
Подробнее о роли *-artefacts, info.*.yaml и PR-веток ci/pr-<number>-artefacts написано в
org/README.md.
CI secrets
CI jobs используют secret FLOWFORGE_CI_TOKEN, чтобы пушить PR artefacts-ветки в altlinux.space.
Токену нужны права repository read/write. Для cron rebuild используется FORGEJO_AUTH.
Доступ к registry передаётся отдельно через REGISTRY_AUTH.
Если включены email-уведомления, SMTP может работать в трёх режимах:
- plain SMTP без
STARTTLS; - SMTP с
STARTTLS, если сервер объявляет такую возможность; - implicit TLS через
SMTP_SSL=1или порт465.
Если EMAIL_TO не задан, уведомления никому не отправляются.
Если SMTP_FROM не задан, используется SMTP_USERNAME; если не задано и оно, email-уведомления отключаются.