gitverse-release 3.5.0 → 3.6.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/README.md CHANGED
@@ -17,6 +17,7 @@
17
17
  - ⚙️ **Гибкая конфигурация** через `.gitversereleaserc.json`
18
18
  - 🔧 **Автогенерация commitlint конфига** из release конфигурации
19
19
  - 🪝 **Хуки beforeCommit** для автоматической подготовки файлов перед релизом
20
+ - 📤 **Бинарная дистрибуция** — публикация платформенных npm-пакетов (по паттерну esbuild/biome)
20
21
 
21
22
  ## Установка
22
23
 
@@ -308,6 +309,170 @@ npx gitverse-release generate-commitlint --scope-required
308
309
  ✅ **Меньше ошибок** - нет риска рассинхронизации конфигов
309
310
  ✅ **CI-friendly** - легко интегрируется в pipelines для проверки актуальности конфига
310
311
 
312
+ ## Бинарная дистрибуция
313
+
314
+ Инструмент поддерживает создание и публикацию платформенных npm-пакетов по паттерну, используемому esbuild, biome, bun и другими инструментами.
315
+
316
+ ### Как это работает
317
+
318
+ 1. **Платформенные пакеты** (`@scope/name-linux-x64`, `@scope/name-darwin-arm64`, ...) содержат только бинарник для конкретной платформы с фильтрами `os`/`cpu` в package.json
319
+ 2. **Основной пакет** объявляет их в `optionalDependencies` и содержит JS wrapper, который находит и запускает нужный бинарник
320
+ 3. npm автоматически устанавливает только подходящий платформенный пакет
321
+
322
+ ### Быстрый старт
323
+
324
+ ```bash
325
+ # Preview без публикации
326
+ npx gitverse-release publish-binaries --dry-run
327
+
328
+ # Только генерация пакетов (без публикации)
329
+ npx gitverse-release generate-binary-packages
330
+
331
+ # Генерация и публикация
332
+ npx gitverse-release publish-binaries
333
+ ```
334
+
335
+ ### Конфигурация
336
+
337
+ Добавьте секцию `binaries` в `.gitversereleaserc.jsonc`:
338
+
339
+ ```jsonc
340
+ {
341
+ "binaries": {
342
+ "enabled": true,
343
+ "scope": "@rainypixel", // npm scope
344
+ "name": "yougile", // базовое имя пакетов
345
+ "binName": "yougile", // имя бинарника в $PATH (опционально)
346
+ "distDir": "./dist", // директория с бинарниками
347
+ "outDir": "./npm", // куда генерировать пакеты
348
+ "platforms": [
349
+ "linux-x64",
350
+ "linux-arm64",
351
+ "darwin-x64",
352
+ "darwin-arm64",
353
+ "win32-x64"
354
+ ],
355
+ "publishCommand": "npm publish --access public",
356
+ "mainPackage": "./package.json", // основной package.json
357
+ "continueOnError": false, // продолжать при ошибке
358
+ "retryAttempts": 3 // retry для публикации
359
+ }
360
+ }
361
+ ```
362
+
363
+ ### Структура бинарников
364
+
365
+ Бинарники должны находиться в `distDir` в формате:
366
+
367
+ ```
368
+ dist/
369
+ yougile-linux-x64/
370
+ yougile # бинарник для linux x64
371
+ yougile-darwin-arm64/
372
+ yougile # бинарник для macOS ARM
373
+ yougile-win32-x64/
374
+ yougile.exe # бинарник для Windows
375
+ ```
376
+
377
+ ### Генерируемая структура
378
+
379
+ ```
380
+ npm/
381
+ @rainypixel/
382
+ yougile-linux-x64/
383
+ package.json # { "os": ["linux"], "cpu": ["x64"], "bin": {...} }
384
+ bin/yougile # скопированный бинарник
385
+ README.md
386
+ yougile-darwin-arm64/
387
+ ...
388
+ ```
389
+
390
+ ### CLI опции
391
+
392
+ ```bash
393
+ # Publish binaries
394
+ npx gitverse-release publish-binaries [options]
395
+
396
+ # Generate only (без публикации)
397
+ npx gitverse-release generate-binary-packages [options]
398
+
399
+ Опции:
400
+ --dry-run Preview без изменений
401
+ --version <ver> Override версии
402
+ --platforms <list> Конкретные платформы (comma-separated)
403
+ --generate-only Только генерация (для publish-binaries)
404
+ --skip-main-package Не обновлять основной package.json
405
+ --verbose Подробный вывод
406
+ ```
407
+
408
+ ### Кастомная команда публикации
409
+
410
+ Команда публикации поддерживает плейсхолдеры:
411
+
412
+ ```jsonc
413
+ {
414
+ "binaries": {
415
+ "publishCommand": "npm publish --access public --registry https://registry.npmjs.org"
416
+ // Доступные плейсхолдеры:
417
+ // {{packageDir}} - путь к пакету
418
+ // {{version}} - версия
419
+ // {{platform}} - платформа (linux-x64, etc.)
420
+ // {{scope}} - npm scope
421
+ // {{name}} - имя пакета
422
+ }
423
+ }
424
+ ```
425
+
426
+ ### Пример dry-run вывода
427
+
428
+ ```
429
+ 🔍 DRY RUN MODE
430
+
431
+ 📦 Binary Distribution:
432
+ Scope: @rainypixel
433
+ Name: yougile
434
+ Version: 1.2.3
435
+ Platforms: linux-x64, darwin-arm64
436
+
437
+ 📁 Packages to generate:
438
+ npm/@rainypixel/yougile-linux-x64/
439
+ npm/@rainypixel/yougile-darwin-arm64/
440
+
441
+ 📝 Main package updates:
442
+ optionalDependencies:
443
+ "@rainypixel/yougile-linux-x64": "1.2.3"
444
+ "@rainypixel/yougile-darwin-arm64": "1.2.3"
445
+ bin:
446
+ "yougile": "bin/yougile.js"
447
+
448
+ 🚀 Publish command: npm publish --access public
449
+ ```
450
+
451
+ ### Интеграция с CI/CD
452
+
453
+ ```yaml
454
+ jobs:
455
+ publish-binaries:
456
+ runs-on: ubuntu-latest
457
+ steps:
458
+ - uses: actions/checkout@v4
459
+
460
+ # Скачать бинарники из других jobs или артефактов
461
+ - name: Download binaries
462
+ uses: actions/download-artifact@v4
463
+ with:
464
+ name: binaries
465
+ path: dist/
466
+
467
+ - uses: oven-sh/setup-bun@v2
468
+ - run: bun install
469
+
470
+ - name: Publish platform packages
471
+ run: npx gitverse-release publish-binaries
472
+ env:
473
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
474
+ ```
475
+
311
476
  ## Конфигурация
312
477
 
313
478
  ### Полный пример
@@ -358,6 +523,17 @@ npx gitverse-release generate-commitlint --scope-required
358
523
  "scopeRequired": false,
359
524
  "headerMaxLength": 100,
360
525
  "comments": true
526
+ },
527
+ "binaries": {
528
+ "enabled": false,
529
+ "scope": "@myorg",
530
+ "name": "myapp",
531
+ "distDir": "./dist",
532
+ "outDir": "./npm",
533
+ "platforms": ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"],
534
+ "publishCommand": "npm publish --access public",
535
+ "continueOnError": false,
536
+ "retryAttempts": 3
361
537
  }
362
538
  }
363
539
  ```
@@ -467,11 +643,20 @@ env:
467
643
  # Создать релиз
468
644
  npx gitverse-release [package] [options]
469
645
 
646
+ # Инициализировать конфигурацию
647
+ npx gitverse-release init [options]
648
+
470
649
  # Генерировать commitlint конфиг
471
650
  npx gitverse-release generate-commitlint [options]
472
651
 
473
652
  # Создать только GitVerse Release для существующего тега (recovery mode)
474
653
  npx gitverse-release create-only --tag <tag> [--package <name>]
654
+
655
+ # Публикация бинарных пакетов
656
+ npx gitverse-release publish-binaries [options]
657
+
658
+ # Генерация бинарных пакетов (без публикации)
659
+ npx gitverse-release generate-binary-packages [options]
475
660
  ```
476
661
 
477
662
  ### Опции для релиза
@@ -508,6 +693,18 @@ npx gitverse-release create-only --tag <tag> [--package <name>]
508
693
  --verbose Подробный вывод
509
694
  ```
510
695
 
696
+ ### Опции для publish-binaries / generate-binary-packages
697
+
698
+ ```
699
+ Опции:
700
+ --dry-run Preview без изменений
701
+ --version <ver> Override версии (default: из package.json)
702
+ --platforms <list> Конкретные платформы (comma-separated)
703
+ --generate-only Только генерация, без публикации
704
+ --skip-main-package Не обновлять основной package.json
705
+ --verbose Подробный вывод
706
+ ```
707
+
511
708
  ## CI/CD интеграция
512
709
 
513
710
  ### GitVerse Actions
@@ -0,0 +1,74 @@
1
+ import type { BinaryCliOptions, BinaryDistributionResult } from "./types";
2
+ /**
3
+ * Генерирует бинарные пакеты без публикации.
4
+ *
5
+ * Эта функция создаёт платформенные npm-пакеты с бинарниками,
6
+ * но не публикует их. Используйте для подготовки пакетов перед публикацией.
7
+ *
8
+ * Процесс:
9
+ * 1. Загружает и валидирует конфигурацию
10
+ * 2. Проверяет наличие бинарников для каждой платформы
11
+ * 3. Генерирует package.json, README.md для каждого платформенного пакета
12
+ * 4. Копирует бинарники в соответствующие директории
13
+ * 5. Генерирует JS wrapper для основного пакета (если не skipMainPackage)
14
+ *
15
+ * @param options - Опции генерации
16
+ * @param options.config - Путь к конфиг-файлу
17
+ * @param options.version - Версия (по умолчанию из git tags)
18
+ * @param options.platforms - Конкретные платформы для генерации
19
+ * @param options.dryRun - Режим предпросмотра без записи файлов
20
+ * @param options.skipMainPackage - Не генерировать JS wrapper
21
+ * @returns Результат генерации с информацией об успешных и неудачных пакетах
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const result = await generateBinaryPackages({
26
+ * dryRun: true,
27
+ * platforms: ["linux-x64", "darwin-arm64"],
28
+ * });
29
+ *
30
+ * if (result.success) {
31
+ * console.log(`Generated ${result.packages.length} packages`);
32
+ * }
33
+ * ```
34
+ */
35
+ export declare function generateBinaryPackages(options?: BinaryCliOptions): Promise<BinaryDistributionResult>;
36
+ /**
37
+ * Генерирует и публикует бинарные пакеты в npm registry.
38
+ *
39
+ * Выполняет полный цикл бинарной дистрибуции:
40
+ * 1. Загружает и валидирует конфигурацию
41
+ * 2. Проверяет наличие бинарников для каждой платформы
42
+ * 3. Генерирует платформенные npm-пакеты (package.json, README.md, бинарник)
43
+ * 4. Публикует платформенные пакеты с retry при временных ошибках
44
+ * 5. Обновляет основной package.json с optionalDependencies
45
+ * 6. Генерирует JS wrapper для автоматического выбора бинарника
46
+ *
47
+ * Поведение при ошибках контролируется параметром `continueOnError` в конфиге:
48
+ * - `false` (default): останавливается при первой ошибке
49
+ * - `true`: продолжает, собирая ошибки в warnings
50
+ *
51
+ * @param options - Опции публикации
52
+ * @param options.config - Путь к конфиг-файлу
53
+ * @param options.version - Версия (по умолчанию из git tags)
54
+ * @param options.platforms - Конкретные платформы для публикации
55
+ * @param options.dryRun - Режим предпросмотра без записи файлов и публикации
56
+ * @param options.generateOnly - Только генерация, без публикации
57
+ * @param options.skipMainPackage - Не обновлять основной package.json
58
+ * @param options.verbose - Подробный вывод
59
+ * @returns Результат с информацией о сгенерированных и опубликованных пакетах
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * // Dry-run для проверки
64
+ * const preview = await publishBinaries({ dryRun: true });
65
+ *
66
+ * // Реальная публикация
67
+ * const result = await publishBinaries({ verbose: true });
68
+ *
69
+ * if (!result.success) {
70
+ * console.error("Errors:", result.errors);
71
+ * }
72
+ * ```
73
+ */
74
+ export declare function publishBinaries(options?: BinaryCliOptions): Promise<BinaryDistributionResult>;