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/README.md CHANGED
@@ -4,17 +4,18 @@
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
5
  [![Test Coverage](https://img.shields.io/badge/coverage-99.85%25-brightgreen.svg)](https://gitverse.ru/onreza/release-tool)
6
6
 
7
- Инструмент автоматизации релизов с поддержкой Conventional Commits, семантического версионирования и интеграцией с GitVerse.
7
+ Универсальный инструмент автоматизации релизов с поддержкой Conventional Commits, семантического версионирования и интеграцией с **GitVerse**, **GitHub** и **GitLab** (coming soon).
8
8
 
9
9
  ## Возможности
10
10
 
11
11
  - ✅ **Автоматическое версионирование** на основе Conventional Commits
12
12
  - 📝 **Генерация CHANGELOG** с группировкой по типам коммитов
13
- - 🌐 **Интеграция с GitVerse API** для создания релизов
13
+ - 🌐 **Мультиплатформенность** поддержка GitVerse, GitHub и GitLab
14
+ - 🔄 **Автоопределение платформы** по git remote или CI окружению
14
15
  - 📦 **Поддержка монорепозиториев** с независимым версионированием
15
16
  - 🏷️ **Автоматические git теги и коммиты**
16
17
  - 🔍 **Режим dry-run** для безопасного тестирования
17
- - ⚙️ **Гибкая конфигурация** через `.gitversereleaserc.json`
18
+ - ⚙️ **Гибкая конфигурация** через `.onrezarelease.json`
18
19
  - 🔧 **Автогенерация commitlint конфига** из release конфигурации
19
20
  - 🪝 **Хуки beforeCommit** для автоматической подготовки файлов перед релизом
20
21
  - 📤 **Бинарная дистрибуция** — публикация платформенных npm-пакетов (по паттерну esbuild/biome)
@@ -37,7 +38,12 @@ pnpm add -D onreza-release
37
38
 
38
39
  ## Быстрый старт
39
40
 
40
- > ⚠️ **Важно:** Для создания релизов в GitVerse необходимо настроить `GVR_TOKEN`. Без токена инструмент работает в урезанном режиме (только локальные теги и CHANGELOG). См. [Настройка GVR_TOKEN](#️-настройка-gitverse_token)
41
+ > ⚠️ **Важно:** Для создания релизов необходимо настроить токен платформы:
42
+ > - **GitVerse**: `GVR_TOKEN`
43
+ > - **GitHub**: `GITHUB_TOKEN` или `GH_TOKEN`
44
+ > - **GitLab**: `GITLAB_TOKEN` или `GL_TOKEN`
45
+ >
46
+ > Без токена инструмент работает в урезанном режиме (только локальные теги и CHANGELOG). См. [Настройка токенов](#️-настройка-токенов)
41
47
 
42
48
  ### 1. Базовое использование
43
49
 
@@ -51,7 +57,7 @@ npx onreza-release
51
57
 
52
58
  ### 2. Конфигурация
53
59
 
54
- Создайте `.gitversereleaserc.json` в корне проекта:
60
+ Создайте `.onrezarelease.json` в корне проекта:
55
61
 
56
62
  ```json
57
63
  {
@@ -71,8 +77,9 @@ npx onreza-release
71
77
  "showHash": true,
72
78
  "showAuthor": true
73
79
  },
74
- "gitverse": {
75
- "createRelease": true
80
+ "release": {
81
+ "enabled": true,
82
+ "platform": "auto"
76
83
  }
77
84
  }
78
85
  ```
@@ -170,11 +177,12 @@ const result = await release("my-package", {
170
177
  });
171
178
  ```
172
179
 
173
- > **Примечание для GitVerse Actions:**
174
- > В GitVerse Actions автоматически доступны переменные окружения:
175
- > - `GVR_TOKEN` - должен быть настроен в Secrets (см. [Настройка](#️-настройка-gitverse_token))
176
- > - `GITVERSE_PUBLIC_API_URL` - автоматически доступен (`https://api.gitverse.ru/`)
177
- > - `GITHUB_REPOSITORY` - имя репозитория в формате `owner/repo`
180
+ > **Примечание для CI:**
181
+ > - **GitVerse Actions**: `GVR_TOKEN` должен быть настроен в Secrets
182
+ > - **GitHub Actions**: `GITHUB_TOKEN` доступен автоматически
183
+ > - **GitLab CI**: `GITLAB_TOKEN` должен быть настроен в Variables
184
+ >
185
+ > Подробнее см. [Настройка токенов](#️-настройка-токенов)
178
186
 
179
187
  ## Поддержка монорепозиториев
180
188
 
@@ -253,7 +261,7 @@ npx onreza-release generate-commitlint --format js --output .commitlintrc.js
253
261
 
254
262
  ### Конфигурация defaults
255
263
 
256
- Добавьте секцию `commitlint` в `.gitversereleaserc.json`:
264
+ Добавьте секцию `commitlint` в `.onrezarelease.json`:
257
265
 
258
266
  ```json
259
267
  {
@@ -334,7 +342,7 @@ npx onreza-release publish-binaries
334
342
 
335
343
  ### Конфигурация
336
344
 
337
- Добавьте секцию `binaries` в `.gitversereleaserc.jsonc`:
345
+ Добавьте секцию `binaries` в `.onrezarelease.jsonc`:
338
346
 
339
347
  ```jsonc
340
348
  {
@@ -553,6 +561,50 @@ jobs:
553
561
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
554
562
  ```
555
563
 
564
+ ## Мультиплатформенность
565
+
566
+ Инструмент поддерживает создание релизов на разных Git платформах с автоматическим определением.
567
+
568
+ ### Поддерживаемые платформы
569
+
570
+ | Платформа | Токен | CI окружение |
571
+ |-----------|-------|--------------|
572
+ | **GitVerse** | `GVR_TOKEN` | GitVerse Actions |
573
+ | **GitHub** | `GITHUB_TOKEN`, `GH_TOKEN` | GitHub Actions |
574
+ | **GitLab** | `GITLAB_TOKEN`, `GL_TOKEN` | GitLab CI |
575
+
576
+ ### Автоопределение платформы
577
+
578
+ Платформа определяется автоматически в следующем порядке:
579
+ 1. **CI окружение** — по переменным `GITVERSE_ACTIONS`, `GITHUB_ACTIONS`, `GITLAB_CI`
580
+ 2. **Git remote URL** — по хосту в `git remote get-url origin`
581
+
582
+ ### Конфигурация
583
+
584
+ ```json
585
+ {
586
+ "release": {
587
+ "enabled": true,
588
+ "platform": "auto", // "auto" | "gitverse" | "github" | "gitlab"
589
+ "checkExisting": true, // идемпотентность
590
+ "failOnError": true // прерывать при ошибке
591
+ }
592
+ }
593
+ ```
594
+
595
+ ### Примеры использования
596
+
597
+ ```bash
598
+ # Автоопределение платформы
599
+ npx onreza-release
600
+
601
+ # На GitHub
602
+ GITHUB_TOKEN=xxx npx onreza-release
603
+
604
+ # На GitLab
605
+ GITLAB_TOKEN=xxx npx onreza-release
606
+ ```
607
+
556
608
  ## Конфигурация
557
609
 
558
610
  ### Полный пример
@@ -588,9 +640,11 @@ jobs:
588
640
  "allowPrerelease": false,
589
641
  "preMajorMode": "auto"
590
642
  },
591
- "gitverse": {
592
- "createRelease": true,
593
- "token": "${GVR_TOKEN}"
643
+ "release": {
644
+ "enabled": true,
645
+ "platform": "auto",
646
+ "checkExisting": true,
647
+ "failOnError": true
594
648
  },
595
649
  "monorepo": {
596
650
  "enabled": false,
@@ -664,55 +718,71 @@ export GVR_TOKEN="your-token-here"
664
718
  echo "GVR_TOKEN=your-token" >> .env
665
719
  ```
666
720
 
667
- ### ⚠️ Настройка GVR_TOKEN
721
+ ### ⚠️ Настройка токенов
668
722
 
669
- **КРИТИЧЕСКИ ВАЖНО:** Без настройки `GVR_TOKEN` инструмент работает в **урезанном режиме**:
723
+ **КРИТИЧЕСКИ ВАЖНО:** Без настройки токена платформы инструмент работает в **урезанном режиме**:
670
724
 
671
725
  ✅ **С токеном (полный режим):**
672
- - Автоматическое создание релизов в GitVerse
726
+ - Автоматическое создание релизов на платформе
673
727
  - Публикация changelog в релиз
674
728
  - Загрузка ассетов релиза
675
729
  - Push тегов и коммитов в удаленный репозиторий
676
730
 
677
731
  ⚠️ **Без токена (урезанный режим):**
678
- - ❌ НЕТ создания релизов в GitVerse
732
+ - ❌ НЕТ создания релизов на платформе
679
733
  - ✅ Генерация CHANGELOG локально
680
734
  - ✅ Создание git тегов локально
681
735
  - ✅ Коммиты изменений локально
682
736
 
683
- #### Настройка токена для GitVerse Actions
737
+ #### Токены по платформам
684
738
 
685
- **Важно:** `GVR_TOKEN` **НЕ предоставляется автоматически** в GitVerse Actions!
739
+ | Платформа | Переменные окружения | Где создать |
740
+ |-----------|---------------------|-------------|
741
+ | **GitVerse** | `GVR_TOKEN` | Settings → Applications → Generate New Token |
742
+ | **GitHub** | `GITHUB_TOKEN`, `GH_TOKEN` | Settings → Developer settings → Personal access tokens |
743
+ | **GitLab** | `GITLAB_TOKEN`, `GL_TOKEN` | Preferences → Access Tokens |
686
744
 
687
- **Шаг 1: Создайте Personal Access Token**
688
- 1. Перейдите в GitVerse: **Settings** → **Applications** → **Generate New Token**
689
- 2. Выберите необходимые права:
690
- - `repo` - полный доступ к репозиториям (обязательно для релизов)
691
- 3. Скопируйте токен (показывается только один раз!)
745
+ #### Настройка для GitVerse Actions
692
746
 
693
- **Шаг 2: Добавьте токен в Secrets репозитория**
694
- 1. В репозитории: **Settings** → **Secrets and Variables** → **Actions**
695
- 2. Нажмите **New repository secret**
696
- 3. **Name:** `GVR_TOKEN`
697
- 4. **Value:** ваш Personal Access Token
698
- 5. Сохраните
747
+ **Важно:** `GVR_TOKEN` **НЕ предоставляется автоматически** в GitVerse Actions!
699
748
 
700
- **Шаг 3: Используйте в workflow**
749
+ 1. Создайте Personal Access Token в GitVerse (Settings → Applications)
750
+ 2. Добавьте токен в Secrets: **Settings** → **Secrets and Variables** → **Actions** → **New repository secret**
751
+ 3. Используйте в workflow:
701
752
  ```yaml
702
753
  env:
703
754
  GVR_TOKEN: ${{ secrets.GVR_TOKEN }}
704
755
  ```
705
756
 
706
- **Шаг 4: Проверка (рекомендуется)**
757
+ #### Настройка для GitHub Actions
758
+
759
+ В GitHub Actions `GITHUB_TOKEN` доступен автоматически, но для создания релизов может потребоваться Personal Access Token с расширенными правами:
760
+
761
+ ```yaml
762
+ env:
763
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
764
+ # или для расширенных прав:
765
+ # GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
766
+ ```
767
+
768
+ #### Настройка для GitLab CI
769
+
707
770
  ```yaml
708
- - name: Validate GVR_TOKEN
771
+ variables:
772
+ GITLAB_TOKEN: $GITLAB_ACCESS_TOKEN # Добавьте в Settings → CI/CD → Variables
773
+ ```
774
+
775
+ #### Проверка токена (рекомендуется)
776
+
777
+ ```yaml
778
+ - name: Validate Token
709
779
  run: |
710
- if [ -z "$GVR_TOKEN" ]; then
711
- echo "❌ ERROR: GVR_TOKEN is not set!"
712
- echo "Please add GVR_TOKEN to repository secrets."
713
- exit 1
714
- fi
715
- echo "✅ GVR_TOKEN is configured"
780
+ # GitVerse
781
+ if [ -n "$GVR_TOKEN" ]; then echo "✅ GVR_TOKEN configured"; fi
782
+ # GitHub
783
+ if [ -n "$GITHUB_TOKEN" ]; then echo "✅ GITHUB_TOKEN configured"; fi
784
+ # GitLab
785
+ if [ -n "$GITLAB_TOKEN" ]; then echo "✅ GITLAB_TOKEN configured"; fi
716
786
  ```
717
787
 
718
788
  ## CLI опции
@@ -747,7 +817,7 @@ npx onreza-release generate-binary-packages [options]
747
817
 
748
818
  Опции:
749
819
  --dry-run Запуск без внесения изменений
750
- --config <path> Путь к конфиг файлу (default: .gitversereleaserc.json)
820
+ --config <path> Путь к конфиг файлу (default: .onrezarelease.json)
751
821
  --package <name> Имя пакета для релиза (для монорепо)
752
822
  --version <version> Указать конкретную версию
753
823
  --prerelease [tag] Создать prerelease версию (beta, alpha, rc)
@@ -789,7 +859,7 @@ npx onreza-release generate-binary-packages [options]
789
859
 
790
860
  ### GitVerse Actions
791
861
 
792
- ⚠️ **Перед использованием:** Убедитесь, что `GVR_TOKEN` добавлен в Secrets репозитория (см. [Настройка GVR_TOKEN](#️-настройка-gitverse_token))
862
+ ⚠️ **Перед использованием:** Убедитесь, что `GVR_TOKEN` добавлен в Secrets репозитория (см. [Настройка токенов](#️-настройка-токенов))
793
863
 
794
864
  ```yaml
795
865
  name: Release
@@ -840,6 +910,60 @@ jobs:
840
910
  4. ✅ Создает релиз с полным функционалом (CHANGELOG, теги, GitVerse release)
841
911
  5. ✅ Автоматически публикует в GitVerse
842
912
 
913
+ ### GitHub Actions
914
+
915
+ ```yaml
916
+ name: Release
917
+
918
+ on:
919
+ workflow_dispatch:
920
+
921
+ jobs:
922
+ release:
923
+ runs-on: ubuntu-latest
924
+ permissions:
925
+ contents: write
926
+ steps:
927
+ - uses: actions/checkout@v4
928
+ with:
929
+ fetch-depth: 0
930
+
931
+ - uses: actions/setup-node@v4
932
+ with:
933
+ node-version: '20'
934
+
935
+ - run: npm ci
936
+
937
+ - name: Configure Git
938
+ run: |
939
+ git config user.name "github-actions[bot]"
940
+ git config user.email "github-actions[bot]@users.noreply.github.com"
941
+
942
+ - name: Create Release
943
+ run: npx onreza-release
944
+ env:
945
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
946
+ ```
947
+
948
+ ### GitLab CI
949
+
950
+ ```yaml
951
+ release:
952
+ stage: release
953
+ image: node:20
954
+ rules:
955
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
956
+ when: manual
957
+ before_script:
958
+ - git config user.name "GitLab CI"
959
+ - git config user.email "ci@gitlab.com"
960
+ - npm ci
961
+ script:
962
+ - npx onreza-release
963
+ variables:
964
+ GITLAB_TOKEN: $GITLAB_ACCESS_TOKEN
965
+ ```
966
+
843
967
  ## Разработка
844
968
 
845
969
  ```bash
@@ -1,74 +1,16 @@
1
1
  import type { BinaryCliOptions, BinaryDistributionResult } from "./types";
2
2
  /**
3
- * Генерирует бинарные пакеты без публикации.
4
- *
5
- * Эта функция создаёт платформенные npm-пакеты с бинарниками,
6
- * но не публикует их. Используйте для подготовки пакетов перед публикацией.
3
+ * Публикует бинарники в GitVerse Release
7
4
  *
8
5
  * Процесс:
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
6
+ * 1. Загружает конфигурацию и валидирует её
7
+ * 2. Проверяет наличие архивов для всех платформ
8
+ * 3. Валидирует файлы на соответствие лимитам GitVerse
9
+ * 4. Создаёт или находит существующий релиз
10
+ * 5. Загружает архивы как assets в релиз
11
+ * 6. Генерирует postinstall скрипт и manifest
50
12
  *
51
13
  * @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
- * ```
14
+ * @returns Результат публикации
73
15
  */
74
16
  export declare function publishBinaries(options?: BinaryCliOptions): Promise<BinaryDistributionResult>;