133 lines
3.3 KiB
TypeScript
133 lines
3.3 KiB
TypeScript
import { GiteaCore } from "../core/core";
|
|
|
|
export interface CreateRepoOptions {
|
|
name: string;
|
|
description?: string;
|
|
private?: boolean;
|
|
auto_init?: boolean;
|
|
gitignores?: string;
|
|
license?: string;
|
|
readme?: string;
|
|
}
|
|
|
|
export interface UpdateRepoOptions {
|
|
name?: string;
|
|
description?: string;
|
|
private?: boolean;
|
|
allow_rebase?: boolean;
|
|
allow_rebase_explicit?: boolean;
|
|
allow_merge_commits?: boolean;
|
|
allow_squash_merge?: boolean;
|
|
allow_rebase_update?: boolean;
|
|
default_branch?: string;
|
|
}
|
|
|
|
export class GiteaRepo extends GiteaCore {
|
|
/**
|
|
* 获取仓库信息
|
|
*/
|
|
async getRepo(owner: string, repo: string) {
|
|
const url = this.makeUrl(`/repos/${owner}/${repo}`);
|
|
return this.request({ url });
|
|
}
|
|
|
|
/**
|
|
* 创建仓库
|
|
* 格式: name="repo" -> 当前用户
|
|
* 格式: name="org/repo" -> 组织
|
|
*/
|
|
async createRepo(data: CreateRepoOptions) {
|
|
const name = data.name;
|
|
const parts = name.split('/');
|
|
|
|
if (parts.length === 2) {
|
|
const [orgOrUser, repoName] = parts;
|
|
const url = this.makeUrl(`/orgs/${orgOrUser}/repos`);
|
|
return this.request({ url, method: 'POST', data: { ...data, name: repoName } });
|
|
}
|
|
|
|
const url = this.makeUrl(`/user/repos`);
|
|
return this.request({ url, method: 'POST', data });
|
|
}
|
|
|
|
/**
|
|
* 更新仓库
|
|
*/
|
|
async updateRepo(owner: string, repo: string, data: UpdateRepoOptions) {
|
|
const url = this.makeUrl(`/repos/${owner}/${repo}`);
|
|
return this.request({ url, method: 'PATCH', data });
|
|
}
|
|
|
|
/**
|
|
* 删除仓库
|
|
*/
|
|
async deleteRepo(owner: string, repo: string) {
|
|
const url = this.makeUrl(`/repos/${owner}/${repo}`);
|
|
return this.request({ url, method: 'DELETE' });
|
|
}
|
|
|
|
/**
|
|
* 获取仓库列表
|
|
*/
|
|
async listRepos(options?: {
|
|
page?: number;
|
|
limit?: number;
|
|
type?: 'all' | 'owner' | 'public' | 'private';
|
|
}) {
|
|
const url = this.makeUrl(`/user/repos`);
|
|
return this.request({ url, method: 'GET', params: options });
|
|
}
|
|
|
|
/**
|
|
* 获取组织仓库列表
|
|
*/
|
|
async listOrgRepos(org: string, options?: {
|
|
page?: number;
|
|
limit?: number;
|
|
type?: 'all' | 'fork' | 'source' | 'mirror';
|
|
}) {
|
|
const url = this.makeUrl(`/orgs/${org}/repos`);
|
|
return this.request({ url, method: 'GET', params: options });
|
|
}
|
|
|
|
/**
|
|
* 获取仓库内容(文件或目录)
|
|
*/
|
|
async getContents(owner: string, repo: string, path: string, options?: {
|
|
ref?: string;
|
|
}) {
|
|
const url = this.makeUrl(`/repos/${owner}/${repo}/contents/${path}`);
|
|
return this.request({ url, method: 'GET', params: options });
|
|
}
|
|
|
|
/**
|
|
* 获取仓库分支列表
|
|
*/
|
|
async listBranches(owner: string, repo: string, options?: {
|
|
page?: number;
|
|
limit?: number;
|
|
}) {
|
|
const url = this.makeUrl(`/repos/${owner}/${repo}/branches`);
|
|
return this.request({ url, method: 'GET', params: options });
|
|
}
|
|
|
|
/**
|
|
* 获取仓库标签列表
|
|
*/
|
|
async listTags(owner: string, repo: string, options?: {
|
|
page?: number;
|
|
limit?: number;
|
|
}) {
|
|
const url = this.makeUrl(`/repos/${owner}/${repo}/tags`);
|
|
return this.request({ url, method: 'GET', params: options });
|
|
}
|
|
|
|
/**
|
|
* Fork 仓库
|
|
*/
|
|
async forkRepo(owner: string, repo: string, organization?: string) {
|
|
const url = this.makeUrl(`/repos/${owner}/${repo}/forks`);
|
|
return this.request({ url, method: 'POST', data: { organization } });
|
|
}
|
|
}
|