gitverse-release 3.2.0 → 3.3.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 CHANGED
@@ -15,6 +15,8 @@
15
15
  - 🏷️ **Автоматические git теги и коммиты**
16
16
  - 🔍 **Режим dry-run** для безопасного тестирования
17
17
  - ⚙️ **Гибкая конфигурация** через `.gitversereleaserc.json`
18
+ - 🔧 **Автогенерация commitlint конфига** из release конфигурации
19
+ - 🪝 **Хуки beforeCommit** для автоматической подготовки файлов перед релизом
18
20
 
19
21
  ## Установка
20
22
 
@@ -224,6 +226,88 @@ git commit -m "fix(ui): исправлена ошибка компонента"
224
226
  git commit -m "chore: обновлены зависимости"
225
227
  ```
226
228
 
229
+ ## Генерация Commitlint конфига
230
+
231
+ Инструмент может автоматически генерировать `commitlint.config.ts` из вашей release конфигурации, обеспечивая синхронизацию между форматом коммитов и генерацией релизов.
232
+
233
+ ### Быстрый старт
234
+
235
+ ```bash
236
+ # Генерировать commitlint конфиг
237
+ npx gitverse-release generate-commitlint
238
+
239
+ # Preview без записи файла
240
+ npx gitverse-release generate-commitlint --dry-run
241
+
242
+ # С кастомными параметрами
243
+ npx gitverse-release generate-commitlint --format js --output .commitlintrc.js
244
+ ```
245
+
246
+ ### Что генерируется?
247
+
248
+ Команда автоматически извлекает:
249
+ - **Типы коммитов** из `changelog.types` (feat, fix, docs, etc.)
250
+ - **Scopes** из названий пакетов в монорепо + дополнительные scopes
251
+ - **Правила валидации** (max length, case, required fields)
252
+
253
+ ### Конфигурация defaults
254
+
255
+ Добавьте секцию `commitlint` в `.gitversereleaserc.json`:
256
+
257
+ ```json
258
+ {
259
+ "commitlint": {
260
+ "output": "commitlint.config.ts",
261
+ "format": "ts",
262
+ "scopes": ["deps", "ci", "docs"],
263
+ "scopeRequired": false,
264
+ "headerMaxLength": 100,
265
+ "comments": true
266
+ }
267
+ }
268
+ ```
269
+
270
+ Теперь можно просто запускать `npx gitverse-release generate-commitlint` без параметров!
271
+
272
+ ### CLI опции
273
+
274
+ ```bash
275
+ --output <path> Путь для вывода (default: из конфига)
276
+ --format <ts|js|json> Формат файла (default: из конфига)
277
+ --scopes <list> Дополнительные scopes через запятую
278
+ --scope-required Требовать обязательный scope
279
+ --header-max-length <n> Максимальная длина header
280
+ --no-comments Отключить комментарии в файле
281
+ --dry-run Preview без записи
282
+ --verbose Подробный вывод
283
+ ```
284
+
285
+ ### Примеры использования
286
+
287
+ ```bash
288
+ # Использовать настройки из конфига
289
+ npx gitverse-release generate-commitlint
290
+
291
+ # Preview сгенерированного файла
292
+ npx gitverse-release generate-commitlint --dry-run --verbose
293
+
294
+ # Генерировать JS вместо TS
295
+ npx gitverse-release generate-commitlint --format js --output .commitlintrc.js
296
+
297
+ # Добавить дополнительные scopes
298
+ npx gitverse-release generate-commitlint --scopes api,cli,tests
299
+
300
+ # Требовать обязательный scope
301
+ npx gitverse-release generate-commitlint --scope-required
302
+ ```
303
+
304
+ ### Преимущества
305
+
306
+ ✅ **Единый источник истины** - типы и scopes определяются в одном месте
307
+ ✅ **Автоматическая синхронизация** - изменения в release конфиге автоматически отражаются в commitlint
308
+ ✅ **Меньше ошибок** - нет риска рассинхронизации конфигов
309
+ ✅ **CI-friendly** - легко интегрируется в pipelines для проверки актуальности конфига
310
+
227
311
  ## Конфигурация
228
312
 
229
313
  ### Полный пример
@@ -231,6 +315,7 @@ git commit -m "chore: обновлены зависимости"
231
315
  ```json
232
316
  {
233
317
  "git": {
318
+ "beforeCommit": "bun run lint:fix",
234
319
  "commitMessage": "chore(release): v{version} [skip ci]",
235
320
  "tagMessage": "Release {version}",
236
321
  "push": true,
@@ -265,10 +350,54 @@ git commit -m "chore: обновлены зависимости"
265
350
  "monorepo": {
266
351
  "enabled": false,
267
352
  "packages": []
353
+ },
354
+ "commitlint": {
355
+ "output": "commitlint.config.ts",
356
+ "format": "ts",
357
+ "scopes": ["deps", "ci", "docs"],
358
+ "scopeRequired": false,
359
+ "headerMaxLength": 100,
360
+ "comments": true
361
+ }
362
+ }
363
+ ```
364
+
365
+ ### beforeCommit хук
366
+
367
+ Хук `beforeCommit` запускается **перед проверкой чистоты working tree** и позволяет автоматически подготовить файлы перед созданием релиза:
368
+
369
+ ```json
370
+ {
371
+ "git": {
372
+ "beforeCommit": "bun run lint:fix"
268
373
  }
269
374
  }
270
375
  ```
271
376
 
377
+ **Как это работает:**
378
+ 1. Запускается команда `beforeCommit` (например, линтер)
379
+ 2. Если команда выполнилась успешно (exit code 0):
380
+ - Все измененные файлы добавляются в staging area (`git add -A`)
381
+ - Эти изменения войдут в коммит релиза вместе с version/changelog
382
+ 3. Проверяется чистота working tree (только unstaged изменения)
383
+
384
+ **Примеры использования:**
385
+ ```json
386
+ // Форматирование кода
387
+ "beforeCommit": "bun run format"
388
+
389
+ // Линтинг и автофикс
390
+ "beforeCommit": "bun run lint:fix"
391
+
392
+ // Обновление lock файлов
393
+ "beforeCommit": "bun install --frozen-lockfile=false"
394
+
395
+ // Несколько команд
396
+ "beforeCommit": "bun run lint:fix && bun run format"
397
+ ```
398
+
399
+ **Важно:** Если хук завершается с ошибкой (exit code ≠ 0), изменения НЕ добавляются в staging area и релиз продолжается как обычно.
400
+
272
401
  ### Переменные окружения
273
402
 
274
403
  ```bash
@@ -332,19 +461,53 @@ env:
332
461
 
333
462
  ## CLI опции
334
463
 
335
- ```
464
+ ### Основные команды
465
+
466
+ ```bash
467
+ # Создать релиз
336
468
  npx gitverse-release [package] [options]
337
469
 
470
+ # Генерировать commitlint конфиг
471
+ npx gitverse-release generate-commitlint [options]
472
+
473
+ # Создать только GitVerse Release для существующего тега (recovery mode)
474
+ npx gitverse-release create-only --tag <tag> [--package <name>]
475
+ ```
476
+
477
+ ### Опции для релиза
478
+
479
+ ```
338
480
  Аргументы:
339
481
  package Имя пакета для релиза (для монорепозиториев)
340
482
 
341
483
  Опции:
342
484
  --dry-run Запуск без внесения изменений
485
+ --config <path> Путь к конфиг файлу (default: .gitversereleaserc.json)
486
+ --package <name> Имя пакета для релиза (для монорепо)
343
487
  --version <version> Указать конкретную версию
344
- --skip-git-check Пропустить проверку git статуса
488
+ --prerelease [tag] Создать prerelease версию (beta, alpha, rc)
489
+ --no-commit Не создавать git коммит
490
+ --no-tag Не создавать git тег
491
+ --no-push Не пушить в remote
492
+ --no-release Не создавать GitVerse Release
493
+ --verbose Подробный вывод
345
494
  --help Показать справку
346
495
  ```
347
496
 
497
+ ### Опции для generate-commitlint
498
+
499
+ ```
500
+ Опции:
501
+ --output <path> Путь для вывода (default: commitlint.config.ts)
502
+ --format <ts|js|json> Формат файла (default: ts)
503
+ --scopes <scopes> Дополнительные scopes (comma-separated)
504
+ --scope-required Требовать обязательный scope
505
+ --header-max-length <n> Максимальная длина header (default: 100)
506
+ --no-comments Отключить комментарии в файле
507
+ --dry-run Preview без записи
508
+ --verbose Подробный вывод
509
+ ```
510
+
348
511
  ## CI/CD интеграция
349
512
 
350
513
  ### GitVerse Actions
@@ -434,7 +597,7 @@ MIT © [RainyPixel](https://gitverse.ru/RainyPixel)
434
597
 
435
598
  ## Сообщить об ошибке
436
599
 
437
- Создайте issue на [GitVerse](https://gitverse.ru/RainyPixel/gitverse-sdk/issues)
600
+ Создайте issue на [GitVerse](https://gitverse.ru/RainyPixel/gitverse-sdk/tasktracker)
438
601
 
439
602
  ---
440
603