Конфигурационные файлы проекта#

Какой файл за что отвечает#

Файл

Назначение

config.json

Внешний файл настройки установки GSF CLI: инструменты, список проектов, их Git URL и ветки. Путь передаётся в config load_config -f.

workspace/store.json

Сохранённое состояние CLI: проекты, активный проект, headless, путь к ключу, зашифрованные credentials. Изменяется командами CLI.

.gsf-cli.priv

Мастер-ключ шифрования секретов; хранится в каталоге, выбранном при регистрации.

workspace/sources/<project_name>/application/project.yaml

Конфигурация прикладного решения: комплект сборки, сервер, плагины и модули. Приходит из Git-проекта.

application/project/repositories/default.yaml

Репозитории прикладной сборки по умолчанию: источники артефактов и публикации. Здесь application обозначает каталог исходников конкретного проекта.

application/build/build.yaml

Сформированные настройки сборки с publishType. Загрузчик также понимает repositoriesConfig для переопределения файла репозиториев, но при формировании этого файла CLI записывает заново только publishType.

~/.sbt/repositories

Источники для SBT launcher и принудительного выбора репозиториев. На Windows ~ соответствует %USERPROFILE%.

~/.sbt/.credentials, ~/.ivy2/.credentials

Обязательные основной файл и копия credentials для закрытых SBT-репозиториев.

config.json и project.yaml решают разные задачи. Изменение пути SBT в конфигурации CLI не меняет репозитории внутри прикладного проекта. Git credentials в store.json также не заменяют файлы доступа SBT.

Примеры config.json#

Linux:

{
  "sbt_home": "/opt/global/sbt",
  "concurrent_module_updates": 1,
  "projects": [
    {
      "name": "main",
      "project_source": "https://git.example.org/group/configuration-project.git",
      "project_branch": "main",
      "jdk_home": "/usr/lib/jvm/bellsoft-java21-amd64",
      "build_system": "sbt",
      "publish_type": "SNAPSHOT"
    }
  ]
}

Windows:

{
  "sbt_home": "C:\\programs\\sbt",
  "concurrent_module_updates": 1,
  "projects": [
    {
      "name": "main",
      "project_source": "https://git.example.org/group/configuration-project.git",
      "project_branch": "main",
      "jdk_home": "C:\\Program Files\\Java\\jdk-21",
      "build_system": "sbt",
      "publish_type": "SNAPSHOT"
    }
  ]
}

Замените Git URL, имя ветки и пути фактическими значениями. В Windows JSON обратная косая черта удваивается. JDK должен быть версии 21, с java и javac в bin.

Поля верхнего уровня#

Поле

Что задаёт

Если поле отсутствует

sbt_home

Каталог SBT с bin/sbt-launch.jar. В пошаговой установке задаётся явно.

Сохраняется текущее значение; у новой конфигурации оно пустое. Запуск команды может использовать оставшийся PATH, но отдельного поиска и проверки установки в load_config нет.

concurrent_module_updates

Число одновременных обновлений модулей. 1 — последовательный режим; обычно медленнее, зато проще диагностировать загрузку.

Сохраняется текущее значение; начальное значение — 20.

module_update_retry_intervals

Массив задержек в секундах перед попытками обновления модуля, например [0, 1, 3, 5, 5].

Начальный массив — [0, 1, 3, 5, 5]; есть ограничение сохранения настройки, описанное ниже.

projects

Полный список проектов данной установки.

Используется пустой список.

Для concurrent_module_updates используйте положительное целое число. Это параллельность загрузки модулей внутри команды, а не разрешение на одновременные CI-сборки в общем workspace.

У module_update_retry_intervals обнаружено расхождение в коде: load_config принимает поле без точки, а чтение сохранённого store.json ищет .module_update_retry_intervals. Поэтому пользовательское значение не восстанавливается обычным образом при следующем запуске. До исправления кода не рассчитывайте на изменение интервалов через внешний файл.

Поля проекта#

Поле

Назначение и поведение

name

Обязательное имя проекта в GSF CLI. По нему команда сопоставляет новые и уже зарегистрированные проекты. Используйте уникальные имена.

project_source

Обязательный Git URL, заканчивающийся на .git. Для каждой загрузки файла записывается заново.

project_branch

Ветка Git. Если поле отсутствует или пустое, записывается main, в том числе для существующего проекта.

jdk_home

Каталог JDK 21. Парсер допускает отсутствие поля, но для новой установки укажите его явно. Для существующего проекта без поля сохраняется прежнее значение.

build_system

Система сборки. Для описанного получения applib и appsrcsbt. Начальное значение — sbt; код также содержит обработчики mill и bazel, но --build-appsrc их не поддерживает.

publish_type

SNAPSHOT или RELEASE, в верхнем регистре. У нового проекта по умолчанию SNAPSHOT; без поля существующее значение сохраняется.

server_source

Необязательное переопределение источника GlobalServer. Например, URL globalserver.zip. Не перекрывает источник base:// из комплекта сборки; при отсутствии поля сохраняется прежнее значение.

Входное поле project_source_type не управляет загрузкой: текущий load_config сам определяет тип по project_source. Для обычного Git записывается vcs, а lxc:// завершается NotImplementedError. Поэтому в примерах это поле не требуется.

Не переносите в config.json произвольные поля из store.json: загрузчик читает только перечисленные настройки. Headless переключается командами enable_headless/disable_headless, активный проект — activate_project, credentials — менеджером учётных данных.

Загрузка и изменение конфигурации#

Из каталога установленного GSF CLI:

./config.sh load_config -f /opt/global/builds/config.json
.\config.cmd load_config -f 'C:\programs\builds\config.json'

Внимание

При загрузке CLI удаляет проекты, чьи имена отсутствуют в projects, вместе с исходниками, сервером, ярлыками, окружением IDEA и кешем. Пустой список удаляет все зарегистрированные проекты. Перед запуском проверьте полный состав файла.

Для существующих проектов применяются правила отдельных полей из таблицы. Команда не скачивает исходники, не проверяет доступность репозиториев и не делает проект активным. Далее запускайте manage.sh -p <project_name> refresh или manage.cmd -p <project_name> refresh.

load_config применяет изменения по ходу обработки; не считайте его предварительной проверкой без записи. Сначала проверьте JSON и значения путей. Полную последовательность с регистрацией ключа и проверкой результата смотрите в главе своей ОС.

Файлы закрытых репозиториев#

repositories задаёт источники, а .credentialsrealm, host, user, password. Содержимое .sbt/.credentials копируется в .ivy2/.credentials; после смены токена обновляются оба файла.

В каждом процессе сборки должны быть заданы SBT_CREDENTIALS и три свойства через JAVA_TOOL_OPTIONS: sbt.boot.credentials, sbt.repository.config, sbt.override.build.repos=true. На Windows и Linux это одинаковое требование. Готовые команды находятся в главах установки и в примере Linux pipeline.

Скрипты окружения в application/build/scripts создаются GSF CLI из шаблонов. Не храните ручные настройки только в сгенерированном set_env.sh/set_env.cmd: последующий refresh или build формирует его заново.