5.8 KiB
5.8 KiB
✅ Gitea 工作流在线调试功能 - 实现总结
📋 任务完成情况
已完成的功能
✅ 1. 后端数据模型 (models/actions/debug_session.go)
- 创建
DebugSession模型存储调试会话 - 支持 CRUD 操作
- 自动过期清理机制
- JSON 参数序列化/反序列化
✅ 2. 后端服务层 (services/actions/debug_workflow.go)
DebugWorkflow()- 启动调试工作流运行GetDebugWorkflowStatus()- 获取调试运行状态GetDebugSessionWorkflowContent()- 获取工作流原始内容- 完全集成现有 Runner 系统
✅ 3. API 路由处理器 (routers/web/repo/actions/debug.go)
Debug()- 显示调试页面视图APIDebugRun()- 执行调试工作流 APIAPIDebugSession()- 获取调试会话信息 APIAPIDebugSessionUpdate()- 更新调试内容 APIAPIDebugSessionDelete()- 删除调试会话 API
✅ 4. 前端调试页面 (templates/repo/actions/debug.tmpl)
- 工作流 YAML 编辑器 (textarea)
- 分支/标签选择器
- 事件类型选择器
- 工作流输入参数配置(动态添加/删除)
- 环境变量配置(动态添加/删除)
- 实时日志查看器(自动刷新)
- 日志复制功能
✅ 5. UI 集成 (templates/repo/actions/list.tmpl)
- 在工作流列表中添加"Debug Workflow"按钮
- 只在选中工作流时显示
✅ 6. 路由配置 (routers/web/web.go)
/debug- 显示调试页面/debug-api/{debugSessionID}/run- 运行调试/debug-api/{debugSessionID}/session- 获取会话/debug-api/{debugSessionID}/update- 更新会话/debug-api/{debugSessionID}/delete- 删除会话
✅ 7. 国际化支持 (locale files)
- 英文翻译 (locale_en-US.ini)
- 中文简体翻译 (locale_zh-CN.ini)
- 所有 UI 文本均已国际化
🔧 技术架构
前端请求
↓
路由处理器 (debug.go)
↓
后端服务层 (debug_workflow.go)
↓
数据模型层 (debug_session.go + models/actions/*)
↓
数据库
↓
工作流系统 (InsertRun → WorkflowRunStatusUpdate)
↓
Runner 执行工作流
📁 文件清单
新增文件
/models/actions/debug_session.go- 调试会话数据模型/services/actions/debug_workflow.go- 调试服务实现/routers/web/repo/actions/debug.go- 路由处理器/templates/repo/actions/debug.tmpl- 调试页面模板/DEBUG_WORKFLOW_IMPLEMENTATION.md- 实现文档/WORKFLOW_DEBUG_GUIDE.md- 使用指南
修改的文件
/templates/repo/actions/list.tmpl- 添加调试按钮/routers/web/web.go- 添加调试路由/options/locale/locale_en-US.ini- 添加英文翻译/options/locale/locale_zh-CN.ini- 添加中文翻译
🎯 核心特性
特性 1: 完整的工作流编辑
- 支持修改任何工作流 YAML 内容
- 实时语法验证(通过后端解析)
- 清晰的编辑界面
特性 2: 灵活的执行参数
- 选择不同分支/标签
- 设置不同事件类型
- 添加工作流输入参数
- 设置环境变量
特性 3: 实时日志反馈
- 每 2 秒自动刷新日志
- 完整的工作流执行日志
- 日志复制功能
特性 4: 会话管理
- 多个独立的调试会话
- 自动 24 小时过期清理
- 草稿状态保存
特性 5: 安全性
- 权限检查(需要 Actions 写入权限)
- 仓库隔离(只能调试自己仓库的工作流)
- 会话所有权验证
🚀 部署步骤
-
编译代码
make build -
启动应用 - 应用自动创建数据库表和注册路由
-
验证功能
- 打开任意仓库的 Actions 页面
- 选择工作流文件
- 验证"Debug Workflow"按钮可见
- 点击按钮进入调试页面
📊 性能考虑
- 会话管理 - 定期清理过期会话,避免数据库膨胀
- 日志查询 - 使用现有的日志系统,无额外开销
- 实时刷新 - 2 秒间隔平衡实时性和服务器负载
🔒 安全性
- ✅ 权限验证 - 需要 Actions 写入权限
- ✅ 仓库隔离 - 不能跨仓库调试
- ✅ 用户隔离 - 调试会话与创建者关联
- ✅ 审计追踪 - 所有调试运行都记录在工作流运行历史中
🎓 使用示例
简单示例:调试构建脚本
- 选择
.gitea/workflows/build.yml - 点击 Debug
- 在工作流编辑器中,修改构建命令
- 选择测试分支
- 运行调试
- 查看日志输出
高级示例:测试多种配置
- 创建调试会话
- 设置环境变量
BUILD_TYPE=debug - 运行一次
- 更改为
BUILD_TYPE=release - 运行另一次
- 对比两次日志
🔄 工作流程
用户操作
│
├→ 进入 Actions 页面
│ └→ 选择工作流
│ └→ 点击 Debug 按钮
│
└→ 进入调试页面
├→ 编辑工作流内容
├→ 配置执行参数
├→ 点击 Run
│ └→ 后端创建 ActionRun
│ └→ Runner 执行
│ └→ 产生日志
│
└→ 查看日志
├→ 自动刷新
├→ 复制日志
└→ 查看详细运行页面
✨ 创新点
- 原地调试 - 无需本地环境,直接在 Web UI 调试
- 会话隔离 - 多个独立的调试会话互不影响
- 成本低 - 复用现有 Runner,无额外成本
- 快速反馈 - 实时日志显示,快速迭代
- 完整功能 - 支持所有工作流特性(输入、环境变量等)
📈 后续优化方向
- 添加工作流语法高亮
- 支持工作流模板库
- 集成变量和 context 提示
- 支持调试历史对比
- 支持断点调试(高级)
- 性能分析报告
✅ 质量指标
- ✅ 无编译错误
- ✅ 无 lint 警告
- ✅ 完整的错误处理
- ✅ 规范的代码风格
- ✅ 完整的国际化支持
- ✅ 安全的权限检查
实现完成于: 2025-11-20 版本: v1.0 状态: 生产就绪 ✅