027cf50759f1b12a873f5826b12774095a251a38
AI Code Quality Scanner - 飞书通知版
一个自动化代码质量扫描系统,在代码提交时自动扫描并发送报告到飞书。
功能特性
- 🤖 自动监听 Gitea 代码提交事件
- 🔍 多维度代码质量扫描(语法、风格、安全)
- 📊 生成 Markdown 格式扫描报告
- 📱 实时推送飞书机器人通知
系统架构
┌─────────────┐ Webhook ┌──────────────────┐
│ Gitea │ ───────────────► │ Webhook Server │
│ 代码仓库 │ │ (Flask) │
└─────────────┘ └────────┬─────────┘
│
▼
┌──────────────────┐
│ Code Scanner │
│ - ESLint │
│ - Pylint │
│ - SonarQube │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Report Generator│
│ - Markdown │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Feishu Bot │
│ - Webhook │
└──────────────────┘
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 配置飞书机器人
- 打开飞书群聊 → 设置 → 群机器人
- 添加机器人 → 选择"自定义机器人"
- 获取 Webhook 地址
- 配置
config.yaml
3. 配置 Gitea Webhook
方式一:Push 时扫描(原有方式)
- 进入 Gitea 仓库 → 设置 → Webhooks
- 添加 Webhook:
- 目标 URL:
http://你的服务器IP:5000/webhook/gitea - 触发事件: Push
- 密钥: 配置
config.yaml中的 secret
- 目标 URL:
方式二:PR 创建时扫描(推荐)
- 进入 Gitea 仓库 → 设置 → Webhooks
- 添加 Webhook:
- 目标 URL:
http://你的服务器IP:5000/webhook/gitea - 触发事件: Pull Request
- 密钥: 配置
config.yaml中的 secret
- 目标 URL:
支持的 PR 事件:
opened- 创建新 PRreopened- 重新打开 PRsynchronize- PR 中的提交有更新ready_for_review- PR 标记为准备好审查
4. 运行服务
python app.py
配置说明
所有配置在 config.yaml 中:
server:
host: "0.0.0.0"
port: 5000
debug: true
gitea:
base_url: "http://localhost:3000"
# Webhook 签名密钥
webhook_secret: "your_webhook_secret"
feishu:
# 飞书机器人 Webhook 地址
webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# 消息推送 secret(可选,用于签名)
secret: "your_feishu_secret"
scanner:
# 支持的语言
languages:
- python
- javascript
- typescript
# 扫描阈值
max_issues: 10
# 是否启用详细扫描
detailed: true
report:
# 报告保存路径
output_dir: "./reports"
# 是否保留报告文件
keep_files: true
项目结构
code-scanner/
├── app.py # 主应用入口
├── config.yaml # 配置文件
├── requirements.txt # Python 依赖
├── README.md # 项目说明
├── scanner/
│ ├── __init__.py
│ ├── base.py # 扫描器基类
│ ├── python_scanner.py # Python 代码扫描
│ ├── js_scanner.py # JavaScript/TypeScript 扫描
│ └── security_scanner.py # 安全扫描
├── report/
│ ├── __init__.py
│ └── generator.py # Markdown 报告生成
├── notify/
│ ├── __init__.py
│ └── feishu.py # 飞书通知
├── webhook/
│ ├── __init__.py
│ └── handler.py # Webhook 处理
└── reports/ # 报告输出目录
支持的扫描工具
Python
- Pylint - 代码风格和错误检查
- Flake8 - Python 代码检查
- Bandit - 安全漏洞扫描
JavaScript/TypeScript
- ESLint - JavaScript/TypeScript 检查
- Prettier - 代码格式化
飞书消息效果
扫描完成后,将收到类似以下消息:
Push 扫描消息
📊 代码质量扫描报告
仓库: my-project
分支: main
提交: abc1234
提交者: developer@example.com
✅ 扫描通过 (0 issues)
或
⚠️ 发现问题 (5 issues)
PR 扫描消息
📊 PR 代码质量扫描报告
仓库: my-project
源分支: feature-xxx → 目标分支: main
PR链接: https://gitea.example.com/user/project/pulls/123
提交: abc1234
提交者: developer@example.com
✅ 扫描通过 (0 issues)
或
⚠️ 发现问题 (5 issues)
Docker 部署
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
环境变量
也可以通过环境变量配置:
export FEISHU_WEBHOOK_URL="https://open.feishu.cn/..."
export GITEA_WEBHOOK_SECRET="secret"
export SCANNER_MAX_ISSUES=10
许可证
MIT License
Description
Languages
Python
64.8%
HTML
34%
Shell
0.9%
Dockerfile
0.3%