轻量、模块化、高扩展性的 GitHub Webhook 事件处理器,专为 Pull Request 和 Issue 场景设计。
Gitbby 是一个用 Ruby 编写的 Webhook 接收处理器,基于 Sinatra 框架实现。它监听来自 GitHub 的事件(如新建 PR / Issue),并立即在本地输出消息,供你接入后续自动化逻辑。
典型用途包括:
- PR/Issue 创建时第一时间通知
- 自定义自动回复逻辑
- 接入本地 CI / 消息通知 / 数据分析流程
灵活性强、部署简单,是构建开发者工具链的绝佳基础设施组件。
Gitbby/
├── app/
│ ├── handlers/ # 每类事件的独立处理器
│ │ ├── issue_handler.rb
│ │ └── pull_request_handler.rb
│ └── router.rb # 路由层:按事件分发到处理器
├── main.rb # Sinatra 主程序
├── Gemfile # Ruby 依赖
└── .env # 本地配置(忽略版本控制)
git clone https://github.com/ctkqiang/Gitbby.git
cd Gitbby
bundle install
创建 .env
文件并设置 GitHub Token:
GITHUB_TOKEN=ghp_你的GitHub个人访问令牌
- Token 需要具备
repo
权限(用于未来调用 GitHub API) - 建议使用 dotenv 管理配置,避免硬编码
ruby gitbby.rb
默认监听地址为:http://localhost:9292
ngrok authtoken <你的Ngrok Token>
ngrok http 9292
将得到一个公网地址(如 https://xxxxx.ngrok.io
),用于 GitHub Webhook。
-
打开 GitHub 仓库 → Settings → Webhooks
-
添加新的 Webhook
-
Payload URL 填写:
https://<你的-ngrok-url>/githook
-
Content type 选择
application/json
-
勾选事件:
- Issues
- Pull requests
-
保存并测试触发 🎯
你可以在以下路径中添加或扩展业务逻辑:
app/handlers/issue_handler.rb
app/handlers/pull_request_handler.rb
它们将会根据事件被自动调用,例如:
module Gitbby
class IssueHandler
def self.handle(payload)
puts "[Issue] New: #{payload['issue']['title']}"
end
end
end
将来可添加逻辑如:
- 自动评论
- 打标签
- 分配 reviewer
- 数据存储等
层级 | 说明 |
---|---|
Sinatra 控制器 | 接收并解析 Webhook 请求 |
Router 分发器 | 根据事件类型进行 handler 分发 |
Handlers | 每类事件的业务处理逻辑 |
GitHub Client | 可选,用于后续 API 操作(评论等) |
- 手动发起一个 PR 或 Issue
- 查看终端输出是否正确触发对应事件
- 后续可以 mock payload 调试各类逻辑
- 支持更多 GitHub 事件类型(如 push、comments)
- 增加测试用例(RSpec or Minitest)
- GitHub Action 自动部署
有问题欢迎提 Issue,一起打造 Ruby 世界最甜 Webhook 核心 💘
感谢您使用本项目!您的支持是开源持续发展的核心动力。
每一份捐赠都将直接用于:
✅ 服务器与基础设施维护(魔法城堡的维修费哟~)
✅ 新功能开发与版本迭代(魔法技能树要升级哒~)
✅ 文档优化与社区建设(魔法图书馆要扩建呀~)
点滴支持皆能汇聚成海,让我们共同打造更强大的开源工具!
(小仙子们在向你比心哟~)