# AI Code Quality Scanner - 飞书通知版 一个自动化代码质量扫描系统,在代码提交时自动扫描并发送报告到飞书。 ## 功能特性 - 🤖 自动监听 Gitea 代码提交事件 - 🔍 多维度代码质量扫描(语法、风格、安全) - 📊 生成 Markdown 格式扫描报告 - 📱 实时推送飞书机器人通知 ## 系统架构 ``` ┌─────────────┐ Webhook ┌──────────────────┐ │ Gitea │ ───────────────► │ Webhook Server │ │ 代码仓库 │ │ (Flask) │ └─────────────┘ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Code Scanner │ │ - ESLint │ │ - Pylint │ │ - SonarQube │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Report Generator│ │ - Markdown │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ Feishu Bot │ │ - Webhook │ └──────────────────┘ ``` ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 配置飞书机器人 1. 打开飞书群聊 → 设置 → 群机器人 2. 添加机器人 → 选择"自定义机器人" 3. 获取 Webhook 地址 4. 配置 `config.yaml` ### 3. 配置 Gitea Webhook #### 方式一:Push 时扫描(原有方式) 1. 进入 Gitea 仓库 → 设置 → Webhooks 2. 添加 Webhook: - 目标 URL: `http://你的服务器IP:5000/webhook/gitea` - 触发事件: Push - 密钥: 配置 `config.yaml` 中的 secret #### 方式二:PR 创建时扫描(推荐) 1. 进入 Gitea 仓库 → 设置 → Webhooks 2. 添加 Webhook: - 目标 URL: `http://你的服务器IP:5000/webhook/gitea` - 触发事件: Pull Request - 密钥: 配置 `config.yaml` 中的 secret **支持的 PR 事件:** - `opened` - 创建新 PR - `reopened` - 重新打开 PR - `synchronize` - PR 中的提交有更新 - `ready_for_review` - PR 标记为准备好审查 ### 4. 运行服务 ```bash python app.py ``` ## 配置说明 所有配置在 `config.yaml` 中: ```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 部署 ```dockerfile FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 5000 CMD ["python", "app.py"] ``` ## 环境变量 也可以通过环境变量配置: ```bash export FEISHU_WEBHOOK_URL="https://open.feishu.cn/..." export GITEA_WEBHOOK_SECRET="secret" export SCANNER_MAX_ISSUES=10 ``` ## 许可证 MIT License