Files
devstar/DEBUG_WORKFLOW_IMPLEMENTATION.md
2025-11-20 21:12:51 +08:00

4.9 KiB
Raw Permalink Blame History

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 - 修改(添加翻译)

部署注意

该功能无需特殊部署步骤:

  • 模型会在启动时自动创建表
  • 路由会在应用启动时自动注册
  • 国际化文本会在系统启动时加载

只需编译和部署更新后的代码即可。