2026-03-13 16:25:37 +08:00
2026-03-11 12:30:45 +08:00
2026-03-13 11:26:01 +08:00
2026-03-13 11:26:01 +08:00
2026-03-13 16:25:37 +08:00
2026-03-13 16:04:20 +08:00
2026-03-10 11:18:39 +08:00
2026-03-13 11:26:01 +08:00
2026-03-13 16:04:20 +08:00
2026-03-13 11:26:01 +08:00
2026-03-13 16:04:20 +08:00
2026-03-13 16:04:20 +08:00
2026-03-11 21:16:47 +08:00
2026-03-11 21:16:47 +08:00
2026-03-13 16:04:20 +08:00
2026-03-11 21:16:47 +08:00
2026-03-13 16:04:20 +08:00
2026-03-11 21:16:47 +08:00

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. 配置飞书机器人

  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. 运行服务

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
No description provided
Readme 299 KiB
Languages
Python 64.8%
HTML 34%
Shell 0.9%
Dockerfile 0.3%