一个基于 Cloudflare Worker 的多平台仓库更新监控工具,支持 GitHub、Gitee、GitLab 和 CNB 仓库的代码提交监控、定时检测和通知功能。

⚠️⚠️部署前先看这里⚠️⚠️
在构建命令处填写:npm install --save-dev wrangler@4,这是必须的,否则会报错,因为构建默认使用的是wrangler@3,不支持自动创建kv命名空间
在 Cloudflare Worker 的设置中配置以下环境变量:
| 变量名 | 必填 | 说明 | 默认 |
|---|---|---|---|
DEV_MODE | 否 | 是否启用开发模式 | true |
NOTIFY_ON_FIRST_CHECK | 否 | 首次检测是否通知 | false |
TZ | 否 | 时区设置 | UTC+8 |
| 变量名 | 必填 | 说明 | 示例 |
|---|---|---|---|
GITHUB_REPO | 否 | 监控的 GitHub 仓库列表,支持逗号或换行分隔 | facebook/react,vuejs/core |
GITHUB_BRANCH | 否 | 默认分支名称 | main |
GITHUB_TOKEN | 否 | Personal Access Token(提高 API 限流配额) | ghp_xxxxxxxxxxxx |
GITHUB_CACHE_TTL | 否 | 缓存过期时间(秒) | 300 |
| 变量名 | 必填 | 说明 | 示例 |
|---|---|---|---|
GITEE_REPO | 否 | 监控的 Gitee 仓库列表,支持逗号或换行分隔 | owner/repo1,owner/repo2 |
GITEE_BRANCH | 否 | 默认分支名称 | master |
GITEE_TOKEN | 否 | 私人令牌(提高 API 限流配额) | your-gitee-token |
GITEE_CACHE_TTL | 否 | 缓存过期时间(秒) | 300 |
| 变量名 | 必填 | 说明 | 示例 |
|---|---|---|---|
GITLAB_REPO | 否 | 监控的 GitLab 仓库列表,支持逗号或换行分隔 | owner/repo1,owner/repo2 |
GITLAB_BRANCH | 否 | 默认分支名称 | main |
GITLAB_TOKEN | 否 | Private Access Token(提高 API 限流配额) | your-gitlab-token |
GITLAB_API_BASE | 否 | API 基础地址(自托管 GitLab 时需配置) | https://gitlab.example.com |
GITLAB_HOST | 否 | 主机地址(用于生成仓库链接,默认 gitlab.com) | gitlab.example.com |
GITLAB_CACHE_TTL | 否 | 缓存过期时间(秒) | 300 |
| 变量名 | 必填 | 说明 | 示例 |
|---|---|---|---|
CNB_REPO | 否 | 监控的 CNB 仓库列表,支持逗号或换行分隔 | owner/repo1,owner/repo2 |
CNB_BRANCH | 否 | 默认分支名称 | main |
CNB_TOKEN | CNB 监控必填 | API 认证 Token | your-cnb-token |
CNB_API_BASE | 否 | API 基础地址 | https://api.cnb.cool |
CNB_CACHE_TTL | 否 | 缓存过期时间(秒) | 300 |
| 变量名 | 必填 | 说明 | 示例 |
|---|---|---|---|
MAGICPUSH_URL | 否 | MagicPush API URL(启用 MagicPush 通知时必填) | https://your-magicpush-api.com/notify |
MAGICPUSH_TOKEN | 否 | MagicPush Bearer Token(启用 MagicPush 通知时必填) | your-magicpush-token |
直接访问 Worker 的根路径 /,即可打开监控仪表盘页面:
https://your-worker.your-subdomain.workers.dev/
仪表盘功能:
获取仓库列表和状态(无需鉴权,支持跨域):
GET /api/repos
响应示例:
{
"code": 200,
"message": "获取成功",
"data": {
"total": 3,
"github": 2,
"cnb": 1,
"repos": [
{
"platform": "github",
"name": "facebook/react",
"branch": "main",
"key": "facebook/react@main",
"latestSha": "abc123...",
"hasUpdate": false
},
{
"platform": "cnb",
"name": "owner/repo",
"branch": "main",
"key": "cnb:owner/repo@main",
"latestSha": "abc123...",
"hasUpdate": false
}
]
}
}
CORS 支持: 该接口支持跨域请求,可用于第三方应用集成:
fetch('https://your-worker.your-subdomain.workers.dev/api/repos')
.then(res => res.json())
.then(data => console.log(data));
注意:手动触发需要设置环境变量 DEV_MODE=true,否则会返回"开发模式已关闭"。
请求说明:
/check 路径进行检测/test-notify 路径测试通知启用开发模式后:
GET /check
检测所有已配置的 GitHub、Gitee、GitLab 和 CNB 仓库。
# GitHub 仓库 GET /check?repo=owner/repo GET /check?repo=owner/repo@branch # CNB 仓库 GET /check?repo=owner/repo&type=cnb GET /check?repo=owner/repo@branch&type=cnb
# 仅检测 GitHub 仓库 GET /check?type=github # 仅检测 Gitee 仓库 GET /check?type=gitee # 仅检测 GitLab 仓库 GET /check?type=gitlab # 仅检测 CNB 仓库 GET /check?type=cnb
添加 notify=true 参数,检测到更新时会发送通知:
GET /check?notify=true GET /check?repo=owner/repo¬ify=true GET /check?type=cnb¬ify=true
测试 MagicPush 通知配置是否正常工作:
# 测试 MagicPush 通知 GET /test-notify
响应示例(通知测试):
{
"code": 200,
"message": "通知测试完成",
"data": [
{
"channel": "magicpush",
"status": "success"
}
]
}
响应示例(CNB 仓库检测):
{
"code": 200,
"message": "检测完成",
"data": [
{
"repo": "cnb:owner/repo@main",
"platform": "cnb",
"hasUpdate": true,
"latestSha": "abc123...",
"latestDate": "2026-02-09T15:30:00Z",
"latestMessage": "Update README",
"authorName": "John Doe",
"previousSha": "def456...",
"isFirstCheck": false,
"url": "https://cnb.cool/owner/repo",
"branch": "main"
}
]
}
响应示例(开发模式已关闭):
开发模式已关闭
HTTP 状态码:403
在 Cloudflare Dashboard 中配置 Cron Triggers:
# 每 30 分钟检测一次 */30 * * * * # 每小时检测一次 0 * * * * # 每天早上 9 点检测一次 0 9 * * *
{
"code": 200,
"message": "检测完成",
"data": [
{
"repo": "facebook/react@main",
"hasUpdate": true,
"latestSha": "abc123...",
"latestDate": "2024-01-15T10:30:00Z",
"previousSha": "def456..."
},
{
"repo": "cnb:owner/repo@main",
"platform": "cnb",
"hasUpdate": true,
"latestSha": "abc123...",
"latestDate": "2026-02-09T15:30:00Z",
"latestMessage": "Update README",
"authorName": "John Doe",
"previousSha": "def456...",
"url": "https://cnb.cool/owner/repo",
"branch": "main"
}
],
"rateLimit": {
"limit": "60",
"remaining": "55",
"reset": "2024-01-15T11:00:00Z"
}
}
{
"code": 500,
"message": "检测失败",
"error": "错误详情"
}
本工具使用 MagicPush 作为通知渠道,检测到仓库更新时自动发送通知。
配置环境变量:
MAGICPUSH_URL:MagicPush API URLMAGICPUSH_TOKEN:MagicPush Bearer Token通知消息以 Markdown 格式发送,type 固定为
markdown。
通知格式(GitHub 仓库更新):
## GitHub 仓库更新 - owner/repo@branch
- **仓库**:[owner/repo](https://github.com/owner/repo)
- **SHA**:`abc123...`
- **Commit**: fix bug
- **时间**:2026-02-08 12:58:15
通知格式(CNB 构建更新):
## CNB 构建更新 - owner/repo@main
- **仓库**:[owner/repo](https://cnb.cool/owner/repo)
- **构建 ID**:`abc123...`
- **状态**:✅ success
- **时间**:2026-02-09 15:30:00
- [查看构建详情](https://cnb.cool/build/xxx)
项目内置了一个美观的监控仪表盘,采用现代深色主题设计:
直接访问 Worker 的 URL 即可:
https://your-worker.your-subdomain.workers.dev/
repo-watcher/ ├── src/ │ ├── index.js # 主入口,Worker 导出 │ ├── handlers/ # 请求处理器 │ │ ├── index.js # 处理器导出 │ │ ├── check.js # 检测处理器 │ │ ├── dashboard.js # 仪表盘处理器 │ │ ├── repos.js # 仓库列表处理器 │ │ └── test-notify.js # 通知测试处理器 │ ├── services/ # 服务层 │ │ ├── index.js # 服务导出 │ │ ├── github.js # GitHub API 服务 │ │ ├── gitee.js # Gitee API 服务 │ │ ├── gitlab.js # GitLab API 服务 │ │ ├── cnb.js # CNB API 服务 │ │ └── notify.js # 通知服务 │ └── utils/ # 工具函数 │ ├── index.js # 工具导出 │ ├── parser.js # 解析工具 │ ├── kv.js # KV 操作工具 │ └── datetime.js # 日期时间工具 ├── static/ │ ├── dashboard.html # 仪表盘页面 │ └── favicon.svg # 网站图标 ├── wrangler.toml # Wrangler 配置文件 ├── package.json # 项目配置 └── README.md # 项目文档
GitHub 仓库格式:
owner/repo:使用默认分支owner/repo@branch:指定分支Gitee 仓库格式:
owner/repo:使用默认分支owner/repo@branch:指定分支GitLab 仓库格式:
owner/repo:使用默认分支owner/repo@branch:指定分支CNB 仓库格式:
owner/repo:使用默认分支owner/repo@branch:指定分支GitHub 检测流程:
NOTIFY_ON_FIRST_CHECK=true,则调用通知函数Gitee 检测流程:
GitLab 检测流程:
CNB 检测流程:
NOTIFY_ON_FIRST_CHECK=true,则调用通知函数首次检测行为:
NOTIFY_ON_FIRST_CHECK=true:首次检测也会发送通知GITHUB_CACHE_TTL(默认 300 秒)GITEE_CACHE_TTL(默认 300 秒)GITLAB_CACHE_TTL(默认 300 秒)CNB_CACHE_TTL(默认 300 秒)GitHub 认证:
Gitee 认证:
private_token 参数认证GitLab 认证:
PRIVATE-TOKEN header 认证GITLAB_API_BASE 和 GITLAB_HOSTCNB 认证:
CNB_TOKEN 才能使用 CNB 监控CNB_API_BASE)CNB_CACHE_TTLDEV_MODE=true,测试完成后建议关闭MIT License