# CI Executer

## Информация

Утилита запускает последовательность задач исходя из среды запуска.

## Оглавление

- [Установка](#install)
- [Ключи запуска](#launch)

## <a name="install"></a> Установка и использование

пример установки: `npm install ci-executer -g`

вызов справки: `ci-executer -h`

пример запуска: `ci-executer --config ./config.toml`

## <a name="launch"></a> Таблица ключей запуска
Ключ | Описание
----------------- | -----------
--version, -v | вывести номер версии приложения
--help, -h | вызвать справку по ключам запуска
--config, -c | путь к файлу конфигурации в формате toml или json, (переменная среды: CI_EXECUTER_CONFIG_PATH)
--scope, -s | Имя пространства выполнения, (переменная среды: CI_EXECUTER_SCOPE)

## <a name="configuration"></a> Конфигурация

Программа настраивается через файл конфигурации двух форматов TOML или JSON. Так же можно настраивать через переменные среды, которые будут считаться первичными.

### Секции файла конфигурации

- **logger** - настройка логгера (переменная среды: CI_EXECUTER_LOGGER)
- **jobs[]** - массив задач (переменная среды: CI_EXECUTER_JOBS)

### Пример файла конфигурации config.toml

```toml
[logger]                # настройка логгера
    mode = "prod"       # режим (prod или dev или debug)
    enable = true       # активация логгера
    timestamp = "none"  # выводить время лога (none, time или full)
    type = true         # выводить тип лога (true или false)

[[jobs]]                    # массив задач
    name = "job1"           # имя задачи, должно быть уникально
    enable = true           # активация задачи
    exec = "echo hello"     # строка выполнения
    allow_failure = false   # разрешение на неуспех задачи
    logs = false            # отображение логов задачи
    description = "My job1" # описание задачи (Не обязательный)
    scope = "default"       # пространство запуска
    [jobs.env]              # дополнительные переменные среды
        ENV_KEY1 = "key1-val"
        ENV_KEY2 = "key2-val"
    [jobs.when]                     # условия запуска
        environment = "all"         # среда выполнения. all, local и ci
        os = "all"                  # ОС выполнения. all, win и linux
        env = [                     # Список переменных среды. Если должно совпадать значение, то  
            "ENV_KEY1",             # нужно указать его через равно.
            "ENV_KEY2=key2-val",
            "^ENV_KEY3",
            "^ENV_KEY4=key4-val"
        ]

[[jobs]]
    include = "job.json" # путь к файлу с настройкой задачи (все другие ключи игнорируется)

[[jobs]]
    name = "job2"
    enable = true
    exec = "echo hello"
    allow_failure = false
    logs = true
    description = "My job2"
    scope = "default"
    [jobs.env]
        ENV_KEY1 = "key1-val"
        ENV_KEY2 = "key2-val"
    [jobs.when]
        environment = "ci"
        os = "win"
        env = []
```

### Таблица параметров конфигурации

| Параметр | Тип | Значение | Описание |
| ----- | ----- | ----- | ----- |
| logger.mode | строка | prod | режим отображения prod, dev или debug |
| logger.enable | логический | true | активация логгера |
| logger.timestamp | логический | false | выводить время лога (true или false) |
| logger.type | логический | true | выводить тип лога (true или false) |
| jobs | массив | [] | массив задач |
| jobs[].name | строка |  | имя задачи, должно быть уникально |
| jobs[].enable | логический | true | активация задачи |
| jobs[].exec | строка |  | строка выполнения |
| jobs[].allow_failure | логический | false | разрешение на неуспех задачи |
| jobs[].logs | логический | false | отображение логов задачи |
| jobs[].description | строка |  | описание задачи |
| jobs[].scope | строка | default | пространство запуска |
| jobs[].env | объект | {} | дополнительные переменные среды |
| jobs[].when | объект | {} | условия запуска |
| jobs[].when.environment | объект | {} | среда выполнения. all, local и ci |
| jobs[].when.os | объект | {} | ОС выполнения. all, win и linux |
| jobs[].when.env | массив | строка[] | список переменных среды. Если должно совпадать значение, то нужно указать его через равно |
| jobs[].include | строка |  | путь к файлу с настройкой задачи (все другие ключи игнорируется) |
