feat(admin): manage server updates and local configuration
ci / api / api (push) Successful in 52s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m9s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m35s
release / release (версия и заметки) (push) Successful in 5s
release / android (APK в релиз) (push) Successful in 4m6s
ci / db / db (push) Successful in 1m15s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 1m19s
ci / ts / ts (packages + web) (push) Successful in 2m34s
release / desktop (Linux и Windows в релиз) (push) Successful in 14m27s
release / prune (старые файлы и прогоны) (push) Successful in 6s

This commit is contained in:
mrleo1nid committed 2026-10-22 23:01:36 +03:00
1 parent e33abc948c
commit a29a8b18ad
49 files changed
+3604 -353

No files matched your search

+86 -2
View File
@@ -32,7 +32,10 @@
"recs_confirm": "Сбросить рекомендации {{username}}? Волна начнёт подбирать музыку с нуля и снова спросит любимых исполнителей. Лайки и история останутся.",
"recs_done": "Рекомендации {{username}} сброшены",
"confirm": "Подтвердить",
"you": "вы"
"you": "вы",
"manage_updates": "Обновление сервера",
"grant_updates": "Дать управление обновлениями",
"revoke_updates": "Забрать управление обновлениями"
},
"create": {
"title": "Новый пользователь",
@@ -71,7 +74,8 @@
"user.unblock": "Пользователь разблокирован",
"user.password_reset": "Сброшен пароль",
"user.recommendations_reset": "Сброшены рекомендации",
"user.delete": "Пользователь удалён"
"user.delete": "Пользователь удалён",
"user.manages_updates": "Изменены права обновления сервера"
}
},
"sources": {
@@ -378,5 +382,85 @@
"server_settings": {
"title": "Настройки сервера",
"subtitle": "Параметры, которые действуют для всех пользователей"
},
"management": {
"server": "Управление сервером",
"updates": "Обновления",
"config": "Конфигурация",
"updates_intro": "Выберите источник и версию. Сервер выполнит сборку и покажет результат.",
"refresh": "Обновить статус",
"current": "Установленная версия",
"manual": "Обновления запускаются вручную. Последний стабильный релиз выбирается в момент запуска.",
"update_target": "Следующее обновление",
"sources": "Источники обновлений",
"source": "Источник",
"channel": "Тип обновления",
"channel_latest": "Последний релиз",
"channel_version": "Выбрать версию",
"channel_main": "main",
"hint_latest": "Будет установлен последний стабильный тег без release candidate.",
"hint_version": "Можно выбрать опубликованный тег. Переход на старую версию требует ручного отката.",
"hint_main": "Текущее состояние ветки main. Может содержать ещё не выпущенные изменения.",
"version": "Версия",
"choose_version": "Выберите версию",
"source_unavailable": "Не удалось прочитать репозиторий. Проверьте адрес, доступ сервера и SSH-ключи.",
"install": "Установить обновление",
"confirm_update": "Обновить сервер?",
"confirm_update_text": "Источник: {{source}}. Цель: {{target}}.",
"update_warning": "Во время перезапуска сервис временно недоступен. Перед обновлением сделайте резервную копию базы. Миграции назад не откатываются.",
"cancel": "Отмена",
"sources_hint": "Git-репозитории с совместимой структурой Pipu. HTTP(S) или SSH; для приватных репозиториев настройте ключи на хосте агента. Не вставляйте токены в адрес.",
"source_name": "Название",
"repository": "URL Git-репозитория",
"remove_source": "Удалить источник",
"add_source": "Добавить источник",
"save": "Сохранить",
"job": "Последняя операция",
"started": "Начало",
"finished": "Завершение",
"log": "Журнал выполнения",
"waiting": "Ожидаем вывод команды…",
"running_hint": "Задача выполняется на сервере. Страницу можно закрыть — выполнение продолжится.",
"reconnecting": "Сервисы перезапускаются. Ждём восстановления связи с сервером…",
"state": {
"running": "Выполняется",
"succeeded": "Готово",
"failed": "Ошибка"
},
"config_intro": "Настройки API, рекомендателя и развёртывания в deploy/config.local.",
"priority": "Порядок приоритета",
"defaults": "по умолчанию",
"priority_hint": "Значения из .env перекрывают config.local. Сохранение и применение — отдельные действия.",
"search": "Поиск по названию настройки",
"group": "Раздел",
"all": "Все разделы",
"groups": {
"api": "API",
"deployment": "Развёртывание",
"shared": "Общие",
"recommender": "Рекомендатель"
},
"config_files_hint": "Показаны поддерживаемые параметры. «После применения» — значение из .env, config.local или значение по умолчанию. Фиксированные пути и служебные параметры доступны для просмотра. Секреты можно заменить, их значения скрыты.",
"value_source": {
"env": "Из .env",
"local": "Из config.local",
"default": "По умолчанию"
},
"effective": "После применения",
"readonly": "Служебный параметр. Меняется на хосте с учётом конфигурации Compose.",
"secret_saved": "Секрет сохранён",
"will_reset": "Локальное значение будет удалено при сохранении.",
"overridden": "В .env есть значение: оно имеет приоритет. Локальное изменение пока не вступит в силу.",
"secret_hint": "Оставьте поле без изменений, чтобы сохранить секрет. Введите новое значение для замены.",
"default": "По умолчанию",
"reset": "Сбросить локальное",
"no_results": "Настройки не найдены",
"saved": "Изменения сохранены в config.local",
"unsaved": "Несохранённых параметров: {{count}}",
"pending_restart": "Сохранённые изменения ожидают применения",
"no_changes": "Нет изменений для применения",
"discard": "Отменить правки",
"apply": "Применить и перезапустить",
"apply_warning": "Контейнеры будут пересозданы с сохранённой конфигурацией. Сервис временно недоступен; данные в постоянных томах сохранятся. Значения из .env продолжат иметь приоритет."
}
}