用途:为外部贡献者的拉取请求触发 CI。外部 fork 默认无法直接跑 DataDog/saluki 的 CI,本技能将贡献者 fork 的分支镜像到 DataDog/saluki 下,命名为 <owner>/<branch>,由于镜像分支的头提交与 PR 头提交一致,GitHub 会把 CI 结果反馈到原 PR 的检查状态上。
输入参数:单个位置参数,两种形式。Form A 为纯数字 PR 编号(如 1234,优先使用),技能通过 gh 解析出 owner、branch 与 fork 仓库名;Form B 为显式 <owner>:<branch>,用于没有 PR 编号的场景。<owner> 匹配 [a-zA-Z0-9_-]+,<branch> 匹配 [a-zA-Z0-9.#_/-]+,整串不得含单引号。若参数纯数字按 Form A 处理,否则必须含 :,在首个 : 处分割;不匹配则停下请用户重新提供。两种形式推送的分支名均为 OWNER/BRANCH。
流程:Form A 先用 gh pr view 获取 PR 头引用,要求 isCrossRepository 为 true,否则说明无需该技能;并校验 owner 与 branch 字符。随后做前置检查:工作区必须干净、目标本地分支不存在、同名远程不存在、记录当前分支、origin 必须指向 DataDog/saluki(接受 SSH 或 HTTPS 形式,可带或不带 .git)。Form B 还需通过 GitHub API 解析 fork 的真实仓库名。执行前先打印恢复命令,然后添加远程、仅抓取所需分支、两步检出并创建本地分支、推送并设置 upstream。成功后移除远程、切回原分支、删除本地镜像分支。若用户额外传 --no-verify,仅追加到 push。
限制与注意:涉及添加远程、创建分支、推送到 origin 等本地 git 操作。任一前置或执行步骤失败应停止并打印恢复命令,不自动重试、不修复工作区;不得对其他远程推送;不要用 git reset --hard 或 git clean 清理工作区。