背景
在使用 Github 进行公司源代码管理开发时,我认为创建拉取请求和请求审查的常见流程。
但,当您度过周末或在您通常不使用的存储库中提交 PR 时至
经常发生我不小心忘记查看它而无人看管的情况。
每次都需要和他们交流,说:“请给我一个评价!”
老实说,我认为这是在浪费交流。
Graffity 创建了一个机器人,通知每个存储库等待审核的 PR,并在 Slack 上运行它。
它是如何工作的↓
每天早上都这样(由于工作从 11:00 开始,所以 11:00 是早上。) 告诉您每个存储库中的活动 PR 数量。
如果你全部合并或者只草稿PR,你会被这样夸。
这次,我将介绍这个机器人的实现。
技术选择
语言:Python3(我之所以使用Python,是因为它在公司作为通用语言使用)
库:PyGithub 1.55(实施时)https://github.com/PyGithub/PyGithub
每个人都喜欢使用 IncomingWebHook 发布到 Slack
提前准备
首先,您需要获取 Github 的 PersonalAccessToken 才能使用 PyGithub。
https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
如果你在公司中使用,最好创建一个像公司的 Github 帐户一样的帐户。
设置一个易于管理的名称和截止日期。
以防万一,我认为最好无限期地停止。
至于权限,这次我们只想知道活跃PR的数量,所以我们检查一下repo。
按下生成按钮,将显示令牌。
记下这一点,因为一旦离开页面,您将永远无法再次看到它(1 损失
接下来,发出 IncomingWebhook URL 以在 Slack 上发布。
让我们按照手动过程创建它并设置您要通知的 Slack 频道。
创建 URL 后,也要记下它
https://slack.com/intl/ja-jp/help/articles/115005265063-Slack-%E3%81%A7%E3%81%AE-Incoming-Webhook-%E3%81%AE%E5%88%A9%E7%94%A8
最后,让我们安装python使用的库
pip install PyGithub
执行
这是现在的完整代码
import sys
from github import Github
import requests, json
WEB_HOOK_URL = "取得したWebhookURL"
# 監視対象リポジトリ
# ここに追加してね
TargetRepositories = ["https://github.com/HOGEHOGE/FUGAFUGA",
"https://github.com/HOGEHOGE/PIYOPIYO"]
def main():
args = sys.argv
if len(args) != 2:
print("引数がおかしいよ: github トークン入れてる?")
return -1
try:
github_instance = Github(args[1])
result_text = ["プルリクレビューの時間だよ!"]
for repo in github_instance.get_user().get_repos():
if repo.html_url in TargetRepositories:
active_pull_requests = [pr for pr in repo.get_pulls() if not pr.draft]
if len(active_pull_requests) > 0:
result_text.append(repo.html_url + " にアクティブなPRが" + str(len(active_pull_requests)) + "個あり:masu:")
output = "
".join(result_text)
send_text = ''
if len(result_text) >= 2:
send_text = output
else:
send_text = "PR全部レビューしてるわ。偉い"
requests.post(WEB_HOOK_URL, data=json.dumps({
'text': send_text
}))
except Exception as e:
print("Error" + e)
return 1
return 0
statuscode = main()
sys.exit(statuscode)
使用时是这样的
python main.py Githubのアクセストークン
每个地方的说明
首先,我们有 WebHook URL 和要监控的存储库列表。
目前,代码编写得很扎实。 (因为要监控的仓库数量只有在启动新项目时才会增加)
WEB_HOOK_URL = "取得したWebhookURL"
# 監視対象リポジトリ
# ここに追加してね
TargetRepositories = ["https://github.com/HOGEHOGE/FUGAFUGA",
"https://github.com/HOGEHOGE/PIYOPIYO"]
但是,由于我不想管理 Github 的访问令牌(没错),我试图将其作为参数接收。
args = sys.argv
if len(args) != 2:
print("引数がおかしいよ: github トークン入れてる?")
return -1
初始化 PyGithub。
将访问令牌作为参数传递
github_instance = Github(args[1])
这是这段时间最激动人心的部分。我会一步一步解释
for repo in github_instance.get_user().get_repos():
if repo.html_url in TargetRepositories:
active_pull_requests = [pr for pr in repo.get_pulls() if not pr.draft]
if len(active_pull_requests) > 0:
result_text.append(repo.html_url + " にアクティブなPRが" + str(len(active_pull_requests)) + "個あり:masu:")
首先,使用 github_intance.get_user() 获取您自己的信息。
从那里,您可以通过执行 get_repos 获得“您可以看到的存储库列表”(这里,“我自己”是发布访问令牌的用户)
通过 for 转动它,您可以检查您可以看到的所有存储库
for repo in github_instance.get_user().get_repos():
由于 repo 中有 html_url,只有匹配上面提到的 TargetRepositories 才会继续处理
if repo.html_url in TargetRepositories:
PullRequest 信息可以通过 get_pulls 获取。
从其中提取不是草稿的内容。如果有 1 个或多个,则将文本添加到列表中作为通知目标
active_pull_requests = [pr for pr in repo.get_pulls() if not pr.draft]
if len(active_pull_requests) > 0:
result_text.append(repo.html_url + " にアクティブなPRが" + str(len(active_pull_requests)) + "個あり:masu:")
最后通过数组的长度检查是否有PR,如果没有,把文字给点赞,Post到WebhookURL完成
output = "
".join(result_text)
send_text = ''
if len(result_text) >= 2:
send_text = output
else:
send_text = "PR全部レビューしてるわ。偉い"
requests.post(WEB_HOOK_URL, data=json.dumps({'text': send_text}))
尝试操作
实现本身是一个不到一个小时的机器人,但它非常方便。
这很舒服,因为您不会错过任何评论,并且您不必像“请给我评论!”那样相互交流。
Graffity 每个工作日早上都会在构建机器的 cron 上运行这个 python 代码。
早上看review bot的帖子,从那里复习,也是一种套路,感觉很赞。
有兴趣的可以考虑介绍一下~
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308630661.html