为 Seldon Core 贡献¶
在打开 PR 前 考虑:
变更是否足够重要并准备完毕以让社区花费时间经理来进行 review?
你有没有搜索已经存在或相关的讨论或者PR?
提议的变更是否得到了明确的解释和目的?
当您贡献代码时,您确认该贡献是您的原创作品,并且您 根据项目的开源许可证将作品授权给该项目。不管你是否 通过 PR 请求、电子邮件或 其他表示您同意根据项目的开源许可证对材料进行许可,并且 保证你有这样做的合法权限。
发布书名¶
我们管理发行说明的过程是以 Kubernetes 项目如何处理它们为模型的。 该过程可分为两个独立阶段:
在 PR 创建时 为每个 PR 增加说明。
发布时 在发布之前编译所有PR注释。
为每个 PR 增加说明¶
当 PR 创建,一个 Prow / Lighthouse
插件 会检查 PR 体中是否存在一个相应的 release-note 区块如:
```release-note
Some public-facing release note.
```
如果没有,PR 会被打标为 do-not-merge/release-note-label-needed。
请注意,为了加快速度,默认的 PR 模板
会为你创建一个空的 release-notes 块。
对于不需要面向公众的发布说明的 PR (e.g. 继承测试的修复程序),你可以使用 /release-note-none Prow 命令。
约定¶
我们可以使用许多约定,以便更改更具语义。 这些主要基于关键字,这些关键字将影响发布说明的显示方式。
使用
Added、Changed、Fixed、Removed或者Deprecated单词来描述 PR 内容。 例如:```release-note Added metadata support to Python wrapper ```
使用表达式
Action required描述中断更改。 For example:```release-note Action required: The helm value `createResources` has been renamed `managerCreateResources`. ```
发布前编译所有PR注释¶
发布时,有一个 release-notes命令
会在 2 个特定标签之间的所有 PR 上爬取行提取发行说明块(例如 v1.1.0 到 v1.2.0)。
然后可以使用这些块来生成最终发行说明。
编码约定¶
我们使用 pre-commit 处理一些 Git hooks,它能确保 所有基线代码的修改能遵循 Seldon 代码约定。 推荐在任何修改代码前进行设置。 如果代码不符合存储库中每种语言的样式指南,那么接下来的额外检查将停止构建。
参考 官方说明 进行安装。 一旦安装完成,请运行:
$ pre-commit install
这将会读取 .pre-commit-config.yaml 的 hook 定义并照着安装到本地仓库。
Java¶
Java 代码格式遵循 Google’s Java 风格指南。
为了确保代码库保持一致,我们使用
checkstyle 作为 mvn validate 生命周期的一部分。
要在本地编辑器整合,你可以参考 本地配置 checkstyle 的官方说明并 设置 google-java-format。
Python¶
Python 代码格式遵循 black,一个很重的格式化程序。
要在本地编辑器整合,你可以参考 设置 black 的官方说明。
Tests¶
无论您正在处理哪个包,我们都将主要任务抽象为 Makefile。
因为,为了执行测试,你需要这么做:
$ make test
Python¶
我们使用 pytest 作为主要的执行器。
然而,为了确保测试能在最终用户通过 pip 及 pypi.org 下载的相同版本的包上运行,我们在其上使用 tox。
安装两者(亦或者其他以来的插件),使用:
$ make install_dev
我们可以使用 tox 在不同的隔离环境中运行整个测试套件。
您可以在文件中看到我们当前使用的不同
setup.cfg
文件。
你可以在所有环境中使用 make test mentioned above 运行测试。
或者,如果您想传递任何额外的参数,你也可以直接运行 tox:
$ tox
一个 tox 警告是,随着环境数量的增长,完成测试所需的时间也在增加。
作为解决方案,在本地环境推荐你直接运行 pytest:
你可以直接执行:
$ pytest
端到端测试¶
作为 Seldon Core 的测试套件,我们也支持端到端测试。
这些使用 Kind 生成了一个实际的Kubernetes集群并
部署不同的 SeldonDeployment 及资源。
你可以通过 专门的文档 学习如何运行并添加测试用例。