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 +169 -45
- package/dist/binaries.d.ts +8 -66
- package/dist/cli.js +1295 -6437
- package/dist/cli.js.map +19 -50
- package/dist/config.d.ts +8 -4
- package/dist/index.d.ts +8 -6
- package/dist/index.js +1301 -6389
- package/dist/index.js.map +17 -48
- package/dist/providers/detector.d.ts +71 -0
- package/dist/providers/github.d.ts +53 -0
- package/dist/providers/gitverse.d.ts +48 -0
- package/dist/providers/index.d.ts +67 -0
- package/dist/providers/limits.d.ts +75 -0
- package/dist/providers/tokens.d.ts +42 -0
- package/dist/providers/types.d.ts +151 -0
- package/dist/types.d.ts +137 -131
- package/dist/utils/binary-distribution-provider.d.ts +50 -0
- package/dist/utils/binary-platforms.d.ts +1 -25
- package/dist/utils/binary-postinstall-generator.d.ts +34 -0
- package/dist/utils/git.d.ts +1 -1
- package/package.json +3 -3
- package/schema.json +41 -61
- package/dist/gitverse.d.ts +0 -91
- package/dist/utils/binary-package-generator.d.ts +0 -24
- package/dist/utils/binary-publisher.d.ts +0 -53
- package/dist/utils/binary-wrapper-generator.d.ts +0 -34
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { GitPlatform, ProviderRepoInfo } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Определяет Git платформу по URL репозитория
|
|
4
|
+
*
|
|
5
|
+
* @param remoteUrl - URL репозитория (HTTPS, SSH, SCP-like)
|
|
6
|
+
* @returns Платформа или null если не удалось определить
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* detectPlatform("https://github.com/owner/repo.git") // "github"
|
|
10
|
+
* detectPlatform("git@gitverse.ru:owner/repo.git") // "gitverse"
|
|
11
|
+
* detectPlatform("https://gitlab.company.com/owner/repo") // "gitlab"
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectPlatform(remoteUrl: string): GitPlatform | null;
|
|
14
|
+
/**
|
|
15
|
+
* Парсит URL репозитория и извлекает owner, repo, host
|
|
16
|
+
*
|
|
17
|
+
* @param url - URL репозитория
|
|
18
|
+
* @returns Информация о репозитории или null если не удалось распарсить
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* parseRepoUrl("https://github.com/owner/repo.git")
|
|
22
|
+
* // { owner: "owner", repo: "repo", host: "github.com" }
|
|
23
|
+
*
|
|
24
|
+
* parseRepoUrl("git@gitverse.ru:owner/repo.git")
|
|
25
|
+
* // { owner: "owner", repo: "repo", host: "gitverse.ru" }
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseRepoUrl(url: string): ProviderRepoInfo | null;
|
|
28
|
+
/**
|
|
29
|
+
* Проверяет, запущен ли скрипт в CI окружении определённой платформы
|
|
30
|
+
*/
|
|
31
|
+
export interface CiEnvironment {
|
|
32
|
+
/** Платформа CI */
|
|
33
|
+
platform: GitPlatform;
|
|
34
|
+
/** Owner/repo из переменных окружения */
|
|
35
|
+
repository?: string;
|
|
36
|
+
/** Текущая ветка */
|
|
37
|
+
branch?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Определяет CI окружение по переменным окружения
|
|
41
|
+
*
|
|
42
|
+
* @returns Информация о CI окружении или null
|
|
43
|
+
*/
|
|
44
|
+
export declare function detectCiEnvironment(): CiEnvironment | null;
|
|
45
|
+
/**
|
|
46
|
+
* Определяет платформу автоматически
|
|
47
|
+
*
|
|
48
|
+
* Приоритет:
|
|
49
|
+
* 1. CI переменные окружения
|
|
50
|
+
* 2. Git remote URL
|
|
51
|
+
*
|
|
52
|
+
* @param remoteUrl - URL репозитория (опционально)
|
|
53
|
+
* @returns Платформа или null
|
|
54
|
+
*/
|
|
55
|
+
export declare function detectPlatformAuto(remoteUrl?: string): GitPlatform | null;
|
|
56
|
+
/**
|
|
57
|
+
* Возвращает базовый URL для платформы
|
|
58
|
+
*
|
|
59
|
+
* @param platform - Платформа
|
|
60
|
+
* @param host - Хост (опционально, для self-hosted)
|
|
61
|
+
* @returns Базовый URL
|
|
62
|
+
*/
|
|
63
|
+
export declare function getPlatformBaseUrl(platform: GitPlatform, host?: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Возвращает API URL для платформы
|
|
66
|
+
*
|
|
67
|
+
* @param platform - Платформа
|
|
68
|
+
* @param host - Хост (опционально, для self-hosted)
|
|
69
|
+
* @returns API URL
|
|
70
|
+
*/
|
|
71
|
+
export declare function getPlatformApiUrl(platform: GitPlatform, host?: string): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { AssetLimits, CreateReleaseOptions, CreateReleaseResult, GitPlatform, ProviderRepoInfo, ReleaseProvider, RetryFunction, TokenValidationResult, UploadAssetResult } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Release Provider
|
|
4
|
+
*
|
|
5
|
+
* Реализует ReleaseProvider для GitHub платформы.
|
|
6
|
+
* Использует GitHub REST API напрямую через fetch.
|
|
7
|
+
*/
|
|
8
|
+
export declare class GitHubReleaseProvider implements ReleaseProvider {
|
|
9
|
+
private repoInfo;
|
|
10
|
+
private retryFn?;
|
|
11
|
+
private token;
|
|
12
|
+
private apiBaseUrl;
|
|
13
|
+
readonly platform: GitPlatform;
|
|
14
|
+
readonly assetLimits: AssetLimits;
|
|
15
|
+
constructor(token: string, repoInfo: ProviderRepoInfo, retryFn?: RetryFunction);
|
|
16
|
+
/**
|
|
17
|
+
* Выполняет API запрос к GitHub
|
|
18
|
+
*/
|
|
19
|
+
private apiRequest;
|
|
20
|
+
/**
|
|
21
|
+
* Проверяет валидность токена через API
|
|
22
|
+
*/
|
|
23
|
+
validateToken(): Promise<TokenValidationResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Создает релиз на GitHub
|
|
26
|
+
*/
|
|
27
|
+
createRelease(tag: string, name: string, body: string, options?: CreateReleaseOptions): Promise<CreateReleaseResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Проверяет существование релиза по тегу
|
|
30
|
+
*
|
|
31
|
+
* @throws Error если произошла ошибка отличная от 404 (сетевая, авторизация и т.д.)
|
|
32
|
+
*/
|
|
33
|
+
releaseExists(tag: string): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Получает информацию о релизе по тегу
|
|
36
|
+
*
|
|
37
|
+
* @returns null если релиз не найден (404)
|
|
38
|
+
* @throws Error если произошла ошибка отличная от 404
|
|
39
|
+
*/
|
|
40
|
+
getRelease(tag: string): Promise<CreateReleaseResult | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Загружает файл как asset к релизу
|
|
43
|
+
*/
|
|
44
|
+
uploadAsset(releaseId: number | string, filePath: string, assetName: string): Promise<UploadAssetResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Определяет Content-Type по имени файла
|
|
47
|
+
*/
|
|
48
|
+
private getContentType;
|
|
49
|
+
/**
|
|
50
|
+
* Возвращает информацию о репозитории
|
|
51
|
+
*/
|
|
52
|
+
get repositoryInfo(): ProviderRepoInfo;
|
|
53
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { AssetLimits, CreateReleaseOptions, CreateReleaseResult, GitPlatform, ProviderRepoInfo, ReleaseProvider, RetryFunction, TokenValidationResult, UploadAssetResult } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* GitVerse Release Provider
|
|
4
|
+
*
|
|
5
|
+
* Реализует ReleaseProvider для GitVerse платформы.
|
|
6
|
+
*/
|
|
7
|
+
export declare class GitVerseReleaseProvider implements ReleaseProvider {
|
|
8
|
+
private client;
|
|
9
|
+
private repoInfo;
|
|
10
|
+
private retryFn?;
|
|
11
|
+
private token;
|
|
12
|
+
readonly platform: GitPlatform;
|
|
13
|
+
readonly assetLimits: AssetLimits;
|
|
14
|
+
constructor(token: string, repoInfo: ProviderRepoInfo, retryFn?: RetryFunction);
|
|
15
|
+
/**
|
|
16
|
+
* Проверяет валидность токена через API
|
|
17
|
+
*/
|
|
18
|
+
validateToken(): Promise<TokenValidationResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Создает релиз на GitVerse
|
|
21
|
+
*/
|
|
22
|
+
createRelease(tag: string, name: string, body: string, options?: CreateReleaseOptions): Promise<CreateReleaseResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Проверяет существование релиза по тегу
|
|
25
|
+
*
|
|
26
|
+
* @throws Error если произошла ошибка отличная от 404 (сетевая, авторизация и т.д.)
|
|
27
|
+
*/
|
|
28
|
+
releaseExists(tag: string): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Получает информацию о релизе по тегу
|
|
31
|
+
*
|
|
32
|
+
* @returns null если релиз не найден (404)
|
|
33
|
+
* @throws Error если произошла ошибка отличная от 404
|
|
34
|
+
*/
|
|
35
|
+
getRelease(tag: string): Promise<CreateReleaseResult | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Загружает файл как asset к релизу
|
|
38
|
+
*/
|
|
39
|
+
uploadAsset(releaseId: number | string, filePath: string, assetName: string): Promise<UploadAssetResult>;
|
|
40
|
+
/**
|
|
41
|
+
* Формирует URL релиза
|
|
42
|
+
*/
|
|
43
|
+
private getReleaseUrl;
|
|
44
|
+
/**
|
|
45
|
+
* Возвращает информацию о репозитории
|
|
46
|
+
*/
|
|
47
|
+
get repositoryInfo(): ProviderRepoInfo;
|
|
48
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { GitPlatform, ProviderRepoInfo, ReleaseProvider, RetryFunction } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Опции для создания провайдера релизов
|
|
4
|
+
*/
|
|
5
|
+
export interface CreateReleaseProviderOptions {
|
|
6
|
+
/** Информация о репозитории */
|
|
7
|
+
repoInfo: ProviderRepoInfo;
|
|
8
|
+
/** Платформа (если не указана, будет определена автоматически) */
|
|
9
|
+
platform?: GitPlatform | "auto";
|
|
10
|
+
/** Токен авторизации (если не указан, будет получен из env) */
|
|
11
|
+
token?: string;
|
|
12
|
+
/** Retry функция (опционально) */
|
|
13
|
+
retryFn?: RetryFunction;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Результат создания провайдера
|
|
17
|
+
*/
|
|
18
|
+
export interface CreateReleaseProviderResult {
|
|
19
|
+
/** Провайдер релизов */
|
|
20
|
+
provider: ReleaseProvider;
|
|
21
|
+
/** Источник токена */
|
|
22
|
+
tokenSource: string;
|
|
23
|
+
/** Определённая платформа */
|
|
24
|
+
platform: GitPlatform;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Создаёт провайдер релизов для указанной платформы
|
|
28
|
+
*
|
|
29
|
+
* Автоматически определяет платформу по URL репозитория или CI окружению,
|
|
30
|
+
* получает токен из переменных окружения и создаёт соответствующий провайдер.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const { provider } = createReleaseProvider({
|
|
35
|
+
* repoInfo: { owner: "user", repo: "project", host: "github.com" },
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* const release = await provider.createRelease("v1.0.0", "Release 1.0.0", "Changelog");
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function createReleaseProvider(options: CreateReleaseProviderOptions): CreateReleaseProviderResult;
|
|
42
|
+
/**
|
|
43
|
+
* Проверяет доступность токена для платформы
|
|
44
|
+
*
|
|
45
|
+
* @param platform - Git платформа
|
|
46
|
+
* @returns true если токен найден
|
|
47
|
+
*/
|
|
48
|
+
export declare function hasToken(platform: GitPlatform): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Валидирует токен для платформы
|
|
51
|
+
*
|
|
52
|
+
* @param platform - Git платформа
|
|
53
|
+
* @param repoInfo - Информация о репозитории
|
|
54
|
+
* @returns Результат валидации
|
|
55
|
+
*/
|
|
56
|
+
export declare function validateToken(platform: GitPlatform, repoInfo: ProviderRepoInfo): Promise<{
|
|
57
|
+
valid: boolean;
|
|
58
|
+
username?: string;
|
|
59
|
+
error?: string;
|
|
60
|
+
}>;
|
|
61
|
+
export { detectCiEnvironment, detectPlatform, detectPlatformAuto } from "./detector";
|
|
62
|
+
export { GitHubReleaseProvider } from "./github";
|
|
63
|
+
export { GitVerseReleaseProvider } from "./gitverse";
|
|
64
|
+
export { formatFileSize, getAssetLimits, PLATFORM_ASSET_LIMITS, validateAsset, validateAssetBatch } from "./limits";
|
|
65
|
+
export { getSupportedEnvVars, getToken, getTokenNotFoundError, isCI } from "./tokens";
|
|
66
|
+
export type { AssetLimits, CreateReleaseOptions, CreateReleaseResult, GitPlatform, ProviderRepoInfo, ReleaseProvider, RetryFunction, TokenValidationResult, UploadAssetResult, } from "./types";
|
|
67
|
+
export { createProviderRepoInfo } from "./types";
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { AssetLimits, GitPlatform } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Лимиты assets по платформам
|
|
4
|
+
*
|
|
5
|
+
* Источники:
|
|
6
|
+
* - GitVerse: Эмпирически определённые лимиты
|
|
7
|
+
* - GitHub: https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases
|
|
8
|
+
* - GitLab: https://docs.gitlab.com/ee/user/project/releases/
|
|
9
|
+
*/
|
|
10
|
+
export declare const PLATFORM_ASSET_LIMITS: Record<GitPlatform, AssetLimits>;
|
|
11
|
+
/**
|
|
12
|
+
* Получает лимиты для указанной платформы
|
|
13
|
+
*
|
|
14
|
+
* @param platform - Git платформа
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAssetLimits(platform: GitPlatform): AssetLimits;
|
|
17
|
+
/**
|
|
18
|
+
* Форматирует размер файла в человекочитаемый формат
|
|
19
|
+
*
|
|
20
|
+
* @param bytes - Размер в байтах
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatFileSize(bytes: number): string;
|
|
23
|
+
/**
|
|
24
|
+
* Получает расширение файла с поддержкой составных расширений
|
|
25
|
+
*
|
|
26
|
+
* @param filePath - Путь к файлу
|
|
27
|
+
*/
|
|
28
|
+
export declare function getFileExtension(filePath: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Проверяет допустимость расширения для платформы
|
|
31
|
+
*
|
|
32
|
+
* @param platform - Git платформа
|
|
33
|
+
* @param extension - Расширение файла (с точкой)
|
|
34
|
+
*/
|
|
35
|
+
export declare function isExtensionAllowed(platform: GitPlatform, extension: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Проверяет размер файла для платформы
|
|
38
|
+
*
|
|
39
|
+
* @param platform - Git платформа
|
|
40
|
+
* @param sizeBytes - Размер в байтах
|
|
41
|
+
*/
|
|
42
|
+
export declare function isFileSizeAllowed(platform: GitPlatform, sizeBytes: number): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Результат валидации asset
|
|
45
|
+
*/
|
|
46
|
+
export interface AssetValidationResult {
|
|
47
|
+
/** Валиден ли файл */
|
|
48
|
+
valid: boolean;
|
|
49
|
+
/** Сообщение об ошибке */
|
|
50
|
+
error?: string;
|
|
51
|
+
/** Размер файла */
|
|
52
|
+
sizeBytes?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Валидирует файл для загрузки на указанную платформу
|
|
56
|
+
*
|
|
57
|
+
* @param platform - Git платформа
|
|
58
|
+
* @param filePath - Путь к файлу
|
|
59
|
+
* @param sizeBytes - Размер файла в байтах
|
|
60
|
+
*/
|
|
61
|
+
export declare function validateAsset(platform: GitPlatform, filePath: string, sizeBytes: number): AssetValidationResult;
|
|
62
|
+
/**
|
|
63
|
+
* Валидирует пакет файлов для загрузки
|
|
64
|
+
*
|
|
65
|
+
* @param platform - Git платформа
|
|
66
|
+
* @param files - Массив { path, sizeBytes }
|
|
67
|
+
*/
|
|
68
|
+
export declare function validateAssetBatch(platform: GitPlatform, files: Array<{
|
|
69
|
+
path: string;
|
|
70
|
+
sizeBytes: number;
|
|
71
|
+
}>): {
|
|
72
|
+
valid: boolean;
|
|
73
|
+
errors: string[];
|
|
74
|
+
totalSize: number;
|
|
75
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { GitPlatform } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Результат получения токена
|
|
4
|
+
*/
|
|
5
|
+
export interface TokenResult {
|
|
6
|
+
/** Токен */
|
|
7
|
+
token: string;
|
|
8
|
+
/** Имя переменной окружения, из которой получен токен */
|
|
9
|
+
source: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Получает токен для указанной платформы
|
|
13
|
+
*
|
|
14
|
+
* @param platform - Git платформа
|
|
15
|
+
* @returns Результат с токеном или null если токен не найден
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const result = getToken("github");
|
|
19
|
+
* if (result) {
|
|
20
|
+
* console.log(`Token from ${result.source}`);
|
|
21
|
+
* }
|
|
22
|
+
*/
|
|
23
|
+
export declare function getToken(platform: GitPlatform): TokenResult | null;
|
|
24
|
+
/**
|
|
25
|
+
* Проверяет, запущен ли скрипт в CI окружении платформы
|
|
26
|
+
*
|
|
27
|
+
* @param platform - Git платформа
|
|
28
|
+
*/
|
|
29
|
+
export declare function isCI(platform: GitPlatform): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Генерирует сообщение об ошибке отсутствия токена
|
|
32
|
+
*
|
|
33
|
+
* @param platform - Git платформа
|
|
34
|
+
* @returns Сообщение с инструкциями
|
|
35
|
+
*/
|
|
36
|
+
export declare function getTokenNotFoundError(platform: GitPlatform): string;
|
|
37
|
+
/**
|
|
38
|
+
* Возвращает список всех поддерживаемых переменных окружения для платформы
|
|
39
|
+
*
|
|
40
|
+
* @param platform - Git платформа
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSupportedEnvVars(platform: GitPlatform): string[];
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Поддерживаемые Git платформы
|
|
3
|
+
*/
|
|
4
|
+
export type GitPlatform = "gitverse" | "github" | "gitlab";
|
|
5
|
+
/**
|
|
6
|
+
* Лимиты для assets релиза (immutable)
|
|
7
|
+
*/
|
|
8
|
+
export interface AssetLimits {
|
|
9
|
+
/** Максимальный размер одного файла в байтах */
|
|
10
|
+
readonly maxFileSizeBytes: number;
|
|
11
|
+
/** Максимальный суммарный размер за один upload (null = без лимита) */
|
|
12
|
+
readonly maxTotalSizeBytes: number | null;
|
|
13
|
+
/** Допустимые расширения файлов (null = любые) */
|
|
14
|
+
readonly allowedExtensions: readonly string[] | null;
|
|
15
|
+
/** Максимальное количество файлов за раз */
|
|
16
|
+
readonly maxFilesPerUpload: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Результат валидации токена (discriminated union)
|
|
20
|
+
*
|
|
21
|
+
* Гарантирует, что valid=true всегда имеет username,
|
|
22
|
+
* а valid=false всегда имеет error.
|
|
23
|
+
*/
|
|
24
|
+
export type TokenValidationResult = {
|
|
25
|
+
readonly valid: true;
|
|
26
|
+
readonly username: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly valid: false;
|
|
29
|
+
readonly error: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Опции для создания релиза
|
|
33
|
+
*/
|
|
34
|
+
export interface CreateReleaseOptions {
|
|
35
|
+
/** Черновик (не публиковать сразу) */
|
|
36
|
+
draft?: boolean;
|
|
37
|
+
/** Prerelease версия */
|
|
38
|
+
prerelease?: boolean;
|
|
39
|
+
/** Целевая ветка/коммит для тега (если тег ещё не создан) */
|
|
40
|
+
targetCommitish?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Результат создания релиза
|
|
44
|
+
*/
|
|
45
|
+
export interface CreateReleaseResult {
|
|
46
|
+
/** ID релиза (number для GitHub/GitVerse, string для GitLab) */
|
|
47
|
+
id: number | string;
|
|
48
|
+
/** URL релиза */
|
|
49
|
+
url: string;
|
|
50
|
+
/** URL для загрузки assets (для GitHub) */
|
|
51
|
+
uploadUrl?: string;
|
|
52
|
+
/** Тег релиза */
|
|
53
|
+
tag: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Результат загрузки asset
|
|
57
|
+
*/
|
|
58
|
+
export interface UploadAssetResult {
|
|
59
|
+
/** ID asset */
|
|
60
|
+
id: number | string;
|
|
61
|
+
/** Имя asset */
|
|
62
|
+
name: string;
|
|
63
|
+
/** URL для скачивания */
|
|
64
|
+
downloadUrl: string;
|
|
65
|
+
/** Размер в байтах */
|
|
66
|
+
size: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Информация о репозитории для провайдера (immutable)
|
|
70
|
+
*/
|
|
71
|
+
export interface ProviderRepoInfo {
|
|
72
|
+
/** Владелец репозитория */
|
|
73
|
+
readonly owner: string;
|
|
74
|
+
/** Название репозитория */
|
|
75
|
+
readonly repo: string;
|
|
76
|
+
/** Хост платформы (например: github.com, gitverse.ru) */
|
|
77
|
+
readonly host: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Создаёт валидированный объект ProviderRepoInfo
|
|
81
|
+
*
|
|
82
|
+
* @throws Error если owner, repo или host пустые или невалидные
|
|
83
|
+
*/
|
|
84
|
+
export declare function createProviderRepoInfo(owner: string, repo: string, host: string): ProviderRepoInfo;
|
|
85
|
+
/**
|
|
86
|
+
* Retry функция type
|
|
87
|
+
*/
|
|
88
|
+
export type RetryFunction = <T>(fn: () => Promise<T>, operationName?: string) => Promise<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Опции для создания провайдера
|
|
91
|
+
*/
|
|
92
|
+
export interface CreateProviderOptions {
|
|
93
|
+
/** Информация о репозитории */
|
|
94
|
+
repoInfo: ProviderRepoInfo;
|
|
95
|
+
/** Платформа (если не указана, будет определена автоматически) */
|
|
96
|
+
platform?: GitPlatform;
|
|
97
|
+
/** Токен авторизации */
|
|
98
|
+
token: string;
|
|
99
|
+
/** Retry функция (опционально) */
|
|
100
|
+
retryFn?: RetryFunction;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Универсальный интерфейс провайдера релизов
|
|
104
|
+
*
|
|
105
|
+
* Реализуется для каждой Git платформы (GitVerse, GitHub, GitLab).
|
|
106
|
+
* Предоставляет единый API для работы с релизами.
|
|
107
|
+
*/
|
|
108
|
+
export interface ReleaseProvider {
|
|
109
|
+
/**
|
|
110
|
+
* Название платформы
|
|
111
|
+
*/
|
|
112
|
+
readonly platform: GitPlatform;
|
|
113
|
+
/**
|
|
114
|
+
* Лимиты для assets
|
|
115
|
+
*/
|
|
116
|
+
readonly assetLimits: AssetLimits;
|
|
117
|
+
/**
|
|
118
|
+
* Проверяет валидность токена
|
|
119
|
+
*/
|
|
120
|
+
validateToken(): Promise<TokenValidationResult>;
|
|
121
|
+
/**
|
|
122
|
+
* Создаёт релиз
|
|
123
|
+
*
|
|
124
|
+
* @param tag - Тег для релиза
|
|
125
|
+
* @param name - Название релиза
|
|
126
|
+
* @param body - Описание релиза (release notes)
|
|
127
|
+
* @param options - Дополнительные опции
|
|
128
|
+
*/
|
|
129
|
+
createRelease(tag: string, name: string, body: string, options?: CreateReleaseOptions): Promise<CreateReleaseResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Проверяет существование релиза по тегу
|
|
132
|
+
*
|
|
133
|
+
* @param tag - Тег для проверки
|
|
134
|
+
*/
|
|
135
|
+
releaseExists(tag: string): Promise<boolean>;
|
|
136
|
+
/**
|
|
137
|
+
* Получает информацию о релизе по тегу
|
|
138
|
+
*
|
|
139
|
+
* @param tag - Тег релиза
|
|
140
|
+
* @returns Информация о релизе или null если не найден
|
|
141
|
+
*/
|
|
142
|
+
getRelease(tag: string): Promise<CreateReleaseResult | null>;
|
|
143
|
+
/**
|
|
144
|
+
* Загружает файл как asset к релизу
|
|
145
|
+
*
|
|
146
|
+
* @param releaseId - ID релиза
|
|
147
|
+
* @param filePath - Путь к файлу
|
|
148
|
+
* @param assetName - Имя asset в релизе
|
|
149
|
+
*/
|
|
150
|
+
uploadAsset(releaseId: number | string, filePath: string, assetName: string): Promise<UploadAssetResult>;
|
|
151
|
+
}
|