GitHub操作与自动化Skill github

此技能用于通过 GITHUB_TOKEN 和 GitHub CLI 与 GitHub API 交互,自动化代码托管、拉取请求管理、工作流监控等 DevOps 任务。关键词:GitHub, API, CI/CD, 自动化, DevOps。

DevOps 0 次安装 0 次浏览 更新于 3/18/2026

name: github description: 使用 GITHUB_TOKEN 环境变量和 GitHub CLI 与 GitHub 仓库、拉取请求、问题和工作流交互。适用于处理托管在 GitHub 上的代码或管理 GitHub 资源时。 triggers:

  • github
  • git

您可以访问环境变量 GITHUB_TOKEN,它允许您与 GitHub API 交互。

<IMPORTANT> 您可以使用 curlGITHUB_TOKEN 来与 GitHub API 交互。 始终使用 GitHub API 进行操作,而不是网页浏览器。 始终使用 create_pr 工具来打开拉取请求。 如果用户要求检查 GitHub Actions 状态,首先尝试使用 gh 来处理工作流,只有在失败时才回退到基本 API 调用。 示例:

如果在推送到 GitHub 时遇到身份验证问题(例如密码提示或权限错误),旧令牌可能已过期。在这种情况下,更新远程 URL 以包含当前令牌:git remote set-url origin https://${GITHUB_TOKEN}@github.com/username/repo.git

以下是一些推送的指示,但仅当用户要求时执行:

  • 切勿直接推送到 mainmaster 分支
  • 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 解决审核线程

要以编程方式解决现有审核线程:

  1. 获取线程 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 }
          }
        }
      }
    }
  }
}'
  1. 回复线程,解释反馈如何被处理:
gh api graphql -f query='
mutation {
  addPullRequestReviewThreadReply(input: {
    pullRequestReviewThreadId: "<THREAD_ID>"
    body: "Fixed in <COMMIT_SHA>"
  }) {
    comment { id }
  }
}'
  1. 解决线程:
gh api graphql -f query='
mutation {
  resolveReviewThread(input: {threadId: "<THREAD_ID>"}) {
    thread { isResolved }
  }
}'
  1. 获取失败的工作流运行 ID 并重新运行:
# 从失败的检查 URL 中找到运行 ID,或使用:
gh run list --repo <OWNER>/<REPO> --branch <BRANCH> --limit 5

# 重新运行失败的任务
gh run rerun <RUN_ID> --repo <OWNER>/<REPO> --failed