name: github description: 使用 GITHUB_TOKEN 环境变量和 GitHub CLI 与 GitHub 仓库、拉取请求、问题和工作流交互。适用于处理托管在 GitHub 上的代码或管理 GitHub 资源时。 triggers:
- github
- git
您可以访问环境变量 GITHUB_TOKEN,它允许您与 GitHub API 交互。
<IMPORTANT>
您可以使用 curl 与 GITHUB_TOKEN 来与 GitHub API 交互。
始终使用 GitHub API 进行操作,而不是网页浏览器。
始终使用 create_pr 工具来打开拉取请求。
如果用户要求检查 GitHub Actions 状态,首先尝试使用 gh 来处理工作流,只有在失败时才回退到基本 API 调用。
示例:
gh run watch(https://cli.github.com/manual/gh_run_watch) 来监控工作流运行gh pr checks 200 --watch --interval 10来检查直到完成。 </IMPORTANT>
如果在推送到 GitHub 时遇到身份验证问题(例如密码提示或权限错误),旧令牌可能已过期。在这种情况下,更新远程 URL 以包含当前令牌:git remote set-url origin https://${GITHUB_TOKEN}@github.com/username/repo.git
以下是一些推送的指示,但仅当用户要求时执行:
- 切勿直接推送到
main或master分支 - Git 配置(用户名和邮箱)已预设。请勿修改。
- 您可能已经在一个以
openhands-workspace开头的分支上。在推送前创建一个具有更好名称的新分支。 - 如果尚未创建,请使用
create_pr工具创建拉取请求 - 一旦您创建了自己的分支或拉取请求,继续更新它。除非明确要求,请勿创建新的。根据需要更新 PR 标题和描述,但不要更改分支名称。
- 使用主分支作为基础分支,除非用户另有要求
- 打开或更新拉取请求后,向用户发送一条简短消息,包含拉取请求的链接。
- 除非用户明确说明,否则不要将拉取请求标记为准备审核
- 尽可能在较少的步骤中完成以上所有操作。例如,您可以通过运行以下 bash 命令一步推送更改:
git remote -v && git branch # 查找当前组织、仓库和分支
git checkout -b create-widget && git add . && git commit -m "Create widget" && git push -u origin create-widget
处理审核评论
- 在根据审核评论采取行动之前,批判性地评估每个评论。并非所有反馈都值得实施:
- 它是否修复了真正的错误或显著提高了清晰度?
- 它是否符合项目的工程原则(简单性、可维护性)?
- 建议的更改是否与收益成比例,还是增加了不必要的复杂性?
- 可以尊重地拒绝那些增加冗长而无明确收益、为假设边缘情况过度工程化或违背项目务实方法的建议。
- 在解决(或决定不解决)内联审核评论后,将相应的审核线程标记为已解决。
- 在解决线程之前,留下一个回复评论,解释驳回反馈的原因或引用解决该问题的特定提交(例如,提交 SHA)。
- 仅在推送修复或记录明确决策后解决线程。
- 使用 GitHub GraphQL API 来回复和解决审核线程(见下文)。
通过 GraphQL 解决审核线程
要以编程方式解决现有审核线程:
- 获取线程 ID(替换
<OWNER>、<REPO>、<PR_NUMBER>):
gh api graphql -f query='
{
repository(owner: "<OWNER>", name: "<REPO>") {
pullRequest(number: <PR_NUMBER>) {
reviewThreads(first: 20) {
nodes {
id
isResolved
comments(first: 1) {
nodes { body }
}
}
}
}
}
}'
- 回复线程,解释反馈如何被处理:
gh api graphql -f query='
mutation {
addPullRequestReviewThreadReply(input: {
pullRequestReviewThreadId: "<THREAD_ID>"
body: "Fixed in <COMMIT_SHA>"
}) {
comment { id }
}
}'
- 解决线程:
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "<THREAD_ID>"}) {
thread { isResolved }
}
}'
- 获取失败的工作流运行 ID 并重新运行:
# 从失败的检查 URL 中找到运行 ID,或使用:
gh run list --repo <OWNER>/<REPO> --branch <BRANCH> --limit 5
# 重新运行失败的任务
gh run rerun <RUN_ID> --repo <OWNER>/<REPO> --failed