GitHub生产商
同步存储库、问题、拉取请求、评论、审查、提交、检查、
操作运行和作业,并从一个GitHub应用程序安装发布。它
回填每个资源,获取webhook POST /webhooks/github,以及民意测验
每15分钟更换一次。
| 资源 | 什么 |
|---|---|
repositories | 安装程序可以读取的存储库 |
issues | 问题,没有拉请求 |
pull_requests | 把请求 |
issue_comments | 对问题的评论和pull请求 |
pull_request_reviews | 拉取请求审核 |
pull_request_review_comments | 对拉取请求差异的评论 |
pull_request_commits | 在每个拉取请求中提交 |
commits | 在默认分支上提交 |
check_runs | 检查运行情况,例如Actions作业和其他应用程序 |
commit_statuses | 从CI服务提交状态 |
workflow_runs | 操作流程运行 |
workflow_jobs | 工作流运行的作业及其步骤 |
releases | 发布,以及它们的资产 |
配置
| 变量 | 要求 | 默认的 |
|---|---|---|
GITHUB_APP_CLIENT_ID | 是 | 无 |
GITHUB_APP_PRIVATE_KEY | 是 | 无 |
GITHUB_INSTALLATION_ID | 是 | 无 |
GITHUB_WEBHOOK_SECRET | 是 | 无 |
私钥可以在一行中使用 \n 换行。
设置
创建一个GitHub应用程序 开发者设置→GitHub应用程序:
- Webhook URL
<connector>/webhooks/github,带着一个随机的秘密。 - 存储库权限,只读:操作、检查、提交状态、 内容、问题和拉取请求。
- 事件:检查运行、发布评论、问题、拉取请求、拉取请求审核、 Pull请求review comments, Push, Release, Repository, Status, Workflow job和Workflow运行。
生成一个私钥,然后安装应用程序并选择要同步的存储库。 安装ID是安装页面URL末尾的数字。
一个应用有一个webhook URL,所以每个连接器使用一个应用。
API版本
连接器固定REST API版本 2026-03-10 与
X-GitHub-Api-Version 头。
数据
issues没有拉取请求。issue_comments对两者都有评论。- 已删除的存储库、问题、注释和发布得到
_deleted. 一个 已转让的issue在旧ID下被删除。 commits和pull_request_commits保留作者和提交者的名字,而不是 电子邮件。- 评论、检查运行和作业在GitHub中没有更新时间。他们的版本 就是连接器读取它们的时候。
- 删除存储库时,存储库的问题、拉取请求和注释会保留下来 或者离开安装。
- 正文是自由文本。将私有存储库数据视为机密。
限制
- 删除只来自于webhook。错过的删除会保留,即使在新的删除之后 回填。一旦GitHub报告了已恢复的存储库,就会返回 更新时间。
- 在回填期间删除的行可以使下一页跳过一行。
commits仅为默认分支。轮询使用提交时间,所以 之后推送的旧提交只会通过webhook实现。- 在默认分支提交之后,检查运行和状态被轮询一次, 因此,稍后完成的检查只通过webhook更新。网络钩子带来它们 对于每个分支。
pull_request_commits每个拉取请求最多提交250次。提交 通过用力推拉杆移开。- 释放资产
download_count是从上次发布的吗 改变了。 - 工作流运行在启动后的一天内进行轮询。稍后的重播出现了 webhook。这是它的最新尝试;乔布斯坚持每一次尝试。
- 审核、拉请求提交、检查运行、状态和作业都需要花费一个 在回填和每次更改中,每个拉取请求、提交或运行的请求。 具有多年CI的大型存储库可能需要数小时的速率限制才能进行回填。
- 轮询每个存储库每15分钟花费大约12个请求,加上 上面的。大约250个活动存储库达到了GitHub的限制。
演示数据
pnpm demo --size 128MiB 在没有GitHub凭证的情况下写入编造的GitHub数据。
请参阅Connector Kit README,了解所需的标志和变量。
每个更改都有一个问题,修复它的pull请求,评论,审查, 提交,CI与作业和检查运行一起运行,并且,一旦合并,在main上进行提交 使用部署状态。有些合并会发布一个版本。6个存储库不会增长 尺寸。
地方发展
cd connectors/producer-github
pnpm sandbox
webhook需要一个公共URL来转发
http://localhost:8080/webhooks/github.
要录制VCR,请输入测试应用程序的值 .env、删除
test/__cassettes__/api.vcr.test.cassette,然后跑 pnpm test:ci.
pnpm start 运行托管连接器。它需要Wings和PostgreSQL
连接器套件README中的变量。