blueprint/README.md

6.9 KiB
Raw Permalink Blame History

Blueprint

Приложение для развертывания базового проекта на языке Golang.
<USER_HOME_DIR>/blueprint - Папка приложения. Здесь хранятся глобально вызываемые Blueprint-проекты.
<TEMP_DIR/blueprint-* - Временная папка приложения, создается на время работы приложения.

Установка и начало работы

1. Добавьте в GOPRIVATE penahub.gitlab.yandexcloud.net/pena-services/blueprint.

Windows (PowerShell):

$Env:GOPRIVATE="penahub.gitlab.yandexcloud.net/pena-services/blueprint"

Linux:

export GOPRIVATE="penahub.gitlab.yandexcloud.net/pena-services/blueprint"

2. Установите пакет Blueprint.

go install penahub.gitlab.yandexcloud.net/pena-services/blueprint@latest

3. Перейдите в папку нового проекта для работы.

cd ./path-to-the-new-project
blueprint

Структура Blueprint-проекта и работа с приложением

Базовый состав Blueprint-проекта

  • Blueprint.yaml - файл настройки проекта.
  • template - папка хранящая файлы шаблонов кода развертываемого проекта.

Флаги

При вызове приложения без флагов, будет произведен поиск Blueprint-файла и папки template по текущей папке.
-h, -help - Помощь по программе.
-n - Меняет имя проекта, указанное в Blueprint.yaml.
-f - Указать Blueprint-проект хранящийся в папке приложения.
-g - Указать Blueprint-проект хранящийся в git-репозитории.

Blueprint.yaml

Файл настроек должен храниться в корневой папке Blueprint-проекта или в месте вызова приложения, если не были указаны флаги месторасположения Blueprint-проекта.

Рекомендуемое имя файла настроек Blueprint.yaml.
Допустимые имена файла: Blueprint.yaml, Blueprint.yml, blueprint.yaml, blueprint.yml.\

Настройки файла

ProjectName - имя проекта. Значение передается в Template.vars
Description - базовое описание проекта
Template - настройки шаблонизатора
Modules - настройки модулей

Template

Приложение полностью копирует расположение файлов из папки template. Допустимое разрешение файлов шаблонов: .tmpl

Настройки

path - альтернативное расположение папки.
vars - хеш-таблица значений, доступных в шаблонах. Пример в шаблоне: {{.Vars.SomeValue}}

Модули их настройки и функции

Если модуль не будет указан в файле настроек, то он не будет вызван и не сможет использоваться в шаблонизаторе.
Доступные модули:

  • logger
  • env

logger

Модуль логгера для шаблонизатора

Настройки

name - Название логгера. Допустимые значения: zap

Функции модуля для шаблонизатора

logger.Import() - возвращает строку для импорта выбранного логгера. Например: {{.Modules.logger.Import}} для zap вернет "go.uber.org/zap".
logger.ImportCore() - возвращает строку для импорта ядра выбранного логгера. Например: {{.Modules.logger.ImportCore}} для zap вернет "go.uber.org/zap/core".
logger.Declaration() - возвращает декларирование выбранного логгера. Например: {{.Modules.logger.Declaration}} для zap вернет:

cfgLogger := zap.NewDevelopmentConfig()
cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
cfgLogger.EncoderConfig.ConsoleSeparator = "    "

logger, err := cfgLogger.Build()
	if err != nil {
		panic(err)
}

logger.Type - возвращает строку с типом выбранного логгера. Например: {{Modules.logger.Type}} для zap вернет *zap.Logger.
logger.Message(messageType string, message string, fields ...any) - принимает messageType как обязательный аргумент, fields должно быть четным, т.к. представляется в виде пары ключ-значение. Ключ всегда оборачивается как строка. Например: {{.Modules.logger.Message "Fatal" "some error" "Error" "err"}} для zap вернет zap.Fatal("some error", zap.Any("Error", err)).

env

Модуль для описания переменных окружения и создания структуры конфигурации приложения.\

Настройки

vars - массив значений переменных окружения.
Принимает объект с полями:

  • name - имя переменной окружения, в структуре именуется в CamelCase. Обязательное значение.
  • type - тип переменной для структуры. Обязательное значение.
  • default - стандартное значение.
  • required - является ли значение обязательным. По умолчанию: false

Пример:

vars:
    - name: APP_NAME
    type: string
    default: Some app name
    required: true

Функции модуля для шаблонизатора

env.Import() - возвращает строку для импорта env. {{.Modules.env.Import}} вернет "github.com/caarlos0/env/v8"
env.Declaration(v string) - возвращает декларирование переменной с заполненной структурой переменных окружения. {{.Modules.env.Declaration config}} вернет

err = env.Parse(config)
	if err != nil {
		panic(err)
}

env.Struct() - возвращает представленное переменное окружение как структуру. Например {{.Modules.env.Struct}} для примера выше вернет

type Config struct {
    AppName string `env:"APP_NAME,required" envDefault:"Some app name"`
}