# Gitea 工作流在线调试功能实现 ## 功能概述 为 Gitea Actions 工作流系统添加了在线调试功能。用户可以在工作流列表页面点击"调试"按钮,进入一个专用的调试页面,在该页面可以: 1. **编辑工作流 YAML 内容** - 直接修改工作流定义 2. **配置调试参数** - 设置执行的分支/标签、事件类型 3. **添加工作流输入** - 为 workflow_dispatch 提供输入参数 4. **设置环境变量** - 添加自定义环境变量 5. **实时查看日志** - 执行工作流后查看运行日志 6. **管理多个调试会话** - 支持创建和删除多个调试会话 ## 实现细节 ### 1. 数据模型 (`models/actions/debug_session.go`) 新增 `DebugSession` 模型用于存储调试会话信息: - `ID` - 调试会话唯一ID - `RepoID` - 所属仓库ID - `CreatorID` - 创建者用户ID - `WorkflowID` - 工作流文件名 - `WorkflowContent` - 当前编辑的工作流 YAML 内容 - `Status` - 会话状态 (draft/running/success/failed/cancelled) - `RunID` - 执行时关联的工作流运行ID - `DebugParams` - 调试参数 JSON (ref、event、inputs、env) - `ErrorMsg` - 错误信息 - `ExpiresUnix` - 自动过期时间(24小时) ### 2. 后端服务 (`services/actions/debug_workflow.go`) 核心函数: **DebugWorkflow()** - 启动调试工作流运行 - 解析工作流 YAML 内容 - 获取目标提交 - 创建 ActionRun 记录 - 触发通知系统启动运行 **GetDebugSessionWorkflowContent()** - 获取工作流原始内容 - 从仓库读取工作流文件 ### 3. 路由处理器 (`routers/web/repo/actions/debug.go`) **Debug()** - 显示调试页面 - 创建新的调试会话 - 加载工作流内容 - 渲染调试模板 **API 接口:** - `APIDebugRun()` - 执行调试工作流 - `APIDebugSession()` - 获取调试会话状态 - `APIDebugSessionUpdate()` - 更新调试会话内容 - `APIDebugSessionDelete()` - 删除调试会话 ### 4. 前端界面 (`templates/repo/actions/debug.tmpl`) 分为左右两栏: **左栏 - 调试配置:** - YAML 内容编辑器 (textarea) - 分支/标签选择 - 事件类型选择 (push/pull_request/workflow_dispatch 等) - 工作流输入参数配置 (动态添加/删除) - 环境变量配置 (动态添加/删除) - 运行按钮 **右栏 - 执行日志:** - 运行状态显示 - 实时日志输出 - 日志自动刷新 (2秒间隔) - 复制日志按钮 ### 5. 路由配置 (`routers/web/web.go`) ``` /repos/{owner}/{repo}/actions/debug?workflow={workflowID} 显示调试页面 /repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/run POST 执行调试工作流 /repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/session GET 获取调试会话信息 /repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/update POST 更新调试内容 /repos/{owner}/{repo}/actions/debug-api/{debugSessionID}/delete POST 删除调试会话 ``` ### 6. 国际化 (`options/locale/`) 添加中英文翻译: - `workflow.debug` - 调试工作流 - `workflow.content` - 工作流内容 - `workflow.ref` - 引用(分支/标签) - `workflow.event` - 事件类型 - `workflow.inputs` - 工作流输入 - `workflow.env` - 环境变量 - `workflow.logs` - 执行日志 - 等等... ## 使用流程 1. **进入工作流列表页面** - `/repos/{owner}/{repo}/actions` 2. **选择工作流** - 点击左侧工作流文件 3. **点击调试按钮** - "Debug Workflow" 按钮(选中工作流后显示) 4. **编辑和配置** - 在调试页面修改工作流内容和参数 5. **运行调试** - 点击"Run Workflow"按钮 6. **查看日志** - 实时查看工作流执行日志 ## 技术特点 - **复用现有 Runner** - 使用系统现有的 runner 执行调试工作流 - **无需额外基础设施** - 直接利用现有的工作流运行系统 - **完整日志支持** - 获得和正常运行相同的完整日志输出 - **状态管理** - 支持多个并发调试会话 - **自动清理** - 24小时后自动过期的调试会话 - **权限检查** - 只有有权限的用户可以创建调试会话 ## 扩展可能性 未来可以进一步扩展为: - 断点调试支持 - 单步执行 - 变量查看和修改 - 调试历史记录 - 性能分析 - 集成开发者工具 ## 文件列表 新增/修改文件: 1. `/models/actions/debug_session.go` - 新增 2. `/services/actions/debug_workflow.go` - 新增 3. `/routers/web/repo/actions/debug.go` - 新增 4. `/templates/repo/actions/debug.tmpl` - 新增 5. `/templates/repo/actions/list.tmpl` - 修改(添加调试按钮) 6. `/routers/web/web.go` - 修改(添加路由) 7. `/options/locale/locale_en-US.ini` - 修改(添加翻译) 8. `/options/locale/locale_zh-CN.ini` - 修改(添加翻译) ## 部署注意 该功能无需特殊部署步骤: - 模型会在启动时自动创建表 - 路由会在应用启动时自动注册 - 国际化文本会在系统启动时加载 只需编译和部署更新后的代码即可。