# Проект Директория на диске, хранящая файлы для сборки решения. ## Структура проекта - `module1` \ Прикладной модуль - `module2` - `moduleN` - `projectModule` \ Проектный модуль - `project` \ Мета информация по сборке - `build` \ Каталог находится вне системы контроля версий, и содержит данные специфичные для локальной сборки. - lib \ Локальные jar библиотеки для запуска сервера, и утилиты прикладной разработки - config.yml \ Создается при необходимости локального переопределения конфигурации проекта - `build.sbt` \ Декларация сборки для [sbt](https://www.scala-sbt.org/) - `project.yaml` \ Конфигурация проекта ## Конфигурация проекта Конфигурация проекта описывает правила сборки прикладного проекта. Конфигурация проекта располагается в проекте по адресу ``application/project.yaml`` Конфигурация перечисляет перечень модулей используемых в сборке решения, а так же их источник. В случае необходимости источник проекта можно переключить, получая таким образом возможность отлаживать баг фиксы с текущего проекта. ```{attention} После отладки баг фикса в комплекте сборки необходимо выпустить пул реквест в ветку разработки модуля и дождаться нового релиза. В случае необходимости выпустить решение не дожидаясь релиза комплекта сборки. Необходимо переключится на режим сборки по исходному коду для всех дочерних модулей. ``` ### Источники модуля ### local Код модуля находится в системе контроля версий исходного проекта. Подключается по исходному коду. ### git Код модуля находится в отдельном `git` репозитории. Подключается по исходному коду. ```{tip} Для массовой синхронизации модулей используйте утилиту `gsf-cli` ``` ### base Модуль выпускается в базовом комплекте сборки. Подключается в виде jar артефакта. ### buildKit Модуль выпускается в прикладном комплекте сборки. Подключается в виде jar артефакта. ### Пример конфигурации ```yaml #Комплект сборки, куда будет происходить публикация прикладных модулей buildKit: name: ru.bitec.app version: 1.0.1 #Комплект сборки на основе которого работает проект #Базовый комплект сборки обычно содержит сервер приложений и базовые модули baseBuildKit: name: ru.bitec.base version: 1.0.1 #Источник сервера приложений #Используется утилитой gs3-cli для подготовки проекта к работе applicationServer: source: "base://" #Источник плагина для сборки sbtPlugin: source: "base://" modules: #Подключение модуля через jar артефакт из maven репозитория - gtkjpa: source: "base://" - gtk: source: "base://" - btk: source: "base://" #Подключение модуля через исходный код из удаленного репозитория - bts: source: "git://{host}/bts.git" branch: main isPublish: true ``` ## Конфигурация репозиториев Для того чтобы обеспечить возможность собирать проект в разных локальных сетях. Настройка репозиториев вынесена в отдельный файл и может быть переопределена. По умолчанию настройка репозиториев берется из файла: `application/project/repositories/default.yaml` Пример настройки: ```yaml repositories: - name: maven-global url: "https://repo.global-system.ru/artifactory/libs-release" publishRepository: name: app-global url: "https://repo.global-system.ru/artifactory/build-kit" #Запрашивать данные авторизации из менеджера учетных данных для данного репозитория isLoginRequired: true ``` ### Работа в изолированной сети В случаи если требуется настроить проект таким образом чтобы он обращался только к репозиториям локальной сети. Необходимо: 1. Настроить глобальную конфигурацию репозиториев `sbt` \ Для этого добавьте локальные репозитории в файл `~/.sbt/repositories` ``` [repositories] maven-proxy: http://host/repository/maven/ buildkit: http://host/repository/buildkit/ ``` 2. Включите изоляцию репозиториев \ Это позволить обращаться только к локальным репозиториям, игнорирую репозитории вшитые в программный код. Для этого в файле проекта `application/.sbtopts` добавьте флаг ``` -Dsbt.override.build.repos=true ``` ```{note} Включение данного флага не перекрывает настройки авторизации ``` Смотрите: [Прокси репозитории](https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html) ## Интеграция в vcs Исходный код проекта может располагаться в произвольной системе контроля версий. Модуль может быть расположен как в репозитории самого проекта так и в удаленном репозитории. В момент инициализации проекта код из удаленного репозитория добавляется в каталог основного проекта. ```{tip} Модули из удаленного репозитория следует добавить в игнор лист репозитория проекта. ``` ### Бранч-стратегии После инициализации проекта можно пользоваться штатными средствами бранчивания используемой `vcs`. ```{warning} В случае наличия изменений нарушающих обратную совместимость схемы базы данных желательно внести эти изменения в мастер ветку, для минимизации конфликтов в схеме базы дынных между разработчиками. Если изменения слишком обширны, стоит использовать локальную базу разработки для их тестирования. ``` ## Публикация решения Публикация решения происходит средствами CI, например [jenkins](https://www.jenkins.io/). Команда sbt для публикации решения в локальный каталог: ``` sbt publishSolution ``` ## Публикация комплекта сборки Публикация комплекта сборки происходит средствами CI Команда sbt для публикации решения в репозиторий: ``` sbt publish ```