ARTICLE DETAIL

资讯详情

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

Fabric.js 开源 PR 全流程指南:conventional-commit 标题、CHANGELOG 维护与 gh CLI 实操

Fabric.js 开源 PR 全流程指南:conventional-commit 标题、CHANGELOG 维护与 gh CLI 实操 前端图形学【免费下载链接】fabric.jsJavascript Canvas Library, SVG-to-Canvas ( canvas-to-SVG) Parser项目地址https://gitcode.com/gh_mirrors/fa/fabric.js点击查看免费下载本文基于 fabric.js 仓库的.agents/skills/fabricjs-open-pr/SKILL.md技能文档系统梳理向 fabricjs/fabric.js 提交 Pull Request 的完整规范从输入收集、conventional-commit 风格标题、PR 描述编写到强制性的 CHANGELOG 更新、PR 编号预测以及提交前的质量检查与冲突处理。读完本文你将掌握一套可直接复用的开源 PR 操作流程能够独立完成写标题 → 写描述 → 预测编号 → 更新 changelog → 推送 → 创建 PR → 校正编号的完整闭环。一、技能定位与适用场景fabricjs-open-pr技能面向所有需要向fabricjs/fabric.js提交代码的贡献者与自动化 Agent核心解决三类问题首次提 PR从分支、基分支、issue 引用收集输入按规范生成标题与描述同步维护 CHANGELOG已有 PR 维护处理分支落后master、merge 冲突尤其是CHANGELOG.md专属冲突、重新推送合并提交等场景质量门禁确保 lint、格式检查、pre-commit hooks 全部通过后才创建 PR。技能规定了一条重要边界一个 bug 一个 PR、一个 feature 一个 PR。如果变更涉及重构也不要混入当前 PR而是先让改动落地、观察稳定后再单独发起重构类 PR。这一约定与仓库 CONTRIBUTING.md 中的Dont create a PR from your fork main branch、Create a new branch for every pull request 要求相互印证。二、输入收集从对话上下文推断而非反复提问打开 PR 前需要收集或推断以下输入输入项说明分支Branch to open承载变更提交的分支名基分支Base branch默认master也可显式指定其他分支issue 编号Issue number to close可选用于在 PR 描述中自动关闭对应 issue变更摘要Short summary用于生成标题与描述的一段简短说明Issue 编号的处理规则避免无意义地打断用户如果当前对话线程中已经包含issue 编号直接复用不要再次询问如果用户明确说明没有issue不要索要也不要写任何关闭引用文本其余情况才在创建 PR 描述前向用户确认 issue 编号。这条规则的精髓是能推断就不问与自动化 Agent 场景高度契合——减少往返、保持流程顺畅。三、标题规则严格遵循 conventional commits 风格PR 标题必须是 short、meaningful 的 conventional-commit 风格type(optional-scope): summary允许的常见类型feat、fix、docs、ci、test、refactor、choresummary要简短且具体type 与 scope 一律小写。技能文档给出了三个可直接参考的示例ci(): fix coverage artifact download in comment workflow fix(coverage): flatten playwright istanbul output docs(changelog): align next entry format打开仓库根目录的 CHANGELOG.md 可以看到大量真实案例与之一一对应例如fix(text): correct RTL cursor positioning in ...、refactor(core): move implementation source into package、ci(): fix for publishing action等。这些标题同时会出现在 GitHub 的 PR 列表与 changelog 中因此标题的规范性直接决定了项目历史记录的整洁度。四、PR 描述Body的强制结构PR body 必须包含三部分缺一不可一段简短的描述段落说明改了什么、为什么改一个紧凑的关键变更列表用 bullet list 列出核心变更点关闭引用仅当提供了 issue 编号时使用精确格式close #issue-num没有 issue 则完全不要写。仓库的 .github/PULL_REQUEST_TEMPLATE.md 为这一结构提供了背书模板内置## Description要求概括变更原因、指出原代码错在哪里、你的方案为何更好修复回归需链接引入 bug 的 commitfeature 需链接讨论的 issue与## In Action性能变更需附性能证明两个章节与技能要求的描述段落 变更列表 close 引用相辅相成。五、CHANGELOG 更新强制步骤5.1 更新位置与格式打开 PR 之前必须确保CHANGELOG.md的## [next]部分新增了一行格式为- pr title [#predictedPrNum](https://github.com/fabricjs/fabric.js/pull/predictedPrNum)规则约束使用与 PR 标题完全一致的文本插入到[next]列表的靠前位置保持原有格式不动只加这一行。5.2 仓库中的真实格式证据打开 CHANGELOG.md 顶部即可看到## [next]的实际形态当前为 fabric 7.4.0 之后的未发布版本区段例如## [next] - chore(deps-dev): bump playwright/test from 1.60.0 to 1.62.0 [#11063](https://github.com/fabricjs/fabric.js/pull/11063) - feat(): Add backend network request callback [#11064](https://github.com/fabricjs/fabric.js/pull/11064)从源码结构看[next]是仓库面向下一个版本的滚动 changelog 区段PR 合并前后所有新增条目都汇聚于此。技能要求预测编号写入的原因也在此PR 编号在创建前是不可知的但 changelog 行必须在创建 PR 前提交因此只能先用预测编号占位。5.3 自动化兜底changelog 检查工作流仓库还配置了 .github/workflows/changelog_check_and_create.yml在pull_request事件opened / synchronize / reopened / edited触发时执行通过 GitHub API 获取 PR 变更文件列表若CHANGELOG.md未被修改或 PR 标题有变动则生成- title [#prNum](https://github.com/fabricjs/fabric.js/pull/prNum)格式的 changelog 行作为 artifact并让 CI 失败exit 1若已正确修改则校验通过exit 0。这说明 changelog 更新是仓库 CI 层面的硬性门禁而非可选项技能文档把它列为 Mandatory强制与工作流互相印证。CONTRIBUTING.md 同样要求Add a concise listing to the CHANGELOG describing what has changed。六、预测下一个 PR 编号在创建 PR 之前需要从仓库根目录确定下一个 issue/PR 编号。首选命令通常已足够latest_num$(gh api repos/fabricjs/fabric.js/issues?stateall\per_page1 --jq .[0].number) predicted_pr_num$((latest_num 1))更完整的分页版本必要时使用latest_num$(gh api repos/fabricjs/fabric.js/issues --paginate -F per_page1 -F stateall --jq .[0].number | head -n1) predicted_pr_num$((latest_num 1))两种方式均基于 GitHub REST API获取全仓库最新 issue/PR 的编号issue 与 PR 在 GitHub 中共用编号序列加 1 即为预测的下一个 PR 编号。随后用predicted_pr_num填充 changelog 行中的#predictedPrNum链接。七、打开 PR 的完整工作流14 步技能文档给出的标准操作序列如下确认分支已包含预期提交intended commits按 conventional-commit 风格构建 PR 标题解析 issue 引用按上文 issue-number handling 规则从线程上下文判断有 issue 则在 body 写close #issue-num否则不写关闭文本任何提交或创建 PR 之前先跑质量检查npm run lint npm run prettier:check与最新master同步git fetch origin master git merge origin/master若产生 merge 冲突先解决冲突再继续预测下一个 PR 编号见上一节用预测编号与标题更新CHANGELOG.md的[next]行提交并推送changelog/标题相关改动严禁使用--no-verifypre-commit hooks 必须运行并通过若 hooks 修改了文件或失败staged 修复后重新提交直到 hooks 全部通过创建 PRgh pr create --base base --head branch --title title --body-file file获取实际 PR 编号若实际编号与预测不符更新 changelog 行为实际编号/链接 → 提交并推送修正 → 如有需要可在 PR body 补充简短说明。7.1 质量检查与 hooks 的仓库实证package.json 中lint脚本为eslint extensions packages --fix配合 eslint.config.mjs 使用prettier:check为oxfmt --check .另有prettier:writeoxfmt .用于自动格式化prepare脚本执行husky install.husky/pre-commit 中仅有一行npx lint-staged即通过 package.json 中的lint-staged依赖对暂存文件执行 lint/格式修复——这正是hooks 可能修改文件、需要重新提交的原因。7.2 为什么禁止--no-verify跳过 hooks 会让未通过 lint/格式检查的代码进入历史破坏仓库统一的代码风格门禁。技能文档明确要求hooks 修改了文件就 staged 修复并重新提交直至通过——这是对 CONTRIBUTING.md 中Fabric 使用 oxfmt 格式化、eslint 检查pnpm run lint -- --fix规范的直接落地。八、已有 PR 的维护与解除阻塞当用户要求finish或unblock一个已存在的 Fabric.js PR 时执行拉取最新origin/master若 PR 落后于基分支或被 merge 冲突阻塞本地将origin/master合并进 PR 分支若冲突仅涉及CHANGELOG.md直接在合并过程中本地解决不要询问用户是否处理推送 merge commit到 PR 分支只有冲突涉及CHANGELOG.md之外的文件、或解决方案存在歧义时才停下来询问用户。这条规则的合理性在于changelog 冲突通常是双方都往[next]列表头部插入造成的机械性冲突合并策略清晰保留双方条目、重新按序排列无需人工仲裁而涉及业务代码的冲突则可能牵涉设计取舍需要征求 PR 作者意见。九、完成前的验证清单Verification Checklist无论新建还是维护 PR收尾前必须逐项核对PR 标题遵循 conventional-commit 风格且与 changelog 文本完全一致PR body 包含描述段落若提供了 issue 编号body 包含close #issue-numnpm run lint通过npm run prettier:check通过本次 PR 相关提交未使用--no-verifypre-commit hooks 全部通过PR 创建前分支已与最新master同步维护已有 PR 时若CHANGELOG.md专属冲突足以解除阻塞已合并origin/master到 PR 分支CHANGELOG.md的[next]区段为本次 PR恰好新增一行不多不少链接使用https://github.com/fabricjs/fabric.js/pull/prNum格式与仓库现有 changelog 条目格式一致若预测编号与实际不符changelog 已修正并推送。十、实操要点小结标题先行类型小写、摘要具体fix(coverage): flatten playwright istanbul output优于update testschangelog 行 标题 预测编号链接插入[next]顶部附近格式严格仿照 CHANGELOG.md 现有条目编号预测用gh apistateallper_page1取最新编号加 1创建后立即用真实编号回写校正任何提交前先跑npm run lint与npm run prettier:check对应 package.json 脚本提交绝不跳过 hooks冲突处理分级仅CHANGELOG.md冲突 → 自行本地合并涉及其他文件 → 询问用户一条 PR 只做一件事分支从 fork 的独立分支创建不使用主分支。这套流程同时覆盖了仓库侧的 CONTRIBUTING.md 贡献规范、.github/PULL_REQUEST_TEMPLATE.md 描述模板、.github/workflows/changelog_check_and_create.yml CI 门禁与 .husky/pre-commit hooks贡献者按本文操作即可一次性通过仓库全部质量关卡。赞分享前端图形学【免费下载链接】fabric.jsJavascript Canvas Library, SVG-to-Canvas ( canvas-to-SVG) Parser项目地址https://gitcode.com/gh_mirrors/fa/fabric.js点击查看免费下载相关推荐Conventional Changelog CLI工具完全指南Conventional Changelog CLI工具完全指南 Conventional Changelog CLI 是一个功能强大的命令行工具能够根据项目开发工具CLI文档AionUi 贡献指南原子化 PR、Conventional Commit 与本地质量检查全流程AionUi 贡献指南原子化 PR、Conventional Commit 与本地质量检查全流程 本篇指南以 AionUi 仓库根目录的 CONTRIBUTI人工智能AI 应用AI Agent交互助手桌面应用移动开发AionUi 贡献指南原子化 PR、Conventional Commit 与本地质量检查全流程AionUi 贡献指南原子化 PR、Conventional Commit 与本地质量检查全流程 本篇技术指南以 AionUi 开源仓库的 CONTRIBUT人工智能AI 应用大模型AI Agent交互助手前端上一篇WechatSogou微信公众号爬虫实战指南高效获取公众号数据的Python解决方案下一篇深度学习500问超参数调整完全指南——从学习率衰减策略到预训练微调与AutoML实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表