ARTICLE DETAIL

资讯详情

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

F2 开源贡献指南:从 Issue 提交、Commit 规范到基于 semver 的版本发布管理

F2 开源贡献指南:从 Issue 提交、Commit 规范到基于 semver 的版本发布管理 数据可视化前端【免费下载链接】F2An elegant, interactive and flexible charting library for mobile.项目地址https://gitcode.com/gh_mirrors/f2/F2点击查看免费下载F2 是 AntV 团队开源的移动端可视化图表库仓库根目录 README.md 定位为 An elegant, interactive and flexible charting library for mobile。本文以仓库内 CONTRIBUTING.zh-CN.md 为核心骨架结合根目录package.json、lerna.json、.github/workflows/下真实 CI 工作流系统讲解向 F2 提交 issue、走通 Pull Request 流程、遵守 Angular Commit 规范以及 F2 团队如何基于 semver 进行版本发布管理。读完本文你将能独立完成一次符合 F2 社区规范的代码贡献并理解其 CI 校验与自动化发布链路。一、开篇F2 的贡献总览F2 仓库采用 monorepo 结构见 pnpm-workspace.yaml 与 lerna.json核心包为 packages/f2antv/f2当前版本 5.14.0见 packages/f2/package.json并包含f2-algorithm、f2-react、f2-vue、f2-wx、f2-node、f2-wordcloud等周边包。社区的贡献通道有两条提交 issue报告缺陷、提出新需求或疑问提交 Pull RequestPR直接修改代码、修复问题或新增功能经 AntV 团队 review 后合入主干。从仓库实际配置看F2 的贡献链路是规范驱动 CI 强制校验 自动化发布package.json的pre-commit钩子会在提交前自动运行lint与testCI 工作流 .github/workflows/ci.yml 在每次 push 和 PR 时执行 lint、build、test 三件套发布则由 .github/workflows/auto-release.yml 在master分支上自动触发。二、提交 Issue让问题被高效处理官方文档 CONTRIBUTING.zh-CN.md 对提交 issue 提出了三条核心要求明确 issue 类型是 bug 报告、功能请求还是使用疑问先说清楚避免重复提交前先搜索现有 issue确认不是重复问题表达明确意图在标签参考文档中的标签分类、标题或内容中体现清晰意图。提交后AntV 负责人会确认 issue 意图、更新更准确的标签、关联到对应 milestone并指派开发者跟进。仓库侧还提供了配套的自动化处理工作流 .github/workflows/issue-automated.yml 在 issue 被opened、reopened、edited时触发通过调用仓库内脚本.github/workflows/scripts/issue-automated.js对 issue 做初步分类与响应。这意味着一条规范、意图明确的 issue 会被更快地送入处理流水线。三、提交代码完整的 Pull Request 流程文档给出了标准 PR 提交流程CONTRIBUTING.zh-CN.md共四步3.1 创建有语义的分支# 先创建开发分支开发分支名应该有含义避免使用 update、tmp 之类的 $ git checkout -b branch-name英文版文档 CONTRIBUTING.md 补充了建议实现新功能时推荐使用feature/xxx风格的分支名。3.2 安装依赖并初始化 monorepo$ npm i $ npm run bootstrapnpm run bootstrap对应根目录 package.json 中的lerna bootstrap——这是 F2 monorepo 的关键初始化步骤lerna 会根据 lerna.json 中的packages: [packages/*]配置为所有子包安装并链接本地依赖确保各包之间直接引用源码而非已发布版本。另外仓库同时提供pnpm-workspace.yaml声明工作区两种包管理方式并行存在。3.3 运行测试并补充用例$ npm testnpm test即jest见 package.json。F2 的测试体系有两个显著特点见 jest.config.js跑在浏览器环境中runner 与 testEnvironment 均为jest-electron测试在 Electron 渲染进程里执行贴近真实渲染场景强依赖图像快照各组件测试目录下都有__image_snapshots__/例如 packages/f2/test/components/area/image_snapshots、packages/f2/test/components/line/image_snapshots用于对比渲染结果。因此修改渲染相关代码时必要时需要新增或修改测试用例并且npm run snapshotjest --updateSnapshot见 package.json可用于更新快照基线。另外pre-commit钩子package.json会在git commit前自动执行lint和test未通过则阻止提交——这是第一道自动关卡。3.4 提交并推送$ git add . # git add -u 删除文件 $ git commit -m fix(role): role.use must xxx $ git push origin branch-name提交后即可在仓库 Pull Request 页面创建 PR。3.5 PR 必须附带的四项信息为了保证后期回溯历史文档要求每个 PR 提供以下信息CONTRIBUTING.zh-CN.md需求点本次改动要实现什么功能一般关联 issue 或注释即可升级原因不同于 issue简要说明为什么要处理这个问题框架测试点关联到相关测试文件描述关键点即可关注点针对用户而言的注意事项可缺省一般指不兼容更新等需要额外提示用户。3.6 PR 的 CI 与 Danger 校验PR 创建后会触发完整校验链CI 工作流.github/workflows/ci.yml在macos-14、Node 20 环境上依次执行npm run lint、npm run build、npm run test测试失败时会上传渲染差异快照产物__diff_output__/*.png便于排查包体积监控根目录 dangerfile.js 基于 danger-js 与 GitHub Actions artifacts 对比 PR 前后各包dist/*.js的体积变化其中f2/dist/index.js与f2/dist/index.min.js为关键产物CRITICAL_ARTIFACT_PATHS任何体积变化都会被报告体积变化超过 2%CRITICAL_THRESHOLD 0.02标记为 Critical超过 0.2%SIGNIFICANCE_THRESHOLD 0.002标记为 Significant。这与根目录 package.json 中limit-size对packages/f2/dist/index.min.js不超过 180 Kbgzip的限制共同构成 F2 的体积红线。四、代码风格必须通过 ESLintF2 要求所有贡献代码通过 ESLint 检查本地验证命令为$ npm run lint对应脚本为eslint ./package.json。仓库还提供lint-fixeslint --fix ./用于自动修复以及prettier脚本prettier --write ./packages/**/*.{ts,tsx}package.json统一格式化。ESLint 相关依赖eslint、typescript-eslint/*均声明在 package.json 的 devDependencies 中。五、Commit 提交规范Angular Commit Message Format文档明确要求采用 angular 规范CONTRIBUTING.zh-CN.md这样 history 更加清晰且可以自动生成 changelog——F2 的 packages/f2/CHANGELOG.md 就是由 Conventional Commits 自动生成的实证。5.1 提交消息结构type(scope): subject BLANK LINE body BLANK LINE footer5.2 type 的九种取值type含义feat新功能fix修复问题docs修改文档style修改代码格式不影响代码逻辑refactor重构代码理论上不影响现有功能perf提升性能test增加修改测试用例chore修改工具相关包括但不限于文档、代码生成等deps升级依赖5.3 其余组成部分scope修改文件的范围例如fix(role)中的rolesubject用一句话清楚描述本次提交做了什么body补充 subject适当增加原因、目的等可不写footer当有非兼容修改Breaking Change时必须在此处描述清楚同时可关联 issue如Closes #1, Closes #2, #3。5.4 完整示例fix($compile): [BREAKING_CHANGE] couple of unit tests for IE9 Older IEs serialize html uppercased, but IE9 does not... Would be better to expect case insensitive, unfortunately jasmine does not allow to user regexps for throw expectations. Document change on antvis/f2#12 Closes #392 BREAKING CHANGE: Breaks foo.bar api, foo.baz should be used instead5.5 规范的实际收益可读的 historyfeat、fix等 type 前缀让git log一目了然自动 changelog根目录 package.json 提供npm run changeloggenerate-changelog脚本lerna 发布配置中conventionalCommits: truelerna.json会依据 commit 类型自动推导版本号这正是 packages/f2/CHANGELOG.md 中按 Bug Fixes / Features 分类生成的机制来源。六、发布管理基于 semver 的语义化版本6.1 版本策略总览F2 基于 semver 语义化版本号进行发布CONTRIBUTING.zh-CN.mdmaster分支为当前稳定发布的版本开发分支直接从master切出所有 API 的废弃都需要在当前稳定版本上给出deprecate提示并保证在当前稳定版本上一直兼容到新版本发布。仓库实际版本演进与此完全吻合antv/f2当前版本 5.14.0packages/f2/package.jsonlerna 全局版本同为 5.14.0lerna.json。6.2 发布策略每个大版本一位发布经理PM每个大版本都有一位发布经理PM分三个阶段履职准备工作建立 milestone确认需求关联 milestone指派和更新 issues。发布前确认当前 Milestone 的所有 issue 都已关闭或可延期并完成性能测试发起一个新的 Release Proposal MR参照 node CHANGELOG 编写History修正文档中与版本相关的内容——commits 可以自动生成命令为$ npm run commits指定下一个大版本的 PM。发布时将老的稳定版本master备份到以当前大版本命名的分支如1.x并设置 tag 为{v}.xv 为当前版本例如1.x发布新的稳定版本到 npm并通知上层框架进行更新npm publish之前先阅读『我是如何发布一个 npm 包的』一文。6.3 仓库实际的自动化发布链路虽然文档描述的是人工 PM 流程但当前仓库已在 .github/workflows/auto-release.yml 中将其自动化触发条件与流程为触发仅当推送到master分支且 commit message 以chore(release):开头时触发质量闸门依次执行yarn安装依赖、npm run lint、npm run build、npm run test版本提升npm run version即lerna version --yespackage.json利用 lerna 的conventionalCommits依据提交类型自动提升版本发布npm run release即lerna publish from-git --yes --summary-filepackage.json从 git tag 出发发布到 npm发布配置中createRelease: githublerna.json会自动在 GitHub 创建 Release通知通过钉钉机器人发送发布开始、成功、失败三种状态通知成功时以packages/f2/package.json中的版本号作为标题 F2 新版本 X 发布啦 。这套流水线也印证了文档中发布到 npm 并通知上层框架更新的意图——F2 周边的f2-react、f2-vue、f2-wx等包正是通过 lerna 统一发布的。七、总结一条完整的贡献路径将文档规范与仓库工程配置对照一次合格的 F2 贡献完整路径是先在 issue 列表 中搜索避免重复描述问题时明确类型与意图从master切出语义化分支新功能建议feature/xxxnpm i npm run bootstrap初始化 monorepo编写/修改代码与测试本地跑npm run lint与npm test全部通过pre-commit 钩子也会强制校验按 Angular 规范提交 commit含 Breaking Change 时必须在 footer 说明推送分支并创建 PR在 PR 中补齐需求点、升级原因、框架测试点、关注点四项信息等待 CIlint/build/test、Danger 体积监控与 AntV 团队 review合入master后若为发布提交chore(release):自动化工作流将完成版本提升、npm 发布与钉钉通知。对贡献者而言本文的全部命令与规范均可直接照抄使用对想深入理解 F2 工程化体系的人建议进一步阅读 dangerfile.js、jest.config.js、.github/workflows/auto-release.yml 以及 packages/f2/CHANGELOG.md体会一套成熟开源项目的质量与发布治理实践。赞分享数据可视化前端【免费下载链接】F2An elegant, interactive and flexible charting library for mobile.项目地址https://gitcode.com/gh_mirrors/f2/F2点击查看免费下载相关推荐Nebular 贡献指南从 Issue 提交、Pull Request 流程到 Commit Message 规范Nebular 贡献指南从 Issue 提交、Pull Request 流程到 Commit Message 规范 本文是一份面向 Nebular 开源仓库贡前端UI组件WePY 开源贡献指南从 Issue 提交、Fork PR 工作流到 Commit 规范与本地调试WePY 开源贡献指南从 Issue 提交、Fork PR 工作流到 Commit 规范与本地调试 导读 本文是 WePY小程序组件化开发框架仓库的完整贡前端小程序开发工具FinRL 贡献指南基于 Issue、PR 与 pre-commit 的协作开发规范FinRL 贡献指南基于 Issue、PR 与 pre commit 的协作开发规范 导读 本文依据 FinRL 仓库官方《Contributing Guid金融科技强化学习人工智能上一篇pywebview项目安装指南跨平台Web视图库的完整部署方案下一篇FastAPI-Users项目实战如何获取当前用户信息创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表