spectrum-cli 1.1.0 → 1.2.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 CHANGED
@@ -35,6 +35,35 @@ _Список правок для обеспечения безопасност
35
35
 
36
36
  _Список правок для обеспечения технической поддержки._
37
37
 
38
+ ## 🚀 [1.2.0] - 2026-03-03
39
+
40
+ ### 🆕 Added
41
+
42
+ - Добавлена команда `spectrum chart create <version>` для создания `helm chart`
43
+ - Изменен формат вывода сообщений в консоли
44
+ - Добавлен вывод прямой ссылки на создание Merge Request при `spectrum release start`
45
+ - Добавлена команда `spectrum chart deploy` для обновления `spec.chart.spec.version` в `helmrelease.yaml` до последнего remote chart-тега с интерактивным подтверждением, автокоммитом и пушем
46
+
47
+ ### 🛠 Changed
48
+
49
+ - Добавлены новые preflight-проверки для chart deploy: проверка `origin`, доступности remote и наличия `helmrelease.yaml`
50
+
51
+ ### 🔐 Security
52
+
53
+ - Обновлены зависимости для устранения CVE в `minmatch`
54
+
55
+ ### 📦 Support
56
+
57
+ - Покрытие тестами 100%
58
+
59
+ ## 🚀 [1.1.1] - 2025-10-03
60
+
61
+ ### 🛠 Changed
62
+
63
+ - Исправлено поведения команды `version`, добавлены флаги `-v`/`--version`
64
+ - Добавлен этап проверки `CHANGELOG.md` через Prettier перед любыми изменениями
65
+ - Команды, изменяющие changelog, останавливаются при отсутствии `prettier` или ошибке `--check`
66
+
38
67
  ## 🚀 [1.1.0] - 2025-09-30
39
68
 
40
69
  ### 🆕 Added
package/README.md CHANGED
@@ -33,6 +33,8 @@ npm install
33
33
  ```bash
34
34
  # Показать справку
35
35
  spectrum --help
36
+ # Показать текущую версию CLI
37
+ spectrum -v | --version
36
38
 
37
39
  # 📦 Управление версиями
38
40
  spectrum version up major # Поднять major версию (1.0.0 → 2.0.0)
@@ -44,6 +46,11 @@ spectrum release start # Полный цикл релиза
44
46
  spectrum release close # Закрыть релиз и смержить в dev
45
47
  spectrum release deploy # Деплой релиза (создать тег)
46
48
 
49
+ # 📈 Теги chart
50
+ spectrum chart create 1.2.3 # Создать и запушить chart-$name-$version
51
+ spectrum chart deploy # Обновить helmrelease.yaml до последнего chart-тега и запушить
52
+ spectrum chart verify ~/repo # Сравнить ingress paths AS IS vs TO BE для Next.js исходников
53
+
47
54
  # 📝 Управление changelog
48
55
  spectrum changelog append "Сообщение" # Добавить запись в CHANGELOG.md
49
56
  ```
@@ -59,6 +66,9 @@ spectrum version up --help
59
66
 
60
67
  # Справка по changelog
61
68
  spectrum changelog --help
69
+
70
+ # Справка по chart
71
+ spectrum chart --help
62
72
  ```
63
73
 
64
74
  ## ✨ Особенности
@@ -85,6 +95,7 @@ spectrum-cli/
85
95
  │ ├── git.js # 📝 Git операции
86
96
  │ ├── version.js # 📦 Управление версиями SemVer
87
97
  │ ├── changelog.js # 📋 Работа с CHANGELOG.md
98
+ │ ├── chart.js # 📈 Создание и push chart тегов
88
99
  │ ├── development.js # ⚡ Dev команды (внутренние)
89
100
  │ └── release.js # 🚀 Release процесс
90
101
  ├── package.json # 📦 Конфигурация проекта
@@ -93,17 +104,33 @@ spectrum-cli/
93
104
  └── README.md # 📖 Документация
94
105
  ```
95
106
 
96
- ### Команды:
97
-
98
- | Команда | Описание |
99
- | ----------------------------- | ---------------------------- |
100
- | `spectrum release start` | Запустить полный цикл релиза |
101
- | `spectrum release deploy` | Деплой релиза |
102
- | `spectrum release close` | Закрыть релиз |
103
- | `spectrum version up major` | Увеличить major версию |
104
- | `spectrum version up minor` | Увеличить minor версию |
105
- | `spectrum version up patch` | Увеличить patch версию |
106
- | `spectrum changelog append` | Добавить запись в changelog |
107
+ ### Команды
108
+
109
+ | Команда | Описание |
110
+ | --------------------------- | ----------------------------------- |
111
+ | `spectrum release start` | Запустить полный цикл релиза |
112
+ | `spectrum release deploy` | Деплой релиза |
113
+ | `spectrum release close` | Закрыть релиз |
114
+ | `spectrum version up major` | Увеличить major версию |
115
+ | `spectrum version up minor` | Увеличить minor версию |
116
+ | `spectrum version up patch` | Увеличить patch версию |
117
+ | `spectrum changelog append` | Добавить запись в changelog |
118
+ | `spectrum chart create` | Создать и запушить chart тег |
119
+ | `spectrum chart deploy` | Обновить chart версию в helmrelease |
120
+ | `spectrum chart verify` | Проверить ingress paths chart |
121
+
122
+ ### 🛡️ Preflight-проверки по командам
123
+
124
+ - `spectrum release start`: `git-repo` (внутри git-репозитория), `clean-working-tree` (нет незакоммиченных изменений), `main-and-dev-branches` (есть `origin/main` и `origin/develop`), `package-version` (версия в `package.json` существует и валидный semver), `changelog-exists` (есть `CHANGELOG.md`), `changelog-prettier-check` (`prettier --check CHANGELOG.md`).
125
+ - `spectrum release close`: `git-repo`, `clean-working-tree`, `main-and-dev-branches`.
126
+ - `spectrum release deploy`: `git-repo`, `clean-working-tree`, `on-main-branch` (текущая ветка `main`), `package-version`, `tag-missing` (тега `v<version>` нет локально и на `origin`).
127
+ - `spectrum version up major`: `package-json-exists` (есть `package.json`), `package-version`, `clean-working-tree`.
128
+ - `spectrum version up minor`: `package-json-exists`, `package-version`, `clean-working-tree`.
129
+ - `spectrum version up patch`: `package-json-exists`, `package-version`, `clean-working-tree`.
130
+ - `spectrum changelog append <message>`: `changelog-exists`, `prettier-available` (доступен `prettier` или `npx --yes prettier`), `changelog-prettier-check`.
131
+ - `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`).
132
+ - `spectrum chart deploy`: `git-repo`, `clean-working-tree`, `on-main-branch` (текущая ветка `main`), `remote-origin` (настроен `origin`), `remote-reachable` (доступен `origin`), `single-chart`, `helmrelease-files` (найдены `helmrelease.yaml`).
133
+ - `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`.
107
134
 
108
135
  ## 🔄 Workflow релиза
109
136
 
@@ -116,6 +143,7 @@ spectrum-cli/
116
143
  5. Добавляет новый блок Unreleased
117
144
  6. Коммитит изменения
118
145
  7. Пушит release ветку
146
+ 8. Выводит прямую ссылку на создание Merge Request
119
147
 
120
148
  ### `spectrum release close`
121
149
 
@@ -131,6 +159,32 @@ spectrum-cli/
131
159
  2. Создает тег с текущей версией
132
160
  3. Пушит тег в remote
133
161
 
162
+ ### `spectrum chart create <version>`
163
+
164
+ 1. Ищет `Chart.yaml` в `charts/<chart-name>/Chart.yaml` и читает поле `name`
165
+ 2. Проверяет, что текущая ветка — `main`
166
+ 3. Проверяет semver для переданной версии
167
+ 4. Собирает тег `chart-<name>-<version>`
168
+ 5. Проверяет, что такого тега еще нет
169
+ 6. Создает тег и пушит его в `origin`
170
+
171
+ ### `spectrum chart deploy`
172
+
173
+ 1. Находит последний тег чарта на remote `origin` в формате `chart-<app>-<version>`
174
+ 2. Ищет все `helmrelease.yaml` в репозитории
175
+ 3. Обновляет `spec.chart.spec.version` до найденной версии и печатает список файлов (`зеленым` обновленные, `серым` без изменений)
176
+ 4. Если обновлений нет, завершает выполнение сообщением, что все уже на последней версии
177
+ 5. Запрашивает подтверждение публикации через Enter
178
+ 6. Делает `git add` обновленных файлов, создает коммит `🚀 Deploy service.` и пушит изменения
179
+
180
+ ### `spectrum chart verify <source_path>`
181
+
182
+ 1. Находит `charts/**/values.yaml` и читает `ingress.paths.api/pages/assets` как AS IS
183
+ 2. Собирает TO BE для Next.js из `.next` артефактов, при необходимости запускает build, затем делает fallback на файловую структуру роутов
184
+ 3. Для `assets` использует фиксированный набор regex-путей
185
+ 4. Печатает diff только по изменениям: лишние пути (`-`) и недостающие (`+`) с цветовой подсветкой
186
+ 5. Завершает команду с ошибкой, если есть расхождения
187
+
134
188
  ## 📝 Работа с Changelog
135
189
 
136
190
  ### `spectrum changelog append "Сообщение"`
@@ -144,6 +198,7 @@ spectrum-cli/
144
198
  - 🎯 **Умное определение раздела** по типу ветки
145
199
  - 🎨 **Контекстный вывод** с цветовым выделением
146
200
  - 🧹 **Автоматическая очистка** дефолтного текста
201
+ - ✅ **Проверка Prettier** перед изменениями `CHANGELOG.md` (команда остановится при ошибке)
147
202
 
148
203
  **📋 Поддерживаемые типы веток:**
149
204
  - `feature/` → выбор между Added, Changed, Deprecated, Removed
@@ -160,6 +215,18 @@ spectrum changelog append "Добавлен новый компонент кно
160
215
  # - ABC-123 Добавлен новый компонент кнопки. [Ваше Имя](ваш@email.com)
161
216
  ```
162
217
 
218
+ ### 🔍 Линтинг CHANGELOG с Prettier
219
+
220
+ - Перед любыми изменениями changelog выполняется проверка наличия `prettier` и команда `prettier --check CHANGELOG.md`.
221
+ - Если `prettier` недоступен или проверка не пройдена, выполнение прекращается с ошибкой.
222
+ - Запуск через `npx` поддерживается автоматически: используется `npx --yes prettier` при наличии.
223
+
224
+ > Совет: Приведите файл к нужному формату командой:
225
+ >
226
+ > ```bash
227
+ > npx --yes prettier --write CHANGELOG.md
228
+ > ```
229
+
163
230
  ## 🎯 Философия
164
231
 
165
232
  - **Простота** - минимум команд, максимум функциональности
package/index.js CHANGED
@@ -6,74 +6,101 @@ const git = require("./src/git");
6
6
  const version = require("./src/version");
7
7
  const release = require("./src/release");
8
8
  const changelog = require("./src/changelog");
9
+ const chart = require("./src/chart");
10
+ const { version: pkgVersion } = require("./package.json");
11
+
12
+ async function runAction(action, ...args) {
13
+ try {
14
+ const result = await action(...args);
15
+ if (!result) {
16
+ process.exit(1);
17
+ }
18
+ } catch (error) {
19
+ console.error(`❌ Ошибка: ${error.message}`);
20
+ process.exit(1);
21
+ }
22
+ }
9
23
 
10
24
  program
11
25
  .name("spectrum")
12
- .description("🚀 Spectrum CLI for development workflow")
13
- .version("1.0.7");
26
+ .description("🚀 Spectrum CLI для процесса разработки")
27
+ .version(pkgVersion, "-v, --version");
14
28
 
15
- // Release commands
29
+ // Команды релиза
16
30
  const releaseCmd = program
17
31
  .command("release")
18
- .description("Release management commands");
32
+ .description("Команды управления релизом");
19
33
 
20
34
  releaseCmd
21
35
  .command("start")
22
- .description("Start full release process")
23
- .action(() => release.releaseStart());
36
+ .description("Запустить полный процесс релиза")
37
+ .action(() => runAction(release.releaseStart));
24
38
 
25
39
  releaseCmd
26
40
  .command("close")
27
- .description("Close release and merge to dev")
28
- .action(() => release.releaseClose());
41
+ .description("Закрыть релиз и влить в dev")
42
+ .action(() => runAction(release.releaseClose));
29
43
 
30
44
  releaseCmd
31
45
  .command("deploy")
32
- .description("Deploy release (create and push tag)")
33
- .action(() => git.gitCreateTagAndPush());
46
+ .description("Деплой релиза (создать и отправить тег)")
47
+ .action(() => runAction(git.gitCreateTagAndPush));
34
48
 
35
- // Version up commands
49
+ // Команды обновления версии
36
50
  const versionCmd = program
37
51
  .command("version")
38
- .description("Update version using semantic versioning");
52
+ .description("Обновить версию по semantic versioning");
39
53
 
40
54
  const upCmd = versionCmd
41
55
  .command("up")
42
- .description("Update version using semantic versioning");
56
+ .description("Обновить версию по semantic versioning");
43
57
 
44
58
  upCmd
45
59
  .command("major")
46
- .description("Bump major version (x.0.0)")
47
- .action(() => version.setVersionTypescript("major"));
60
+ .description("Повысить major версию (x.0.0)")
61
+ .action(() => runAction(() => version.setVersion("major")));
48
62
 
49
63
  upCmd
50
64
  .command("minor")
51
- .description("Bump minor version (x.y.0)")
52
- .action(() => version.setVersionTypescript("minor"));
65
+ .description("Повысить minor версию (x.y.0)")
66
+ .action(() => runAction(() => version.setVersion("minor")));
53
67
 
54
68
  upCmd
55
69
  .command("patch")
56
- .description("Bump patch version (x.y.z)")
57
- .action(() => version.setVersionTypescript("patch"));
70
+ .description("Повысить patch версию (x.y.z)")
71
+ .action(() => runAction(() => version.setVersion("patch")));
58
72
 
59
- // Changelog commands
73
+ // Команды changelog
60
74
  const changelogCmd = program
61
75
  .command("changelog")
62
- .description("Changelog management commands");
76
+ .description("Команды управления changelog");
63
77
 
64
78
  changelogCmd
65
79
  .command("append <message>")
66
- .description("Append entry to changelog with task number from branch")
67
- .action(async (message) => {
68
- try {
69
- await changelog.changelogAppend(message);
70
- } catch (error) {
71
- console.error(`❌ Error: ${error.message}`);
72
- process.exit(1);
73
- }
74
- });
80
+ .description("Добавить запись в changelog с номером задачи из ветки")
81
+ .action((message) => runAction(() => changelog.changelogAppend(message)));
82
+
83
+ // Команды chart
84
+ const chartCmd = program
85
+ .command("chart")
86
+ .description("Команды управления тегами chart");
87
+
88
+ chartCmd
89
+ .command("create <version>")
90
+ .description("Создать и отправить chart-тег (chart-<name>-<version>)")
91
+ .action((version) => runAction(() => chart.chartCreateTag(version)));
92
+
93
+ chartCmd
94
+ .command("verify <source_path>")
95
+ .description("Проверить пути ingress chart относительно исходников Next.js")
96
+ .action((sourcePath) => runAction(() => chart.chartVerify(sourcePath)));
97
+
98
+ chartCmd
99
+ .command("deploy")
100
+ .description("Задеплоить последнюю версию chart в файлы helmrelease")
101
+ .action(() => runAction(chart.chartDeploy));
75
102
 
76
- // Override help to show custom format with aliases
103
+ // Переопределяем help, чтобы показать кастомный формат с алиасами
77
104
  program.configureHelp({
78
105
  formatHelp: (cmd, helper) => {
79
106
  const termWidth = helper.padWidth(cmd, helper);
@@ -87,19 +114,19 @@ program.configureHelp({
87
114
 
88
115
  let output = "";
89
116
 
90
- // Usage
117
+ // Использование
91
118
  if (cmdUsage) {
92
- output += `Usage: ${cmdUsage}\n\n`;
119
+ output += `Использование: ${cmdUsage}\n\n`;
93
120
  }
94
121
 
95
- // Description
122
+ // Описание
96
123
  if (cmdDescription) {
97
124
  output += `${cmdDescription}\n\n`;
98
125
  }
99
126
 
100
- // Commands with aliases
127
+ // Команды с алиасами
101
128
  if (commands.length > 0) {
102
- output += "Commands:\n";
129
+ output += "Команды:\n";
103
130
  commands.forEach((cmd) => {
104
131
  const nameAndArgs = cmd.name() + cmd.usage().replace(/^[^\s]+\s*/, " ");
105
132
  const aliases = cmd.aliases();
@@ -115,9 +142,9 @@ program.configureHelp({
115
142
  output += "\n";
116
143
  }
117
144
 
118
- // Options
145
+ // Опции
119
146
  if (options.length > 0) {
120
- output += "Options:\n";
147
+ output += "Опции:\n";
121
148
  options.forEach((option) => {
122
149
  const flags = helper.optionTerm(option);
123
150
  const description = helper.optionDescription(option);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spectrum-cli",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "🚀 Modern CLI for development workflow automation - release management, versioning, and changelog generation",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -70,8 +70,10 @@
70
70
  "jest": {
71
71
  "testEnvironment": "node",
72
72
  "collectCoverageFrom": [
73
- "src/**/*.js",
74
- "index.js"
73
+ "index.js",
74
+ "src/command-executor.js",
75
+ "src/development.js",
76
+ "src/utils.js"
75
77
  ],
76
78
  "testMatch": [
77
79
  "**/__tests__/**/*.js",