gitverse-release 3.5.0 → 3.7.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 +277 -0
- package/dist/binaries.d.ts +74 -0
- package/dist/cli.js +7029 -305
- package/dist/cli.js.map +61 -20
- package/dist/config.d.ts +46 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +6879 -251
- package/dist/index.js.map +61 -20
- package/dist/types.d.ts +270 -0
- package/dist/utils/binary-archive-extractor.d.ts +19 -0
- package/dist/utils/binary-package-generator.d.ts +24 -0
- package/dist/utils/binary-platforms.d.ts +105 -0
- package/dist/utils/binary-publisher.d.ts +53 -0
- package/dist/utils/binary-wrapper-generator.d.ts +34 -0
- package/dist/utils/git.d.ts +9 -1
- package/package.json +4 -3
- package/schema.json +104 -0
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,250 @@ 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
|
+
### Пакеты без scope
|
|
364
|
+
|
|
365
|
+
`scope` опционален. Без него пакеты публикуются как `myapp-linux-x64` вместо `@org/myapp-linux-x64`:
|
|
366
|
+
|
|
367
|
+
```jsonc
|
|
368
|
+
{
|
|
369
|
+
"binaries": {
|
|
370
|
+
"enabled": true,
|
|
371
|
+
"name": "myapp", // без scope!
|
|
372
|
+
"distDir": "./dist",
|
|
373
|
+
"platforms": ["linux-x64", "darwin-arm64"]
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Результат: myapp-linux-x64, myapp-darwin-arm64
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
### Кастомный шаблон имени пакета
|
|
380
|
+
|
|
381
|
+
Используйте `packageNameTemplate` для гибкой настройки имён:
|
|
382
|
+
|
|
383
|
+
```jsonc
|
|
384
|
+
{
|
|
385
|
+
"binaries": {
|
|
386
|
+
"name": "myapp",
|
|
387
|
+
"packageNameTemplate": "{{name}}-bin-{{platform}}"
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// Результат: myapp-bin-linux-x64
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
```jsonc
|
|
394
|
+
{
|
|
395
|
+
"binaries": {
|
|
396
|
+
"name": "myapp",
|
|
397
|
+
"scope": "@org",
|
|
398
|
+
"packageNameTemplate": "@{{scope}}/{{name}}-cli-{{platform}}"
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
// Результат: @org/myapp-cli-linux-x64
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**Плейсхолдеры:** `{{scope}}`, `{{name}}`, `{{platform}}`
|
|
405
|
+
|
|
406
|
+
**Дефолтные шаблоны:**
|
|
407
|
+
- Без scope: `{{name}}-{{platform}}`
|
|
408
|
+
- Со scope: `@{{scope}}/{{name}}-{{platform}}`
|
|
409
|
+
|
|
410
|
+
### Структура бинарников
|
|
411
|
+
|
|
412
|
+
#### Формат "directory" (по умолчанию)
|
|
413
|
+
|
|
414
|
+
Бинарники в директориях:
|
|
415
|
+
|
|
416
|
+
```
|
|
417
|
+
dist/
|
|
418
|
+
yougile-linux-x64/
|
|
419
|
+
yougile # бинарник для linux x64
|
|
420
|
+
yougile-darwin-arm64/
|
|
421
|
+
yougile # бинарник для macOS ARM
|
|
422
|
+
yougile-win32-x64/
|
|
423
|
+
yougile.exe # бинарник для Windows
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
#### Формат "tar.gz"
|
|
427
|
+
|
|
428
|
+
Бинарники в tar.gz архивах (удобно для CI артефактов):
|
|
429
|
+
|
|
430
|
+
```jsonc
|
|
431
|
+
{
|
|
432
|
+
"binaries": {
|
|
433
|
+
"inputFormat": "tar.gz",
|
|
434
|
+
"sourceBinName": "cli", // имя бинарника внутри архива
|
|
435
|
+
"platformMap": { // маппинг имён архивов на платформы
|
|
436
|
+
"linux-amd64": "linux-x64",
|
|
437
|
+
"darwin-arm64": "darwin-arm64",
|
|
438
|
+
"windows-x64": "win32-x64"
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
Структура архивов:
|
|
445
|
+
```
|
|
446
|
+
dist/
|
|
447
|
+
myapp-linux-amd64.tar.gz # содержит cli (или cli внутри поддиректории)
|
|
448
|
+
myapp-darwin-arm64.tar.gz
|
|
449
|
+
myapp-windows-x64.tar.gz
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
**Опции для tar.gz:**
|
|
453
|
+
- `inputFormat: "tar.gz"` — включает режим архивов
|
|
454
|
+
- `sourceBinName` — имя бинарника внутри архива (если отличается от `name`)
|
|
455
|
+
- `platformMap` — маппинг ключей в именах архивов на npm платформы
|
|
456
|
+
|
|
457
|
+
### Генерируемая структура
|
|
458
|
+
|
|
459
|
+
```
|
|
460
|
+
npm/
|
|
461
|
+
@rainypixel/
|
|
462
|
+
yougile-linux-x64/
|
|
463
|
+
package.json # { "os": ["linux"], "cpu": ["x64"], "bin": {...} }
|
|
464
|
+
bin/yougile # скопированный бинарник
|
|
465
|
+
README.md
|
|
466
|
+
yougile-darwin-arm64/
|
|
467
|
+
...
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### CLI опции
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
# Publish binaries
|
|
474
|
+
npx gitverse-release publish-binaries [options]
|
|
475
|
+
|
|
476
|
+
# Generate only (без публикации)
|
|
477
|
+
npx gitverse-release generate-binary-packages [options]
|
|
478
|
+
|
|
479
|
+
Опции:
|
|
480
|
+
--dry-run Preview без изменений
|
|
481
|
+
--version <ver> Override версии
|
|
482
|
+
--platforms <list> Конкретные платформы (comma-separated)
|
|
483
|
+
--generate-only Только генерация (для publish-binaries)
|
|
484
|
+
--skip-main-package Не обновлять основной package.json
|
|
485
|
+
--verbose Подробный вывод
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### Кастомная команда публикации
|
|
489
|
+
|
|
490
|
+
Команда публикации поддерживает плейсхолдеры:
|
|
491
|
+
|
|
492
|
+
```jsonc
|
|
493
|
+
{
|
|
494
|
+
"binaries": {
|
|
495
|
+
"publishCommand": "npm publish --access public --registry https://registry.npmjs.org"
|
|
496
|
+
// Доступные плейсхолдеры:
|
|
497
|
+
// {{packageDir}} - путь к пакету
|
|
498
|
+
// {{version}} - версия
|
|
499
|
+
// {{platform}} - платформа (linux-x64, etc.)
|
|
500
|
+
// {{scope}} - npm scope
|
|
501
|
+
// {{name}} - имя пакета
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### Пример dry-run вывода
|
|
507
|
+
|
|
508
|
+
```
|
|
509
|
+
🔍 DRY RUN MODE
|
|
510
|
+
|
|
511
|
+
📦 Binary Distribution:
|
|
512
|
+
Scope: @rainypixel
|
|
513
|
+
Name: yougile
|
|
514
|
+
Version: 1.2.3
|
|
515
|
+
Platforms: linux-x64, darwin-arm64
|
|
516
|
+
|
|
517
|
+
📁 Packages to generate:
|
|
518
|
+
npm/@rainypixel/yougile-linux-x64/
|
|
519
|
+
npm/@rainypixel/yougile-darwin-arm64/
|
|
520
|
+
|
|
521
|
+
📝 Main package updates:
|
|
522
|
+
optionalDependencies:
|
|
523
|
+
"@rainypixel/yougile-linux-x64": "1.2.3"
|
|
524
|
+
"@rainypixel/yougile-darwin-arm64": "1.2.3"
|
|
525
|
+
bin:
|
|
526
|
+
"yougile": "bin/yougile.js"
|
|
527
|
+
|
|
528
|
+
🚀 Publish command: npm publish --access public
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
### Интеграция с CI/CD
|
|
532
|
+
|
|
533
|
+
```yaml
|
|
534
|
+
jobs:
|
|
535
|
+
publish-binaries:
|
|
536
|
+
runs-on: ubuntu-latest
|
|
537
|
+
steps:
|
|
538
|
+
- uses: actions/checkout@v4
|
|
539
|
+
|
|
540
|
+
# Скачать бинарники из других jobs или артефактов
|
|
541
|
+
- name: Download binaries
|
|
542
|
+
uses: actions/download-artifact@v4
|
|
543
|
+
with:
|
|
544
|
+
name: binaries
|
|
545
|
+
path: dist/
|
|
546
|
+
|
|
547
|
+
- uses: oven-sh/setup-bun@v2
|
|
548
|
+
- run: bun install
|
|
549
|
+
|
|
550
|
+
- name: Publish platform packages
|
|
551
|
+
run: npx gitverse-release publish-binaries
|
|
552
|
+
env:
|
|
553
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
554
|
+
```
|
|
555
|
+
|
|
311
556
|
## Конфигурация
|
|
312
557
|
|
|
313
558
|
### Полный пример
|
|
@@ -358,6 +603,17 @@ npx gitverse-release generate-commitlint --scope-required
|
|
|
358
603
|
"scopeRequired": false,
|
|
359
604
|
"headerMaxLength": 100,
|
|
360
605
|
"comments": true
|
|
606
|
+
},
|
|
607
|
+
"binaries": {
|
|
608
|
+
"enabled": false,
|
|
609
|
+
"scope": "@myorg",
|
|
610
|
+
"name": "myapp",
|
|
611
|
+
"distDir": "./dist",
|
|
612
|
+
"outDir": "./npm",
|
|
613
|
+
"platforms": ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"],
|
|
614
|
+
"publishCommand": "npm publish --access public",
|
|
615
|
+
"continueOnError": false,
|
|
616
|
+
"retryAttempts": 3
|
|
361
617
|
}
|
|
362
618
|
}
|
|
363
619
|
```
|
|
@@ -467,11 +723,20 @@ env:
|
|
|
467
723
|
# Создать релиз
|
|
468
724
|
npx gitverse-release [package] [options]
|
|
469
725
|
|
|
726
|
+
# Инициализировать конфигурацию
|
|
727
|
+
npx gitverse-release init [options]
|
|
728
|
+
|
|
470
729
|
# Генерировать commitlint конфиг
|
|
471
730
|
npx gitverse-release generate-commitlint [options]
|
|
472
731
|
|
|
473
732
|
# Создать только GitVerse Release для существующего тега (recovery mode)
|
|
474
733
|
npx gitverse-release create-only --tag <tag> [--package <name>]
|
|
734
|
+
|
|
735
|
+
# Публикация бинарных пакетов
|
|
736
|
+
npx gitverse-release publish-binaries [options]
|
|
737
|
+
|
|
738
|
+
# Генерация бинарных пакетов (без публикации)
|
|
739
|
+
npx gitverse-release generate-binary-packages [options]
|
|
475
740
|
```
|
|
476
741
|
|
|
477
742
|
### Опции для релиза
|
|
@@ -508,6 +773,18 @@ npx gitverse-release create-only --tag <tag> [--package <name>]
|
|
|
508
773
|
--verbose Подробный вывод
|
|
509
774
|
```
|
|
510
775
|
|
|
776
|
+
### Опции для publish-binaries / generate-binary-packages
|
|
777
|
+
|
|
778
|
+
```
|
|
779
|
+
Опции:
|
|
780
|
+
--dry-run Preview без изменений
|
|
781
|
+
--version <ver> Override версии (default: из package.json)
|
|
782
|
+
--platforms <list> Конкретные платформы (comma-separated)
|
|
783
|
+
--generate-only Только генерация, без публикации
|
|
784
|
+
--skip-main-package Не обновлять основной package.json
|
|
785
|
+
--verbose Подробный вывод
|
|
786
|
+
```
|
|
787
|
+
|
|
511
788
|
## CI/CD интеграция
|
|
512
789
|
|
|
513
790
|
### 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>;
|