spectrum-cli 2.1.2 → 3.0.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/CHANGELOG.md +16 -26
- package/README.md +89 -55
- package/index.js +15 -32
- package/package.json +1 -1
- package/src/changelog-config.js +38 -0
- package/src/changelog.js +222 -251
- package/src/chart.js +256 -6
- package/src/git.js +2 -2
- package/src/preflight.js +255 -25
- package/src/release.js +95 -108
- package/src/utils.js +0 -10
- package/src/version.js +31 -40
- package/src/UNRELEASED.md +0 -33
package/CHANGELOG.md
CHANGED
|
@@ -5,39 +5,29 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
9
|
-
|
|
10
|
-
### 💥 Breaking change
|
|
11
|
-
|
|
12
|
-
_Список обратно несовместимых изменений._
|
|
13
|
-
|
|
14
|
-
### 🆕 Added
|
|
15
|
-
|
|
16
|
-
_Список новой функциональности._
|
|
17
|
-
|
|
18
|
-
### 🛠 Changed
|
|
19
|
-
|
|
20
|
-
_Список изменившейся функциональности._
|
|
21
|
-
|
|
22
|
-
### 📜 Deprecated
|
|
23
|
-
|
|
24
|
-
_Список устаревшей функциональности._
|
|
25
|
-
|
|
26
|
-
### 🗑 Removed
|
|
27
|
-
|
|
28
|
-
_Список удаленной функциональности._
|
|
8
|
+
## 🚀 [3.0.1] - 2026-08-31
|
|
29
9
|
|
|
30
10
|
### 🪲 Fixed
|
|
31
11
|
|
|
32
|
-
|
|
12
|
+
- Исправлено создание переносимых путей changelog fragments в Windows.
|
|
33
13
|
|
|
34
|
-
|
|
14
|
+
## 🚀 [3.0.0] - 2026-08-31
|
|
35
15
|
|
|
36
|
-
|
|
16
|
+
### 💥 Breaking change
|
|
37
17
|
|
|
38
|
-
|
|
18
|
+
- Команда `spectrum changelog append` создает независимый fragment в `.changelog/` вместо изменения общего `CHANGELOG.md`; для проверки добавлена команда `spectrum changelog check`, а `spectrum release start` собирает и удаляет fragments автоматически.
|
|
19
|
+
- Источник правды о версии — git-теги `vX.Y.Z`: CLI больше не читает и не изменяет `package.json`, lock-файлы, не создает и не проверяет `release/*`-ветки; команда `spectrum version up` удалена.
|
|
20
|
+
- `spectrum release start` вычисляет target от максимального стабильного тега, достижимого из stable-ветки, схлопывает fragments в `CHANGELOG.md` одним коммитом в dev и атомарно пушит release commit напрямую в dev и main/master без MR.
|
|
21
|
+
- `spectrum release start` блокирует новый релиз, пока `CHANGELOG.md` содержит одну или несколько версий новее последнего стабильного тега, не позволяя повторному запуску понизить версию.
|
|
22
|
+
- `spectrum release deploy` и `spectrum release close` читают версию релиза из верхнего заголовка `## 🚀 [X.Y.Z]` файла `CHANGELOG.md`.
|
|
23
|
+
- Changelog task ID принимается только из веток `<type>/<YOUTRACK-ID>` или `<type>/<YOUTRACK-ID>-<slug>`.
|
|
24
|
+
|
|
25
|
+
### 🆕 Added
|
|
39
26
|
|
|
40
|
-
|
|
27
|
+
- Команда `spectrum chart create` требует запись о версии в `CHANGELOG.md` чарта и запрещает версию не больше последней опубликованной (обход через `--force`).
|
|
28
|
+
- Флаг `--wait` команды `spectrum chart create` дожидается публикации версии чарта в Helm-registry GitLab.
|
|
29
|
+
- Команда `spectrum chart deploy` проверяет наличие версии чарта в Helm-registry перед обновлением helmrelease-файлов (требуется `GITLAB_PRIVATE_TOKEN`).
|
|
30
|
+
- Флаг `--instances` команды `spectrum chart deploy` ограничивает деплой выбранными инстансами; в сообщение коммита добавлены версия чарта и список инстансов.
|
|
41
31
|
|
|
42
32
|
## 🚀 [2.1.2] - 2026-08-17
|
|
43
33
|
|
package/README.md
CHANGED
|
@@ -36,23 +36,22 @@ spectrum --help
|
|
|
36
36
|
# Показать текущую версию CLI
|
|
37
37
|
spectrum -v | --version
|
|
38
38
|
|
|
39
|
-
# 📦 Управление версиями
|
|
40
|
-
spectrum version up major # Поднять major версию (1.0.0 → 2.0.0)
|
|
41
|
-
spectrum version up minor # Поднять minor версию (1.0.0 → 1.1.0)
|
|
42
|
-
spectrum version up patch # Поднять patch версию (1.0.0 → 1.0.1)
|
|
43
|
-
|
|
44
39
|
# 🚀 Управление релизами
|
|
45
|
-
spectrum release start
|
|
46
|
-
spectrum release
|
|
47
|
-
spectrum release
|
|
40
|
+
spectrum release start # Схлопнуть fragments и атомарно отправить release commit в dev и main/master
|
|
41
|
+
spectrum release deploy # Создать стабильный тег vX.Y.Z из заголовка CHANGELOG
|
|
42
|
+
spectrum release close # Свести stable main/master в dev
|
|
48
43
|
|
|
49
44
|
# 📈 Теги chart
|
|
50
|
-
spectrum chart create 1.2.3 # Создать и запушить chart-$name-$version
|
|
45
|
+
spectrum chart create 1.2.3 # Создать и запушить chart-$name-$version (требует запись в CHANGELOG.md чарта)
|
|
46
|
+
spectrum chart create 1.2.3 --wait # После пуша тега дождаться публикации версии в Helm-registry
|
|
47
|
+
spectrum chart create 1.2.2 --force # Разрешить версию не больше последней опубликованной
|
|
51
48
|
spectrum chart deploy # Обновить helmrelease.yaml до последнего chart-тега и запушить
|
|
49
|
+
spectrum chart deploy --instances sd,cbch # Обновить только выбранные инстансы instances/<name>
|
|
52
50
|
spectrum chart verify ~/repo # Сравнить ingress paths AS IS vs TO BE для Next.js исходников
|
|
53
51
|
|
|
54
52
|
# 📝 Управление changelog
|
|
55
|
-
spectrum changelog append "Сообщение" #
|
|
53
|
+
spectrum changelog append "Сообщение" # Создать fragment в .changelog/
|
|
54
|
+
spectrum changelog check # Проверить CHANGELOG.md и все fragments
|
|
56
55
|
|
|
57
56
|
# 🔑 GitLab токены
|
|
58
57
|
spectrum token rotate # Пролить GITLAB_PRIVATE_TOKEN в CI variables
|
|
@@ -64,9 +63,6 @@ spectrum token rotate # Пролить GITLAB_PRIVATE_TOKEN в CI variables
|
|
|
64
63
|
# Справка по релизам
|
|
65
64
|
spectrum release --help
|
|
66
65
|
|
|
67
|
-
# Справка по версиям
|
|
68
|
-
spectrum version up --help
|
|
69
|
-
|
|
70
66
|
# Справка по changelog
|
|
71
67
|
spectrum changelog --help
|
|
72
68
|
|
|
@@ -96,11 +92,13 @@ spectrum token --help
|
|
|
96
92
|
```
|
|
97
93
|
spectrum-cli/
|
|
98
94
|
├── index.js # 🚀 Главный CLI интерфейс
|
|
95
|
+
├── .changelog/ # 🧩 Независимые записи для следующего релиза
|
|
99
96
|
├── src/ # 📁 Исходный код
|
|
100
97
|
│ ├── utils.js # 🛠️ Утилиты и логирование
|
|
101
98
|
│ ├── git.js # 📝 Git операции
|
|
102
|
-
│ ├── version.js # 📦
|
|
103
|
-
│ ├── changelog.js
|
|
99
|
+
│ ├── version.js # 📦 SemVer-хелперы (парсинг, сравнение, бамп)
|
|
100
|
+
│ ├── changelog-config.js # 🧩 Типы и правила changelog fragments
|
|
101
|
+
│ ├── changelog.js # 📋 Создание и сборка changelog fragments
|
|
104
102
|
│ ├── chart.js # 📈 Создание и push chart тегов
|
|
105
103
|
│ ├── token.js # 🔑 Ротация GitLab PAT и CI variables
|
|
106
104
|
│ ├── development.js # ⚡ Dev команды (внутренние)
|
|
@@ -115,13 +113,11 @@ spectrum-cli/
|
|
|
115
113
|
|
|
116
114
|
| Команда | Описание |
|
|
117
115
|
| --------------------------- | ----------------------------------- |
|
|
118
|
-
| `spectrum release start` |
|
|
119
|
-
| `spectrum release deploy` |
|
|
116
|
+
| `spectrum release start` | Схлопнуть и опубликовать fragments |
|
|
117
|
+
| `spectrum release deploy` | Создать стабильный тег vX.Y.Z |
|
|
120
118
|
| `spectrum release close` | Закрыть релиз |
|
|
121
|
-
| `spectrum
|
|
122
|
-
| `spectrum
|
|
123
|
-
| `spectrum version up patch` | Увеличить patch версию |
|
|
124
|
-
| `spectrum changelog append` | Добавить запись в changelog |
|
|
119
|
+
| `spectrum changelog append` | Создать changelog fragment |
|
|
120
|
+
| `spectrum changelog check` | Проверить changelog и fragments |
|
|
125
121
|
| `spectrum chart create` | Создать и запушить chart тег |
|
|
126
122
|
| `spectrum chart deploy` | Обновить chart версию в helmrelease |
|
|
127
123
|
| `spectrum chart verify` | Проверить ingress paths chart |
|
|
@@ -129,13 +125,11 @@ spectrum-cli/
|
|
|
129
125
|
|
|
130
126
|
### 🛡️ Preflight-проверки по командам
|
|
131
127
|
|
|
132
|
-
- `spectrum release start`:
|
|
133
|
-
- `spectrum release
|
|
134
|
-
- `spectrum release
|
|
135
|
-
- `spectrum
|
|
136
|
-
- `spectrum
|
|
137
|
-
- `spectrum version up patch`: `package-json-exists`, `package-version`, `clean-working-tree`.
|
|
138
|
-
- `spectrum changelog append <message>`: `changelog-exists`, `prettier-available` (доступен `prettier` или `npx --yes prettier`), `changelog-prettier-check`.
|
|
128
|
+
- `spectrum release start`: чистая и актуальная dev-ветка, стабильный тег, достижимый из `origin/main` или `origin/master`, отсутствие в `CHANGELOG.md` незакрытых версий новее этого тега, валидные fragments и отсутствие целевых hotfix-веток и тега. Версия вычисляется только из тегов и fragments — `package.json` не читается.
|
|
129
|
+
- `spectrum release deploy`: чистая и актуальная main/master, стабильная версия `X.Y.Z` из верхнего заголовка `CHANGELOG.md`, отсутствие локального и remote-тега `vX.Y.Z`. Команда не создает RC-теги.
|
|
130
|
+
- `spectrum release close`: чистая и актуальная main/master, версия из верхнего заголовка `CHANGELOG.md` и remote-тег `vX.Y.Z`, указывающий на текущий commit.
|
|
131
|
+
- `spectrum changelog append <message>`: `git-repo`, `changelog-exists`, валидные ID задачи, git identity и тип fragment. Команда не изменяет общий `CHANGELOG.md`.
|
|
132
|
+
- `spectrum changelog check`: `git-repo`, `changelog-exists`, `changelog-prettier-check`, наличие и формат всех changelog fragments.
|
|
139
133
|
- `spectrum chart create <version>`: `git-repo`, `clean-working-tree`, `on-main-branch`, `valid-semver` (переданный `<version>` — semver), `single-chart` (ровно один `charts/<chart-name>/Chart.yaml`), `tag-missing` (тега `chart-<name>-<version>` нет локально и на `origin`).
|
|
140
134
|
- `spectrum chart deploy`: `git-repo`, `clean-working-tree`, `on-main-branch` (текущая ветка `main`), `remote-origin` (настроен `origin`), `remote-reachable` (доступен `origin`), `single-chart`, `helmrelease-files` (найдены `helmrelease.yaml`).
|
|
141
135
|
- `spectrum chart verify <source_path>`: `git-repo`, `single-values-yaml` (ровно один `charts/**/values.yaml`), `values-ingress-sections` (есть `ingress.paths.api/pages/assets`), `source-path-directory`, `next-project`, `build-command-support`.
|
|
@@ -145,28 +139,47 @@ spectrum-cli/
|
|
|
145
139
|
|
|
146
140
|
### `spectrum release start`
|
|
147
141
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
142
|
+
Выполняется на `dev`:
|
|
143
|
+
|
|
144
|
+
1. Проверяет `CHANGELOG.md`, отсутствие релизов новее последнего стабильного тега и все файлы `.changelog/<name>.<type>.md`. Новый релиз нельзя начать, пока предыдущий не получил stable-тег.
|
|
145
|
+
2. После `git fetch origin --prune --tags` находит максимальный стабильный тег `vX.Y.Z`, достижимый из stable-ветки, и применяет к нему максимальное повышение: `breaking` → major, `added` → minor, остальные типы → patch.
|
|
146
|
+
3. Собирает новый релизный блок `## 🚀 [X.Y.Z]` в `CHANGELOG.md` из fragments в стабильном порядке разделов.
|
|
147
|
+
4. Удаляет использованные fragments.
|
|
148
|
+
5. Повторно проверяет формат `CHANGELOG.md`.
|
|
149
|
+
6. Коммитит схлопнутый changelog одним коммитом в `dev` и атомарно пушит этот commit напрямую в `origin/dev` и `origin/main` или `origin/master`, без Merge Request.
|
|
150
|
+
|
|
151
|
+
Команда не изменяет `package.json`, lock-файлы и не создает `release/*`-веток. Прямой push в stable-ветку должен быть разрешен правилами защиты репозитория; non-fast-forward обновление не выполняется.
|
|
156
152
|
|
|
157
153
|
### `spectrum release close`
|
|
158
154
|
|
|
159
|
-
1.
|
|
160
|
-
2. Обновляет main
|
|
161
|
-
3.
|
|
162
|
-
4.
|
|
163
|
-
5. Пушит dev ветку
|
|
155
|
+
1. Читает версию из верхнего заголовка `CHANGELOG.md` и проверяет, что стабильный `vX.Y.Z` уже указывает на текущий commit main/master.
|
|
156
|
+
2. Обновляет main/master и dev.
|
|
157
|
+
3. Мержит main/master в dev.
|
|
158
|
+
4. Пушит синхронизированный `dev`.
|
|
164
159
|
|
|
165
160
|
### `spectrum release deploy`
|
|
166
161
|
|
|
167
|
-
1.
|
|
168
|
-
2. Создает
|
|
169
|
-
3. Пушит тег в
|
|
162
|
+
1. Проверяет актуальную main/master и читает версию `X.Y.Z` из верхнего заголовка `CHANGELOG.md`.
|
|
163
|
+
2. Создает единственный release-тег `vX.Y.Z`.
|
|
164
|
+
3. Пушит тег в `origin`. RC-теги CLI не создает.
|
|
165
|
+
|
|
166
|
+
### Цикл версий и CI
|
|
167
|
+
|
|
168
|
+
Источник правды о версии — git-тег `vX.Y.Z`. Файлы версий (`package.json`, `Makefile`) не читаются ни CLI, ни CI:
|
|
169
|
+
|
|
170
|
+
| Событие | Источник версии | Артефакт |
|
|
171
|
+
| --- | --- | --- |
|
|
172
|
+
| stable-тег `v1.0.0` | git-тег | `1.0.0` |
|
|
173
|
+
| коммиты в dev | тег `v1.0.0` + бамп из `.changelog/` | `1.1.0-alpha.SHORTSHA` |
|
|
174
|
+
| `release start` на dev | fragments схлопнуты в `## 🚀 [1.1.0]` | release commit в `dev` и `main/master` |
|
|
175
|
+
| merge в main/master | заголовок CHANGELOG `1.1.0` | `1.1.0-rc.1`, затем `rc.2`, ... |
|
|
176
|
+
| stable-тег `v1.1.0` | git-тег | проверенный RC продвигается в `1.1.0` |
|
|
177
|
+
| merge stable в dev (`release close`) | тег `v1.1.0` + бамп fragments | `X.Y.Z-alpha.SHORTSHA` |
|
|
178
|
+
|
|
179
|
+
Номер RC хранится в registry и переиспользуется при retry того же commit SHA.
|
|
180
|
+
Git содержит только стабильные теги `vX.Y.Z`. Stable pipeline проверяет OCI
|
|
181
|
+
revision обязательных образов и копирует точные RC digest без пересборки. Эту
|
|
182
|
+
CI-часть реализует подключенный release component, а не Spectrum CLI.
|
|
170
183
|
|
|
171
184
|
### `spectrum chart create <version>`
|
|
172
185
|
|
|
@@ -226,37 +239,58 @@ projects: []
|
|
|
226
239
|
|
|
227
240
|
### `spectrum changelog append "Сообщение"`
|
|
228
241
|
|
|
229
|
-
|
|
242
|
+
Команда создает независимый файл `.changelog/<task>-<branch>.<type>.md`. Разработчики больше не редактируют общий блок `Unreleased`, поэтому параллельные ветки не конфликтуют в `CHANGELOG.md`.
|
|
243
|
+
|
|
244
|
+
Рабочая ветка должна полностью соответствовать `<type>/<YOUTRACK-ID>` или
|
|
245
|
+
`<type>/<YOUTRACK-ID>-<slug>`, например `feature/AR-123` или
|
|
246
|
+
`bugfix/ABBVJSOP-1-timeout`. YouTrack ID начинается сразу после первого `/` и
|
|
247
|
+
соответствует `[A-Z]+-[0-9]+`; отсутствующий ID больше не запрашивается
|
|
248
|
+
интерактивно и не придумывается.
|
|
230
249
|
|
|
231
250
|
**✨ Основные возможности:**
|
|
232
251
|
- 🔍 **Автоматическое извлечение** номера задачи из названия ветки
|
|
233
|
-
-
|
|
252
|
+
- 🧭 **Строгая проверка** GitFlow-префикса и YouTrack ID в имени ветки
|
|
234
253
|
- 👤 **Проверка Git config** с подсказками по настройке
|
|
235
254
|
- 🎯 **Умное определение раздела** по типу ветки
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
- ✅ **Проверка Prettier** перед изменениями `CHANGELOG.md` (команда остановится при ошибке)
|
|
255
|
+
- 🧩 **Дополнение существующего fragment** той же задачи без дублирования строк
|
|
256
|
+
- 🔀 **Автоматическая сборка** общего changelog во время `spectrum release start`
|
|
239
257
|
|
|
240
258
|
**📋 Поддерживаемые типы веток:**
|
|
241
|
-
- `feature/` → выбор между Added, Changed, Deprecated, Removed
|
|
259
|
+
- `feature/`, `feat/` → выбор между Breaking change, Added, Changed, Deprecated, Removed
|
|
242
260
|
- `bugfix/`, `fix/` → автоматически Fixed
|
|
243
261
|
- `support/` → выбор между Support, Security
|
|
244
262
|
- другие → показ всех разделов
|
|
245
263
|
|
|
264
|
+
**📋 Типы fragment и SemVer:**
|
|
265
|
+
|
|
266
|
+
| Суффикс | Раздел | Повышение версии |
|
|
267
|
+
| --- | --- | --- |
|
|
268
|
+
| `breaking` | Breaking change | major |
|
|
269
|
+
| `added` | Added | minor |
|
|
270
|
+
| `changed`, `deprecated`, `removed` | Соответствующий раздел | patch |
|
|
271
|
+
| `fixed`, `security`, `support` | Соответствующий раздел | patch |
|
|
272
|
+
|
|
246
273
|
**📌 Пример использования:**
|
|
274
|
+
|
|
247
275
|
```bash
|
|
248
276
|
# На ветке feature/ABC-123-new-component
|
|
249
277
|
spectrum changelog append "Добавлен новый компонент кнопки"
|
|
250
278
|
|
|
251
|
-
#
|
|
279
|
+
# Результат:
|
|
280
|
+
# .changelog/ABC-123-feature-new-component.added.md
|
|
252
281
|
# - ABC-123 Добавлен новый компонент кнопки. [Ваше Имя](ваш@email.com)
|
|
253
282
|
```
|
|
254
283
|
|
|
255
|
-
|
|
284
|
+
Fragment должен содержать только непустые Markdown-строки, начинающиеся с `- `. Один fragment может содержать несколько записей одного типа. Fragment коммитится вместе с изменением и удаляется только автоматикой релиза.
|
|
285
|
+
|
|
286
|
+
### `spectrum changelog check`
|
|
287
|
+
|
|
288
|
+
Команда предназначена для локальной и CI-проверки перед merge:
|
|
256
289
|
|
|
257
|
-
-
|
|
258
|
-
-
|
|
259
|
-
-
|
|
290
|
+
- проверяет формат `CHANGELOG.md` через Prettier;
|
|
291
|
+
- требует хотя бы один fragment в `.changelog/`;
|
|
292
|
+
- проверяет имя `<name>.<type>.md`, поддерживаемый тип и формат каждой строки;
|
|
293
|
+
- не изменяет файлы.
|
|
260
294
|
|
|
261
295
|
> Совет: Приведите файл к нужному формату командой:
|
|
262
296
|
>
|
package/index.js
CHANGED
|
@@ -3,7 +3,6 @@ const { Command } = require("commander");
|
|
|
3
3
|
const program = new Command();
|
|
4
4
|
|
|
5
5
|
const git = require("./src/git");
|
|
6
|
-
const version = require("./src/version");
|
|
7
6
|
const release = require("./src/release");
|
|
8
7
|
const changelog = require("./src/changelog");
|
|
9
8
|
const chart = require("./src/chart");
|
|
@@ -34,53 +33,34 @@ const releaseCmd = program
|
|
|
34
33
|
|
|
35
34
|
releaseCmd
|
|
36
35
|
.command("start")
|
|
37
|
-
.description("
|
|
36
|
+
.description("Схлопнуть changelog fragments в dev и создать MR в main/master")
|
|
38
37
|
.action(() => runAction(release.releaseStart));
|
|
39
38
|
|
|
40
39
|
releaseCmd
|
|
41
40
|
.command("close")
|
|
42
|
-
.description("
|
|
41
|
+
.description("Свести стабильный релиз из main/master в dev")
|
|
43
42
|
.action(() => runAction(release.releaseClose));
|
|
44
43
|
|
|
45
44
|
releaseCmd
|
|
46
45
|
.command("deploy")
|
|
47
|
-
.description("
|
|
46
|
+
.description("Создать и отправить только стабильный тег vX.Y.Z")
|
|
48
47
|
.action(() => runAction(git.gitCreateTagAndPush));
|
|
49
48
|
|
|
50
|
-
// Команды обновления версии
|
|
51
|
-
const versionCmd = program
|
|
52
|
-
.command("version")
|
|
53
|
-
.description("Обновить версию по semantic versioning");
|
|
54
|
-
|
|
55
|
-
const upCmd = versionCmd
|
|
56
|
-
.command("up")
|
|
57
|
-
.description("Обновить версию по semantic versioning");
|
|
58
|
-
|
|
59
|
-
upCmd
|
|
60
|
-
.command("major")
|
|
61
|
-
.description("Повысить major версию (x.0.0)")
|
|
62
|
-
.action(() => runAction(() => version.setVersion("major")));
|
|
63
|
-
|
|
64
|
-
upCmd
|
|
65
|
-
.command("minor")
|
|
66
|
-
.description("Повысить minor версию (x.y.0)")
|
|
67
|
-
.action(() => runAction(() => version.setVersion("minor")));
|
|
68
|
-
|
|
69
|
-
upCmd
|
|
70
|
-
.command("patch")
|
|
71
|
-
.description("Повысить patch версию (x.y.z)")
|
|
72
|
-
.action(() => runAction(() => version.setVersion("patch")));
|
|
73
|
-
|
|
74
49
|
// Команды changelog
|
|
75
50
|
const changelogCmd = program
|
|
76
51
|
.command("changelog")
|
|
77
|
-
.description("Команды управления changelog");
|
|
52
|
+
.description("Команды управления changelog fragments");
|
|
78
53
|
|
|
79
54
|
changelogCmd
|
|
80
55
|
.command("append <message>")
|
|
81
|
-
.description("
|
|
56
|
+
.description("Создать changelog fragment с номером задачи из ветки")
|
|
82
57
|
.action((message) => runAction(() => changelog.changelogAppend(message)));
|
|
83
58
|
|
|
59
|
+
changelogCmd
|
|
60
|
+
.command("check")
|
|
61
|
+
.description("Проверить CHANGELOG.md и changelog fragments")
|
|
62
|
+
.action(() => runAction(changelog.changelogCheck));
|
|
63
|
+
|
|
84
64
|
// Команды chart
|
|
85
65
|
const chartCmd = program
|
|
86
66
|
.command("chart")
|
|
@@ -89,7 +69,9 @@ const chartCmd = program
|
|
|
89
69
|
chartCmd
|
|
90
70
|
.command("create <version>")
|
|
91
71
|
.description("Создать и отправить chart-тег (chart-<name>-<version>)")
|
|
92
|
-
.
|
|
72
|
+
.option("--force", "Разрешить версию не больше последней опубликованной")
|
|
73
|
+
.option("--wait", "Дождаться публикации версии чарта в Helm-registry")
|
|
74
|
+
.action((version, options) => runAction(() => chart.chartCreateTag(version, options)));
|
|
93
75
|
|
|
94
76
|
chartCmd
|
|
95
77
|
.command("verify <source_path>")
|
|
@@ -99,7 +81,8 @@ chartCmd
|
|
|
99
81
|
chartCmd
|
|
100
82
|
.command("deploy")
|
|
101
83
|
.description("Задеплоить последнюю версию chart в файлы helmrelease")
|
|
102
|
-
.
|
|
84
|
+
.option("--instances <names>", "Список инстансов через запятую (по умолчанию все)")
|
|
85
|
+
.action((options) => runAction(() => chart.chartDeploy(options)));
|
|
103
86
|
|
|
104
87
|
const tokenCmd = program
|
|
105
88
|
.command("token")
|
package/package.json
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const CHANGELOG_FILE = 'CHANGELOG.md';
|
|
4
|
+
const CHANGELOG_DIR = '.changelog';
|
|
5
|
+
|
|
6
|
+
const FRAGMENT_TYPES = Object.freeze({
|
|
7
|
+
breaking: Object.freeze({ section: '### 💥 Breaking change', bump: 'major' }),
|
|
8
|
+
added: Object.freeze({ section: '### 🆕 Added', bump: 'minor' }),
|
|
9
|
+
changed: Object.freeze({ section: '### 🛠 Changed', bump: 'patch' }),
|
|
10
|
+
deprecated: Object.freeze({ section: '### 📜 Deprecated', bump: 'patch' }),
|
|
11
|
+
removed: Object.freeze({ section: '### 🗑 Removed', bump: 'patch' }),
|
|
12
|
+
fixed: Object.freeze({ section: '### 🪲 Fixed', bump: 'patch' }),
|
|
13
|
+
security: Object.freeze({ section: '### 🔐 Security', bump: 'patch' }),
|
|
14
|
+
support: Object.freeze({ section: '### 📦 Support', bump: 'patch' })
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const SECTION_TO_TYPE = Object.freeze(
|
|
18
|
+
Object.fromEntries(Object.entries(FRAGMENT_TYPES).map(([type, config]) => [config.section, type]))
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
const FRAGMENT_TYPE_PATTERN = Object.keys(FRAGMENT_TYPES).join('|');
|
|
22
|
+
const FRAGMENT_FILE_PATTERN = new RegExp(`^(.+)\\.(${FRAGMENT_TYPE_PATTERN})\\.md$`);
|
|
23
|
+
|
|
24
|
+
function getFragmentType(filePath) {
|
|
25
|
+
const normalizedPath = String(filePath || '').replace(/\\/g, '/');
|
|
26
|
+
const fileName = normalizedPath.split('/').pop();
|
|
27
|
+
const match = fileName.match(FRAGMENT_FILE_PATTERN);
|
|
28
|
+
return match ? match[2] : null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
CHANGELOG_FILE,
|
|
33
|
+
CHANGELOG_DIR,
|
|
34
|
+
FRAGMENT_TYPES,
|
|
35
|
+
SECTION_TO_TYPE,
|
|
36
|
+
FRAGMENT_FILE_PATTERN,
|
|
37
|
+
getFragmentType
|
|
38
|
+
};
|