t-comm
Version:
专业、稳定、纯粹的工具库
119 lines (118 loc) • 3.9 kB
TypeScript
/** 每个分支的处理状态 */
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>;