onreza-release 1.0.1 → 2.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.
package/dist/types.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  /**
2
- * Конфигурация для gitverse-release
2
+ * Поддерживаемые Git платформы
3
+ */
4
+ export type GitPlatform = "gitverse" | "github" | "gitlab";
5
+ /**
6
+ * Конфигурация для onreza-release
3
7
  */
4
8
  export interface ReleaseConfig {
5
9
  /**
@@ -19,9 +23,9 @@ export interface ReleaseConfig {
19
23
  */
20
24
  versioning?: VersioningConfig;
21
25
  /**
22
- * Настройки GitVerse Release
26
+ * Настройки создания Release (GitVerse, GitHub, GitLab)
23
27
  */
24
- gitverse?: GitVerseConfig;
28
+ release?: ReleaseProviderConfig;
25
29
  /**
26
30
  * Настройки retry механизма
27
31
  */
@@ -224,6 +228,14 @@ export interface GitRepoInfo {
224
228
  * Текущая ветка
225
229
  */
226
230
  branch: string;
231
+ /**
232
+ * Git платформа (gitverse, github, gitlab)
233
+ */
234
+ platform?: GitPlatform;
235
+ /**
236
+ * Хост платформы (например: github.com, gitverse.ru)
237
+ */
238
+ host?: string;
227
239
  }
228
240
  /**
229
241
  * Conventional Commit
@@ -374,22 +386,37 @@ export interface ReleaseResult {
374
386
  warnings: string[];
375
387
  }
376
388
  /**
377
- * Конфигурация GitVerse Release
389
+ * Конфигурация Release Provider (GitVerse, GitHub, GitLab)
378
390
  */
379
- export interface GitVerseConfig {
391
+ export interface ReleaseProviderConfig {
380
392
  /**
381
- * Включить создание релиза через GitVerse API
382
- * Требует переменную окружения GVR_TOKEN
393
+ * Включить создание релиза через API платформы
394
+ * Требует соответствующий токен:
395
+ * - GitVerse: GVR_TOKEN
396
+ * - GitHub: GITHUB_TOKEN или GH_TOKEN
397
+ * - GitLab: GITLAB_TOKEN или GL_TOKEN
398
+ * @default true
383
399
  */
384
400
  enabled: boolean;
401
+ /**
402
+ * Платформа для создания релиза
403
+ * - "auto": автоопределение по git remote или CI окружению
404
+ * - "gitverse": GitVerse
405
+ * - "github": GitHub
406
+ * - "gitlab": GitLab
407
+ * @default "auto"
408
+ */
409
+ platform: GitPlatform | "auto";
385
410
  /**
386
411
  * Прерывать процесс релиза при ошибке создания release (после retry)
387
412
  * Если false, ошибки логируются как warnings
413
+ * @default true
388
414
  */
389
415
  failOnError: boolean;
390
416
  /**
391
417
  * Проверять существование релиза перед созданием (идемпотентность)
392
418
  * Позволяет безопасно перезапускать pipeline
419
+ * @default true
393
420
  */
394
421
  checkExisting: boolean;
395
422
  }
@@ -508,7 +535,7 @@ export interface CommitlintGeneratorConfig {
508
535
  export interface GenerateCommitlintOptions {
509
536
  /**
510
537
  * Путь к release конфигу
511
- * @default ".gitversereleaserc.json"
538
+ * @default ".onrezarelease.json"
512
539
  */
513
540
  configPath?: string;
514
541
  /**
@@ -596,31 +623,54 @@ export type BinaryPlatform = "linux-x64" | "linux-arm64" | "darwin-x64" | "darwi
596
623
  */
597
624
  export type BinaryInputFormat = "directory" | "tar.gz";
598
625
  /**
599
- * Допустимые значения для поля os в package.json
626
+ * Расширение исполняемого файла
600
627
  */
601
- export type NpmOS = "linux" | "darwin" | "win32" | "freebsd" | "openbsd" | "sunos" | "aix";
628
+ export type BinaryExtension = "" | ".exe";
602
629
  /**
603
- * Допустимые значения для поля cpu в package.json
630
+ * Маппинг платформы на os/arch значения
604
631
  */
605
- export type NpmCPU = "x64" | "arm64" | "ia32" | "arm" | "mips" | "ppc64";
632
+ export interface PlatformMapping {
633
+ /** Значение для os (linux, darwin, win32) */
634
+ os: string;
635
+ /** Значение для arch (x64, arm64) */
636
+ arch: string;
637
+ /** Расширение исполняемого файла */
638
+ extension: BinaryExtension;
639
+ }
606
640
  /**
607
- * Расширение исполняемого файла
641
+ * Результат загрузки asset в GitVerse Release
608
642
  */
609
- export type BinaryExtension = "" | ".exe";
643
+ export interface BinaryAssetUploadResult {
644
+ /** Платформа */
645
+ platform: BinaryPlatform;
646
+ /** Имя загруженного asset */
647
+ assetName: string;
648
+ /** URL для скачивания */
649
+ downloadUrl: string;
650
+ /** Успешно ли загружен */
651
+ success: boolean;
652
+ /** Сообщение об ошибке */
653
+ error?: string;
654
+ }
610
655
  /**
611
- * npm scope в формате @org
656
+ * Провайдер дистрибуции бинарников (абстракция)
612
657
  */
613
- export type NpmScope = `@${string}`;
658
+ export interface BinaryDistributionProvider {
659
+ /** Загружает файл и возвращает URL для скачивания */
660
+ uploadAsset(filePath: string, assetName: string): Promise<{
661
+ downloadUrl: string;
662
+ }>;
663
+ }
614
664
  /**
615
- * Маппинг платформы на os/cpu значения для package.json
665
+ * Манифест с URL-ами для скачивания бинарников
616
666
  */
617
- export interface PlatformMapping {
618
- /** Значение для поля os в package.json */
619
- os: NpmOS;
620
- /** Значение для поля cpu в package.json */
621
- cpu: NpmCPU;
622
- /** Расширение исполняемого файла */
623
- extension: BinaryExtension;
667
+ export interface BinaryManifest {
668
+ /** Версия */
669
+ version: string;
670
+ /** Имя бинарника */
671
+ binName: string;
672
+ /** Маппинг платформ на URL-ы для скачивания */
673
+ assets: Record<BinaryPlatform, string>;
624
674
  }
625
675
  /**
626
676
  * Конфигурация бинарной дистрибуции
@@ -632,25 +682,7 @@ export interface BinariesConfig {
632
682
  */
633
683
  enabled: boolean;
634
684
  /**
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)
685
+ * Базовое имя бинарника (например: yougile)
654
686
  */
655
687
  name: string;
656
688
  /**
@@ -663,60 +695,32 @@ export interface BinariesConfig {
663
695
  * @default "./dist"
664
696
  */
665
697
  distDir: string;
666
- /**
667
- * Директория для генерации пакетов
668
- * @default "./npm"
669
- */
670
- outDir: string;
671
698
  /**
672
699
  * Список платформ для публикации
673
700
  * @default ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"]
674
701
  */
675
702
  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
703
  /**
698
704
  * Формат входных данных для бинарников
699
705
  * - "directory": бинарники в директориях (dist/name-platform/name)
700
706
  * - "tar.gz": бинарники в tar.gz архивах (dist/name-platform.tar.gz)
701
- * @default "directory"
707
+ * @default "tar.gz"
702
708
  */
703
709
  inputFormat?: BinaryInputFormat;
704
710
  /**
705
711
  * Шаблон имени архива.
706
712
  * Плейсхолдеры: {{name}}, {{platform}}
707
- * Используется только при inputFormat: "tar.gz"
708
713
  * @default "{{name}}-{{platform}}.tar.gz"
709
714
  */
710
715
  archiveNameTemplate?: string;
711
716
  /**
712
717
  * Имя бинарника внутри архива (если отличается от name)
713
- * Используется только при inputFormat: "tar.gz"
714
718
  */
715
719
  sourceBinName?: string;
716
720
  /**
717
- * Маппинг имён файлов/директорий источника на npm платформы
721
+ * Маппинг имён файлов/директорий источника на платформы
718
722
  * Ключ - идентификатор в имени файла (например: "linux-x64")
719
- * Значение - npm платформа (например: "linux-x64")
723
+ * Значение - платформа (например: "linux-x64")
720
724
  *
721
725
  * @example
722
726
  * {
@@ -726,61 +730,41 @@ export interface BinariesConfig {
726
730
  * }
727
731
  */
728
732
  platformMap?: Record<string, BinaryPlatform>;
733
+ /**
734
+ * Количество попыток retry при ошибке загрузки
735
+ * @default 3
736
+ */
737
+ retryAttempts: number;
738
+ /**
739
+ * Продолжать при ошибке загрузки отдельной платформы
740
+ * @default false
741
+ */
742
+ continueOnError: boolean;
729
743
  }
730
744
  /**
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
- * Успешный результат публикации платформенного пакета
745
+ * Успешный результат загрузки asset
764
746
  */
765
- export interface BinaryPublishSuccess {
747
+ export interface BinaryUploadSuccess {
766
748
  /** Платформа */
767
749
  platform: BinaryPlatform;
768
- /** Полное имя пакета */
769
- packageName: string;
770
- /** Успешно опубликован */
750
+ /** Имя asset */
751
+ assetName: string;
752
+ /** URL для скачивания */
753
+ downloadUrl: string;
754
+ /** Успешно загружен */
771
755
  success: true;
772
756
  /** Количество попыток */
773
757
  attempts: number;
774
758
  }
775
759
  /**
776
- * Неуспешный результат публикации платформенного пакета
760
+ * Неуспешный результат загрузки asset
777
761
  */
778
- export interface BinaryPublishFailure {
762
+ export interface BinaryUploadFailure {
779
763
  /** Платформа */
780
764
  platform: BinaryPlatform;
781
- /** Полное имя пакета */
782
- packageName: string;
783
- /** Не удалось опубликовать */
765
+ /** Имя asset */
766
+ assetName: string;
767
+ /** Не удалось загрузить */
784
768
  success: false;
785
769
  /** Сообщение об ошибке */
786
770
  error: string;
@@ -788,9 +772,9 @@ export interface BinaryPublishFailure {
788
772
  attempts: number;
789
773
  }
790
774
  /**
791
- * Результат публикации платформенного пакета (discriminated union)
775
+ * Результат загрузки asset (discriminated union)
792
776
  */
793
- export type BinaryPublishResult = BinaryPublishSuccess | BinaryPublishFailure;
777
+ export type BinaryUploadResult = BinaryUploadSuccess | BinaryUploadFailure;
794
778
  /**
795
779
  * Общий результат бинарной дистрибуции
796
780
  */
@@ -799,10 +783,12 @@ export interface BinaryDistributionResult {
799
783
  success: boolean;
800
784
  /** Версия */
801
785
  version: string;
802
- /** Результаты генерации пакетов */
803
- packages: BinaryPackageResult[];
804
- /** Результаты публикации */
805
- published: BinaryPublishResult[];
786
+ /** ID созданного релиза */
787
+ releaseId?: number;
788
+ /** URL релиза */
789
+ releaseUrl?: string;
790
+ /** Результаты загрузки assets */
791
+ uploads: BinaryUploadResult[];
806
792
  /** Ошибки */
807
793
  errors: string[];
808
794
  /** Предупреждения */
@@ -832,7 +818,7 @@ export type BinaryExtractionResult = BinaryExtractionSuccess | BinaryExtractionF
832
818
  */
833
819
  export interface BinaryCliOptions {
834
820
  /**
835
- * Тестовый прогон (не публиковать)
821
+ * Тестовый прогон (не загружать)
836
822
  */
837
823
  dryRun?: boolean;
838
824
  /**
@@ -843,20 +829,40 @@ export interface BinaryCliOptions {
843
829
  * Override версии
844
830
  */
845
831
  version?: string;
846
- /**
847
- * Только генерация пакетов (без публикации)
848
- */
849
- generateOnly?: boolean;
850
- /**
851
- * Не обновлять основной package.json
852
- */
853
- skipMainPackage?: boolean;
854
832
  /**
855
833
  * Конкретные платформы для обработки
856
834
  */
857
835
  platforms?: BinaryPlatform[];
836
+ /**
837
+ * Тег релиза (по умолчанию создаётся новый релиз)
838
+ */
839
+ tag?: string;
858
840
  /**
859
841
  * Подробный вывод
860
842
  */
861
843
  verbose?: boolean;
862
844
  }
845
+ /**
846
+ * Лимиты GitVerse для артефактов релиза
847
+ */
848
+ export interface GitVerseAssetLimits {
849
+ /** Максимальный размер одного файла (100 МБ) */
850
+ maxFileSizeBytes: number;
851
+ /** Максимальное количество файлов за раз */
852
+ maxFilesPerUpload: number;
853
+ /** Максимальный совокупный размер за раз (500 МБ) */
854
+ maxTotalSizeBytes: number;
855
+ /** Допустимые расширения файлов */
856
+ allowedExtensions: string[];
857
+ }
858
+ /**
859
+ * Результат валидации asset
860
+ */
861
+ export interface AssetValidationResult {
862
+ /** Валиден ли файл */
863
+ valid: boolean;
864
+ /** Сообщение об ошибке */
865
+ error?: string;
866
+ /** Размер файла */
867
+ sizeBytes?: number;
868
+ }
@@ -0,0 +1,50 @@
1
+ import type { GitVerseReleaseProvider } from "../providers";
2
+ import type { AssetValidationResult, BinaryDistributionProvider, GitVerseAssetLimits } from "../types";
3
+ /**
4
+ * Лимиты GitVerse для артефактов релиза
5
+ */
6
+ export declare const GITVERSE_ASSET_LIMITS: GitVerseAssetLimits;
7
+ /**
8
+ * Форматирует размер файла в человекочитаемый формат
9
+ */
10
+ export declare function formatFileSize(bytes: number): string;
11
+ /**
12
+ * Валидирует файл для загрузки в GitVerse Release
13
+ *
14
+ * @param filePath - Путь к файлу
15
+ * @returns Результат валидации
16
+ */
17
+ export declare function validateAssetFile(filePath: string): Promise<AssetValidationResult>;
18
+ /**
19
+ * Валидирует набор файлов для загрузки
20
+ *
21
+ * @param filePaths - Массив путей к файлам
22
+ * @returns Результат валидации с совокупным размером
23
+ */
24
+ export declare function validateAssetBatch(filePaths: string[]): Promise<{
25
+ valid: boolean;
26
+ errors: string[];
27
+ totalSize: number;
28
+ }>;
29
+ /**
30
+ * GitVerse провайдер дистрибуции бинарников
31
+ */
32
+ export declare class GitVerseDistributionProvider implements BinaryDistributionProvider {
33
+ private client;
34
+ private releaseId;
35
+ constructor(client: GitVerseReleaseProvider, releaseId: number);
36
+ /**
37
+ * Загружает файл как asset в релиз
38
+ *
39
+ * @param filePath - Путь к файлу
40
+ * @param assetName - Имя asset в релизе
41
+ * @returns URL для скачивания
42
+ */
43
+ uploadAsset(filePath: string, assetName: string): Promise<{
44
+ downloadUrl: string;
45
+ }>;
46
+ /**
47
+ * Возвращает ID релиза
48
+ */
49
+ get id(): number;
50
+ }
@@ -1,6 +1,6 @@
1
1
  import type { BinariesConfig, BinaryPlatform, PlatformMapping } from "../types";
2
2
  /**
3
- * Маппинг платформ на os/cpu значения для package.json
3
+ * Маппинг платформ на os/arch значения
4
4
  */
5
5
  export declare const PLATFORM_MAPPINGS: Record<BinaryPlatform, PlatformMapping>;
6
6
  /**
@@ -35,30 +35,6 @@ export declare function validateBinaryExists(distDir: string, name: string, plat
35
35
  * @returns Массив отсутствующих платформ
36
36
  */
37
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
38
  /**
63
39
  * Конвертирует платформу в Node.js process.platform и process.arch
64
40
  */
@@ -0,0 +1,34 @@
1
+ import type { BinaryManifest, BinaryPlatform } from "../types";
2
+ /**
3
+ * Генерирует postinstall скрипт для скачивания бинарника
4
+ *
5
+ * @param manifest - Манифест с URL-ами для скачивания
6
+ * @returns JavaScript код postinstall скрипта
7
+ */
8
+ export declare function generatePostinstallScript(manifest: BinaryManifest): string;
9
+ /**
10
+ * Генерирует простой wrapper скрипт для bin/
11
+ *
12
+ * @param binName - Имя бинарника
13
+ * @returns JavaScript код wrapper скрипта
14
+ */
15
+ export declare function generateBinWrapper(binName: string): string;
16
+ /**
17
+ * Создаёт манифест для бинарной дистрибуции
18
+ *
19
+ * @param version - Версия
20
+ * @param binName - Имя бинарника
21
+ * @param assets - Маппинг платформ на URL-ы
22
+ * @returns Манифест
23
+ */
24
+ export declare function createBinaryManifest(version: string, binName: string, assets: Partial<Record<BinaryPlatform, string>>): BinaryManifest;
25
+ /**
26
+ * Генерирует package.json для мастер-пакета с postinstall
27
+ *
28
+ * @param name - Имя пакета
29
+ * @param version - Версия
30
+ * @param binName - Имя бинарника
31
+ * @param description - Описание пакета
32
+ * @returns Содержимое package.json
33
+ */
34
+ export declare function generateMasterPackageJson(name: string, version: string, binName: string, description?: string): string;
@@ -18,7 +18,7 @@ export declare function gitCommand(command: string): Promise<string>;
18
18
  * Получает информацию о Git репозитории
19
19
  *
20
20
  * Приоритет источников данных:
21
- * 1. Переменные окружения GitVerse Actions (для CI/CD)
21
+ * 1. Переменные окружения CI (GitVerse Actions, GitHub Actions, GitLab CI)
22
22
  * 2. Git remote URL (для локального использования)
23
23
  */
24
24
  export declare function getRepoInfo(): Promise<GitRepoInfo>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "onreza-release",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "description": "Conventional Commits release automation tool with GitVerse and GitHub support",
5
5
  "keywords": [
6
6
  "release",
@@ -55,13 +55,13 @@
55
55
  "typecheck": "tsc --noEmit"
56
56
  },
57
57
  "dependencies": {
58
- "@onreza/gitverse-sdk": ">=0.0.0",
58
+ "@onreza/gitverse-sdk": ">=1.0.2",
59
59
  "jsonc-parser": "^3.3.1",
60
60
  "tar": "^7.5.3"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@biomejs/biome": "^2.3.11",
64
- "@types/bun": "1.3.6",
64
+ "@types/bun": "1.3.8",
65
65
  "typescript": "^5.9.3"
66
66
  },
67
67
  "publishConfig": {