@mirta/cli 0.3.5 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +295 -78
- package/README.ru.md +303 -79
- package/dist/constants.mjs +9 -0
- package/dist/deploy.mjs +902 -0
- package/dist/index.mjs +759 -20
- package/dist/package.mjs +128 -172
- package/dist/publish.mjs +58 -38
- package/dist/release.mjs +258 -158
- package/dist/resolve.mjs +457 -0
- package/locales/en-US.json +58 -0
- package/locales/ru-RU.json +58 -0
- package/package.json +21 -9
- package/dist/github.mjs +0 -135
- package/dist/locales/en-US.json +0 -21
- package/dist/locales/ru-RU.json +0 -21
- package/dist/shell.mjs +0 -189
package/README.ru.md
CHANGED
|
@@ -2,82 +2,136 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-cli/README.md)
|
|
4
4
|
[](https://github.com/wb-mirta/core/blob/latest/packages/mirta-cli/README.ru.md)
|
|
5
|
-
[](https://npmjs.com/package/@mirta/cli)
|
|
6
6
|
[](https://npmjs.com/package/@mirta/cli)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
> Универсальный CLI-инструмент для версионирования, публикации и деплоя в монорепозиториях с синхронным семантическим версионированием.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
`@mirta/cli` — оркестратор процессов, который:
|
|
11
|
+
- Синхронно обновляет версии в пакетах монорепозитория,
|
|
12
|
+
- Запускает генерацию `CHANGELOG` (если настроен),
|
|
13
|
+
- Публикует пакеты в NPM с поддержкой `--provenance` в CI,
|
|
14
|
+
- Синхронизирует артефакты с контроллерами Wiren Board через `rsync`.
|
|
11
15
|
|
|
12
|
-
|
|
13
|
-
- Простая интеграция с существующими процессами CI/CD;
|
|
14
|
-
- Доступ ко всем необходимым операциям через интуитивные команды;
|
|
15
|
-
- Поддержка кастомизации рабочего потока под специфику вашей инфраструктуры.
|
|
16
|
+
Работает в любых монорепозиториях, использующих `pnpm` и синхронное семантическое версионирование.
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
**Не предназначен для выполнения в среде Duktape на контроллерах Wiren Board.**
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
## 📦 Установка
|
|
20
21
|
|
|
21
22
|
```sh
|
|
22
23
|
pnpm add -wD @mirta/cli
|
|
23
24
|
```
|
|
24
|
-
Можно настроить дополнительные параметры, добавив файл конфигурации `mirta.config.json` в корень главного проекта. Например:
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
{
|
|
28
|
-
"scope": "myscope",
|
|
29
|
-
"scopeAsPackagePrefix": false
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
### Основные опции конфигурации
|
|
26
|
+
✅ Этот пакет разработан для фреймворка Mirta, но работает в любых `pnpm`-монорепозиториях с синхронным версионированием.
|
|
33
27
|
|
|
34
|
-
|
|
28
|
+
## 🚀 Быстрый старт
|
|
35
29
|
|
|
36
|
-
|
|
30
|
+
**Запустите релиз**:
|
|
37
31
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
```sh
|
|
33
|
+
pnpm mirta release
|
|
34
|
+
```
|
|
35
|
+
Выберите тип обновления → версии обновятся.
|
|
41
36
|
|
|
42
|
-
|
|
37
|
+
**Опубликуйте (в CI или локально)**:
|
|
43
38
|
|
|
44
|
-
|
|
39
|
+
```sh
|
|
40
|
+
pnpm mirta publish
|
|
41
|
+
```
|
|
42
|
+
Все публичные пакеты отправятся в NPM.
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
**Разверните на контроллере**:
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
pnpm mirta deploy
|
|
50
48
|
```
|
|
49
|
+
Синхронизирует файлы по профилю (по умолчанию — `default`).
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
## 🧰 Команды
|
|
53
52
|
|
|
54
|
-
|
|
53
|
+
### `mirta [options]`
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
Эти глобальные опции работают для всех команд:
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"templates": [
|
|
62
|
-
"packages/create-mirta/public/templates"
|
|
63
|
-
]
|
|
64
|
-
}
|
|
65
|
-
```
|
|
57
|
+
- `--help` (`-h`) — отображает справку по доступным командам и параметрам.
|
|
58
|
+
- `--version` (`-v`) — выводит версию `@mirta/cli`.
|
|
59
|
+
- `--locale <loc>` — задаёт язык интерфейса (`en`, `ru`).
|
|
66
60
|
|
|
67
|
-
|
|
61
|
+
### `pnpm mirta release`
|
|
68
62
|
|
|
69
|
-
|
|
63
|
+
Подготавливает релиз: определяет текущую версию, предлагает выбрать тип обновления (`patch`, `minor`, `major`, `pre*`) и применяет его ко всем пакетам с полем `version`.
|
|
70
64
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
65
|
+
<details>
|
|
66
|
+
<summary>Технические подробности</summary>
|
|
67
|
+
|
|
68
|
+
Процесс разделён на этапы:
|
|
69
|
+
|
|
70
|
+
#### Этап 1: Проверка git-состояния (если проект под git)
|
|
71
|
+
- Синхронизация с `origin`.
|
|
72
|
+
- Успешность CI (по workflow `build`).
|
|
75
73
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
#### Этап 2: Обновление зависимостей
|
|
75
|
+
- Для путей из `mirta.config.json#project.templates`, рекурсивно обнаруживает `package.json`.
|
|
76
|
+
- Зависимости монорепозитория (`dependencies`, `devDependencies`) обновляются до актуальной версии.
|
|
77
|
+
|
|
78
|
+
#### Этап 3: Генерация CHANGELOG
|
|
79
|
+
- Запускает `pnpm run changelog`, если такой скрипт существует.
|
|
80
|
+
|
|
81
|
+
#### Этап 4: Фиксация изменений
|
|
82
|
+
- При доступе к GitHub по `ssh` создаёт коммит и тег:
|
|
83
|
+
```sh
|
|
84
|
+
git commit -m "release: vX.X.X"
|
|
85
|
+
git tag vX.X.X
|
|
86
|
+
```
|
|
87
|
+
- При доступе по `https` изменения остаются в рабочей директории для ручной фиксации.
|
|
88
|
+
|
|
89
|
+
</details>
|
|
90
|
+
|
|
91
|
+
#### Поддерживаемые опции
|
|
92
|
+
|
|
93
|
+
`--dry-run` (`--dry`) — симуляция без применения изменений.
|
|
94
|
+
|
|
95
|
+
`--preid` `<id>` — кастомный префикс преверсии (`alpha.0`, `beta.1`).
|
|
96
|
+
|
|
97
|
+
`--skip-prompts` — пропускает интерактивные запросы.
|
|
98
|
+
|
|
99
|
+
`--skip-git` — не создаёт коммит и тег.
|
|
100
|
+
|
|
101
|
+
#### Частые вопросы
|
|
102
|
+
|
|
103
|
+
<details>
|
|
104
|
+
<summary>Почему версионирование синхронное?</summary>
|
|
105
|
+
|
|
106
|
+
Все пакеты получают одинаковую версию при релизе. Это обеспечивает:
|
|
107
|
+
- Гарантированную совместимость (`@mirta/cli@0.4.0` работает с `@mirta/package@0.4.0`),
|
|
108
|
+
- Атомарность релиза,
|
|
109
|
+
- Упрощение управления зависимостями.
|
|
110
|
+
|
|
111
|
+
💡 При использовании `workspace:*` все ссылки заменяются на конкретную версию при релизе.
|
|
112
|
+
|
|
113
|
+
</details>
|
|
114
|
+
|
|
115
|
+
<details>
|
|
116
|
+
<summary>Что такое «семантическая» версия?</summary>
|
|
117
|
+
|
|
118
|
+
Формат `major.minor.patch`:
|
|
119
|
+
- `major` — breaking changes,
|
|
120
|
+
- `minor` — новые возможности без нарушения,
|
|
121
|
+
- `patch` — исправления ошибок.
|
|
122
|
+
|
|
123
|
+
Версии до `1.0.0` (например, `0.4.0`) считаются экспериментальными:<br/>
|
|
124
|
+
любое обновление может включать breaking changes.
|
|
125
|
+
|
|
126
|
+
Подробнее на сайте [semver.org](https://semver.org/lang/ru/)
|
|
127
|
+
|
|
128
|
+
</details>
|
|
129
|
+
|
|
130
|
+
<details>
|
|
131
|
+
<summary>Как настроить генерацию CHANGELOG.md?</summary>
|
|
132
|
+
|
|
133
|
+
Добавьте в dev-зависимости корневого `package.json` пакет `conventional-changelog-cli` и определите скрипт:
|
|
79
134
|
|
|
80
|
-
Для генерации файла со списком изменений в dev-зависимости корневого `package.json` нужно добавить пакет [conventional-changelog-cli](https://www.npmjs.com/package/conventional-changelog-cli), а в секции `scripts` должна присутствовать команда `changelog`:
|
|
81
135
|
```json
|
|
82
136
|
{
|
|
83
137
|
"scripts": {
|
|
@@ -86,27 +140,31 @@ pnpm mirta release
|
|
|
86
140
|
}
|
|
87
141
|
```
|
|
88
142
|
|
|
89
|
-
Список изменений
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
2. Использовать префиксы вида `fix:`, `feat:`, `docs:`, `chore:` и т.п.
|
|
143
|
+
Список изменений формируется на основе коммитов. Требования к заголовкам:
|
|
144
|
+
- Длина ≤ 50 символов,
|
|
145
|
+
- Префиксы: `fix:`, `feat:`, `docs:`, `chore:` и др.
|
|
93
146
|
|
|
94
|
-
|
|
147
|
+
Подробнее: [Commit Convention](https://github.com/wb-mirta/core/blob/latest/.github/commit-convention.md)
|
|
95
148
|
|
|
96
|
-
|
|
149
|
+
</details>
|
|
97
150
|
|
|
98
|
-
|
|
151
|
+
#### Расширенное управление
|
|
99
152
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
- `patch` увеличивается при исправлениях багов, сохраняя обратную совместимость.
|
|
153
|
+
<details>
|
|
154
|
+
<summary>Явное указание версии</summary>
|
|
103
155
|
|
|
104
|
-
|
|
156
|
+
Установит ровно ту версию, которая передана в качестве аргумента:
|
|
105
157
|
|
|
106
158
|
```sh
|
|
107
159
|
pnpm mirta release 1.2.3
|
|
108
160
|
```
|
|
109
|
-
|
|
161
|
+
⚠️ **Не перезаписывайте опубликованные версии — NPM это запрещает.**
|
|
162
|
+
|
|
163
|
+
</details>
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
<details>
|
|
167
|
+
<summary>Инкремент: patch, minor, major</summary>
|
|
110
168
|
|
|
111
169
|
```sh
|
|
112
170
|
pnpm mirta release patch
|
|
@@ -120,56 +178,222 @@ pnpm mirta release minor
|
|
|
120
178
|
pnpm mirta release major
|
|
121
179
|
# 1.0.0
|
|
122
180
|
```
|
|
123
|
-
|
|
181
|
+
|
|
182
|
+
</details>
|
|
183
|
+
|
|
184
|
+
<details>
|
|
185
|
+
<summary>Преверсии: alpha, beta, rc</summary>
|
|
124
186
|
|
|
125
187
|
```sh
|
|
126
188
|
pnpm mirta release prepatch --preid alpha
|
|
127
189
|
# 0.0.1-alpha.0
|
|
128
190
|
```
|
|
191
|
+
|
|
129
192
|
```sh
|
|
130
193
|
pnpm mirta release preminor --preid alpha
|
|
131
194
|
# 0.1.0-alpha.0
|
|
132
195
|
```
|
|
196
|
+
|
|
133
197
|
```sh
|
|
134
198
|
pnpm mirta release premajor --preid alpha
|
|
135
199
|
# 1.0.0-alpha.0
|
|
136
200
|
```
|
|
137
|
-
|
|
201
|
+
|
|
202
|
+
#### Инкремент преверсии
|
|
138
203
|
|
|
139
204
|
```sh
|
|
140
205
|
pnpm mirta release prerelease --preid alpha
|
|
141
206
|
# 0.0.1-alpha.1
|
|
142
207
|
```
|
|
143
208
|
|
|
144
|
-
|
|
209
|
+
</details>
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
### `pnpm mirta publish`
|
|
214
|
+
|
|
215
|
+
Публикует пакеты в NPM, пропуская `private: true`.
|
|
216
|
+
|
|
217
|
+
<details>
|
|
218
|
+
<summary>Технические подробности</summary>
|
|
219
|
+
|
|
220
|
+
⚠️ Обычно запускается в CI после `git push` тега `vX.X.X`.
|
|
221
|
+
|
|
222
|
+
Тег публикации определяется автоматически:
|
|
223
|
+
- `alpha` → `--tag` `alpha`
|
|
224
|
+
- `beta` → `--tag` `beta`
|
|
225
|
+
- `rc` → `--tag` `rc`
|
|
226
|
+
|
|
227
|
+
В CI добавляется `--provenance` для подтверждения происхождения.
|
|
228
|
+
|
|
229
|
+
</details>
|
|
230
|
+
|
|
231
|
+
#### Поддерживаемые опции
|
|
232
|
+
|
|
233
|
+
- `--dry-run` (`--dry`) — симуляция.
|
|
234
|
+
- `--skip-build` — пропускает `pnpm run build`.
|
|
235
|
+
- `--skip-git` — отключает git-проверки (аналог `--no-git-checks` в `pnpm publish`).
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
### `pnpm mirta deploy`
|
|
240
|
+
|
|
241
|
+
Синхронизирует файлы с контроллерами Wiren Board через `rsync` по SSH.
|
|
242
|
+
|
|
243
|
+
<details>
|
|
244
|
+
<summary>Технические подробности</summary>
|
|
245
|
+
|
|
246
|
+
- Транспорт: `rsync -rtzgO` (рекурсивно, сжатие, сохранение времени и группы, без времени на папках).
|
|
247
|
+
- Поддержка WSL2: на Windows команды выполняются внутри WSL.
|
|
248
|
+
- Аутентификация:
|
|
249
|
+
- Через изолированный `ssh-agent`.
|
|
250
|
+
- Поддержка PKCS#11 (Rutoken) и SSH-ключей.
|
|
251
|
+
- `ttl` — время жизни ключа.
|
|
252
|
+
- Режим `--dry-run`: показывает изменения без применения.
|
|
253
|
+
- Симлинки не передаются.
|
|
254
|
+
|
|
255
|
+
</details>
|
|
256
|
+
|
|
257
|
+
#### Поддерживаемые опции
|
|
258
|
+
|
|
259
|
+
- `--config`, `-c <path>` — путь к `mirta.config.json`.
|
|
260
|
+
- `--profile`, `-p <name>` — профиль деплоя (по умолчанию: `default`).
|
|
261
|
+
- `--to <conn>` — переопределение подключения.
|
|
262
|
+
- `--dry-run` — симуляция синхронизации.
|
|
263
|
+
|
|
264
|
+
Параметр `--to` принимает:
|
|
265
|
+
- Название подключения из файла конфигурации `mirta.config.json`,
|
|
266
|
+
- Строку подключения, если она начинается с префикса `ssh://`.
|
|
267
|
+
|
|
268
|
+
#### Переменные окружения и секреты
|
|
269
|
+
|
|
270
|
+
Для безопасного хранения учётных данных используйте файл `.env.local` (игнорируется git):
|
|
271
|
+
|
|
272
|
+
```sh
|
|
273
|
+
# .env.local
|
|
274
|
+
|
|
275
|
+
SSH_KEY=~/.ssh/id_ed25519
|
|
276
|
+
|
|
277
|
+
# Доступно в конфигурации:
|
|
278
|
+
WB_CONN_OPTIONS=`key=${SSH_KEY};ttl=1h30m`
|
|
279
|
+
WB_CONN_WORK=`ssh://user@mycompany.local;${WB_CONN_OPTIONS}`
|
|
280
|
+
```
|
|
281
|
+
Поддерживаемые префиксы:
|
|
282
|
+
- `WB_` — переменные, специфичные для CLI
|
|
283
|
+
- `MIRTA_` — переменные для использования в любом контексте Mirta
|
|
284
|
+
- `NODE_ENV` — стандартное значение окружения
|
|
285
|
+
|
|
286
|
+
#### Формат строки подключения
|
|
287
|
+
|
|
288
|
+
```sh
|
|
289
|
+
ssh://[user@]host[:port][;param1=value1;param2=value2...]
|
|
290
|
+
```
|
|
291
|
+
Поддерживаемые параметры:
|
|
292
|
+
|
|
293
|
+
| Параметр | Описание | Пример |
|
|
294
|
+
|----------|---------|---------|
|
|
295
|
+
| `pkcs11` | Путь к библиотеке PKCS#11 (Rutoken) | `pkcs11=/usr/lib/librtpkcs11ecp.so` |
|
|
296
|
+
| `key` | Путь к SSH-ключу (ED25519, RSA) | `key=~/.ssh/id_ed25519` |
|
|
297
|
+
| `ttl` | Время жизни ключа в ssh-agent | `ttl=1h` |
|
|
298
|
+
| `wsl` | Дистрибутив WSL2 для Windows | `wsl=Debian` |
|
|
145
299
|
|
|
146
|
-
|
|
300
|
+
> Примечание: `pkcs11` имеет приоритет над `key`, если указаны одновременно.
|
|
301
|
+
|
|
302
|
+
Примеры:
|
|
147
303
|
|
|
148
304
|
```sh
|
|
149
|
-
|
|
305
|
+
# SSH-ключ ED25519
|
|
306
|
+
ssh://deploy@192.168.42.1;key=~/.ssh/id_ed25519;ttl=30m
|
|
307
|
+
|
|
308
|
+
# PKCS#11 токен (Rutoken) с WSL2 на Windows
|
|
309
|
+
ssh://deploy@192.168.42.1;pkcs11=/usr/lib/librtpkcs11ecp.so;wsl=Ubuntu-22.04
|
|
310
|
+
|
|
311
|
+
# С переменными окружения
|
|
312
|
+
ssh://deploy@${WB_HOST};key=${MIRTA_SSH_KEY}
|
|
150
313
|
```
|
|
151
|
-
Операция запустит процедуру сборки и публикации готовых пакетов.
|
|
152
314
|
|
|
153
|
-
|
|
315
|
+
<details>
|
|
316
|
+
<summary>Нюансы PKCS#11</summary>
|
|
317
|
+
|
|
318
|
+
Если `ssh-agent` выбрасывает ошибку `agent refused operation`:
|
|
319
|
+
|
|
320
|
+
- Путь к модулю PKCS#11 должен быть реальным — симлинки отклоняются
|
|
321
|
+
- Превышено число попыток ввода PIN-кода, токен заблокирован
|
|
154
322
|
|
|
155
|
-
|
|
323
|
+
</details>
|
|
324
|
+
|
|
325
|
+
#### Пример и описание структуры `mirta.config.json`
|
|
326
|
+
|
|
327
|
+
```jsonc
|
|
328
|
+
{
|
|
329
|
+
// Строки подключений к контроллерам
|
|
330
|
+
"connections": {
|
|
331
|
+
// Без подробностей в публичном репозитории
|
|
332
|
+
"work": "${WB_CONN_WORK}",
|
|
333
|
+
// Частичное сокрытие подробностей
|
|
334
|
+
"home": "ssh://user@192.168.42.1;${WB_CONN_OPTIONS};wsl=Ubuntu",
|
|
335
|
+
},
|
|
336
|
+
"deploy": {
|
|
337
|
+
// Наборы правил синхронизации
|
|
338
|
+
"mappings": {
|
|
339
|
+
"wb-rules-es5": [
|
|
340
|
+
{
|
|
341
|
+
// Локальная папка (относительно корня проекта)
|
|
342
|
+
"from": "dist/es5/wb-rules-rules",
|
|
343
|
+
// Целевая папка на контроллере
|
|
344
|
+
"to": "/mnt/data/etc/wb-rules-rules",
|
|
345
|
+
// Группа пользователей с доступом на контроллере (опционально)
|
|
346
|
+
"toGroup": "developers",
|
|
347
|
+
// Удалять файлы в целевой папке, если их нет в исходной
|
|
348
|
+
"cleanup": true,
|
|
349
|
+
// Список файлов и папок, которые нельзя удалять при cleanup: true
|
|
350
|
+
"protect": ["alarms.conf"]
|
|
351
|
+
},
|
|
352
|
+
// {
|
|
353
|
+
// Следующее правило синхронизации...
|
|
354
|
+
// }
|
|
355
|
+
]
|
|
356
|
+
},
|
|
357
|
+
// Заранее настроенные сценарии деплоя
|
|
358
|
+
"profiles": {
|
|
359
|
+
"default": {
|
|
360
|
+
// Массив имён наборов правил секции deploy.mappings
|
|
361
|
+
"mappings": ["wb-rules-es5"],
|
|
362
|
+
// Имя или строка подключения
|
|
363
|
+
"connection": "work",
|
|
364
|
+
// Группа пользователей с доступом на контроллере (опционально)
|
|
365
|
+
"toGroup": "developers"
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
```
|
|
156
371
|
|
|
157
|
-
##
|
|
372
|
+
## ✅ Тестирование
|
|
158
373
|
|
|
159
|
-
|
|
374
|
+
Инструмент протестирован вручную и в CI:
|
|
375
|
+
- Интерактивный и автоматический релиз.
|
|
376
|
+
- Обработка ошибок (откат версий при сбое).
|
|
377
|
+
- Проверка git-состояния и CI.
|
|
378
|
+
- Поддержка `--dry-run`.
|
|
160
379
|
|
|
161
|
-
|
|
380
|
+
Дополнительные испытания:
|
|
162
381
|
|
|
163
|
-
|
|
382
|
+
- Деплой с `Rutoken`, деплой с ключом `ED25519` в WSL2 под Windows и отдельно в Linux Debian (Trixie).
|
|
164
383
|
|
|
165
|
-
|
|
384
|
+
## ⚠️ Ограничения
|
|
166
385
|
|
|
167
|
-
|
|
386
|
+
**Работает только в Node.js** (не в Duktape).<br/>
|
|
387
|
+
Автоматическое создание коммита и тега — только при `ssh`-подключении к GitHub.<br/>
|
|
388
|
+
WSL2 требуется для деплоя под Windows.
|
|
168
389
|
|
|
169
|
-
|
|
390
|
+
## 🛠 Конфигурация Mirta
|
|
170
391
|
|
|
171
|
-
|
|
392
|
+
Файл `mirta.config.json` настраивает поведение `@mirta/cli`.
|
|
172
393
|
|
|
173
|
-
|
|
394
|
+
Поддерживаемые поля:
|
|
174
395
|
|
|
175
|
-
|
|
396
|
+
- `project.templates` — пути к шаблонам (например, для `create-mirta`).
|
|
397
|
+
- `connections` — именованные подключения.
|
|
398
|
+
- `deploy.mappings` — правила синхронизации.
|
|
399
|
+
- `deploy.profiles` — профили деплоя.
|