Интерфейс к 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_pathstringдаПуть в формате registry/image. Устаревший алиас: registry_name. Если в image_path указан тег через :, он добавляется в список тегов.
image_archstring или array[string]даАрхитектуры. Допустимые значения: amd64, x86_64, arm64, aarch64, 386, i586, loongarch64, loong64, riscv64. Значения нормализуются к amd64, arm64, i586, loongarch64, riscv64.
image_tagstring или array[string]нетДо 10 тегов. Строка может содержать теги через запятую. Если тег указан в image_path, он добавляется к списку. В full API при отсутствии тегов добавляется latest; в altflow-api-lite пустой список тегов допустим. При пустом списке тегов стадия PUSH не публикует образ и подпись во внешний registry.
git_urlstringдаHTTPS URL Git-репозитория.
git_credsstringнетУчётные данные Git в формате login:password.
buildGitBranchstringнетВетка репозитория git_url. Если поле пустое, используется default branch репозитория.
gitDockerfileURLstringнетHTTPS URL отдельного Git-репозитория с Dockerfile. Если поле пустое, Dockerfile берётся из git_url.
gitDockerfileBranchstringнетВетка репозитория gitDockerfileURL. Поле допустимо только вместе с gitDockerfileURL; если gitDockerfileURL пустой, API вернёт ошибку валидации.
registry_credsstringдаУчётные данные пользовательского registry в формате login:password.
config_pathstringнетПуть к пользовательскому конфигурационному файлу.
buildDockerfilePathstringдаПуть к Dockerfile. Если gitDockerfileURL пустой, путь считается относительно git_url; если задан gitDockerfileURL, путь считается относительно отдельного Dockerfile-репозитория.
buildContextPathstringнетКонтекст сборки внутри git_url. Если поле пустое и Dockerfile не вынесен в отдельный репозиторий, API берёт каталог, в котором находится Dockerfile, либо .. Если поле пустое и задан gitDockerfileURL, API ставит ..
annotationsobject<string,string>нетДополнительные OCI annotations для собранного образа. Ключи и значения не должны содержать переводы строк; ключ не должен быть пустым, содержать = или управляющие символы. Зарезервированные ключи: org.opencontainers.image.created, org.altlinux.altflow.task-id, org.altlinux.altflow.builder.
testEntrypointsobject<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, buildDockerfilePathbuildGitBranch, buildContextPathDockerfile и context берутся из git_url.
Dockerfile в отдельном репозитории, context в репозитории исходниковgit_url, gitDockerfileURL, buildDockerfilePathbuildGitBranch, gitDockerfileBranch, buildContextPathDockerfile берётся из 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"
}

Поля:

ПолеТипОбязательноеОписание
taskIdstringдаULID задачи.
eventStagestringнетОдин из BUILD, TEST, SIGN, PUSH, CLEANUP. Если не указан, API запрашивает логи всех стадий задачи.
startstringнетНачало интервала для Loki.
endstringнетКонец интервала для Loki.
sincestringнетОтносительный интервал; используется если не указан start.
limitstringнетЛимит записей. По умолчанию 100.
directionstringнетbackward или forward. По умолчанию backward.
formatstringнет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.