onreza-release 1.0.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.
@@ -0,0 +1,862 @@
1
+ /**
2
+ * Конфигурация для gitverse-release
3
+ */
4
+ export interface ReleaseConfig {
5
+ /**
6
+ * Настройки для monorepo
7
+ */
8
+ monorepo?: MonorepoConfig;
9
+ /**
10
+ * Настройки генерации CHANGELOG
11
+ */
12
+ changelog?: ChangelogConfig;
13
+ /**
14
+ * Настройки Git операций
15
+ */
16
+ git?: GitConfig;
17
+ /**
18
+ * Настройки версионирования
19
+ */
20
+ versioning?: VersioningConfig;
21
+ /**
22
+ * Настройки GitVerse Release
23
+ */
24
+ gitverse?: GitVerseConfig;
25
+ /**
26
+ * Настройки retry механизма
27
+ */
28
+ retry?: RetryConfig;
29
+ /**
30
+ * Настройки генерации commitlint конфига
31
+ */
32
+ commitlint?: CommitlintGeneratorConfig;
33
+ /**
34
+ * Настройки бинарной дистрибуции
35
+ */
36
+ binaries?: BinariesConfig;
37
+ }
38
+ /**
39
+ * Конфигурация monorepo
40
+ */
41
+ export interface MonorepoConfig {
42
+ /**
43
+ * Включен ли режим monorepo
44
+ */
45
+ enabled: boolean;
46
+ /**
47
+ * Список пакетов в monorepo
48
+ */
49
+ packages: PackageConfig[];
50
+ }
51
+ /**
52
+ * Конфигурация отдельного пакета в monorepo
53
+ */
54
+ export interface PackageConfig {
55
+ /**
56
+ * Короткое имя пакета (для CLI)
57
+ */
58
+ name: string;
59
+ /**
60
+ * Путь к директории пакета
61
+ */
62
+ path: string;
63
+ /**
64
+ * Название пакета в package.json
65
+ */
66
+ packageName: string;
67
+ /**
68
+ * Префикс для git тега (например: "sdk-v")
69
+ */
70
+ tagPrefix: string;
71
+ /**
72
+ * Путь к CHANGELOG файлу
73
+ */
74
+ changelog: string;
75
+ }
76
+ /**
77
+ * Конфигурация CHANGELOG
78
+ */
79
+ export interface ChangelogConfig {
80
+ /**
81
+ * Mapping типов коммитов на заголовки секций
82
+ */
83
+ types: Record<string, string>;
84
+ /**
85
+ * Показывать ли автора коммита
86
+ */
87
+ showAuthor: boolean;
88
+ /**
89
+ * Показывать ли хеш коммита
90
+ */
91
+ showHash: boolean;
92
+ }
93
+ /**
94
+ * Конфигурация Git операций
95
+ */
96
+ export interface GitConfig {
97
+ /**
98
+ * Команда для выполнения перед коммитом (например: "bun run format")
99
+ */
100
+ beforeCommit?: string;
101
+ /**
102
+ * Создавать ли коммит с изменениями
103
+ */
104
+ commitChanges: boolean;
105
+ /**
106
+ * Шаблон сообщения коммита (поддерживает {{package}} и {{version}})
107
+ */
108
+ commitMessage: string;
109
+ /**
110
+ * Шаблон сообщения для тега (поддерживает {{package}} и {{version}})
111
+ */
112
+ tagMessage: string;
113
+ /**
114
+ * Пушить ли изменения в remote
115
+ */
116
+ push: boolean;
117
+ /**
118
+ * Использовать GVR_TOKEN для git push через HTTPS.
119
+ * Полезно для CI/CD когда нужно пушить в protected branches.
120
+ * Токен должен иметь права на запись в репозиторий.
121
+ * @default false
122
+ */
123
+ useTokenForPush?: boolean;
124
+ }
125
+ /**
126
+ * Конфигурация версионирования
127
+ */
128
+ export interface VersioningConfig {
129
+ /**
130
+ * Разрешены ли prerelease версии
131
+ */
132
+ allowPrerelease: boolean;
133
+ /**
134
+ * Префикс для prerelease версий (beta, alpha, rc)
135
+ */
136
+ prereleasePrefix: string;
137
+ /**
138
+ * Префикс для git тега (например: "v", "sdk-v", "release-v")
139
+ */
140
+ tagPrefix: string;
141
+ /**
142
+ * Pre-major режим для BREAKING CHANGES
143
+ *
144
+ * Контролирует поведение BREAKING CHANGE в коммитах:
145
+ * - "auto" (default): версии < 1.0.0 → minor bump, >= 1.0.0 → major bump
146
+ * - "enabled": всегда minor bump (полезно для experimental проектов)
147
+ * - "disabled": всегда major bump (стандартный semver)
148
+ * - "<version>": minor bump пока версия < указанной (например "2.0.0")
149
+ *
150
+ * @default "auto"
151
+ * @example
152
+ * "auto" // 0.5.0 + BREAKING → 0.6.0, затем 1.0.0 + BREAKING → 2.0.0
153
+ * "enabled" // 1.5.0 + BREAKING → 1.6.0 (всегда minor)
154
+ * "2.0.0" // 1.5.0 + BREAKING → 1.6.0, затем 2.0.0 + BREAKING → 3.0.0
155
+ */
156
+ preMajorMode?: string;
157
+ }
158
+ /**
159
+ * CLI опции
160
+ */
161
+ export interface CliOptions {
162
+ /**
163
+ * Тестовый прогон (не создавать коммиты/теги/релизы)
164
+ */
165
+ dryRun?: boolean;
166
+ /**
167
+ * Путь к конфиг файлу
168
+ */
169
+ config?: string;
170
+ /**
171
+ * Имя пакета для релиза (для monorepo)
172
+ */
173
+ package?: string;
174
+ /**
175
+ * Принудительная версия
176
+ */
177
+ version?: string;
178
+ /**
179
+ * Создать prerelease версию
180
+ */
181
+ prerelease?: string | boolean;
182
+ /**
183
+ * Не создавать коммит
184
+ */
185
+ noCommit?: boolean;
186
+ /**
187
+ * Не создавать тег
188
+ */
189
+ noTag?: boolean;
190
+ /**
191
+ * Не пушить в remote
192
+ */
193
+ noPush?: boolean;
194
+ /**
195
+ * Не создавать GitVerse Release
196
+ */
197
+ noRelease?: boolean;
198
+ /**
199
+ * Подробный вывод
200
+ */
201
+ verbose?: boolean;
202
+ }
203
+ /**
204
+ * Информация о Git репозитории
205
+ */
206
+ export interface GitRepoInfo {
207
+ /**
208
+ * Owner/repo (например: "rainypixel/gitverse-sdk")
209
+ */
210
+ fullName: string;
211
+ /**
212
+ * Владелец репозитория
213
+ */
214
+ owner: string;
215
+ /**
216
+ * Название репозитория
217
+ */
218
+ repo: string;
219
+ /**
220
+ * URL репозитория
221
+ */
222
+ url: string;
223
+ /**
224
+ * Текущая ветка
225
+ */
226
+ branch: string;
227
+ }
228
+ /**
229
+ * Conventional Commit
230
+ */
231
+ export interface ConventionalCommit {
232
+ /**
233
+ * Тип коммита (feat, fix, etc)
234
+ */
235
+ type: string;
236
+ /**
237
+ * Scope (опционально)
238
+ */
239
+ scope?: string;
240
+ /**
241
+ * Описание коммита
242
+ */
243
+ subject: string;
244
+ /**
245
+ * Тело коммита (опционально)
246
+ */
247
+ body?: string;
248
+ /**
249
+ * Footer (опционально)
250
+ */
251
+ footer?: string;
252
+ /**
253
+ * Breaking change
254
+ */
255
+ breaking: boolean;
256
+ /**
257
+ * Hash коммита
258
+ */
259
+ hash: string;
260
+ /**
261
+ * Короткий hash
262
+ */
263
+ shortHash: string;
264
+ /**
265
+ * Автор коммита
266
+ */
267
+ author: string;
268
+ /**
269
+ * Email автора
270
+ */
271
+ email: string;
272
+ /**
273
+ * Дата коммита
274
+ */
275
+ date: Date;
276
+ /**
277
+ * Исходное сообщение коммита
278
+ */
279
+ raw: string;
280
+ }
281
+ /**
282
+ * Тип изменения версии
283
+ */
284
+ export type BumpType = "major" | "minor" | "patch" | "prerelease";
285
+ /**
286
+ * Результат анализа версии
287
+ */
288
+ export interface VersionBump {
289
+ /**
290
+ * Текущая версия
291
+ */
292
+ currentVersion: string;
293
+ /**
294
+ * Новая версия
295
+ */
296
+ newVersion: string;
297
+ /**
298
+ * Тип изменения
299
+ */
300
+ bumpType: BumpType;
301
+ /**
302
+ * Коммиты для релиза
303
+ */
304
+ commits: ConventionalCommit[];
305
+ /**
306
+ * Есть ли breaking changes
307
+ */
308
+ hasBreaking: boolean;
309
+ /**
310
+ * Есть ли новые features
311
+ */
312
+ hasFeatures: boolean;
313
+ /**
314
+ * Есть ли bug fixes
315
+ */
316
+ hasFixes: boolean;
317
+ }
318
+ /**
319
+ * Опции для генерации CHANGELOG
320
+ */
321
+ export interface ChangelogGenerateOptions {
322
+ /**
323
+ * Версия релиза
324
+ */
325
+ version: string;
326
+ /**
327
+ * Коммиты для включения
328
+ */
329
+ commits: ConventionalCommit[];
330
+ /**
331
+ * Дата релиза
332
+ */
333
+ date?: Date;
334
+ /**
335
+ * URL репозитория для ссылок
336
+ */
337
+ repoUrl?: string;
338
+ }
339
+ /**
340
+ * Результат создания релиза
341
+ */
342
+ export interface ReleaseResult {
343
+ /**
344
+ * Успешно ли выполнен релиз
345
+ */
346
+ success: boolean;
347
+ /**
348
+ * Название пакета
349
+ */
350
+ packageName: string;
351
+ /**
352
+ * Старая версия
353
+ */
354
+ oldVersion: string;
355
+ /**
356
+ * Новая версия
357
+ */
358
+ newVersion: string;
359
+ /**
360
+ * Созданный тег
361
+ */
362
+ tag?: string;
363
+ /**
364
+ * URL релиза на GitVerse
365
+ */
366
+ releaseUrl?: string;
367
+ /**
368
+ * Сообщения об ошибках
369
+ */
370
+ errors: string[];
371
+ /**
372
+ * Предупреждения
373
+ */
374
+ warnings: string[];
375
+ }
376
+ /**
377
+ * Конфигурация GitVerse Release
378
+ */
379
+ export interface GitVerseConfig {
380
+ /**
381
+ * Включить создание релиза через GitVerse API
382
+ * Требует переменную окружения GVR_TOKEN
383
+ */
384
+ enabled: boolean;
385
+ /**
386
+ * Прерывать процесс релиза при ошибке создания release (после retry)
387
+ * Если false, ошибки логируются как warnings
388
+ */
389
+ failOnError: boolean;
390
+ /**
391
+ * Проверять существование релиза перед созданием (идемпотентность)
392
+ * Позволяет безопасно перезапускать pipeline
393
+ */
394
+ checkExisting: boolean;
395
+ }
396
+ /**
397
+ * Конфигурация retry механизма
398
+ */
399
+ export interface RetryConfig {
400
+ /**
401
+ * Включить retry с экспоненциальным backoff
402
+ */
403
+ enabled: boolean;
404
+ /**
405
+ * Максимальное количество попыток
406
+ */
407
+ maxAttempts: number;
408
+ /**
409
+ * Начальная задержка между попытками (мс)
410
+ */
411
+ initialDelay: number;
412
+ /**
413
+ * Максимальная задержка между попытками (мс)
414
+ * Ограничивает рост экспоненциального backoff
415
+ */
416
+ maxDelay: number;
417
+ /**
418
+ * Список операций для retry
419
+ */
420
+ operations: RetryOperation[];
421
+ }
422
+ /**
423
+ * Типы операций для retry
424
+ */
425
+ export type RetryOperation = "push" | "createRelease";
426
+ /**
427
+ * Допустимые значения для регистра subject
428
+ */
429
+ export type SubjectCaseValue = "lower-case" | "upper-case" | "camel-case" | "kebab-case" | "pascal-case" | "sentence-case" | "snake-case" | "start-case";
430
+ /**
431
+ * Уровень правила commitlint
432
+ * 0 = disabled, 1 = warning, 2 = error
433
+ */
434
+ export type CommitlintRuleLevel = 0 | 1 | 2;
435
+ /**
436
+ * Конфигурация для генерации commitlint конфига
437
+ */
438
+ export interface CommitlintGeneratorConfig {
439
+ /**
440
+ * Путь для вывода commitlint конфига
441
+ * @default "commitlint.config.ts"
442
+ */
443
+ output: string;
444
+ /**
445
+ * Формат выходного файла
446
+ * @default "ts"
447
+ */
448
+ format: "ts" | "js" | "json";
449
+ /**
450
+ * Дополнительные scopes помимо package names
451
+ * @default ["deps", "ci", "docs"]
452
+ */
453
+ scopes: string[];
454
+ /**
455
+ * Требовать обязательный scope
456
+ * @default false
457
+ */
458
+ scopeRequired: boolean;
459
+ /**
460
+ * Максимальная длина header
461
+ * @default 100
462
+ */
463
+ headerMaxLength: number;
464
+ /**
465
+ * Минимальная длина header
466
+ * @default null (disabled)
467
+ */
468
+ headerMinLength: number | null;
469
+ /**
470
+ * Регистр subject
471
+ * @default null (disabled - не ограничивать)
472
+ */
473
+ subjectCase: SubjectCaseValue | null;
474
+ /**
475
+ * Запретить точку в конце subject
476
+ * @default false
477
+ */
478
+ subjectFullStop: boolean;
479
+ /**
480
+ * Максимальная длина строки body
481
+ * @default null (disabled)
482
+ */
483
+ bodyMaxLineLength: number | null;
484
+ /**
485
+ * Максимальная длина строки footer
486
+ * @default null (disabled)
487
+ */
488
+ footerMaxLineLength: number | null;
489
+ /**
490
+ * Правила которые будут warning (level 1) вместо error (level 2)
491
+ * @default ["header-max-length"]
492
+ */
493
+ warningRules: string[];
494
+ /**
495
+ * Строгий режим - все правила error, subject-case: lower-case
496
+ * @default false
497
+ */
498
+ strictMode: boolean;
499
+ /**
500
+ * Добавлять комментарии в сгенерированный файл
501
+ * @default true
502
+ */
503
+ comments: boolean;
504
+ }
505
+ /**
506
+ * Опции для генерации commitlint конфига (CLI)
507
+ */
508
+ export interface GenerateCommitlintOptions {
509
+ /**
510
+ * Путь к release конфигу
511
+ * @default ".gitversereleaserc.json"
512
+ */
513
+ configPath?: string;
514
+ /**
515
+ * Путь для вывода commitlint конфига
516
+ * @default "commitlint.config.ts"
517
+ */
518
+ output?: string;
519
+ /**
520
+ * Формат выходного файла
521
+ * @default "ts"
522
+ */
523
+ format?: "ts" | "js" | "json";
524
+ /**
525
+ * Дополнительные scopes помимо package names
526
+ * @default ["deps", "ci", "docs"]
527
+ */
528
+ scopes?: string[];
529
+ /**
530
+ * Требовать обязательный scope
531
+ * @default false
532
+ */
533
+ scopeRequired?: boolean;
534
+ /**
535
+ * Максимальная длина header
536
+ * @default 100
537
+ */
538
+ headerMaxLength?: number;
539
+ /**
540
+ * Минимальная длина header
541
+ * @default null (disabled)
542
+ */
543
+ headerMinLength?: number | null;
544
+ /**
545
+ * Регистр subject
546
+ * @default null (disabled - не ограничивать)
547
+ */
548
+ subjectCase?: SubjectCaseValue | null;
549
+ /**
550
+ * Запретить точку в конце subject
551
+ * @default false
552
+ */
553
+ subjectFullStop?: boolean;
554
+ /**
555
+ * Максимальная длина строки body
556
+ * @default null (disabled)
557
+ */
558
+ bodyMaxLineLength?: number | null;
559
+ /**
560
+ * Максимальная длина строки footer
561
+ * @default null (disabled)
562
+ */
563
+ footerMaxLineLength?: number | null;
564
+ /**
565
+ * Правила которые будут warning (level 1) вместо error (level 2)
566
+ * @default ["header-max-length"]
567
+ */
568
+ warningRules?: string[];
569
+ /**
570
+ * Строгий режим - все правила error, subject-case: lower-case
571
+ * @default false
572
+ */
573
+ strictMode?: boolean;
574
+ /**
575
+ * Добавлять комментарии в сгенерированный файл
576
+ * @default true
577
+ */
578
+ comments?: boolean;
579
+ /**
580
+ * Dry-run режим (preview без записи)
581
+ * @default false
582
+ */
583
+ dryRun?: boolean;
584
+ /**
585
+ * Подробный вывод
586
+ * @default false
587
+ */
588
+ verbose?: boolean;
589
+ }
590
+ /**
591
+ * Поддерживаемые платформы для бинарной дистрибуции
592
+ */
593
+ export type BinaryPlatform = "linux-x64" | "linux-arm64" | "darwin-x64" | "darwin-arm64" | "win32-x64" | "win32-arm64";
594
+ /**
595
+ * Формат входных данных для бинарников
596
+ */
597
+ export type BinaryInputFormat = "directory" | "tar.gz";
598
+ /**
599
+ * Допустимые значения для поля os в package.json
600
+ */
601
+ export type NpmOS = "linux" | "darwin" | "win32" | "freebsd" | "openbsd" | "sunos" | "aix";
602
+ /**
603
+ * Допустимые значения для поля cpu в package.json
604
+ */
605
+ export type NpmCPU = "x64" | "arm64" | "ia32" | "arm" | "mips" | "ppc64";
606
+ /**
607
+ * Расширение исполняемого файла
608
+ */
609
+ export type BinaryExtension = "" | ".exe";
610
+ /**
611
+ * npm scope в формате @org
612
+ */
613
+ export type NpmScope = `@${string}`;
614
+ /**
615
+ * Маппинг платформы на os/cpu значения для package.json
616
+ */
617
+ export interface PlatformMapping {
618
+ /** Значение для поля os в package.json */
619
+ os: NpmOS;
620
+ /** Значение для поля cpu в package.json */
621
+ cpu: NpmCPU;
622
+ /** Расширение исполняемого файла */
623
+ extension: BinaryExtension;
624
+ }
625
+ /**
626
+ * Конфигурация бинарной дистрибуции
627
+ */
628
+ export interface BinariesConfig {
629
+ /**
630
+ * Включить бинарную дистрибуцию
631
+ * @default false
632
+ */
633
+ enabled: boolean;
634
+ /**
635
+ * npm scope (например: @rainypixel)
636
+ * Опционален — если не указан, пакеты публикуются без scope
637
+ */
638
+ scope?: string;
639
+ /**
640
+ * Шаблон имени пакета
641
+ * Плейсхолдеры: {{scope}}, {{name}}, {{platform}}
642
+ *
643
+ * @default "{{name}}-{{platform}}" (без scope)
644
+ * @default "@{{scope}}/{{name}}-{{platform}}" (со scope)
645
+ *
646
+ * @example
647
+ * "{{name}}-{{platform}}" → "myapp-linux-x64"
648
+ * "@{{scope}}/{{name}}-{{platform}}" → "@org/myapp-linux-x64"
649
+ * "{{name}}-bin-{{platform}}" → "myapp-bin-linux-x64"
650
+ */
651
+ packageNameTemplate?: string;
652
+ /**
653
+ * Базовое имя пакетов (например: yougile)
654
+ */
655
+ name: string;
656
+ /**
657
+ * Имя бинарника в $PATH
658
+ * @default значение name
659
+ */
660
+ binName?: string;
661
+ /**
662
+ * Директория с бинарниками (dist/yougile-linux-x64, etc.)
663
+ * @default "./dist"
664
+ */
665
+ distDir: string;
666
+ /**
667
+ * Директория для генерации пакетов
668
+ * @default "./npm"
669
+ */
670
+ outDir: string;
671
+ /**
672
+ * Список платформ для публикации
673
+ * @default ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"]
674
+ */
675
+ platforms: BinaryPlatform[];
676
+ /**
677
+ * Команда для публикации пакетов
678
+ * Поддерживает плейсхолдеры: {{packageDir}}, {{version}}, {{platform}}
679
+ * @default "npm publish --access public"
680
+ */
681
+ publishCommand: string;
682
+ /**
683
+ * Путь к основному package.json для обновления optionalDependencies
684
+ * @default "./package.json"
685
+ */
686
+ mainPackage: string;
687
+ /**
688
+ * Продолжать при ошибке публикации отдельной платформы
689
+ * @default false
690
+ */
691
+ continueOnError: boolean;
692
+ /**
693
+ * Количество попыток retry при ошибке публикации
694
+ * @default 3
695
+ */
696
+ retryAttempts: number;
697
+ /**
698
+ * Формат входных данных для бинарников
699
+ * - "directory": бинарники в директориях (dist/name-platform/name)
700
+ * - "tar.gz": бинарники в tar.gz архивах (dist/name-platform.tar.gz)
701
+ * @default "directory"
702
+ */
703
+ inputFormat?: BinaryInputFormat;
704
+ /**
705
+ * Шаблон имени архива.
706
+ * Плейсхолдеры: {{name}}, {{platform}}
707
+ * Используется только при inputFormat: "tar.gz"
708
+ * @default "{{name}}-{{platform}}.tar.gz"
709
+ */
710
+ archiveNameTemplate?: string;
711
+ /**
712
+ * Имя бинарника внутри архива (если отличается от name)
713
+ * Используется только при inputFormat: "tar.gz"
714
+ */
715
+ sourceBinName?: string;
716
+ /**
717
+ * Маппинг имён файлов/директорий источника на npm платформы
718
+ * Ключ - идентификатор в имени файла (например: "linux-x64")
719
+ * Значение - npm платформа (например: "linux-x64")
720
+ *
721
+ * @example
722
+ * {
723
+ * "linux-x64": "linux-x64",
724
+ * "darwin-arm64": "darwin-arm64",
725
+ * "windows-x64": "win32-x64"
726
+ * }
727
+ */
728
+ platformMap?: Record<string, BinaryPlatform>;
729
+ }
730
+ /**
731
+ * Успешный результат генерации платформенного пакета
732
+ */
733
+ export interface BinaryPackageSuccess {
734
+ /** Платформа */
735
+ platform: BinaryPlatform;
736
+ /** Путь к сгенерированному пакету */
737
+ packageDir: string;
738
+ /** Полное имя пакета (например: @rainypixel/yougile-linux-x64) */
739
+ packageName: string;
740
+ /** Успешно сгенерирован */
741
+ success: true;
742
+ }
743
+ /**
744
+ * Неуспешный результат генерации платформенного пакета
745
+ */
746
+ export interface BinaryPackageFailure {
747
+ /** Платформа */
748
+ platform: BinaryPlatform;
749
+ /** Путь к сгенерированному пакету (может отсутствовать при ошибке) */
750
+ packageDir: string;
751
+ /** Полное имя пакета */
752
+ packageName: string;
753
+ /** Не удалось сгенерировать */
754
+ success: false;
755
+ /** Сообщение об ошибке */
756
+ error: string;
757
+ }
758
+ /**
759
+ * Результат генерации платформенного пакета (discriminated union)
760
+ */
761
+ export type BinaryPackageResult = BinaryPackageSuccess | BinaryPackageFailure;
762
+ /**
763
+ * Успешный результат публикации платформенного пакета
764
+ */
765
+ export interface BinaryPublishSuccess {
766
+ /** Платформа */
767
+ platform: BinaryPlatform;
768
+ /** Полное имя пакета */
769
+ packageName: string;
770
+ /** Успешно опубликован */
771
+ success: true;
772
+ /** Количество попыток */
773
+ attempts: number;
774
+ }
775
+ /**
776
+ * Неуспешный результат публикации платформенного пакета
777
+ */
778
+ export interface BinaryPublishFailure {
779
+ /** Платформа */
780
+ platform: BinaryPlatform;
781
+ /** Полное имя пакета */
782
+ packageName: string;
783
+ /** Не удалось опубликовать */
784
+ success: false;
785
+ /** Сообщение об ошибке */
786
+ error: string;
787
+ /** Количество попыток */
788
+ attempts: number;
789
+ }
790
+ /**
791
+ * Результат публикации платформенного пакета (discriminated union)
792
+ */
793
+ export type BinaryPublishResult = BinaryPublishSuccess | BinaryPublishFailure;
794
+ /**
795
+ * Общий результат бинарной дистрибуции
796
+ */
797
+ export interface BinaryDistributionResult {
798
+ /** Успешно ли выполнена операция */
799
+ success: boolean;
800
+ /** Версия */
801
+ version: string;
802
+ /** Результаты генерации пакетов */
803
+ packages: BinaryPackageResult[];
804
+ /** Результаты публикации */
805
+ published: BinaryPublishResult[];
806
+ /** Ошибки */
807
+ errors: string[];
808
+ /** Предупреждения */
809
+ warnings: string[];
810
+ }
811
+ /**
812
+ * Успешный результат извлечения бинарника из архива
813
+ */
814
+ export interface BinaryExtractionSuccess {
815
+ success: true;
816
+ binaryPath: string;
817
+ tempDir: string;
818
+ }
819
+ /**
820
+ * Неуспешный результат извлечения бинарника из архива
821
+ */
822
+ export interface BinaryExtractionFailure {
823
+ success: false;
824
+ error: string;
825
+ }
826
+ /**
827
+ * Результат извлечения бинарника из архива (discriminated union)
828
+ */
829
+ export type BinaryExtractionResult = BinaryExtractionSuccess | BinaryExtractionFailure;
830
+ /**
831
+ * CLI опции для бинарной дистрибуции
832
+ */
833
+ export interface BinaryCliOptions {
834
+ /**
835
+ * Тестовый прогон (не публиковать)
836
+ */
837
+ dryRun?: boolean;
838
+ /**
839
+ * Путь к конфиг файлу
840
+ */
841
+ config?: string;
842
+ /**
843
+ * Override версии
844
+ */
845
+ version?: string;
846
+ /**
847
+ * Только генерация пакетов (без публикации)
848
+ */
849
+ generateOnly?: boolean;
850
+ /**
851
+ * Не обновлять основной package.json
852
+ */
853
+ skipMainPackage?: boolean;
854
+ /**
855
+ * Конкретные платформы для обработки
856
+ */
857
+ platforms?: BinaryPlatform[];
858
+ /**
859
+ * Подробный вывод
860
+ */
861
+ verbose?: boolean;
862
+ }