Интерфейс между API и Saver

API передаёт принятый build request компоненту Saver через RabbitMQ. Формат сообщения: JSON, content-type application/json, delivery mode persistent.

RabbitMQ

API объявляет durable queue из конфигурации amqp_queue_name, привязывает её к amqp_exchange с пустым routing key и публикует сообщение в этот же exchange с пустым routing key.

Если включён DLX, очередь создаётся с аргументами:

x-dead-letter-exchange = <amqp_dlx>
x-overflow = reject-publish-dlx

Saver потребляет эту очередь с manual ack/nack. При успешной записи данных в TrackDB, Secret Manager и публикации события для Distributor сообщение ack'ается. При ошибке сообщение nack'ается без requeue и уходит в DLX.

Payload API -> Saver

API принимает внешний BuildRequest, валидирует его и преобразует в SaverRequest. image_path разбивается на registry_name и image_name; user, user_gid и ulid добавляются API автоматически.

{
  "image_tag": ["latest", "1.0.0"],
  "image_arch": ["amd64", "arm64"],
  "config_path": "/path/to/config.yaml",
  "registry_name": "registry.example.org",
  "image_name": "project/image",
  "registry_creds": "registry-login:registry-password",
  "git_url": "https://github.com/user/repo.git",
  "git_creds": "git-login:git-password",
  "build_git_branch": "master",
  "build_context_path": ".",
  "build_dockerfile_path": "./Dockerfile",
  "test_entrypoints": [
    ["/app/altflow-tests/run"],
    ["nginx", "-v"]
  ],
  "user_gid": 200,
  "user": "alexander",
  "ulid": "01JBV2S4PGNV87EGC5WKYA0RND"
}

Поля:

ПолеТипОписание
image_tagarray[string]Теги образа. Если пользователь не указал тег, API добавляет latest.
image_archarray[string]Нормализованные архитектуры: amd64, arm64, i586, loongarch64, riscv64.
config_pathstringОпциональный путь к конфигурации сборки.
registry_namestringRegistry из image_path.
image_namestringИмя образа из image_path.
registry_credsstringУчётные данные registry в формате login:password.
git_urlstringHTTPS URL Git-репозитория.
git_credsstringОпциональные учётные данные Git в формате login:password.
build_git_branchstringОпциональная ветка Git.
build_context_pathstringКонтекст сборки.
build_dockerfile_pathstringПуть к Dockerfile.
test_entrypointsarray[array[string]]Команды для стадии TEST; пустой массив означает пропуск стадии.
user_gidnumberGID для TrackDB events: в full API используется 200, в lite API 100.
userstringПользователь, определённый API. В lite режиме используется системное значение registry.altlinux.org.
ulidstringULID задачи; в TrackDB пишется как taskId.

Дальнейшие действия Saver

После получения сообщения Saver:

  1. Разбирает git_creds и registry_creds на пары username/password.
  2. Сохраняет credentials задачи в Secret Manager по task id.
  3. Пишет исходное событие BUILD/NEW в TrackDB таблицу imageEvents.
  4. Публикует stage-event для Distributor в очередь distributor_queue.

Stage-event для Distributor описан в интерфейсе Stager/Distributor; Saver использует тот же формат для первичного события BUILD/NEW.