|
| 1 | +# Dragonfly双仓库推送Skill实施计划 |
| 2 | + |
| 3 | +## 一、概述 |
| 4 | + |
| 5 | +创建一个全局skill (`dragonfly-dual-push`),实现智能的双仓库推送功能,支持代码变更分析、自动检查测试、提交信息生成和双仓库推送。 |
| 6 | + |
| 7 | +## 二、Skill基本信息 |
| 8 | + |
| 9 | +- **Skill名称**: dragonfly-dual-push |
| 10 | +- **存放位置**: `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/` |
| 11 | +- **触发方式**: |
| 12 | + - 关键词自动触发: "推送"、"推送代码"、"双仓库推送"、"push"、"提交并推送" |
| 13 | + - 手动调用: 通过Skill工具直接调用 |
| 14 | + |
| 15 | +## 三、目录结构 |
| 16 | + |
| 17 | +``` |
| 18 | +/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/ |
| 19 | +├── SKILL.md # Skill定义文档(必需) |
| 20 | +├── package.json # npm包配置(必需) |
| 21 | +├── index.js # 主入口文件(必需) |
| 22 | +├── README.md # 使用说明文档 |
| 23 | +├── utils/ # 工具模块目录 |
| 24 | +│ ├── git.js # Git操作封装 |
| 25 | +│ ├── analyzer.js # 代码变更分析 |
| 26 | +│ ├── checker.js # 代码检查和测试 |
| 27 | +│ └── pusher.js # 双仓库推送逻辑 |
| 28 | +└── .gitignore # Git忽略配置 |
| 29 | +``` |
| 30 | + |
| 31 | +## 四、核心功能实现 |
| 32 | + |
| 33 | +### 4.1 代码变更分析 (utils/analyzer.js) |
| 34 | +- 使用`git diff`和`git status`获取改动文件列表 |
| 35 | +- 分析变更类型:新增/修改/删除 |
| 36 | +- 智能识别文件类型并建议提交类型: |
| 37 | + - 源代码文件 → feat/fix/refactor |
| 38 | + - 测试文件 → test |
| 39 | + - 文档文件 → docs |
| 40 | + - 配置文件 → chore |
| 41 | +- 生成变更摘要统计 |
| 42 | + |
| 43 | +### 4.2 代码检查和测试 (utils/checker.js) |
| 44 | +- **Lint检查**: 执行`yarn lint`,解析输出结果 |
| 45 | +- **测试执行**: 执行`yarn test`,收集测试结果 |
| 46 | +- **Husky集成**: 可选择跳过或手动触发pre-commit钩子 |
| 47 | +- **用户交互**: 检查失败时询问用户是否继续执行 |
| 48 | +- **结果展示**: 清晰展示检查结果和建议 |
| 49 | + |
| 50 | +### 4.3 提交信息生成 (在index.js中实现) |
| 51 | +- 基于代码变更分析生成建议的提交信息 |
| 52 | +- 遵循Conventional Commits规范 |
| 53 | +- 格式: `<type>: <subject>` |
| 54 | +- 提供中文和英文两个版本 |
| 55 | +- 用户可以查看、编辑或完全自定义 |
| 56 | +- 使用commitlint验证最终格式 |
| 57 | + |
| 58 | +### 4.4 双仓库推送 (utils/pusher.js) |
| 59 | +- **目标仓库**: |
| 60 | + - origin: https://github.com/dragonflyoss/console.git |
| 61 | + - alipay: git@code.alipay.com:yjl516914/Dragonfly-console.git |
| 62 | +- **推送策略**: 智能选择(根据网络情况和推送结果) |
| 63 | + - 默认串行推送(origin → alipay) |
| 64 | + - 失败时暂停,提示用户选择重试或跳过 |
| 65 | + - 支持部分成功场景(一个成功、一个失败) |
| 66 | +- **分支处理**: 推送当前分支,自动创建远程分支 |
| 67 | +- **状态验证**: 推送前验证仓库连接和认证状态 |
| 68 | + |
| 69 | +## 五、执行流程 |
| 70 | + |
| 71 | +``` |
| 72 | +1. 前置检查 |
| 73 | + ├─ 验证Git仓库状态 |
| 74 | + ├─ 检查Node.js和yarn版本 |
| 75 | + └─ 验证远程仓库配置 |
| 76 | +
|
| 77 | +2. 代码变更分析 |
| 78 | + ├─ 获取改动文件列表 |
| 79 | + ├─ 分析变更类型和影响范围 |
| 80 | + └─ 生成变更摘要 |
| 81 | +
|
| 82 | +3. 代码检查和测试 |
| 83 | + ├─ 执行yarn lint |
| 84 | + ├─ 执行yarn test |
| 85 | + └─ 失败时询问用户是否继续 |
| 86 | +
|
| 87 | +4. 提交信息生成 |
| 88 | + ├─ 基于变更分析生成建议信息 |
| 89 | + ├─ 展示给用户确认/修改 |
| 90 | + └─ commitlint格式验证 |
| 91 | +
|
| 92 | +5. Git提交操作 |
| 93 | + ├─ 添加改动文件到暂存区 |
| 94 | + ├─ 执行git commit |
| 95 | + └─ 验证提交结果 |
| 96 | +
|
| 97 | +6. 双仓库推送 |
| 98 | + ├─ 推送到origin (GitHub) |
| 99 | + ├─ 推送到alipay (内部仓库) |
| 100 | + ├─ 智能处理推送失败 |
| 101 | + └─ 汇总推送结果 |
| 102 | +``` |
| 103 | + |
| 104 | +## 六、关键技术点 |
| 105 | + |
| 106 | +### 6.1 用户交互设计 |
| 107 | +- 使用彩色输出(chalk)提升可读性 |
| 108 | +- 使用进度动画(ora)展示执行进度 |
| 109 | +- 交互式问答(inquirer)收集用户输入 |
| 110 | +- 清晰的步骤指引和结果反馈 |
| 111 | + |
| 112 | +### 6.2 错误处理机制 |
| 113 | +- 前置检查失败:立即停止并给出具体提示 |
| 114 | +- 检查失败:询问用户是否继续(强制模式) |
| 115 | +- Git操作失败:回滚已执行的操作 |
| 116 | +- 推送失败:记录失败原因,提供重试选项 |
| 117 | +- 详细的错误日志和修复建议 |
| 118 | + |
| 119 | +### 6.3 配置灵活性 |
| 120 | +- 支持项目级配置文件(可选) |
| 121 | +- 支持命令行参数覆盖默认配置 |
| 122 | +- 提供合理的默认行为 |
| 123 | +- 可配置检查项和推送策略 |
| 124 | + |
| 125 | +## 七、SKILL.md Frontmatter配置 |
| 126 | + |
| 127 | +```yaml |
| 128 | +--- |
| 129 | +name: dragonfly-dual-push |
| 130 | +version: "1.0.0" |
| 131 | +description: Dragonfly项目双仓库推送助手 - 智能分析代码变更、执行检查测试、生成提交信息并推送到GitHub和内部代码仓库 |
| 132 | +author: CodeFuse Team |
| 133 | +categories: |
| 134 | + - Git |
| 135 | + - CI/CD |
| 136 | + - Development |
| 137 | +keywords: |
| 138 | + - 推送 |
| 139 | + - 双仓库推送 |
| 140 | + - 推送代码 |
| 141 | + - push |
| 142 | + - 提交并推送 |
| 143 | + - dual push |
| 144 | + - git push |
| 145 | +allowed-tools: |
| 146 | + - Bash |
| 147 | + - Read |
| 148 | + - Write |
| 149 | + - Edit |
| 150 | + - AskUserQuestion |
| 151 | + - TodoWrite |
| 152 | + - Grep |
| 153 | + - Glob |
| 154 | +--- |
| 155 | +``` |
| 156 | + |
| 157 | +## 八、实施步骤 |
| 158 | + |
| 159 | +### 阶段一:基础框架搭建 |
| 160 | +1. 创建skill目录结构 |
| 161 | +2. 编写SKILL.md文档(包含frontmatter和详细说明) |
| 162 | +3. 创建package.json配置(声明依赖和脚本) |
| 163 | +4. 实现index.js主入口框架 |
| 164 | + |
| 165 | +### 阶段二:核心功能模块 |
| 166 | +1. 实现utils/git.js(Git基础操作封装) |
| 167 | +2. 实现utils/analyzer.js(代码变更分析) |
| 168 | +3. 实现utils/checker.js(代码检查和测试) |
| 169 | +4. 实现utils/pusher.js(双仓库推送逻辑) |
| 170 | + |
| 171 | +### 阶段三:流程整合 |
| 172 | +1. 整合各个功能模块到index.js |
| 173 | +2. 实现完整的执行流程 |
| 174 | +3. 添加用户交互和进度反馈 |
| 175 | +4. 实现错误处理和日志记录 |
| 176 | + |
| 177 | +### 阶段四:测试和优化 |
| 178 | +1. 在实际console项目中测试skill |
| 179 | +2. 验证所有功能模块正常工作 |
| 180 | +3. 测试各种错误场景的处理 |
| 181 | +4. 优化用户交互体验 |
| 182 | +5. 完善README.md文档 |
| 183 | + |
| 184 | +## 九、关键文件清单 |
| 185 | + |
| 186 | +需要创建/修改的文件: |
| 187 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/SKILL.md` |
| 188 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/package.json` |
| 189 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/index.js` |
| 190 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/README.md` |
| 191 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/utils/git.js` |
| 192 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/utils/analyzer.js` |
| 193 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/utils/checker.js` |
| 194 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/utils/pusher.js` |
| 195 | +- `/Users/yangjiale/.codefuse/fuse/skills/dragonfly-dual-push/.gitignore` |
| 196 | + |
| 197 | +## 十、依赖说明 |
| 198 | + |
| 199 | +**必需依赖**: |
| 200 | +- `simple-git`: Git操作封装 |
| 201 | +- `chalk`: 终端输出美化 |
| 202 | +- `ora`: 加载动画效果 |
| 203 | +- `inquirer`: 交互式命令行界面 |
| 204 | +- `commander`: 命令行参数解析 |
| 205 | + |
| 206 | +**devDependencies**: |
| 207 | +- 无特殊要求,使用Node.js >=14即可 |
| 208 | + |
| 209 | +## 十一、预期效果 |
| 210 | + |
| 211 | +使用该skill后,用户可以通过以下方式轻松推送代码: |
| 212 | + |
| 213 | +1. **关键词触发**: 发送"推送代码"或"push"即可触发 |
| 214 | +2. **自动化流程**: 自动分析、检查、生成提交信息、推送 |
| 215 | +3. **用户确认**: 关键步骤提供用户确认和修改机会 |
| 216 | +4. **双仓库支持**: 一次操作推送到GitHub和内部仓库 |
| 217 | +5. **错误恢复**: 智能处理错误,提供恢复选项 |
| 218 | + |
| 219 | +整个过程将大幅简化推送操作,同时保持代码质量和规范性。 |
0 commit comments