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

5.8 KiB
Raw Permalink Blame History

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() - 执行调试工作流 API
  • APIDebugSession() - 获取调试会话信息 API
  • APIDebugSessionUpdate() - 更新调试内容 API
  • APIDebugSessionDelete() - 删除调试会话 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 写入权限)
  • 仓库隔离(只能调试自己仓库的工作流)
  • 会话所有权验证

🚀 部署步骤

  1. 编译代码

    make build
    
  2. 启动应用 - 应用自动创建数据库表和注册路由

  3. 验证功能

    • 打开任意仓库的 Actions 页面
    • 选择工作流文件
    • 验证"Debug Workflow"按钮可见
    • 点击按钮进入调试页面

📊 性能考虑

  • 会话管理 - 定期清理过期会话,避免数据库膨胀
  • 日志查询 - 使用现有的日志系统,无额外开销
  • 实时刷新 - 2 秒间隔平衡实时性和服务器负载

🔒 安全性

  • 权限验证 - 需要 Actions 写入权限
  • 仓库隔离 - 不能跨仓库调试
  • 用户隔离 - 调试会话与创建者关联
  • 审计追踪 - 所有调试运行都记录在工作流运行历史中

🎓 使用示例

简单示例:调试构建脚本

  1. 选择 .gitea/workflows/build.yml
  2. 点击 Debug
  3. 在工作流编辑器中,修改构建命令
  4. 选择测试分支
  5. 运行调试
  6. 查看日志输出

高级示例:测试多种配置

  1. 创建调试会话
  2. 设置环境变量 BUILD_TYPE=debug
  3. 运行一次
  4. 更改为 BUILD_TYPE=release
  5. 运行另一次
  6. 对比两次日志

🔄 工作流程

用户操作
  │
  ├→ 进入 Actions 页面
  │   └→ 选择工作流
  │       └→ 点击 Debug 按钮
  │
  └→ 进入调试页面
      ├→ 编辑工作流内容
      ├→ 配置执行参数
      ├→ 点击 Run
      │   └→ 后端创建 ActionRun
      │       └→ Runner 执行
      │           └→ 产生日志
      │
      └→ 查看日志
          ├→ 自动刷新
          ├→ 复制日志
          └→ 查看详细运行页面

创新点

  1. 原地调试 - 无需本地环境,直接在 Web UI 调试
  2. 会话隔离 - 多个独立的调试会话互不影响
  3. 成本低 - 复用现有 Runner无额外成本
  4. 快速反馈 - 实时日志显示,快速迭代
  5. 完整功能 - 支持所有工作流特性(输入、环境变量等)

📈 后续优化方向

  • 添加工作流语法高亮
  • 支持工作流模板库
  • 集成变量和 context 提示
  • 支持调试历史对比
  • 支持断点调试(高级)
  • 性能分析报告

质量指标

  • 无编译错误
  • 无 lint 警告
  • 完整的错误处理
  • 规范的代码风格
  • 完整的国际化支持
  • 安全的权限检查

实现完成于: 2025-11-20 版本: v1.0 状态: 生产就绪