ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

为 BTCPayServer 撰写以用户为中心的高质量 Pull Request 描述:面向开源贡献者的实战指南

为 BTCPayServer 撰写以用户为中心的高质量 Pull Request 描述:面向开源贡献者的实战指南 为 BTCPayServer 撰写以用户为中心的高质量 Pull Request 描述面向开源贡献者的实战指南【免费下载链接】btcpayserverAccept Bitcoin payments. Free, open-source self-hosted, Bitcoin payment processor.项目地址: https://gitcode.com/GitHub_Trending/bt/btcpayserverPull RequestPR描述是开源协作中连接代码改动与产品影响的桥梁。在 BTCPayServer 这类面向商户、管理员与非技术用户的自托管比特币支付处理器中PR 描述的读者远不止代码评审者。本指南基于仓库内置的 btcpayserver-pr-descriptions 技能文档系统讲解如何为 BTCPayServer 编写、评审与改进 PR 描述从受众定位、内容组织、Greenfield API 变更检查、视觉证据采集到用 GitHub CLI 正确提交多行 Markdown 的实操细节帮助贡献者写出评审者与普通用户都能读懂的描述。为什么 PR 描述要写给看不懂 diff 的人看BTCPayServer 的开源协作生态与一般开发者工具不同除了核心开发者和评审者仓库的变更还会被商户、服务器管理员、客服支持人员、译者以及插件作者持续关注。技能文档开篇即点明核心原则为那些需要理解变更的人编写 PR 描述而不是为那些已经能读懂 diff 的人。这一定位意味着PR 描述的第一读者通常是非技术用户他们关心的是这个改动对我的店铺、我的收款流程、我的 API 集成意味着什么而不是哪个 controller 被重构了。因此除非 PR 本身属于纯技术改动且这些细节对评审或解释确有必要否则应避免出现以下实现层面的行话controller、view model、migration、refactor、endpoint、dependency injection、database schema、类重命名等。例如与其写重构了UIStoresController.Rates.cs中的汇率更新逻辑不如写现在商店的汇率刷新失败时会显示更明确的错误提示并自动重试一次。描述什么讲用户可见的行为而非文件级改动技能文档对 PR 描述的内容边界给出了清晰约束这与仓库中 changelog 技能 的取舍原则一脉相承——两者都强调用户是否受影响是筛选标准应该写的内容以用户可见的行为变化为主体工作流程、界面、设置项、权限、API 行为、运维影响当标题无法体现时说明这个改动为什么重要相关时给出改动前后的实际效果before-and-after如果用户或运维者需要知道主动提及限制、兼容性问题和后续工作。不要写的内容不要逐文件、逐 commit 复述 diff 中已经可见的内容不要描述纯内部实现选择除非它影响到某个人如何使用、部署、评审或测试 BTCPay Server。这一原则也呼应了仓库根目录 AGENTS.md 的约定该文件将 PR 描述写作、Changelog 更新、数据库迁移等协作任务分别委托给对应的 skill 文档三者共享同一套面向用户价值、避免内部细节的写作哲学。撰写 PR 描述时如果改动涉及用户可见的行为变化可同步参考 btcpayserver-changelog 技能 中统一的术语约定如Point of Sale、Pull Payments、Keypad Point of Sale、Greenfield API和权限名加反引号的书写习惯保持仓库内文案风格一致。Greenfield API 变更必须同步检查 Swagger 文档BTCPayServer 对外提供一套名为Greenfield API的 REST 接口对应仓库 BTCPayServer.Client 中的客户端与 Controllers/GreenField 下的控制器。技能文档对涉及 Greenfield API 的 PR 给出了强制要求如果 PR 改变了 Greenfield API 的行为、请求/响应字段、模型或校验规则必须验证BTCPayServer/wwwroot/swagger/v1/下的 Swagger 文档是否需要更新当 API 表面发生变化时应在同一 PR 中更新对应的swagger.template.*.json文件。这一要求有明确的仓库实现支撑。Greenfield 的 OpenAPI 3.0 规范采用按控制器拆分、运行期合并的方式维护每个 API 控制器对应一个swagger.template.*.json模板文件存放在 BTCPayServer/wwwroot/swagger/v1/ 目录下如swagger.template.webhooks.json、swagger.template.invoices.json、swagger.template.stores.json等最终由 DefaultSwaggerProvider.cs 在/swagger/v1/swagger.json路由上读取swagger/v1目录下所有.json文件并合并为一份完整规范同时会剔除标记为x_experimental的模板除非服务器开启实验性功能策略。因此PR 中若新增端点、修改模型字段或调整权限声明对应的swagger.template.*.json必须同步更新否则合并后的 Swagger 文档将与实际 API 行为脱节。从模板文件内容可以看到其粒度以 swagger.template.webhooks.json 为例每个端点会声明路径参数如$ref引用公共参数StoreId、HTTP 方法、operationId、响应码与 schema以及security段中引用的权限名如btcpay.store.webhooks.canmodifywebhooks改动任意一处都需要在模板中同步体现。此外仓库的 Greenfield API 开发文档 补充了配套约定在描述 API 改动时可以引以为据模型校验失败返回 HTTP 422 与path/message数组结构业务逻辑错误返回 HTTP 400 与code/message结构为decimal、long等类型序列化为字符串以避免精度或溢出问题修改/删除模型属性属于破坏性变更通常需要提升端点版本。将这些规范写入 PR 描述的技术说明部分能让评审者快速确认改动是否遵守了项目既定的 API 约定。视觉证据截图与短视频的取舍原则对 UI 相关的 PR文字描述往往难以准确传达改动效果技能文档给出了明确的证据偏好静态界面改动优先提供截图流程、动画、checkout 行为、Point of Sale 行为或需要多个步骤才能理解的改动优先提供短视频或 GIFUI 改动原则上都应附视觉证据除非改动太小、不可见或难以截取若某个可见改动省略了视觉证据必须简要说明原因。BTCPayServer 的 UI 面非常广checkout 流程、Point of Sale、Apps、发票详情、商店设置等一个结算页按钮的改动、一次 Keypad Point of Sale 的交互调整都可能直接影响商户的日常收款体验。附上截图或演示录屏既能让非技术评审者直观判断这个改动的用户体验是否合理也能显著降低评审来回沟通的成本。技能文档特别强调 checkout 行为与 Point of Sale 行为这类多步骤才能理解的改动应优先用短视频/GIF因为静态截图无法体现交互过程。建议结构与行文风格技能文档给出了简洁的 PR 描述结构建议开篇用一段平实语言说明功能性改动适用时附上截图或短视频仅当评审者、运维者、集成方或插件作者确有必要时才加入技术说明。配套的风格要求包括简明具体优先使用平实语言而非产品内部术语聚焦于结果与行为避免 this PR updates files 这类空洞填充语避免夸大影响——如实说明改了什么、谁受益即可。这套结构与仓库 changelog 技能 的条目风格短句、祈使动词、统一产品术语互相呼应保证从 PR 描述到版本发布说明的文案口径一致。实操用 GitHub CLI 正确提交多行 Markdown技能文档在最后的 GitHub CLI Formatting 一节给出了一个非常具体且容易踩坑的实操要点使用gh pr create或gh pr edit创建/编辑 PR 描述时必须传入真实的多行 Markdown让 GitHub 正确渲染段落、列表和代码块不要在带引号的字符串中传递字面量\n序列GitHub 会将其按原样显示导致描述挤成一行或出现转义符在 shell 中调用gh时应改用heredoc、临时 body 文件或 Bash 的ANSI-C quoting$...来组织正文。例如使用 heredoc 的方式大致为gh pr create --title ... --body $(cat EOF - 修复 checkout 页面在移动端键盘弹出时金额区域被遮挡的问题 - 之前输入金额时无法看到应付总额 - 之后应付总额固定悬浮在输入框上方 视频checkout-移动端键盘-修复.mov EOF )使用临时文件的方式则更为稳妥适合较长描述先把正文写入一个 Markdown 文件再通过gh pr create --body-file pr-body.md引用。这样既能保证多行结构原样传入也方便在提交前用 Markdown 预览工具检查渲染效果。与其他协作规范的衔接PR 描述写作并非孤立环节。仓库通过 AGENTS.md 将相关协作任务显式委托给技能文档体系数据库迁移遵循 btcpayserver-migrations 技能如dotnet ef migrations add、移除Down()、遵循 PostgreSQL 命名约定版本发布说明遵循 btcpayserver-changelog 技能。当一个 PR 同时涉及 API 变更与用户可见行为时可依序应用这几份技能确保 PR 描述、Swagger 模板与 Changelog 三者之间口径一致、信息互补让从代码评审到版本发布的整条链路都服务于让用户看懂变更这一目标。总之一份合格的 BTCPayServer PR 描述应当做到以产品影响为主线、用平实语言讲清 before-and-after、按需附上视觉证据、API 改动同步更新 Swagger 模板、并用正确的 CLI 姿势交付可渲染的 Markdown——如此才能让每一位读者无论是商户、运维还是评审者都能快速、准确地理解这项变更的价值。【免费下载链接】btcpayserverAccept Bitcoin payments. Free, open-source self-hosted, Bitcoin payment processor.项目地址: https://gitcode.com/GitHub_Trending/bt/btcpayserver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表