Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 0 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,29 +33,6 @@ jobs:
- name: Run go vet
run: go vet ./...

build:
name: Build
runs-on: ubuntu-latest
needs: test
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Go with cache
uses: ./.github/actions/setup-go
with:
go-version: "1.21"

- name: Build
run: go build -v -o bin/feishu-github-tracker ./cmd/feishu-github-tracker

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: feishu-github-tracker-binary
path: bin/feishu-github-tracker
retention-days: 7

docker:
name: Build and Push Docker Image
runs-on: ubuntu-latest
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@
"zoneinfo"
],
"markdownlint.config": {
"no-inline-html": false,
"first-line-h1": false,
"no-duplicate-heading": false
},
Expand Down
37 changes: 31 additions & 6 deletions QUICKSTART.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,16 +50,41 @@
4. 修改配置

- 编辑 `./configs/` 目录下的配置文件,参考 [README.md](README.md) or [configs](configs/) 目录下的示例配置文件的注释说明。你最可能需要修改的有下面几个内容:
- [./configs/server.yaml](configs/server.yaml):修改服务器监听地址和端口
- [./configs/feishu-bots.yaml](configs/feishu-bots.yaml):配置飞书机器人的 Webhook URL 和别名
- [./configs/server.yaml](configs/server.yaml):修改服务器监听地址,端口和自定义一个 `secret`(如果需要的话,如果测试用可以不设置)
- [./configs/feishu-bots.yaml](configs/feishu-bots.yaml):配置飞书机器人的 Webhook URL 和别名(每个可选添加配置模板选择)。
- 如果不确定 `飞书机器人` 和 `Webhook URL` 是什么,可以参考 [这个文档](https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot),在一个群组中创建一个机器人并复制其 Webhook URL 到这里。
- [./configs/repos.yaml](configs/repos.yaml):配置需要监听的 GitHub 仓库和事件,以及对应的通知对象
- [./configs/templates.jsonc](configs/templates.jsonc):默认消息模板(可选:创建/使用 `templates.<自定义名称,如「cn」>.jsonc` 自定义模板)
- 修改后保存,程序会在下一次收到 GitHub Webhook 请求时自动热重载最新配置。

5. 简要调试
5. 多模板配置(可选)

如果需要为不同的飞书 bot 配置不同的消息模板(如中英文双语),可以在 `./configs/feishu-bots.yaml` 中指定模板:

```yaml
feishu_bots:
- alias: 'team-cn'
url: 'https://open.feishu.cn/open-apis/bot/v2/hook/cn-webhook'
template: 'cn' # 使用中文模板,如不设置默认使用 templates.jsonc 英文模板
```

也可以根据现有的修改并创建新的模版文件 `templates.<自定义名称>.jsonc`,然后在 `feishu-bots.yaml` 中引用。

6. 添加 GitHub Webhook

- 进入你想监听的 GitHub 仓库,点击 `Settings` -> `Webhooks` -> `Add webhook`
- 在 `Payload URL` 中填入你的服务器地址,例如 `http://your-domain-or-ip:4594/webhook`
- 在 `Content type` 中选什么都可以,都支持
- 在 `Secret` 中填入你在 `server.yaml` 中配置的 `secret`(如果配置了的话)
- 选择你想监听的事件类型,可以选 `仅push`,也可以选 `Everything` 然后在这个项目的 [configs/events.yaml](configs/events.yaml) 中更详细地选择你想要监听每个事件什么类型甚至什么分支上的事件;如果想要简单一些,也选择 `Let me select individual events` 然后勾选需要的事件,而在这边的 [./configs/repos.yaml](configs/repos.yaml) 你想监听的项目中选择 `all:`
- 点击 `Add webhook` 保存
- **✅ 成功提示**:如果前面的步骤没有错误,几秒钟后你会在飞书群组中收到一条 "GitHub Webhook 添加成功" 的通知(这是 GitHub 发送的 ping 事件)。这表示 Webhook 已正确配置并能正常工作!

7. 简要调试

- 若没有收到通知,请检查:
- GitHub Webhook 配置(Payload URL、Secret、事件类型)
- `docker-compose logs -f` 中的错误日志
- 本地修改配置后,尝试触发一次 GitHub 的 Webhook 事件,然后查看日志确认是否重载成功
- `docker-compose logs -f` 中的错误日志,如果没有任何日志,请确认 GitHub Webhook 是否有成功发送请求
- 修改配置后,尝试触发一次 GitHub 的 Webhook 事件,然后查看日志确认是否重载成功

更多配置与高级用法请在启动容器后参见 [README.md](README.md) or [configs](configs/) 目录下的示例配置文件的注释说明 or [internal/handler/](internal/handler/) 目录下的文档
更多配置与高级用法请在启动容器后参见 [README.md](README.md) or [configs](configs/) 目录下的示例配置文件的注释说明 or [internal/handler/](internal/handler/) 目录下的相关文档 or [internal/template/](internal/template/) 目录下的消息模板说明
87 changes: 84 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

一个用于接收 GitHub Webhook 并转发到飞书机器人的中间件服务。支持灵活的配置、事件过滤和自定义消息模板。

![logo](./assets/images/logo.png)

## 写在前面

### 为什么有这个项目
Expand All @@ -27,13 +29,66 @@
- 详见 [configs/events.yaml](configs/events.yaml)
- 对应的处理方法以及文档详见 [internal/handler/](internal/handler/)
- 默认提供的消息模板详见 [configs/templates.jsonc](configs/templates.jsonc)
- 也可以自定义模板,使用我们 `handler` 提供的的 `占位符变量` ([详见文档](internal/handler/README.md)) 对发出消息的格式做相应的修改
- 也可以自定义模板,使用我们 `handler` 提供的的 `占位符变量` ([详见文档](internal/handler/README.md)) 以及 `template` 提供的 `模板引擎的语法` `过滤器` `条件块` 等功能 ([详见文档](internal/template/README.md)) 对发出消息的格式做相应的修改

### 🔔 Webhook 设置提醒

当您在 GitHub 上添加 Webhook 时(无论是仓库级别还是组织级别),GitHub 会发送一个 **ping 事件**来测试 Webhook 配置。本服务会:

1. **自动识别 ping 事件**:无需在 `repos.yaml` 中特别配置
2. **智能匹配通知目标**:
- 对于组织级 webhook:自动发送到配置了该组织所有仓库的飞书 bot, 即仅 `org-name/*` 模式匹配的仓库
- 对于仓库级 webhook:自动发送到配置了该仓库的飞书 bot
3. **发送成功通知**:向飞书发送一条友好的 Webhook 设置成功消息,包含:
- GitHub 禅语(zen message)
- Hook ID 和类型
- 仓库或组织信息

这样您就能立即确认 Webhook 已正确配置并能正常工作。

### 消息演示

#### Misc

<img width="675" height="500" alt="image" src="https://github.com/user-attachments/assets/5f47b742-f004-4162-9ae6-9872554dc784" />

<img width="675" height="783" alt="image" src="https://github.com/user-attachments/assets/7f5a3b31-ecc5-4403-9bc5-96baa433d4bf" />

#### 支持双语,可以快速切换(所有卡片都有对应)

<img width="675" height="521" alt="image" src="https://github.com/user-attachments/assets/21143037-9132-42c9-b3b4-3b0d6075ede9" />

#### Workflow 通知

<img width="675" height="737" alt="image" src="https://github.com/user-attachments/assets/583e6e94-86b2-4597-943e-17f879b089cc" />

#### Release

<img width="675" height="794" alt="image" src="https://github.com/user-attachments/assets/0fb7870e-ae87-4785-9ae9-595f07fe4040" />

#### Issue 相关

<img width="675" height="783" alt="image" src="https://github.com/user-attachments/assets/476027ea-8ac9-49f8-a72e-ec377e4f8786" />

注意:模板引擎的语法、过滤器和条件块示例详见 `internal/template/README.md`,里面有占位符示例和进阶用法。
#### PR 相关

<img width="675" height="786" alt="image" src="https://github.com/user-attachments/assets/0078b45c-52a5-45e2-90f1-7d09017f149b" />

#### 其他事件(Star,Watch,等等,只要 GitHub 支持的我们都支持,详见上方说明)

<img width="675" height="380" alt="image" src="https://github.com/user-attachments/assets/7c720de2-ffa9-4bb1-9cdb-156eef435c90" />

## 🚀 快速开始

参考 [QUICKSTART.md](./QUICKSTART.md) 了解如何快速部署和测试。
参考 [QUICKSTART.md](./QUICKSTART.md) 了解如何快速自建服务器部署和测试。

### 体验/使用现成服务(适合自己部署成本/难度较高的用户)

当然我们也有部署好的服务(<https://feishu-github-tracker.hnrobert.space/webhook>,直接 call 是没效果的,需要在我的服务器上更新配置才能转发到你那里 😈)可供大家使用或者尝试(下方邮件联系我获取试用和少量技术支持)。由于当前的服务是部署在个人服务器上需要运维成本,且配置当前依然需要人力维护,如果想要长期使用,需联系我付费 25¥ (含**永久使用权** + **1 年的不限次数配置更新&技术支持**,1 年后如需要更新配置或者技术支持,也请续费 10¥/年~~辛苦费~~)。

当然为了鼓励大家参与开源,**如果你能提一个有效的 PR(修复 bug 或者添加功能(请先提 issue))且最终被合并,或者提出一个详细的包含修复方法的 bug report issue**,试用款可以全额退回,后续也不需要支出任何额外费用。

如有想法可以邮件联系我:[hnrobert@qq.com](mailto:hnrobert@qq.com)

## 📁 项目结构

Expand Down Expand Up @@ -99,8 +154,34 @@ feishu_bots:

- alias: 'org-notify'
url: 'https://open.feishu.cn/open-apis/bot/v2/hook/zzzzzzz'

- alias: 'org-cn-notify'
url: 'https://open.feishu.cn/open-apis/bot/v2/hook/aaaaaaa'
template: 'cn' # 可选:指定使用的消息模板,默认为 'default'
```

**多模板支持**:

从 v1.1.0 开始,支持为不同的飞书 bot 配置不同的消息模板。这在以下场景特别有用:

- 中英文双语团队,需要发送不同语言的通知
- 不同团队需要不同格式的消息
- 测试环境和生产环境使用不同的消息格式

配置方法:

1. 在 `feishu-bots.yaml` 中为 bot 指定 `template` 字段(可选)
2. 在 `configs/` 目录下创建对应的模板文件,命名格式为 `templates.<name>.jsonc`

例如:

- `templates.jsonc` - 默认模板(必需)
- `templates.cn.jsonc` - 中文模板
- `templates.en.jsonc` - 英文模板
- `templates.simple.jsonc` - 简化模板

如果某个 bot 没有指定 `template` 字段,或指定的模板文件不存在,将自动使用 `templates.jsonc` 作为默认模板。

### events.yaml

定义事件模板和具体事件配置:
Expand Down
Binary file added assets/images/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading