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 +197 -0
- package/dist/binaries.d.ts +74 -0
- package/dist/cli.js +1263 -260
- package/dist/cli.js.map +26 -20
- package/dist/config.d.ts +46 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1158 -251
- package/dist/index.js.map +26 -20
- package/dist/types.d.ts +208 -0
- package/dist/utils/binary-package-generator.d.ts +21 -0
- package/dist/utils/binary-platforms.d.ts +62 -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 +3 -3
- package/schema.json +81 -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,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>;
|