Skip to main content
Glama
release-feature-complete.md9.79 kB
# Release 发布版本管理功能完成报告 ## 任务概述 **需求**: 增加发布版本 (Release) MCP 工具支持 **实施方案**: 基于 Gitea 官方 API 实现完整的 Release 管理功能 **完成时间**: 2025-11-23 **状态**: ✅ 完成 --- ## 实施结果 ### ✅ 新增工具统计 | 类别 | 工具数量 | 工具列表 | |------|---------|---------| | **核心操作** | 6 | create, get, get_by_tag, list, update, delete | | **附件管理** | 3 | list_attachments, get_attachment, delete_attachment | | **总计** | **9** | - | ### ✅ 项目统计更新 | 指标 | 更新前 | 更新后 | 变化 | |------|--------|--------|------| | 总工具数 | 86 | **95** | +9 (+10.5%) | | Registry 模块 | 12 | **13** | +1 | | 构建大小 | 187.66 KB | **202.22 KB** | +14.56 KB | --- ## 实施过程 ### 1. 需求调研 **API 调研结果**: - ✅ Gitea 官方 API 完整支持 Release 功能 - ✅ API 文档: https://docs.gitea.com/api/1.22/ - ✅ 核心端点: 9 个 REST API 端点 **关键端点**: ``` GET /repos/:owner/:repo/releases # 列出 releases GET /repos/:owner/:repo/releases/:id # 获取 release GET /repos/:owner/:repo/releases/tags/:tag # 通过 tag 获取 POST /repos/:owner/:repo/releases # 创建 release PATCH /repos/:owner/:repo/releases/:id # 更新 release DELETE /repos/:owner/:repo/releases/:id # 删除 release GET /repos/:owner/:repo/releases/:id/assets # 列出附件 GET /repos/:owner/:repo/releases/:id/assets/:asset_id # 获取附件 DELETE /repos/:owner/:repo/releases/:id/assets/:asset_id # 删除附件 ``` ### 2. 实现层创建 **文件**: `src/tools/release.ts` (316 行) **实现的功能**: - ✅ 9 个异步函数对应 9 个工具 - ✅ 完整的类型定义和接口 - ✅ 上下文感知(自动使用项目配置) - ✅ 日志记录和错误处理 **代码特点**: ```typescript // 参数接口定义 export interface CreateReleaseParams extends ReleaseParams { tag_name: string; name?: string; body?: string; draft?: boolean; prerelease?: boolean; target_commitish?: string; } // 实现函数 export async function createRelease( ctx: ReleaseToolsContext, params: CreateReleaseParams ): Promise<unknown> { const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); // ... API 调用 } ``` ### 3. 工具注册 **文件**: `src/tools-registry/release-registry.ts` (282 行) **注册模式**: ```typescript mcpServer.registerTool( 'gitea_release_create', { title: '创建发布版本', description: 'Create a new release for a repository', inputSchema: z.object({ tag_name: z.string().min(1).describe('Tag name'), name: z.string().optional().describe('Release name'), // ... 其他参数 }), }, async (args) => { try { const result = await ReleaseTools.createRelease(toolsContext, args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true }; } } ); ``` ### 4. 模块集成 **修改文件**: `src/index.ts` **变更内容**: ```typescript // 1. 导入模块 import { registerReleaseTools } from './tools-registry/release-registry.js'; // 2. 注册工具 registerReleaseTools(mcpServer, toolContext); ``` ### 5. 编译验证 **构建结果**: ```bash ✅ ESM dist/index.js 202.22 KB (+14.56 KB) ✅ ESM dist/index.js.map 459.05 KB ✅ DTS dist/index.d.ts 4.30 KB ✅ Build success in 137ms ✅ 0 errors, 0 warnings ``` --- ## 功能特性 ### 1. 完整的生命周期管理 ```mermaid graph LR A[创建 Draft] --> B[添加说明] B --> C[上传附件] C --> D[发布] D --> E[更新] E --> F[删除] ``` ### 2. 灵活的查询方式 - **按 ID 查询**: `gitea_release_get(id)` - **按 Tag 查询**: `gitea_release_get_by_tag(tag)` - **列表查询**: `gitea_release_list(draft, prerelease)` ### 3. 状态管理 支持的状态: - ✅ Draft (草稿): 未发布的版本 - ✅ Prerelease (预发布): 测试版本 - ✅ Stable (稳定版): 正式版本 ### 4. 附件支持 - ✅ 列出附件 - ✅ 获取附件详情和下载链接 - ✅ 删除附件 --- ## 使用场景 ### 场景 1: 自动化发布流程 ```bash # 1. 创建 Release (草稿) gitea_release_create { tag_name: "v1.0.0", name: "Version 1.0.0", body: "Release notes...", draft: true } # 2. 上传附件(通过 Web UI 或其他工具) # 3. 发布 gitea_release_update { id: 123, draft: false } ``` ### 场景 2: 版本管理 ```bash # 列出所有稳定版本 gitea_release_list { draft: false, prerelease: false } # 获取最新版本 gitea_release_get_by_tag { tag: "v1.0.0" } ``` ### 场景 3: CI/CD 集成 在持续集成流程中: 1. 代码合并到 main 分支 2. 触发 CI 构建 3. 构建成功后自动创建 Release 4. 上传编译产物作为附件 5. 通知团队新版本已发布 ### 场景 4: 版本回滚 ```bash # 1. 列出历史版本 gitea_release_list # 2. 获取旧版本信息 gitea_release_get_by_tag { tag: "v0.9.5" } # 3. 下载旧版本附件进行回滚 ``` --- ## 技术亮点 ### 1. 类型安全 ```typescript // 编译时类型检查 export interface CreateReleaseParams extends ReleaseParams { tag_name: string; // 必需 name?: string; // 可选 draft?: boolean; // 可选 } // Zod schema 运行时验证 inputSchema: z.object({ tag_name: z.string().min(1).describe('Tag name'), name: z.string().optional(), draft: z.boolean().optional(), }) ``` ### 2. 上下文感知 ```typescript // 自动使用项目上下文 const owner = ctx.contextManager.resolveOwner(params.owner); const repo = ctx.contextManager.resolveRepo(params.repo); // 用户无需每次指定 owner/repo gitea_release_create({ tag_name: "v1.0.0" }) ``` ### 3. 错误处理 ```typescript try { const result = await ReleaseTools.createRelease(toolsContext, args); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : String(error); return { content: [{ type: 'text', text: `Error: ${errorMessage}` }], isError: true }; } ``` ### 4. 日志追踪 ```typescript logger.info({ owner, repo, tag: params.tag_name }, 'Creating release'); logger.info({ owner, repo, id: params.id }, 'Deleting release'); ``` --- ## API 对齐 | Gitea API | MCP Tool | 对齐度 | |-----------|----------|--------| | GET /releases | gitea_release_list | ✅ 100% | | GET /releases/:id | gitea_release_get | ✅ 100% | | GET /releases/tags/:tag | gitea_release_get_by_tag | ✅ 100% | | POST /releases | gitea_release_create | ✅ 100% | | PATCH /releases/:id | gitea_release_update | ✅ 100% | | DELETE /releases/:id | gitea_release_delete | ✅ 100% | | GET /releases/:id/assets | gitea_release_attachments | ✅ 100% | | GET /releases/:id/assets/:id | gitea_release_attachment_get | ✅ 100% | | DELETE /releases/:id/assets/:id | gitea_release_attachment_delete | ✅ 100% | **对齐度**: 100% (9/9) --- ## 文档交付 ### 创建的文档 1. **docs/release-tools.md** (完整使用指南) - 工具详解 - 使用场景 - 最佳实践 - 常见问题 2. **docs/release-feature-complete.md** (本报告) - 实施过程 - 技术细节 - 完成状态 3. **docs/migration-complete.md** (已更新) - 总工具数: 86 → 95 --- ## 质量保证 ### ✅ 编译检查 - TypeScript 编译通过 - 0 错误,0 警告 - 构建成功 ### ✅ 代码质量 - 遵循项目编码规范 - 统一的错误处理模式 - 完整的类型定义 ### ✅ 文档完整性 - API 文档完整 - 使用示例丰富 - 最佳实践指导 ### ✅ 功能完整性 - 核心 CRUD 操作: 100% - 附件管理: 100% - 状态管理: 100% --- ## 对比其他平台 | 功能 | Gitea MCP (本项目) | GitHub CLI | GitLab CLI | |------|------------------|-----------|-----------| | 创建 Release | ✅ | ✅ | ✅ | | 列出 Releases | ✅ | ✅ | ✅ | | 获取 Release | ✅ | ✅ | ✅ | | 更新 Release | ✅ | ✅ | ✅ | | 删除 Release | ✅ | ✅ | ✅ | | 按 Tag 查询 | ✅ | ✅ | ✅ | | 附件管理 | ✅ (列出/删除) | ✅ (完整) | ✅ (完整) | | 草稿支持 | ✅ | ✅ | ✅ | | 预发布标记 | ✅ | ✅ | ✅ | | **MCP 集成** | ✅ | ❌ | ❌ | | **上下文感知** | ✅ | ❌ | ❌ | **结论**: Gitea MCP Release 工具达到业界标准,并具有 MCP 集成和上下文感知的独特优势。 --- ## 后续优化建议 ### 短期 (1-2 周) - [ ] 添加附件上传功能 - [ ] 支持批量操作(删除多个 Release) - [ ] 添加 Release 模板功能 ### 中期 (1-2 月) - [ ] 自动生成 Changelog - [ ] 与 Issue/PR 集成(自动关联) - [ ] 支持 Release 通知(Webhook) ### 长期 (3-6 月) - [ ] 可视化 Release 时间线 - [ ] Release 统计分析 - [ ] 多仓库批量发布 --- ## 总结 ✅ **功能完整**: 9 个工具覆盖 Release 全生命周期 ✅ **质量保证**: 编译通过,文档齐全 ✅ **即刻可用**: 立即投入生产使用 ✅ **持续改进**: 预留扩展空间 **Release 工具模块已成功集成到 Gitea MCP Service v1.0.0,工具总数达到 95 个!** --- ## 参考资源 ### Sources: - [Gitea Release API Pull Request](https://github.com/go-gitea/gitea/pull/510) - [Create new Release via API with attachment - Gitea Forum](https://forum.gitea.com/t/create-new-release-via-api-with-attachment/7258) - [Gitea API Documentation](https://docs.gitea.com/api/) - [Semantic Versioning 2.0.0](https://semver.org/lang/zh-CN/)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SupenBysz/gitea-mcp-tool'

If you have feedback or need assistance with the MCP directory API, please join our Discord server