/config/publish
Метод принимает игровой конфиг от CI и регистрирует его под именем ветки, из которой собрана эта сборка.
Клиент той же сборки запрашивает это имя в /config/version и скачивает именно этот файл. Сборка другой ветки спрашивает своё имя и получает свою строку, даже если байты файла совпали.
Адрес метода
/config/publish
Не требует сессию пользователя
Метод вызывает CI, у которого нет игрока. Вместо сессии проверяется общий секрет.
Авторизация вызова
Секрет передаётся в заголовке X-Config-Publish-Secret и сверяется со значением config_publish_secret из настроек админ-панели («Конфиг» → «Секрет публикации конфига»).
Если настройка пуста, метод закрыт: пустой секрет не совпадает ни с чем, включая отсутствующий заголовок.
Параметры
| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
| version | ДА | string | Имя ветки, 1–191 символ. Это лейбл строки config_version, его же клиент передаёт в /config/version и в config_version при авторизации |
| file | ДА | string | Сырые байты .cdb, закодированные в base64. Хеш версии считается по этим байтам, до кодирования |
| activate | НЕТ | int | 1 — перевести строку в active. Без этого новая версия остаётся draft и на production не резолвится. По умолчанию 0 |
| set_default | НЕТ | int | 1 — сделать строку версией по умолчанию этого сервера. Строка должна быть active, поэтому вместе с первым публикационным вызовом передаётся и activate=1. По умолчанию 0 |
file читается из JSON-тела целиком и в таблицу маршрута не входит: строковый параметр маршрута ограничен 250 символами.
Результат
{
"response": {
"version": "feature/energy-fix",
"revision": 1,
"hash": "0123456789abcdef0123456789abcdef",
"status": "active",
"url": "https://cdn.example/0123456789abcdef0123456789abcdef.cdb",
"unchanged": 0,
"reimport": 0
}
}
| Поле | Тип | Описание |
|---|---|---|
| version | string | Лейбл, под которым строка сохранена |
| revision | int | Номер ревизии. Повтор тех же байт его не увеличивает |
| hash | string | md5 сырых байт файла |
| status | string | draft, active или archived |
| url | string | Адрес скачивания {config_storage_url}/{hash}.cdb |
| unchanged | int | 1, если эти байты уже были импортированы под этим лейблом. Ревизия не менялась. activate и set_default при этом всё равно применяются |
| reimport | int | 1, если лейбл уже существовал и содержимое файла изменилось |
Поведение
Новый лейбл создаётся как draft, если activate не передан. Повтор того же файла под другим лейблом создаёт вторую версию с тем же hash.
Архивная строка с activate=1 снова становится active и получает новое содержимое, если файл изменился. Без activate реимпорт в архив отклоняется.
Ошибки
Неверный или отсутствующий секрет — 10403 Permission denied.
Нет file, это не base64 или не JSON конфига — 10002 с именем file. Лейбл длиннее 191 символа — 10002 с именем version.
Отказ импорта (архив без activate, set_default без активной строки) — 10405, причина в поле details.