UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

119 lines (118 loc) 3.9 kB
/** 每个分支的处理状态 */ export type DailyMergeBranchStatus = 'success' | 'conflict' | 'noMerge' | 'skipped' | 'pending'; /** 每个分支的处理结果 */ export interface DailyMergeBranchResult { /** 分支名 */ name: string; /** 处理状态 */ status: DailyMergeBranchStatus; /** 分支作者(如能从 commit 信息中拿到) */ author?: string; /** 失败/跳过原因 */ reason?: string; /** merge 前 commit hash */ originCommit?: string; /** merge 后 commit hash */ nowCommit?: string; } /** dailyMerge 整体执行结果(通过 onReport 回调传递) */ export interface DailyMergeReportInfo { /** 仓库名 */ repoName: string; /** 应用名 */ appName: string; /** 仓库工蜂链接 */ repoUrl?: string; /** 仓库 ID */ projectId?: string | number; /** 主分支 */ mainBranch: string; /** 是否演练 */ isDryRun: boolean; /** 启动时间(ms) */ startTime: number; /** 结束时间(ms) */ endTime: number; /** 耗时(ms) */ duration: number; /** 各分支处理结果 */ branches: DailyMergeBranchResult[]; /** 汇总数 */ summary: { total: number; success: number; conflict: number; noMerge: number; skipped: number; }; /** 整体状态:success(全成功) / partial(部分失败) / failed(全失败) / empty(无分支) */ status: 'success' | 'partial' | 'failed' | 'empty'; /** 机器人通知内容(markdown) */ robotMessage?: string; /** 机器人通知是否成功 */ robotNotified?: boolean; } /** dailyMerge 执行过程中发生的不可恢复错误 */ export interface DailyMergeReportError { /** 错误信息 */ message: string; /** 错误堆栈 */ stack?: string; } /** * 每日合并 * 1. 获取昨天有活跃的分支 * 2. 对于每个分支,进行合并并推送 * - 清理 Git 环境 * - 切到主分支,并拉最新代码 * - 切到当前分支,拉最新代码 * - 尝试执行 git merge * - 对比 merge 前后的 commit 信息是否相同,作为判断 merge 是否成功的依据 * 3. 发送机器人消息 * * * @export * @async * @param {object} param0 参数 * @param {string} param0.webhookUrl 机器人地址 * @param {string} param0.appName 项目名称 * @param {string} param0.devRoot 项目根路径 * @param {string} param0.baseUrl 基础请求 url * @param {string} param0.repoName 仓库名称 * @param {string} param0.privateToken 密钥 * @param {boolean} [param0.isDryRun=false] 是否演练 * @param {string} [param0.mainBranch='develop'] 主分支 * @param {Regexp} [param0.whiteBranchReg=/^release\|develop\|hotfix\\/.+$/] 不处理的分支正则 * @param {function} [param0.onReport] 执行完成后的结构化结果回调(可用于上报到自建后台) * @returns {Promise<DailyMergeReportInfo>} * @example * * ```ts * dailyMerge({ * webhookUrl: 'xx', * appName: 'xx', * devRoot: 'xx', * * baseUrl: 'xx', * repoName: 'xx', * privateToken: 'xx', * * isDryRun: false, * onReport: async (info) => { await axios.post('/api/daily-merge', info); }, * }) * ``` */ export declare function dailyMerge({ webhookUrl, appName, devRoot, baseUrl, quickLink, repoName, privateToken, isDryRun, mainBranch, whiteBranchReg, onReport, }: { webhookUrl: string; appName: string; devRoot: string; baseUrl: string; quickLink?: string; repoName: string; privateToken: string; isDryRun?: boolean; mainBranch?: string; whiteBranchReg?: RegExp; /** 执行完成后的结构化结果回调(可用于上报到自建后台) */ onReport?: (info: DailyMergeReportInfo, err?: DailyMergeReportError) => void | Promise<void>; }): Promise<DailyMergeReportInfo | undefined>;