Перейти к содержимому

Политики хранения ​

Квоты, занятое место, политики хранения, их предпросмотр и запуск, очистка и удаление артефактов.

Операции этой группы с правилом доступа, правилом повтора, параметрами и ответами. Каждый запрос несёт ключ: Authorization: Bearer <ключ> (см. «Аутентификация»).

Операции ​

Проверить, можно ли удалить артефакт ​

GET HEAD /api/v1/repositories/{repository}/artifacts/{id}/deletion

Доступ: Право в репозитории: artifact.delete · Повтор: Можно повторять (чтение)

Возвращает имя артефакта, размер, время публикации, текущую annotationRevision и blockers, которые не дают его удалить: reference (внешняя ссылка или использование образом контейнера, Git LFS или npm), asset_history (текущая или прежняя ревизия пути файла), attachment_history или promotion_stage. Ничего не меняется; передайте ревизию в deleteArtifact как expectedAnnotationRevision.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
idпутьstring (uuid)да—

Ответ 200

ПолеТипОбязателенПравила
idstring (uuid)да—
namestringда1–240 символов
sizestringдацелое число десятичными цифрами, передаётся строкой
publishedAtstring (date-time)да—
annotationRevisionintegerда0–2147483647
blockersмассив stringдане больше 4 элементов; без повторов; каждый элемент: одно из reference, asset_history, attachment_history, protected_label, promotion_stage

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/artifacts/$ID/deletion" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Просмотреть кандидатов на удаление по правилам хранения ​

POST /api/v1/repositories/{repository}/retention/preview

Доступ: Право в репозитории: artifact.delete · Повтор: Можно повторять (чтение)

Перечисляет опубликованные артефакты, выпущенные до criteria.publishedBefore (момент в прошлом по UTC с миллисекундами), в порядке ID, каждый с ревизией аннотаций и препятствиями удалению (blockers); protected_label означает одну из criteria.protectedLabels (явный список до 32 меток). Страницы содержат limit элементов (1–100, по умолчанию 50); продолжайте с after, равным next. Ничего не резервируется: выберите элементы для удаления и передайте их с ревизиями в applyRetention, который проверит их заново.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Тело запроса (application/json)

ПолеТипОбязателенПравила
criteriaobjectда—
criteria.publishedBeforestring (date-time)дапо шаблону ^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$
criteria.protectedLabelsмассив stringдане больше 32 элементов; без повторов; каждый элемент: 1–64 символов
limitintegerнет1–100
afterstring (uuid)нет—

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectдане больше 100 элементов
items[].idstring (uuid)да—
items[].namestringда1–240 символов
items[].sizestringдацелое число десятичными цифрами, передаётся строкой
items[].publishedAtstring (date-time)да—
items[].annotationRevisionintegerда0–2147483647
items[].blockersмассив stringдане больше 4 элементов; без повторов; каждый элемент: одно из reference, asset_history, attachment_history, protected_label, promotion_stage
nextstring (uuid)даможет быть null

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/retention/preview" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"criteria":{"publishedBefore":"2026-01-01T00:00:00.000Z","protectedLabels":[]}}'

Удалить выбранных кандидатов по правилам хранения ​

POST /api/v1/repositories/{repository}/retention/apply

Доступ: Право в репозитории: artifact.delete · Повтор: Можно повторять: тот же запрос даёт тот же результат

Заново проверяет 1–100 артефактов, выбранных из previewRetention (items с id и expectedAnnotationRevision), по тем же criteria и логически удаляет подходящие одной транзакцией. Для каждого элемента возвращается outcome: deleted, already_deleted, changed (аннотации изменились), not_eligible (опубликован слишком поздно), protected с препятствиями или not_found. Байты остаются зарезервированными, пока их не освободит физическая очистка репозитория.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Тело запроса (application/json)

ПолеТипОбязателенПравила
criteriaobjectда—
criteria.publishedBeforestring (date-time)дапо шаблону ^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$
criteria.protectedLabelsмассив stringдане больше 32 элементов; без повторов; каждый элемент: 1–64 символов
itemsмассив objectда1–100 элементов
items[].idstring (uuid)да—
items[].expectedAnnotationRevisionintegerда0–2147483647

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectда1–100 элементов
items[].idstring (uuid)да—
items[].outcomestringдаодно из deleted, already_deleted, protected, changed, not_eligible, not_found
items[].blockersмассив stringдане больше 4 элементов; без повторов; каждый элемент: одно из reference, asset_history, attachment_history, protected_label, promotion_stage

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/retention/apply" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"criteria":{"publishedBefore":"2026-01-01T00:00:00.000Z","protectedLabels":[]},"items":[{"id":"00000000-0000-4000-8000-000000000000","expectedAnnotationRevision":0}]}'

Получить политику хранения ​

GET HEAD /api/v1/repositories/{repository}/storage/policy

Доступ: Право в репозитории: storage.read · Повтор: Можно повторять (чтение)

Возвращает настройки автоматического удаления сборок и квоты репозитория с их revision, следующий и последний запланированный запуск, число сборок, удалённых последним запуском, и его ошибку. По умолчанию политика выключена и квоты репозитория нет (общесерверная ёмкость при этом действует).

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
policyobjectда—
policy.enabledbooleanда—
policy.groupingstringдаодно из package-channel, package, repository
policy.keepLastintegerда1–100000
policy.channelsмассив objectдане больше 32 элементов
policy.channels[].labelstringда1–64 символов
policy.channels[].keepLastintegerда1–100000
policy.protectedLabelsмассив stringдане больше 32 элементов; без повторов; каждый элемент: 1–64 символов
policy.minAgeHoursintegerда0–87600
policy.intervalMinutesintegerда1–10080
policy.quotaBytesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
policy.warningPercentintegerда1–98
policy.criticalPercentintegerда2–99
nextRunAtstring (date-time)даможет быть null
lastRunAtstring (date-time)даможет быть null
lastDeletedintegerда0–100
lastErrorstringдане длиннее 64 символов; может быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/policy" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Заменить политику хранения ​

PUT /api/v1/repositories/{repository}/storage/policy

Доступ: Право в репозитории: storage.manage · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)

Заменяет политику целиком: хранить последние keepLast зарегистрированных сборок UPack на пакет, на метку канала (channels) или на репозиторий (grouping), никогда не удалять protectedLabels и сборки моложе minAgeHours, запускаться каждые intervalMinutes и ограничивать репозиторий значением quotaBytes (десятичная строка, null — без ограничения) с порогами предупреждения. expectedRevision должна быть текущей ревизией, иначе 409 revision_mismatch. Включение требует также artifact.delete и привязывает расписание к вызывающему управляемому ключу: когда этот ключ отозван, истёк или лишился этих прав, плановое удаление останавливается, пока политику не сохранят другим ключом. Обычные файлы учитываются в квоте, но по ней никогда не удаляются.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Тело запроса (application/json)

ПолеТипОбязателенПравила
expectedRevisionintegerда0–2147483647
policyobjectда—
policy.enabledbooleanда—
policy.groupingstringдаодно из package-channel, package, repository
policy.keepLastintegerда1–100000
policy.channelsмассив objectдане больше 32 элементов
policy.channels[].labelstringда1–64 символов
policy.channels[].keepLastintegerда1–100000
policy.protectedLabelsмассив stringдане больше 32 элементов; без повторов; каждый элемент: 1–64 символов
policy.minAgeHoursintegerда0–87600
policy.intervalMinutesintegerда1–10080
policy.quotaBytesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
policy.warningPercentintegerда1–98
policy.criticalPercentintegerда2–99

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
policyobjectда—
policy.enabledbooleanда—
policy.groupingstringдаодно из package-channel, package, repository
policy.keepLastintegerда1–100000
policy.channelsмассив objectдане больше 32 элементов
policy.channels[].labelstringда1–64 символов
policy.channels[].keepLastintegerда1–100000
policy.protectedLabelsмассив stringдане больше 32 элементов; без повторов; каждый элемент: 1–64 символов
policy.minAgeHoursintegerда0–87600
policy.intervalMinutesintegerда1–10080
policy.quotaBytesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
policy.warningPercentintegerда1–98
policy.criticalPercentintegerда2–99
nextRunAtstring (date-time)даможет быть null
lastRunAtstring (date-time)даможет быть null
lastDeletedintegerда0–100
lastErrorstringдане длиннее 64 символов; может быть null

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X PUT "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/policy" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0,"policy":{"enabled":false,"grouping":"package-channel","keepLast":1,"channels":[],"protectedLabels":[],"minAgeHours":0,"intervalMinutes":1,"quotaBytes":"1024","warningPercent":1,"criticalPercent":2}}'

Получить использование хранилища репозитория ​

GET HEAD /api/v1/repositories/{repository}/storage/usage

Доступ: Право в репозитории: storage.read · Повтор: Можно повторять (чтение)

Возвращает байты, зарезервированные репозиторием, десятичными строками: опубликованные, в незавершённых загрузках и выведенные из оборота (удалённые или отменённые, ещё не освобождённые), их сумму reservedBytes, квоту и состояние state (unlimited, normal, warning, critical, exceeded). Это логическое резервирование, учитываемое в квоте, а не занятое место на диске.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Ответ 200

ПолеТипОбязателенПравила
publishedBytesstringдацелое число десятичными цифрами, передаётся строкой
pendingBytesstringдацелое число десятичными цифрами, передаётся строкой
retiredBytesstringдацелое число десятичными цифрами, передаётся строкой
reservedBytesstringдацелое число десятичными цифрами, передаётся строкой
quotaBytesstringдацелое число десятичными цифрами, передаётся строкой; может быть null
statestringдаодно из unlimited, normal, warning, critical, exceeded

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/usage" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Просмотреть, что удалит политика хранения ​

GET HEAD /api/v1/repositories/{repository}/storage/preview

Доступ: Право в репозитории: artifact.delete · Повтор: Можно повторять (чтение)

Возвращает до 100 зарегистрированных сборок, которые сохранённая политика удалила бы сейчас (даже если она выключена), с revision политики и hasMore; сборки, защищённые ссылками, путями файлов, вложениями, защищёнными метками или возрастом, в список не входят. Ничего не резервируется: запуск ранжирует сборки заново.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
itemsмассив objectдане больше 100 элементов
items[].idstring (uuid)да—
items[].namestringдане длиннее 240 символов
items[].sizestringдацелое число десятичными цифрами, передаётся строкой
items[].publishedAtstring (date-time)да—
items[].annotationRevisionintegerда0–2147483647
items[].blockersмассив stringдане больше 0 элементов
hasMorebooleanда—

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/preview" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Запустить политику хранения сейчас ​

POST /api/v1/repositories/{repository}/storage/run

Доступ: Право в репозитории: storage.manage, artifact.delete · Повтор: Не повторять автоматически

Сразу выполняет одну пачку включённой политики, не дожидаясь расписания: заново ранжирует сборки, проверяет права и зависимости и логически удаляет до 100, возвращая результат по каждой. expectedRevision должна быть текущей ревизией политики, а политика — включена, иначе 409. Байты освобождаются позже физической очисткой репозитория, у которой своя политика (setCleanup).

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Тело запроса (application/json)

ПолеТипОбязателенПравила
expectedRevisionintegerда0–2147483647

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectдане больше 100 элементов
items[].idstring (uuid)да—
items[].outcomestringдаодно из deleted, already_deleted, protected, changed, not_eligible, not_found
items[].blockersмассив stringдане больше 4 элементов; каждый элемент: одно из reference, asset_history, attachment_history, protected_label, promotion_stage

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/run" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0}'

Перечислить события хранилища репозитория ​

GET HEAD /api/v1/repositories/{repository}/storage/events

Доступ: Право в репозитории: diagnostics.read · Повтор: Можно повторять (чтение)

Возвращает от старых к новым до 100 диагностических событий политик хранения, квот, правил хранения и очистки после номера after (по умолчанию 0), каждое с уровнем, кодом и несколькими подробностями; level (info, warning, error) фильтрует их, продолжайте с after, равным next. Хранятся только новейшие 1000 событий на репозиторий и 20 000 всего, поэтому для более долгого хранения экспортируйте их.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$
afterзапросstringнетцелое число десятичными цифрами, передаётся строкой
levelзапросstringнетодно из info, warning, error

Ответ 200

ПолеТипОбязателенПравила
itemsмассив objectдане больше 100 элементов
items[].sequencestringдацелое число десятичными цифрами, передаётся строкой
items[].occurredAtstring (date-time)да—
items[].levelstringдаодно из info, warning, error
items[].codestringдане длиннее 96 символов
items[].detailsсловарь string | integerдане больше 16 записей
nextstringдацелое число десятичными цифрами, передаётся строкой; может быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/events" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Получить настройки физической очистки ​

GET HEAD /api/v1/repositories/{repository}/storage/cleanup

Доступ: Право в репозитории: storage.read · Повтор: Можно повторять (чтение)

Возвращает политику физической очистки репозитория с её revision (enabled, graceHours, batchSize, intervalSeconds, delayMilliseconds), последний и следующий запуск, а также сколько объектов последняя пачка освободила, отложила или не смогла обработать и сколько байтов освобождено. Очистка физически удаляет отменённые загрузки и удалённые артефакты; по умолчанию она выключена.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
policyobjectда—
policy.enabledbooleanда—
policy.graceHoursintegerда0–8760
policy.batchSizeintegerда1–100
policy.intervalSecondsintegerда5–86400
policy.delayMillisecondsintegerда0–1000
lastRunAtstring (date-time)даможет быть null
nextRunAtstring (date-time)даможет быть null
lastCollectedintegerда0–100
lastDeferredintegerда0–100
lastFailedintegerда0–100
lastReclaimedBytesstringдацелое число десятичными цифрами, передаётся строкой
lastErrorstringдаможет быть null

Ответы: 200, 400, 401, 403, 404, 409, 422, 503, 507

Пример

bash
curl -X GET "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/cleanup" \
  -H "Authorization: Bearer $ARKVORY_TOKEN"

Настроить физическую очистку ​

PUT /api/v1/repositories/{repository}/storage/cleanup

Доступ: Право в репозитории: storage.manage · Повтор: Повтор только с ожидаемой ревизией (compare-and-swap)

Заменяет политику очистки на работающем сервере: enabled (также для приостановки), graceHours (0–8760, сколько часов удалённое содержимое лежит до удаления), batchSize (1–100 объектов), intervalSeconds (5–86400) и delayMilliseconds (0–1000 между объектами). expectedRevision должна быть текущей ревизией (0 до первого изменения), иначе 409 revision_mismatch. Изменение вступает в силу между объектами, но никогда посреди обработки объекта.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Тело запроса (application/json)

ПолеТипОбязателенПравила
expectedRevisionintegerда0–2147483647
policyobjectда—
policy.enabledbooleanда—
policy.graceHoursintegerда0–8760
policy.batchSizeintegerда1–100
policy.intervalSecondsintegerда5–86400
policy.delayMillisecondsintegerда0–1000

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
policyobjectда—
policy.enabledbooleanда—
policy.graceHoursintegerда0–8760
policy.batchSizeintegerда1–100
policy.intervalSecondsintegerда5–86400
policy.delayMillisecondsintegerда0–1000
lastRunAtstring (date-time)даможет быть null
nextRunAtstring (date-time)даможет быть null
lastCollectedintegerда0–100
lastDeferredintegerда0–100
lastFailedintegerда0–100
lastReclaimedBytesstringдацелое число десятичными цифрами, передаётся строкой
lastErrorstringдаможет быть null

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X PUT "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/cleanup" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0,"policy":{"enabled":false,"graceHours":0,"batchSize":1,"intervalSeconds":5,"delayMilliseconds":0}}'

Запросить пачку очистки сейчас ​

POST /api/v1/repositories/{repository}/storage/cleanup/run

Доступ: Право в репозитории: storage.manage · Повтор: Не повторять автоматически

Планирует немедленный запуск следующей пачки включённой политики очистки; ответ — состояние очистки, а байты освобождаются только после выполнения пачки (см. lastRunAt в getCleanup). expectedRevision должна быть текущей ревизией; выключенная очистка — 409 state_conflict. Объекты, которые читаются или записываются, откладываются до следующей пачки.

Параметры

ИмяГдеТипОбязателенПравила
repositoryпутьstringдапо шаблону ^[a-z0-9][a-z0-9_-]{0,63}$

Тело запроса (application/json)

ПолеТипОбязателенПравила
expectedRevisionintegerда0–2147483647

Ответ 200

ПолеТипОбязателенПравила
revisionintegerда0–2147483647
policyobjectда—
policy.enabledbooleanда—
policy.graceHoursintegerда0–8760
policy.batchSizeintegerда1–100
policy.intervalSecondsintegerда5–86400
policy.delayMillisecondsintegerда0–1000
lastRunAtstring (date-time)даможет быть null
nextRunAtstring (date-time)даможет быть null
lastCollectedintegerда0–100
lastDeferredintegerда0–100
lastFailedintegerда0–100
lastReclaimedBytesstringдацелое число десятичными цифрами, передаётся строкой
lastErrorstringдаможет быть null

Ответы: 200, 400, 401, 403, 404, 405, 409, 413, 415, 422, 503, 507

Пример

bash
curl -X POST "$ARKVORY_URL/api/v1/repositories/$REPOSITORY/storage/cleanup/run" \
  -H "Authorization: Bearer $ARKVORY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0}'

Arkvory · ProAnimaStudio