Интерфейс к API
Документ описывает внешний HTTP-интерфейс компонентов altflow-api и altflow-api-lite.
Все прикладные запросы отправляются в JSON. Основной префикс маршрутов: /api-v1.
altflow-api использует авторизацию через внешний identity provider и выдаёт внутренний
токен Altflow. altflow-api-lite не имеет маршрутов /api-v1/auth/* и проверяет заранее
настроенный статический bearer-токен.
Авторизация
Получение токена Altflow
Доступно только в altflow-api.
Метод: POST
URL: /api-v1/auth/token
Заголовок:
Authorization: Bearer <identity-provider-token>
Успешный ответ:
{
"access_token": "<altflow-token>",
"refresh_token": null
}
Swagger UI использует отдельный callback route:
GET /api-v1/auth/docs
Запуск сборки
Метод: POST
URL: /api-v1/build
Заголовок:
Authorization: Bearer <altflow-token>
Минимальный запрос:
{
"image_arch": "amd64",
"git_url": "https://github.com/user/repo.git",
"image_path": "registry.example.org/project/image",
"registry_creds": "login:password",
"buildDockerfilePath": "./Dockerfile",
"buildContextPath": "."
}
Полный запрос с опциональными полями:
{
"image_arch": ["amd64", "arm64"],
"image_tag": ["latest", "1.0.0"],
"git_url": "https://github.com/user/repo.git",
"git_creds": "git-login:git-password",
"buildGitBranch": "master",
"gitDockerfileURL": "https://github.com/user/dockerfiles.git",
"gitDockerfileBranch": "master",
"image_path": "registry.example.org/project/image",
"registry_creds": "registry-login:registry-password",
"config_path": "/path/to/config.yaml",
"buildDockerfilePath": "images/app/Dockerfile",
"buildContextPath": ".",
"annotations": {
"org.opencontainers.image.source": "https://github.com/user/repo",
"org.opencontainers.image.version": "1.0.0"
},
"testEntrypoints": {
"amd64": [["rpm", "--eval", "%_host_cpu"]],
"all": [["nginx", "-v"]]
}
}
Поля:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
image_path | string | да | Путь в формате registry/image. Устаревший алиас: registry_name. Если в image_path указан тег через :, он добавляется в список тегов. |
image_arch | string или array[string] | да | Архитектуры. Допустимые значения: amd64, x86_64, arm64, aarch64, 386, i586, loongarch64, loong64, riscv64. Значения нормализуются к amd64, arm64, i586, loongarch64, riscv64. |
image_tag | string или array[string] | нет | До 10 тегов. Строка может содержать теги через запятую. Если тег указан в image_path, он добавляется к списку. В full API при отсутствии тегов добавляется latest; в altflow-api-lite пустой список тегов допустим. При пустом списке тегов стадия PUSH не публикует образ и подпись во внешний registry. |
git_url | string | да | HTTPS URL Git-репозитория. |
git_creds | string | нет | Учётные данные Git в формате login:password. |
buildGitBranch | string | нет | Ветка репозитория git_url. Если поле пустое, используется default branch репозитория. |
gitDockerfileURL | string | нет | HTTPS URL отдельного Git-репозитория с Dockerfile. Если поле пустое, Dockerfile берётся из git_url. |
gitDockerfileBranch | string | нет | Ветка репозитория gitDockerfileURL. Поле допустимо только вместе с gitDockerfileURL; если gitDockerfileURL пустой, API вернёт ошибку валидации. |
registry_creds | string | да | Учётные данные пользовательского registry в формате login:password. |
config_path | string | нет | Путь к пользовательскому конфигурационному файлу. |
buildDockerfilePath | string | да | Путь к Dockerfile. Если gitDockerfileURL пустой, путь считается относительно git_url; если задан gitDockerfileURL, путь считается относительно отдельного Dockerfile-репозитория. |
buildContextPath | string | нет | Контекст сборки внутри git_url. Если поле пустое и Dockerfile не вынесен в отдельный репозиторий, API берёт каталог, в котором находится Dockerfile, либо .. Если поле пустое и задан gitDockerfileURL, API ставит .. |
annotations | object<string,string> | нет | Дополнительные OCI annotations для собранного образа. Ключи и значения не должны содержать переводы строк; ключ не должен быть пустым, содержать = или управляющие символы. Зарезервированные ключи: org.opencontainers.image.created, org.altlinux.altflow.task-id, org.altlinux.altflow.builder. |
testEntrypoints | object<string,array[array[string]]> или array | нет | Команды стадии TEST. Основной формат — объект, где ключом является нормализованная архитектура или all, а значением список команд. Ключ all применяется ко всем архитектурам без собственного набора команд. Для совместимости API также принимает список команд и одну команду как array строк; такие значения нормализуются в all. Если поле пустое или отсутствует, TEST пропускается. Каждая команда выполняется в test job с timeout'ом из chart'а test-image (chartConfig.testTimeoutSeconds, по умолчанию 480 секунд). |
Правила расположения Dockerfile и context:
| Сценарий | Обязательные поля | Опциональные поля | Что откуда берётся |
|---|---|---|---|
| Dockerfile и context в одном репозитории | git_url, buildDockerfilePath | buildGitBranch, buildContextPath | Dockerfile и context берутся из git_url. |
| Dockerfile в отдельном репозитории, context в репозитории исходников | git_url, gitDockerfileURL, buildDockerfilePath | buildGitBranch, gitDockerfileBranch, buildContextPath | Dockerfile берётся из gitDockerfileURL, context всегда из git_url. |
gitDockerfileBranch зависит от gitDockerfileURL: branch без URL невалиден. buildContextPath не зависит от gitDockerfileURL и никогда не указывает на Dockerfile-репозиторий.
Успешный ответ:
{
"task_id": "01JBV2S4PGNV87EGC5WKYA0RND",
"status": "queued"
}
Типовые ошибки:
{"detail": "Invalid request data"}
При ошибке валидации API может вернуть уточнение, например:
{"detail": "Invalid request data: annotations contains reserved key 'org.altlinux.altflow.builder'"}
{"detail": "Unauthorized: the token is not valid"}
{"detail": "Unauthorized: the token has expired"}
Получение статуса сборки
Метод: GET
URL: /api-v1/builds/{task_id}
Заголовок:
Authorization: Bearer <altflow-token>
API читает stateEvents в TrackDB и возвращает историю состояний по taskId,
отсортированную по insertTime DESC.
Успешный ответ:
[
{
"eventTime": 1735678830,
"eventStage": "BUILD",
"eventStageState": "DONE",
"user": "alexander"
},
{
"eventTime": 1735678820,
"eventStage": "BUILD",
"eventStageState": "RUNNING",
"user": "alexander"
}
]
Если API уже выдал task_id, но TrackDB ещё не получил событие:
{
"status": "processing",
"warn": "TrackDB has not received the task yet. Please, try later or contact administrator"
}
Получение логов сборки
Метод: POST
URL: /api-v1/logs
Заголовок:
Authorization: Bearer <altflow-token>
Запрос:
{
"taskId": "01K5BYCRDA52QBGNTWX429JPDS",
"eventStage": "BUILD",
"start": "1758188000",
"end": "1758188779",
"since": "12h",
"limit": "2000",
"direction": "forward",
"format": "text"
}
Поля:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
taskId | string | да | ULID задачи. |
eventStage | string | нет | Один из BUILD, TEST, SIGN, PUSH, CLEANUP. Если не указан, API запрашивает логи всех стадий задачи. |
start | string | нет | Начало интервала для Loki. |
end | string | нет | Конец интервала для Loki. |
since | string | нет | Относительный интервал; используется если не указан start. |
limit | string | нет | Лимит записей. По умолчанию 100. |
direction | string | нет | backward или forward. По умолчанию backward. |
format | string | нет | json или text. По умолчанию json. |
API формирует Loki query по labels taskid и опционально eventStage, затем
возвращает либо исходный JSON result, либо текстовые строки логов.
Служебные маршруты
GET /alive
GET /ready
GET /metrics
GET /docs/
/metrics возвращает Prometheus metrics. Доступ к нему защищён отдельной проверкой
заголовка AUTH_METRICS, если она включена в middleware/deployment.