跳到正文

存储策略与保留 ​

配额、用量、保留策略及其预览和运行、物理清理以及制品删除。

本组中的操作及其访问规则、重试规则、参数和响应。每个请求都需携带密钥: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。不会改变任何内容;把该修订版本作为 expectedAnnotationRevision 传给 deleteArtifact。

参数

名称位置类型必需规则
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 排序,每项包含其注解修订版本和阻止项,其中 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 · 重试: 可安全重试:相同的请求效果相同

按同一组 criteria 重新检查从 previewRetention 中选出的 1–100 个制品(items,含 id 和 expectedAnnotationRevision),并在一个事务中逻辑删除符合条件者。每项都会得到一个 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)

替换整个策略:按包、按渠道标签(channels)或按仓库(grouping)保留最近 keepLast 个已注册的 UPack 构建,永不删除 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 · 重试: 可安全重试(读取)

按从旧到新的顺序,返回序号 after(默认 0)之后的最多 100 条存储策略、配额、保留和物理清理的诊断事件,每条包含级别、代码和少量详细信息;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 · 重试: 请勿自动重试

安排已启用的清理策略的下一个批次立即开始;响应为清理状态,只有批次运行之后字节才会被释放(参见 getCleanup 中的 lastRunAt)。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