用途:把“创建分支、推送文件、打开 PR、轮询 mergeable_state”这一命令式流程转成结构化 DAG,并通过 validate 门在结构上阻止直接向 main 等受保护分支推送。
主要能力:提供 open_pr 函数,参数包括 repo、branch_name、title、body、files(路径与内容元组列表)、base(默认 main)。返回 pr_url、pr_number、pr_state、branch、base、head_sha、mergeable_state、files_pushed、detached_failures。校验门 must_not_be_base_branch 会拒绝 main、master、trunk、production、prod(不区分大小写)以及配置的 base 本身,非法分支名不会触发任何 GitHub API 调用。mergeable 轮询使用 retry_until,unknown 与 null 继续轮询,clean、dirty、unstable、behind、blocked 等已定状态停止;轮询耗尽属软失败,仍会返回 PR 及最后观察到的状态。
使用方式:需在环境变量中提供 GH_TOKEN 或 GITHUB_TOKEN,使用具有 repo 权限的经典或细粒度 PAT。每次 API 调用发送 User-Agent: opening-prs(缺少 UA 时 GitHub 会返回 401)。可调参数 mergeable_poll_retries(默认 8)、mergeable_poll_base_ms(默认 2000)、mergeable_poll_max_ms(默认 8000)。仅当主 DAG 失败(校验、建分支、推文件或建 PR)时抛出 RuntimeError。
适用场景:需要通过 API 以编程方式创建 PR,并希望强制避免误推受保护分支的自动化流程。
限制:不适合推送大量大文件(Contents API 每次 PUT 一个文件并做 base64 编码,约 10 个文件以上较慢),此时应使用 git push;不支持修改提交或重写历史(每个文件生成一个提交);不涉及 force-push、删除分支或 PR 评审状态操作。相关技能包括 flowing、closing-issues 与 accessing-github-repos。