#pull-request #github-api #github #api-token

bin+lib ateam

帮助优化代码审查流程的工具

37 个版本 (8 个稳定版)

1.0.7 2024年5月24日
1.0.5 2023年12月21日
1.0.4 2023年7月3日
1.0.3 2023年3月22日
0.1.0 2020年4月2日

#5 in #api-token

Download history 204/week @ 2024-05-24 7/week @ 2024-05-31 8/week @ 2024-06-07 4/week @ 2024-06-14 1/week @ 2024-06-28 16/week @ 2024-07-05 194/week @ 2024-07-26 34/week @ 2024-08-02

228 每月下载量

MIT 许可证

1MB
43K SLoC

GraphQL 42K SLoC // 0.0% comments Rust 1.5K SLoC // 0.0% comments Shell 19 SLoC // 0.1% comments

A-Team

Crates.io Crates.io CI license

帮助优化代码审查流程的工具。

安装

cargo安装 ateam

创建 GitHub API token 并将其存储在 GITHUB_API_TOKEN 环境变量中。您也可以使用 .env 文件。

此 token 需要 reporead:org 选择的权限范围。

如果您的组织强制执行了某些授权方式,如 SAML,您需要像这样授权您的 PAT:https://githubdocs.cn/en/enterprise-cloud@latest/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on

配置

A-team 需要使用您的 GitHub API token 连接到 GitHub 的 API。

您可以使用此指南来创建一个。

此 token 需要 GitHub 的读取权限。

您需要在您的 shell 中设置此 token 为环境变量。您可以将其添加到 ~.bashrc,或者您可以在使用 ateam 的目录(或父目录之一)中使用 .env 文件

export GITHUB_API_TOKEN=YOUR_TOKEN

ATeam 提供两个子命令:prtodo

ateam pr

此命令帮助开发者确定下一个应该审查的拉取请求。

要获取您组织(任何仓库)的所有拉取请求,请使用以下命令

 ateam pr --org OrgName --include-mine --include-reviewed-by-me

前面的列表也包括您的拉取请求和您已经审查过的所有拉取请求。您可能希望排除它们

❯ ateam pr --org OrgName

拉取请求的顺序是它们应该被审查的顺序。第一个可能就是您应该首先审查的。

您也可以搜索特定的拉取请求。您可以使用 --query 选项进行此操作。它允许您使用任何可以在 GitHub 搜索中使用的条件。最常见的搜索是按文本搜索

❯ ateam pr --org OrgName --query 'urgent'

不幸的是,--query 选项不允许使用 OR 运算符组合文本。如果您想搜索两个或多个字符串,您可以使用 --regex 选项

❯ ateam pr --org OrgName --regex 'urgent|bugfix|awesome'

您还可以按标签过滤

❯ ateam pr --org OrgName --label LABEL1 --label LABEL2

要查看所有可能的选项,您可以使用--help

❯ ateam pr --help

Usage: ateam pr [OPTIONS]

Options:
  -r, --repo <repository>
          Repositiy. Can be used multiple times to select more than one
      --org <organization>
          Selest all the repositoris of the organization
  -q, --query <QUERY>
          GitHub query. Can be used multiple times
  -n, --num <NUM>
          Number of pull requests to display
  -s, --short
          Short version. No table
      --json
          Output in JSON
      --label <LABEL>
          Filter by label. Can be used multiple times
      --exclude-label <EXCLUDE_LABEL>
          Exclude pull requests with this label. Can be used multiple times
      --regex <REGEX>
          Regexp filter on titles
      --regex-not <REGEX_NOT>
          Regexp filter on titles to exclude pull requests
      --include-reviewed-by-me
          Include pull requests I have reviewed
      --include-mine
          Include my pull requests
      --only-mine
          select only my pull requests (enables --include-reviewed-by-me automatically)
      --requested
          Select pull requests I have been requested to review, explicitly or as a code owner
      --include-drafts
          Include draft pull requests
      --include-tests-pending
          Include pull requests with pending tests
      --include-tests-failure
          Include pull requests with tests failure
      --exclude-tests-none
          Exclude pull requests without tests
      --exclude-tests-success
          Exclude pull requests with tests successful
      --tests-regex <TESTS_REGEX>
          Select tests via regexp. The others are ignored
      --required-approvals <REQUIRED_APPROVALS>
          Number of required approvals [default: 2]
      --blame
          Look if I changed the same files in the past (SLOW)
      --user <USER>
          Query for another user
      --batch-size <BATCH_SIZE>
          Mumber of pull requests requested per batch [default: 30]
  -d, --debug
          Add debug information
  -h, --help
          Print help information

它是如何工作的?

它实现了对你开放拉取请求的排名系统。

草稿拉取请求将被排除。

具有挂起或失败的测试的拉取请求也将被排除,除非你要求它们。

你创建的拉取请求也会被排除,除非你要求它们。

你已经审阅过的拉取请求也会被排除,除非你要求它们。

具有冲突的拉取请求将被排除。

它为拉取请求分配一个分数。然后,按分数顺序排列它们。最高的排在第一位,最低的排在最后。

排名算法基于几个信息点

 pull request score =
   last_commit_age * 2.0
   - (tests_result-1) * 2000.0
   - open_conversations * 30.0
   - (approvals - required_approvals) * 80.0
   - (reviews - required_approvals) * 50.0
   - additions * 0.5
   - deletions * 0.1
   + based_on_main_branch * 200.0
   + blame * 400.0
   + requested * 800.0
   + codeowner * 400.0

其中

last_commit_age是自上次提交以来的小时数。因此,较旧的拉取请求将首先出现。

tests_result对于成功的测试为0,对于挂起的测试为1,对于失败的测试为2。请注意,这仅在使用了--include-tests-failure和/或--include-tests-pending的情况下才有效。

open_conversations是未解决且未过时的对话数量。具有开放对话的拉取请求已经处于审查和讨论状态,因此需要较少的关注。

approvals是拉取请求的批准数量,而required_approvals是所需的最低批准数量(默认值为2)。已批准的拉取请求需要较少的关注。

reviews是收到的审查数量。具有许多审查的拉取请求需要较少的关注。

additions是拉取请求添加的行数。应该首先审查较小的拉取请求。它们可能会迅速解除其他拉取请求的阻塞。我们促进较小的拉取请求。

deletions是拉取请求删除的行数。应该首先审查较小的拉取请求。删除的行也需要审查,但通常这是一项更快的工作,因此它们在公式中的权重较低。

based_on_main_branch如果拉取请求基于主分支,则为1。如果基于另一个拉取请求,则为0。最好首先审查基于主分支的拉取请求。

blame如果你在过去更改了拉取请求前5个更改的文件之一,则为1。

requested如果有人明确要求你进行审查,而不是因为你是代码所有者,则为1。

codeowner如果你是这个拉取请求的代码所有者之一,则为1。

ateam followup

这个第二个子命令给你一些关于你已经提交并需要你注意的审查的信息。

审查列表包括

  • 已驳回的审查:通常在分支重新基时驳回审查。你可能想重新审查或重新批准。
  • 有已解决对话的审查:作者回答了你的问题,或者对话因请求的更改而过时。只有当所有对话都已解决时,审查才会列入此列表。

ateam todo

尚未提供

你的拉取请求

  • 有人在你拉取请求上发起了对话。你需要回复或更改代码。
  • 有人明确要求你更改你的拉取请求。

开发说明

使用Nix设置开发环境

nix develop

官方GitHub GraphQL模式:https://githubdocs.cn/en/graphql/overview/public-schema

依赖项

~15–30MB
~493K SLoC