spectrum-cli 2.1.1 → 3.0.0
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 +14 -24
- package/README.md +97 -60
- package/index.js +16 -33
- 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/token.js +27 -19
- 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
|
-
## [
|
|
8
|
+
## 🚀 [3.0.0] - 2026-08-31
|
|
9
9
|
|
|
10
10
|
### 💥 Breaking change
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
- Команда `spectrum changelog append` создает независимый fragment в `.changelog/` вместо изменения общего `CHANGELOG.md`; для проверки добавлена команда `spectrum changelog check`, а `spectrum release start` собирает и удаляет fragments автоматически.
|
|
13
|
+
- Источник правды о версии — git-теги `vX.Y.Z`: CLI больше не читает и не изменяет `package.json`, lock-файлы, не создает и не проверяет `release/*`-ветки; команда `spectrum version up` удалена.
|
|
14
|
+
- `spectrum release start` вычисляет target от максимального стабильного тега, достижимого из stable-ветки, схлопывает fragments в `CHANGELOG.md` одним коммитом в dev и атомарно пушит release commit напрямую в dev и main/master без MR.
|
|
15
|
+
- `spectrum release start` блокирует новый релиз, пока `CHANGELOG.md` содержит одну или несколько версий новее последнего стабильного тега, не позволяя повторному запуску понизить версию.
|
|
16
|
+
- `spectrum release deploy` и `spectrum release close` читают версию релиза из верхнего заголовка `## 🚀 [X.Y.Z]` файла `CHANGELOG.md`.
|
|
17
|
+
- Changelog task ID принимается только из веток `<type>/<YOUTRACK-ID>` или `<type>/<YOUTRACK-ID>-<slug>`.
|
|
13
18
|
|
|
14
19
|
### 🆕 Added
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
- Команда `spectrum chart create` требует запись о версии в `CHANGELOG.md` чарта и запрещает версию не больше последней опубликованной (обход через `--force`).
|
|
22
|
+
- Флаг `--wait` команды `spectrum chart create` дожидается публикации версии чарта в Helm-registry GitLab.
|
|
23
|
+
- Команда `spectrum chart deploy` проверяет наличие версии чарта в Helm-registry перед обновлением helmrelease-файлов (требуется `GITLAB_PRIVATE_TOKEN`).
|
|
24
|
+
- Флаг `--instances` команды `spectrum chart deploy` ограничивает деплой выбранными инстансами; в сообщение коммита добавлены версия чарта и список инстансов.
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
_Список изменившейся функциональности._
|
|
21
|
-
|
|
22
|
-
### 📜 Deprecated
|
|
23
|
-
|
|
24
|
-
_Список устаревшей функциональности._
|
|
25
|
-
|
|
26
|
-
### 🗑 Removed
|
|
27
|
-
|
|
28
|
-
_Список удаленной функциональности._
|
|
26
|
+
## 🚀 [2.1.2] - 2026-08-17
|
|
29
27
|
|
|
30
|
-
###
|
|
31
|
-
|
|
32
|
-
_Список исправлений багов._
|
|
33
|
-
|
|
34
|
-
### 🔐 Security
|
|
35
|
-
|
|
36
|
-
_Список правок для обеспечения безопасности._
|
|
37
|
-
|
|
38
|
-
### 📦 Support
|
|
28
|
+
### 🛠 Changed
|
|
39
29
|
|
|
40
|
-
|
|
30
|
+
- Команда `spectrum token rotate` запрашивает два токена: owner PAT для работы с CI variables и `GITLAB_PRIVATE_TOKEN` для записи в переменные.
|
|
41
31
|
|
|
42
32
|
## 🚀 [2.1.1] - 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,44 +125,61 @@ 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`.
|
|
142
|
-
- `spectrum token rotate`: `load-config` (есть валидный `~/.config/spectrum-cli/config.yaml`), `ask-
|
|
136
|
+
- `spectrum token rotate`: `load-config` (есть валидный `~/.config/spectrum-cli/config.yaml`), `ask-tokens` (owner PAT и `GITLAB_PRIVATE_TOKEN` только в памяти), `check-access` (все группы и проекты доступны owner PAT).
|
|
143
137
|
|
|
144
138
|
## 🔄 Workflow релиза
|
|
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
|
|
|
@@ -210,50 +223,74 @@ projects: []
|
|
|
210
223
|
```
|
|
211
224
|
|
|
212
225
|
- `bot` и `token_ttl_months` читаются только из конфига.
|
|
213
|
-
-
|
|
226
|
+
- Скрытым вводом запрашиваются два токена. Оба живут только в памяти.
|
|
227
|
+
- Owner PAT: ходит в API, проверяет доступ, читает/удаляет/создает CI variables. Для групп нужен Owner, для проектов — Maintainer+.
|
|
228
|
+
- `GITLAB_PRIVATE_TOKEN`: только значение, которое пишется в CI variable.
|
|
214
229
|
- Для каждой группы и проекта CI variable `GITLAB_PRIVATE_TOKEN` удаляется (если есть) и создается заново как masked and hidden.
|
|
215
230
|
- Description переменной: `PAT от бота <bot>, владелец Колосов. Истекает YYYY-MM-DD.` Дата = сегодня + `token_ttl_months`.
|
|
216
231
|
|
|
217
232
|
1. Загружает или создает конфиг
|
|
218
|
-
2. Запрашивает
|
|
219
|
-
3.
|
|
220
|
-
4.
|
|
233
|
+
2. Запрашивает owner PAT
|
|
234
|
+
3. Запрашивает `GITLAB_PRIVATE_TOKEN`
|
|
235
|
+
4. Проверяет доступ ко всем группам и проектам owner PAT
|
|
236
|
+
5. Обновляет CI variables во всех целях
|
|
221
237
|
|
|
222
238
|
## 📝 Работа с Changelog
|
|
223
239
|
|
|
224
240
|
### `spectrum changelog append "Сообщение"`
|
|
225
241
|
|
|
226
|
-
|
|
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
|
+
интерактивно и не придумывается.
|
|
227
249
|
|
|
228
250
|
**✨ Основные возможности:**
|
|
229
251
|
- 🔍 **Автоматическое извлечение** номера задачи из названия ветки
|
|
230
|
-
-
|
|
252
|
+
- 🧭 **Строгая проверка** GitFlow-префикса и YouTrack ID в имени ветки
|
|
231
253
|
- 👤 **Проверка Git config** с подсказками по настройке
|
|
232
254
|
- 🎯 **Умное определение раздела** по типу ветки
|
|
233
|
-
-
|
|
234
|
-
-
|
|
235
|
-
- ✅ **Проверка Prettier** перед изменениями `CHANGELOG.md` (команда остановится при ошибке)
|
|
255
|
+
- 🧩 **Дополнение существующего fragment** той же задачи без дублирования строк
|
|
256
|
+
- 🔀 **Автоматическая сборка** общего changelog во время `spectrum release start`
|
|
236
257
|
|
|
237
258
|
**📋 Поддерживаемые типы веток:**
|
|
238
|
-
- `feature/` → выбор между Added, Changed, Deprecated, Removed
|
|
259
|
+
- `feature/`, `feat/` → выбор между Breaking change, Added, Changed, Deprecated, Removed
|
|
239
260
|
- `bugfix/`, `fix/` → автоматически Fixed
|
|
240
261
|
- `support/` → выбор между Support, Security
|
|
241
262
|
- другие → показ всех разделов
|
|
242
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
|
+
|
|
243
273
|
**📌 Пример использования:**
|
|
274
|
+
|
|
244
275
|
```bash
|
|
245
276
|
# На ветке feature/ABC-123-new-component
|
|
246
277
|
spectrum changelog append "Добавлен новый компонент кнопки"
|
|
247
278
|
|
|
248
|
-
#
|
|
279
|
+
# Результат:
|
|
280
|
+
# .changelog/ABC-123-feature-new-component.added.md
|
|
249
281
|
# - ABC-123 Добавлен новый компонент кнопки. [Ваше Имя](ваш@email.com)
|
|
250
282
|
```
|
|
251
283
|
|
|
252
|
-
|
|
284
|
+
Fragment должен содержать только непустые Markdown-строки, начинающиеся с `- `. Один fragment может содержать несколько записей одного типа. Fragment коммитится вместе с изменением и удаляется только автоматикой релиза.
|
|
285
|
+
|
|
286
|
+
### `spectrum changelog check`
|
|
287
|
+
|
|
288
|
+
Команда предназначена для локальной и CI-проверки перед merge:
|
|
253
289
|
|
|
254
|
-
-
|
|
255
|
-
-
|
|
256
|
-
-
|
|
290
|
+
- проверяет формат `CHANGELOG.md` через Prettier;
|
|
291
|
+
- требует хотя бы один fragment в `.changelog/`;
|
|
292
|
+
- проверяет имя `<name>.<type>.md`, поддерживаемый тип и формат каждой строки;
|
|
293
|
+
- не изменяет файлы.
|
|
257
294
|
|
|
258
295
|
> Совет: Приведите файл к нужному формату командой:
|
|
259
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")
|
|
@@ -107,7 +90,7 @@ const tokenCmd = program
|
|
|
107
90
|
|
|
108
91
|
tokenCmd
|
|
109
92
|
.command("rotate")
|
|
110
|
-
.description("Пролить GITLAB_PRIVATE_TOKEN в CI variables
|
|
93
|
+
.description("Пролить GITLAB_PRIVATE_TOKEN в CI variables через owner PAT")
|
|
111
94
|
.action(() => runAction(token.tokenRotate));
|
|
112
95
|
|
|
113
96
|
// Переопределяем help, чтобы показать кастомный формат с алиасами
|
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
|
+
};
|