Для AI-агентов: markdown этой страницы — /docs-content/source-storage/retention.md индекс документации — /llms.txt
Срок жизни версий и очистка
Сколько живёт сохранённая версия, какие версии платформа бережёт всегда, что происходит с исходниками удалённого сервера и как снимки выглядят в объектном хранилище.
Обзор хранилища и справочник эндпоинтов — Хранилище исходного кода.
Срок жизни версий (политика хранения)
После сохранения версия проходит через автоматическую очистку по графику «дед-отец-сын» (Grandfather-Father-Son):
- Последние 5 версий хранятся всегда, независимо от тегов.
- Дневная сетка за 14 дней — одна версия на каждый календарный день (UTC).
- Недельная сетка за 4 недели — одна версия на каждые 7 дней.
- Версии с тегом
publishedилиmanual— хранятся бессрочно, никогда не удаляются автоматически.
Для пользовательской очистки на запрос — POST /v1/apps/:id/sources/cleanup. Версии с тегами published и manual исключаются и из неё.
Автоматическая очистка выполняется раз в сутки по расписанию, а не в момент сохранения новой версии или удаления сервера. Версия, попавшая под правила выше, остаётся видимой до ближайшего суточного прогона.
Версии удалённого сервера
Исходники переживают сервер: после DELETE /v1/infra/servers/:id версии остаются на месте и доступны для просмотра и скачивания.
Что происходит с объектами удалённого сервера:
- Версии сохраняются — удаление сервера их не трогает. Автоматическая очистка продолжает применять к ним обычную политику хранения, описанную выше.
- Указатель на последнюю версию снимает суточная очистка — объект
source/current.<расширение>остаётся видимым в хранилище до ближайшего прогона. Что это за объект — раздел «Снимки в объектном хранилище» ниже.
Если версии удалённого сервера больше не нужны, уберите их вручную. Действие необратимо: восстановить версию через API нельзя, а сохранить новую на удалённом сервере уже не получится — POST …/sources отвечает 404. Скачайте нужное до очистки.
- Найдите сервер —
GET /v1/infra/servers?includeDeleted=true. Без этого параметра удалённые серверы в выдачу не попадают. - Снимите защитные теги с версий, которые тоже хотите убрать, —
POST /v1/infra/servers/:id/sources/:versionId/tagс телом{"tag": "manual", "action": "remove"}. Эта операция снимает один тег и не трогает остальные метки версии. - Очистите историю —
POST /v1/infra/servers/:id/sources/cleanupс телом{"keepLatest": 0}. Эндпоинт работает и на удалённом сервере. Версии, у которых остались тегиmanualилиpublished, очистка не трогает.
Удалённые версии сразу перестают учитываться в объёме хранилища, сами байты стираются через 30 суток — см. Хранилище.
Снимки в объектном хранилище
Снимки исходного кода лежат в том же объектном хранилище, что и остальные файлы приложения, и видны в GET /v1/storage/objects по префиксу source/. Под этим префиксом два вида объектов:
| Ключ | Что это |
|---|---|
source/versions/v<N>-… |
Сохранённая версия. Ей соответствует запись v<N> в списке версий. |
source/current.<расширение> |
Указатель на последнюю сохранённую версию. Расширение соответствует формату архива последнего сохранения. |
У приложений, которые сохраняли снимки через POST /v1/apps/:id/sources, под тем же префиксом лежат source/manifest.json — список версий в читаемом виде — и source/README.md с описанием содержимого.
Логический ключ source/current.tar.gz повторяется: у каждого владельца свой указатель, а физически объекты лежат в разных пространствах имён. Несколько строк с одним и тем же ключом в ответе GET /v1/storage/objects означают разных владельцев — серверы или приложения, — а не перезапись одного объекта. Различить их можно по полю id.
Снимками управляют операциями с исходниками — удалением версии и массовой очисткой: они адресуют версию по её владельцу. Запрос DELETE /v1/storage/objects/:key для снимков не подходит: он ищет строку по логическому ключу среди всех доступных вызывающему ключу, а ключ source/current.tar.gz у разных владельцев одинаковый — удалится произвольная из них.