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/dist/types.d.ts
CHANGED
|
@@ -30,6 +30,10 @@ export interface ReleaseConfig {
|
|
|
30
30
|
* Настройки генерации commitlint конфига
|
|
31
31
|
*/
|
|
32
32
|
commitlint?: CommitlintGeneratorConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Настройки бинарной дистрибуции
|
|
35
|
+
*/
|
|
36
|
+
binaries?: BinariesConfig;
|
|
33
37
|
}
|
|
34
38
|
/**
|
|
35
39
|
* Конфигурация monorepo
|
|
@@ -576,3 +580,269 @@ export interface GenerateCommitlintOptions {
|
|
|
576
580
|
*/
|
|
577
581
|
verbose?: boolean;
|
|
578
582
|
}
|
|
583
|
+
/**
|
|
584
|
+
* Поддерживаемые платформы для бинарной дистрибуции
|
|
585
|
+
*/
|
|
586
|
+
export type BinaryPlatform = "linux-x64" | "linux-arm64" | "darwin-x64" | "darwin-arm64" | "win32-x64" | "win32-arm64";
|
|
587
|
+
/**
|
|
588
|
+
* Формат входных данных для бинарников
|
|
589
|
+
*/
|
|
590
|
+
export type BinaryInputFormat = "directory" | "tar.gz";
|
|
591
|
+
/**
|
|
592
|
+
* Допустимые значения для поля os в package.json
|
|
593
|
+
*/
|
|
594
|
+
export type NpmOS = "linux" | "darwin" | "win32" | "freebsd" | "openbsd" | "sunos" | "aix";
|
|
595
|
+
/**
|
|
596
|
+
* Допустимые значения для поля cpu в package.json
|
|
597
|
+
*/
|
|
598
|
+
export type NpmCPU = "x64" | "arm64" | "ia32" | "arm" | "mips" | "ppc64";
|
|
599
|
+
/**
|
|
600
|
+
* Расширение исполняемого файла
|
|
601
|
+
*/
|
|
602
|
+
export type BinaryExtension = "" | ".exe";
|
|
603
|
+
/**
|
|
604
|
+
* npm scope в формате @org
|
|
605
|
+
*/
|
|
606
|
+
export type NpmScope = `@${string}`;
|
|
607
|
+
/**
|
|
608
|
+
* Маппинг платформы на os/cpu значения для package.json
|
|
609
|
+
*/
|
|
610
|
+
export interface PlatformMapping {
|
|
611
|
+
/** Значение для поля os в package.json */
|
|
612
|
+
os: NpmOS;
|
|
613
|
+
/** Значение для поля cpu в package.json */
|
|
614
|
+
cpu: NpmCPU;
|
|
615
|
+
/** Расширение исполняемого файла */
|
|
616
|
+
extension: BinaryExtension;
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* Конфигурация бинарной дистрибуции
|
|
620
|
+
*/
|
|
621
|
+
export interface BinariesConfig {
|
|
622
|
+
/**
|
|
623
|
+
* Включить бинарную дистрибуцию
|
|
624
|
+
* @default false
|
|
625
|
+
*/
|
|
626
|
+
enabled: boolean;
|
|
627
|
+
/**
|
|
628
|
+
* npm scope (например: @rainypixel)
|
|
629
|
+
* Опционален — если не указан, пакеты публикуются без scope
|
|
630
|
+
*/
|
|
631
|
+
scope?: string;
|
|
632
|
+
/**
|
|
633
|
+
* Шаблон имени пакета
|
|
634
|
+
* Плейсхолдеры: {{scope}}, {{name}}, {{platform}}
|
|
635
|
+
*
|
|
636
|
+
* @default "{{name}}-{{platform}}" (без scope)
|
|
637
|
+
* @default "@{{scope}}/{{name}}-{{platform}}" (со scope)
|
|
638
|
+
*
|
|
639
|
+
* @example
|
|
640
|
+
* "{{name}}-{{platform}}" → "myapp-linux-x64"
|
|
641
|
+
* "@{{scope}}/{{name}}-{{platform}}" → "@org/myapp-linux-x64"
|
|
642
|
+
* "{{name}}-bin-{{platform}}" → "myapp-bin-linux-x64"
|
|
643
|
+
*/
|
|
644
|
+
packageNameTemplate?: string;
|
|
645
|
+
/**
|
|
646
|
+
* Базовое имя пакетов (например: yougile)
|
|
647
|
+
*/
|
|
648
|
+
name: string;
|
|
649
|
+
/**
|
|
650
|
+
* Имя бинарника в $PATH
|
|
651
|
+
* @default значение name
|
|
652
|
+
*/
|
|
653
|
+
binName?: string;
|
|
654
|
+
/**
|
|
655
|
+
* Директория с бинарниками (dist/yougile-linux-x64, etc.)
|
|
656
|
+
* @default "./dist"
|
|
657
|
+
*/
|
|
658
|
+
distDir: string;
|
|
659
|
+
/**
|
|
660
|
+
* Директория для генерации пакетов
|
|
661
|
+
* @default "./npm"
|
|
662
|
+
*/
|
|
663
|
+
outDir: string;
|
|
664
|
+
/**
|
|
665
|
+
* Список платформ для публикации
|
|
666
|
+
* @default ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"]
|
|
667
|
+
*/
|
|
668
|
+
platforms: BinaryPlatform[];
|
|
669
|
+
/**
|
|
670
|
+
* Команда для публикации пакетов
|
|
671
|
+
* Поддерживает плейсхолдеры: {{packageDir}}, {{version}}, {{platform}}
|
|
672
|
+
* @default "npm publish --access public"
|
|
673
|
+
*/
|
|
674
|
+
publishCommand: string;
|
|
675
|
+
/**
|
|
676
|
+
* Путь к основному package.json для обновления optionalDependencies
|
|
677
|
+
* @default "./package.json"
|
|
678
|
+
*/
|
|
679
|
+
mainPackage: string;
|
|
680
|
+
/**
|
|
681
|
+
* Продолжать при ошибке публикации отдельной платформы
|
|
682
|
+
* @default false
|
|
683
|
+
*/
|
|
684
|
+
continueOnError: boolean;
|
|
685
|
+
/**
|
|
686
|
+
* Количество попыток retry при ошибке публикации
|
|
687
|
+
* @default 3
|
|
688
|
+
*/
|
|
689
|
+
retryAttempts: number;
|
|
690
|
+
/**
|
|
691
|
+
* Формат входных данных для бинарников
|
|
692
|
+
* - "directory": бинарники в директориях (dist/name-platform/name)
|
|
693
|
+
* - "tar.gz": бинарники в tar.gz архивах (dist/name-platform.tar.gz)
|
|
694
|
+
* @default "directory"
|
|
695
|
+
*/
|
|
696
|
+
inputFormat?: BinaryInputFormat;
|
|
697
|
+
/**
|
|
698
|
+
* Имя бинарника внутри архива (если отличается от name)
|
|
699
|
+
* Используется только при inputFormat: "tar.gz"
|
|
700
|
+
*/
|
|
701
|
+
sourceBinName?: string;
|
|
702
|
+
/**
|
|
703
|
+
* Маппинг имён файлов/директорий источника на npm платформы
|
|
704
|
+
* Ключ - идентификатор в имени файла (например: "linux-x64")
|
|
705
|
+
* Значение - npm платформа (например: "linux-x64")
|
|
706
|
+
*
|
|
707
|
+
* @example
|
|
708
|
+
* {
|
|
709
|
+
* "linux-x64": "linux-x64",
|
|
710
|
+
* "darwin-arm64": "darwin-arm64",
|
|
711
|
+
* "windows-x64": "win32-x64"
|
|
712
|
+
* }
|
|
713
|
+
*/
|
|
714
|
+
platformMap?: Record<string, BinaryPlatform>;
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* Успешный результат генерации платформенного пакета
|
|
718
|
+
*/
|
|
719
|
+
export interface BinaryPackageSuccess {
|
|
720
|
+
/** Платформа */
|
|
721
|
+
platform: BinaryPlatform;
|
|
722
|
+
/** Путь к сгенерированному пакету */
|
|
723
|
+
packageDir: string;
|
|
724
|
+
/** Полное имя пакета (например: @rainypixel/yougile-linux-x64) */
|
|
725
|
+
packageName: string;
|
|
726
|
+
/** Успешно сгенерирован */
|
|
727
|
+
success: true;
|
|
728
|
+
}
|
|
729
|
+
/**
|
|
730
|
+
* Неуспешный результат генерации платформенного пакета
|
|
731
|
+
*/
|
|
732
|
+
export interface BinaryPackageFailure {
|
|
733
|
+
/** Платформа */
|
|
734
|
+
platform: BinaryPlatform;
|
|
735
|
+
/** Путь к сгенерированному пакету (может отсутствовать при ошибке) */
|
|
736
|
+
packageDir: string;
|
|
737
|
+
/** Полное имя пакета */
|
|
738
|
+
packageName: string;
|
|
739
|
+
/** Не удалось сгенерировать */
|
|
740
|
+
success: false;
|
|
741
|
+
/** Сообщение об ошибке */
|
|
742
|
+
error: string;
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* Результат генерации платформенного пакета (discriminated union)
|
|
746
|
+
*/
|
|
747
|
+
export type BinaryPackageResult = BinaryPackageSuccess | BinaryPackageFailure;
|
|
748
|
+
/**
|
|
749
|
+
* Успешный результат публикации платформенного пакета
|
|
750
|
+
*/
|
|
751
|
+
export interface BinaryPublishSuccess {
|
|
752
|
+
/** Платформа */
|
|
753
|
+
platform: BinaryPlatform;
|
|
754
|
+
/** Полное имя пакета */
|
|
755
|
+
packageName: string;
|
|
756
|
+
/** Успешно опубликован */
|
|
757
|
+
success: true;
|
|
758
|
+
/** Количество попыток */
|
|
759
|
+
attempts: number;
|
|
760
|
+
}
|
|
761
|
+
/**
|
|
762
|
+
* Неуспешный результат публикации платформенного пакета
|
|
763
|
+
*/
|
|
764
|
+
export interface BinaryPublishFailure {
|
|
765
|
+
/** Платформа */
|
|
766
|
+
platform: BinaryPlatform;
|
|
767
|
+
/** Полное имя пакета */
|
|
768
|
+
packageName: string;
|
|
769
|
+
/** Не удалось опубликовать */
|
|
770
|
+
success: false;
|
|
771
|
+
/** Сообщение об ошибке */
|
|
772
|
+
error: string;
|
|
773
|
+
/** Количество попыток */
|
|
774
|
+
attempts: number;
|
|
775
|
+
}
|
|
776
|
+
/**
|
|
777
|
+
* Результат публикации платформенного пакета (discriminated union)
|
|
778
|
+
*/
|
|
779
|
+
export type BinaryPublishResult = BinaryPublishSuccess | BinaryPublishFailure;
|
|
780
|
+
/**
|
|
781
|
+
* Общий результат бинарной дистрибуции
|
|
782
|
+
*/
|
|
783
|
+
export interface BinaryDistributionResult {
|
|
784
|
+
/** Успешно ли выполнена операция */
|
|
785
|
+
success: boolean;
|
|
786
|
+
/** Версия */
|
|
787
|
+
version: string;
|
|
788
|
+
/** Результаты генерации пакетов */
|
|
789
|
+
packages: BinaryPackageResult[];
|
|
790
|
+
/** Результаты публикации */
|
|
791
|
+
published: BinaryPublishResult[];
|
|
792
|
+
/** Ошибки */
|
|
793
|
+
errors: string[];
|
|
794
|
+
/** Предупреждения */
|
|
795
|
+
warnings: string[];
|
|
796
|
+
}
|
|
797
|
+
/**
|
|
798
|
+
* Успешный результат извлечения бинарника из архива
|
|
799
|
+
*/
|
|
800
|
+
export interface BinaryExtractionSuccess {
|
|
801
|
+
success: true;
|
|
802
|
+
binaryPath: string;
|
|
803
|
+
tempDir: string;
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Неуспешный результат извлечения бинарника из архива
|
|
807
|
+
*/
|
|
808
|
+
export interface BinaryExtractionFailure {
|
|
809
|
+
success: false;
|
|
810
|
+
error: string;
|
|
811
|
+
}
|
|
812
|
+
/**
|
|
813
|
+
* Результат извлечения бинарника из архива (discriminated union)
|
|
814
|
+
*/
|
|
815
|
+
export type BinaryExtractionResult = BinaryExtractionSuccess | BinaryExtractionFailure;
|
|
816
|
+
/**
|
|
817
|
+
* CLI опции для бинарной дистрибуции
|
|
818
|
+
*/
|
|
819
|
+
export interface BinaryCliOptions {
|
|
820
|
+
/**
|
|
821
|
+
* Тестовый прогон (не публиковать)
|
|
822
|
+
*/
|
|
823
|
+
dryRun?: boolean;
|
|
824
|
+
/**
|
|
825
|
+
* Путь к конфиг файлу
|
|
826
|
+
*/
|
|
827
|
+
config?: string;
|
|
828
|
+
/**
|
|
829
|
+
* Override версии
|
|
830
|
+
*/
|
|
831
|
+
version?: string;
|
|
832
|
+
/**
|
|
833
|
+
* Только генерация пакетов (без публикации)
|
|
834
|
+
*/
|
|
835
|
+
generateOnly?: boolean;
|
|
836
|
+
/**
|
|
837
|
+
* Не обновлять основной package.json
|
|
838
|
+
*/
|
|
839
|
+
skipMainPackage?: boolean;
|
|
840
|
+
/**
|
|
841
|
+
* Конкретные платформы для обработки
|
|
842
|
+
*/
|
|
843
|
+
platforms?: BinaryPlatform[];
|
|
844
|
+
/**
|
|
845
|
+
* Подробный вывод
|
|
846
|
+
*/
|
|
847
|
+
verbose?: boolean;
|
|
848
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { BinariesConfig, BinaryExtractionResult, BinaryPlatform } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Возвращает имя бинарника внутри архива с учётом sourceBinName.
|
|
4
|
+
* Если sourceBinName не задан, возвращает config.name.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getSourceBinaryName(config: BinariesConfig, platform: BinaryPlatform): string;
|
|
7
|
+
/**
|
|
8
|
+
* Извлекает бинарник из tar.gz архива во временную директорию.
|
|
9
|
+
*
|
|
10
|
+
* @param config - Конфигурация бинарной дистрибуции
|
|
11
|
+
* @param platform - Целевая платформа
|
|
12
|
+
* @param tempBaseDir - Базовая директория для временных файлов
|
|
13
|
+
* @returns Результат извлечения с путём к бинарнику и временной директории
|
|
14
|
+
*/
|
|
15
|
+
export declare function extractBinaryFromArchive(config: BinariesConfig, platform: BinaryPlatform, tempBaseDir: string): Promise<BinaryExtractionResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Удаляет временную директорию.
|
|
18
|
+
*/
|
|
19
|
+
export declare function cleanupTempDir(tempDir: string): Promise<void>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { BinariesConfig, BinaryPackageResult, BinaryPlatform } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Генерирует package.json для платформенного пакета
|
|
4
|
+
*/
|
|
5
|
+
export declare function generatePlatformPackageJson(config: BinariesConfig, platform: BinaryPlatform, version: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Генерирует README.md для платформенного пакета
|
|
8
|
+
*/
|
|
9
|
+
export declare function generatePlatformReadme(config: BinariesConfig, platform: BinaryPlatform, version: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Генерирует платформенный пакет.
|
|
12
|
+
* Поддерживает два формата входных данных:
|
|
13
|
+
* - "directory": бинарники в директориях (dist/name-platform/name)
|
|
14
|
+
* - "tar.gz": бинарники в tar.gz архивах (dist/name-platform.tar.gz)
|
|
15
|
+
*/
|
|
16
|
+
export declare function generatePlatformPackage(config: BinariesConfig, platform: BinaryPlatform, version: string, dryRun?: boolean): Promise<BinaryPackageResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Генерирует все платформенные пакеты
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateAllPlatformPackages(config: BinariesConfig, version: string, platforms?: BinaryPlatform[], dryRun?: boolean): Promise<BinaryPackageResult[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Печатает информацию о генерации в dry-run режиме
|
|
23
|
+
*/
|
|
24
|
+
export declare function printGenerationDryRun(config: BinariesConfig, version: string, platforms: BinaryPlatform[]): void;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { BinariesConfig, BinaryPlatform, PlatformMapping } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Маппинг платформ на os/cpu значения для package.json
|
|
4
|
+
*/
|
|
5
|
+
export declare const PLATFORM_MAPPINGS: Record<BinaryPlatform, PlatformMapping>;
|
|
6
|
+
/**
|
|
7
|
+
* Все поддерживаемые платформы
|
|
8
|
+
*/
|
|
9
|
+
export declare const ALL_PLATFORMS: BinaryPlatform[];
|
|
10
|
+
/**
|
|
11
|
+
* Проверяет, что строка является валидной платформой
|
|
12
|
+
*/
|
|
13
|
+
export declare function isValidPlatform(value: string): value is BinaryPlatform;
|
|
14
|
+
/**
|
|
15
|
+
* Парсит список платформ из строки (comma-separated)
|
|
16
|
+
*/
|
|
17
|
+
export declare function parsePlatforms(value: string): BinaryPlatform[];
|
|
18
|
+
/**
|
|
19
|
+
* Возвращает путь к бинарнику для указанной платформы
|
|
20
|
+
*/
|
|
21
|
+
export declare function getBinaryPath(distDir: string, name: string, platform: BinaryPlatform): string;
|
|
22
|
+
/**
|
|
23
|
+
* Возвращает путь к директории платформы
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPlatformDir(distDir: string, name: string, platform: BinaryPlatform): string;
|
|
26
|
+
/**
|
|
27
|
+
* Проверяет существование бинарника для платформы.
|
|
28
|
+
*
|
|
29
|
+
* @returns true если файл существует, false если файл не найден (ENOENT)
|
|
30
|
+
* @throws Error при других ошибках доступа (EACCES, ELOOP, EIO и т.д.)
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateBinaryExists(distDir: string, name: string, platform: BinaryPlatform): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Валидирует наличие бинарников для всех указанных платформ
|
|
35
|
+
* @returns Массив отсутствующих платформ
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateAllBinaries(distDir: string, name: string, platforms: BinaryPlatform[]): Promise<BinaryPlatform[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Возвращает дефолтный шаблон имени пакета
|
|
40
|
+
*/
|
|
41
|
+
export declare function getDefaultPackageNameTemplate(scope?: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Генерирует полное имя пакета для платформы.
|
|
44
|
+
* Поддерживает кастомный шаблон через packageNameTemplate.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getPackageName(config: BinariesConfig, platform: BinaryPlatform): string;
|
|
47
|
+
/**
|
|
48
|
+
* Генерирует путь к пакету в output директории.
|
|
49
|
+
* Создаёт структуру директорий на основе имени пакета.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getPackageOutputPath(config: BinariesConfig, platform: BinaryPlatform): string;
|
|
52
|
+
/**
|
|
53
|
+
* Раскрывает плейсхолдеры в строке
|
|
54
|
+
*/
|
|
55
|
+
export declare function expandPlaceholders(template: string, values: {
|
|
56
|
+
packageDir?: string;
|
|
57
|
+
version?: string;
|
|
58
|
+
platform?: string;
|
|
59
|
+
scope?: string;
|
|
60
|
+
name?: string;
|
|
61
|
+
}): string;
|
|
62
|
+
/**
|
|
63
|
+
* Конвертирует платформу в Node.js process.platform и process.arch
|
|
64
|
+
*/
|
|
65
|
+
export declare function platformToNodeValues(platform: BinaryPlatform): {
|
|
66
|
+
platform: string;
|
|
67
|
+
arch: string;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Возвращает ключ источника для платформы с учётом platformMap.
|
|
71
|
+
* Если platformMap не задан или платформа не найдена, возвращает платформу как есть.
|
|
72
|
+
*/
|
|
73
|
+
export declare function getSourceKey(config: BinariesConfig, platform: BinaryPlatform): string;
|
|
74
|
+
/**
|
|
75
|
+
* Возвращает путь к tar.gz архиву для указанной платформы.
|
|
76
|
+
*/
|
|
77
|
+
export declare function getArchivePath(config: BinariesConfig, platform: BinaryPlatform): string;
|
|
78
|
+
/**
|
|
79
|
+
* Проверяет существование tar.gz архива для платформы.
|
|
80
|
+
*
|
|
81
|
+
* @returns true если архив существует, false если не найден (ENOENT)
|
|
82
|
+
* @throws Error при других ошибках доступа
|
|
83
|
+
*/
|
|
84
|
+
export declare function validateArchiveExists(config: BinariesConfig, platform: BinaryPlatform): Promise<boolean>;
|
|
85
|
+
/**
|
|
86
|
+
* Универсальная проверка существования источника бинарника.
|
|
87
|
+
* Поддерживает как директории, так и tar.gz архивы.
|
|
88
|
+
*
|
|
89
|
+
* @returns true если источник существует, false если не найден
|
|
90
|
+
* @throws Error при других ошибках доступа
|
|
91
|
+
*/
|
|
92
|
+
export declare function validateBinarySourceExists(config: BinariesConfig, platform: BinaryPlatform): Promise<boolean>;
|
|
93
|
+
/**
|
|
94
|
+
* Универсальная валидация наличия источников бинарников для всех платформ.
|
|
95
|
+
* Поддерживает как директории, так и tar.gz архивы.
|
|
96
|
+
*
|
|
97
|
+
* @returns Массив отсутствующих платформ
|
|
98
|
+
*/
|
|
99
|
+
export declare function validateAllBinarySources(config: BinariesConfig): Promise<BinaryPlatform[]>;
|
|
100
|
+
/**
|
|
101
|
+
* Возвращает путь к источнику бинарника с учётом формата входных данных.
|
|
102
|
+
* Для directory возвращает путь к директории платформы.
|
|
103
|
+
* Для tar.gz возвращает путь к архиву.
|
|
104
|
+
*/
|
|
105
|
+
export declare function getBinarySourcePath(config: BinariesConfig, platform: BinaryPlatform): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { BinariesConfig, BinaryPackageResult, BinaryPlatform, BinaryPublishResult } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Вычисляет задержку с экспоненциальным backoff.
|
|
4
|
+
*
|
|
5
|
+
* Формула: delay = initialDelay * 2^attempt, ограничено maxDelay.
|
|
6
|
+
*
|
|
7
|
+
* Примеры (с дефолтными параметрами):
|
|
8
|
+
* - attempt 0: 2000ms
|
|
9
|
+
* - attempt 1: 4000ms
|
|
10
|
+
* - attempt 2: 8000ms
|
|
11
|
+
* - attempt 3: 16000ms
|
|
12
|
+
* - attempt 4+: 30000ms (max)
|
|
13
|
+
*
|
|
14
|
+
* @param attempt - Номер попытки (начиная с 0)
|
|
15
|
+
* @param initialDelay - Начальная задержка в мс (default: 2000)
|
|
16
|
+
* @param maxDelay - Максимальная задержка в мс (default: 30000)
|
|
17
|
+
* @returns Задержка в миллисекундах
|
|
18
|
+
*/
|
|
19
|
+
export declare function calculateDelay(attempt: number, initialDelay?: number, maxDelay?: number): number;
|
|
20
|
+
/**
|
|
21
|
+
* Проверяет, можно ли повторить операцию после ошибки.
|
|
22
|
+
*
|
|
23
|
+
* Retriable ошибки (временные, имеет смысл повторить):
|
|
24
|
+
* - Сетевые ошибки: network timeout, ECONNRESET, ETIMEDOUT
|
|
25
|
+
* - Ограничения rate limit: HTTP 429, HTTP 503
|
|
26
|
+
* - Временные ошибки npm registry: registry unavailable, ETARGET
|
|
27
|
+
*
|
|
28
|
+
* Не-retriable ошибки (постоянные, повторять бессмысленно):
|
|
29
|
+
* - Ошибки авторизации (401, 403)
|
|
30
|
+
* - Невалидные данные (400)
|
|
31
|
+
* - Пакет уже существует (409)
|
|
32
|
+
* - Ошибки файловой системы
|
|
33
|
+
*
|
|
34
|
+
* @param error - Любое значение ошибки
|
|
35
|
+
* @returns true если ошибка носит временный характер и retry может помочь
|
|
36
|
+
*/
|
|
37
|
+
export declare function isRetriableError(error: unknown): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Публикует один платформенный пакет
|
|
40
|
+
*/
|
|
41
|
+
export declare function publishPlatformPackage(config: BinariesConfig, platform: BinaryPlatform, version: string, dryRun?: boolean): Promise<BinaryPublishResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Публикует все платформенные пакеты
|
|
44
|
+
*/
|
|
45
|
+
export declare function publishAllPlatformPackages(config: BinariesConfig, version: string, generatedPackages: BinaryPackageResult[], dryRun?: boolean, verbose?: boolean): Promise<BinaryPublishResult[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Печатает информацию о публикации в dry-run режиме
|
|
48
|
+
*/
|
|
49
|
+
export declare function printPublishDryRun(config: BinariesConfig, generatedPackages: BinaryPackageResult[]): void;
|
|
50
|
+
/**
|
|
51
|
+
* Печатает итоговую статистику публикации
|
|
52
|
+
*/
|
|
53
|
+
export declare function printPublishSummary(results: BinaryPublishResult[], _config: BinariesConfig): void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BinariesConfig, BinaryPlatform } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Генерирует JS wrapper скрипт для bin/
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateBinaryWrapper(config: BinariesConfig): string;
|
|
6
|
+
/**
|
|
7
|
+
* Интерфейс для optionalDependencies
|
|
8
|
+
*/
|
|
9
|
+
export interface OptionalDependencies {
|
|
10
|
+
[key: string]: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Генерирует объект optionalDependencies для основного package.json
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateOptionalDependencies(config: BinariesConfig, version: string, platforms?: BinaryPlatform[]): OptionalDependencies;
|
|
16
|
+
/**
|
|
17
|
+
* Обновления для основного package.json
|
|
18
|
+
*/
|
|
19
|
+
export interface MainPackageUpdates {
|
|
20
|
+
optionalDependencies: OptionalDependencies;
|
|
21
|
+
bin?: Record<string, string>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Генерирует обновления для основного package.json
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateMainPackageUpdates(config: BinariesConfig, version: string, platforms?: BinaryPlatform[]): MainPackageUpdates;
|
|
27
|
+
/**
|
|
28
|
+
* Обновляет основной package.json с optionalDependencies
|
|
29
|
+
*/
|
|
30
|
+
export declare function updateMainPackageJson(packagePath: string, config: BinariesConfig, version: string, platforms?: BinaryPlatform[], dryRun?: boolean): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Печатает информацию об обновлениях main package в dry-run режиме
|
|
33
|
+
*/
|
|
34
|
+
export declare function printMainPackageUpdatesDryRun(config: BinariesConfig, version: string, platforms?: BinaryPlatform[]): void;
|
package/dist/utils/git.d.ts
CHANGED
|
@@ -9,6 +9,11 @@ export declare function executeCommand(command: string): Promise<string>;
|
|
|
9
9
|
* Возвращает false если хук упал с ошибкой
|
|
10
10
|
*/
|
|
11
11
|
export declare function runBeforeCommitHook(command: string): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Выполняет git команду
|
|
14
|
+
* Экспортируется для тестирования (позволяет мокать через spyOn)
|
|
15
|
+
*/
|
|
16
|
+
export declare function gitCommand(command: string): Promise<string>;
|
|
12
17
|
/**
|
|
13
18
|
* Получает информацию о Git репозитории
|
|
14
19
|
*
|
|
@@ -69,6 +74,9 @@ export declare function isWorkingTreeClean(): Promise<boolean>;
|
|
|
69
74
|
*/
|
|
70
75
|
export declare function addChangedFiles(): Promise<void>;
|
|
71
76
|
/**
|
|
72
|
-
* Проверяет, что тег
|
|
77
|
+
* Проверяет, что тег существует.
|
|
78
|
+
*
|
|
79
|
+
* @returns true если тег существует, false если тег не найден
|
|
80
|
+
* @throws Error при критических ошибках git (повреждённый репозиторий, git не найден)
|
|
73
81
|
*/
|
|
74
82
|
export declare function tagExists(tag: string): Promise<boolean>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitverse-release",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.0",
|
|
4
4
|
"description": "Conventional Commits release automation tool for GitVerse",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gitverse",
|
|
@@ -47,11 +47,12 @@
|
|
|
47
47
|
"typecheck": "tsc --noEmit"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"gitverse-api-sdk": "
|
|
50
|
+
"gitverse-api-sdk": "5.2.0",
|
|
51
|
+
"jsonc-parser": "^3.3.1",
|
|
52
|
+
"tar": "^7.5.3"
|
|
51
53
|
},
|
|
52
54
|
"devDependencies": {
|
|
53
55
|
"@types/bun": "1.3.6",
|
|
54
|
-
"bun-plugin-dts": "^0.3.0",
|
|
55
56
|
"typescript": "^5.9.3"
|
|
56
57
|
},
|
|
57
58
|
"publishConfig": {
|
package/schema.json
CHANGED
|
@@ -3,6 +3,110 @@
|
|
|
3
3
|
"additionalProperties": false,
|
|
4
4
|
"description": "Configuration file for gitverse-release tool",
|
|
5
5
|
"properties": {
|
|
6
|
+
"$schema": {
|
|
7
|
+
"description": "JSON Schema reference for IDE support",
|
|
8
|
+
"type": "string"
|
|
9
|
+
},
|
|
10
|
+
"binaries": {
|
|
11
|
+
"default": {
|
|
12
|
+
"continueOnError": false,
|
|
13
|
+
"distDir": "./dist",
|
|
14
|
+
"enabled": false,
|
|
15
|
+
"inputFormat": "directory",
|
|
16
|
+
"mainPackage": "./package.json",
|
|
17
|
+
"name": "",
|
|
18
|
+
"outDir": "./npm",
|
|
19
|
+
"platforms": ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"],
|
|
20
|
+
"publishCommand": "npm publish --access public",
|
|
21
|
+
"retryAttempts": 3
|
|
22
|
+
},
|
|
23
|
+
"description": "Binary distribution settings for publishing platform-specific npm packages",
|
|
24
|
+
"properties": {
|
|
25
|
+
"binName": {
|
|
26
|
+
"description": "Binary name in $PATH. Defaults to 'name' value",
|
|
27
|
+
"type": "string"
|
|
28
|
+
},
|
|
29
|
+
"continueOnError": {
|
|
30
|
+
"default": false,
|
|
31
|
+
"description": "Continue publishing remaining packages if one fails",
|
|
32
|
+
"type": "boolean"
|
|
33
|
+
},
|
|
34
|
+
"distDir": {
|
|
35
|
+
"default": "./dist",
|
|
36
|
+
"description": "Directory containing platform-specific binaries (e.g., dist/yougile-linux-x64/yougile)",
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"enabled": {
|
|
40
|
+
"default": false,
|
|
41
|
+
"description": "Enable binary distribution",
|
|
42
|
+
"type": "boolean"
|
|
43
|
+
},
|
|
44
|
+
"inputFormat": {
|
|
45
|
+
"default": "directory",
|
|
46
|
+
"description": "Input format for binaries. 'directory' expects binaries in dist/name-platform/name, 'tar.gz' expects archives in dist/name-platform.tar.gz",
|
|
47
|
+
"enum": ["directory", "tar.gz"],
|
|
48
|
+
"type": "string"
|
|
49
|
+
},
|
|
50
|
+
"mainPackage": {
|
|
51
|
+
"default": "./package.json",
|
|
52
|
+
"description": "Path to main package.json for updating optionalDependencies",
|
|
53
|
+
"type": "string"
|
|
54
|
+
},
|
|
55
|
+
"name": {
|
|
56
|
+
"description": "Base name for packages (e.g., 'yougile' creates @scope/yougile-linux-x64)",
|
|
57
|
+
"type": "string"
|
|
58
|
+
},
|
|
59
|
+
"outDir": {
|
|
60
|
+
"default": "./npm",
|
|
61
|
+
"description": "Output directory for generated npm packages",
|
|
62
|
+
"type": "string"
|
|
63
|
+
},
|
|
64
|
+
"packageNameTemplate": {
|
|
65
|
+
"description": "Template for package names. Placeholders: {{scope}}, {{name}}, {{platform}}. Default: '{{name}}-{{platform}}' (without scope) or '@{{scope}}/{{name}}-{{platform}}' (with scope)",
|
|
66
|
+
"examples": ["{{name}}-{{platform}}", "@{{scope}}/{{name}}-{{platform}}", "{{name}}-bin-{{platform}}"],
|
|
67
|
+
"type": "string"
|
|
68
|
+
},
|
|
69
|
+
"platformMap": {
|
|
70
|
+
"additionalProperties": {
|
|
71
|
+
"enum": ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64", "win32-arm64"],
|
|
72
|
+
"type": "string"
|
|
73
|
+
},
|
|
74
|
+
"description": "Mapping of source file keys to npm platforms. Keys are identifiers in archive names (e.g., 'linux-x64'), values are npm platforms",
|
|
75
|
+
"type": "object"
|
|
76
|
+
},
|
|
77
|
+
"platforms": {
|
|
78
|
+
"default": ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"],
|
|
79
|
+
"description": "Platforms to publish",
|
|
80
|
+
"items": {
|
|
81
|
+
"enum": ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64", "win32-arm64"],
|
|
82
|
+
"type": "string"
|
|
83
|
+
},
|
|
84
|
+
"type": "array",
|
|
85
|
+
"uniqueItems": true
|
|
86
|
+
},
|
|
87
|
+
"publishCommand": {
|
|
88
|
+
"default": "npm publish --access public",
|
|
89
|
+
"description": "Command to publish packages. Supports placeholders: {{packageDir}}, {{version}}, {{platform}}, {{scope}}, {{name}}",
|
|
90
|
+
"type": "string"
|
|
91
|
+
},
|
|
92
|
+
"retryAttempts": {
|
|
93
|
+
"default": 3,
|
|
94
|
+
"description": "Number of retry attempts for publish command",
|
|
95
|
+
"maximum": 10,
|
|
96
|
+
"minimum": 1,
|
|
97
|
+
"type": "integer"
|
|
98
|
+
},
|
|
99
|
+
"scope": {
|
|
100
|
+
"description": "npm scope for platform packages (e.g., '@rainypixel'). Optional - if not set, packages are published without scope",
|
|
101
|
+
"type": "string"
|
|
102
|
+
},
|
|
103
|
+
"sourceBinName": {
|
|
104
|
+
"description": "Binary name inside archive (if different from 'name'). Used only with inputFormat: 'tar.gz'",
|
|
105
|
+
"type": "string"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"type": "object"
|
|
109
|
+
},
|
|
6
110
|
"changelog": {
|
|
7
111
|
"default": {
|
|
8
112
|
"showAuthor": true,
|