首次为 Quarkus 做出贡献
Hacktoberfest 已经开始,Quarkus 和许多其他开源项目一样,是 fulfilling this 4 PR challenge 的一个完美场所。
今天,周一,欧洲中部夏令时间下午6:30,我将在 Quarkus Insights 上进行一次直播,主题为“如何首次为 Quarkus 贡献内容”。
我将把下面博客中的建议付诸实践,并进行现场贡献。如果您对此感兴趣,欢迎加入我们,我们将尽力回答大家的问题,详情请参阅这篇 推文。
Quarkus 拥有非常友好的社区,我们欢迎所有人的贡献,并尽最大努力帮助那些不熟悉贡献的人。所以,不要害羞,如果您想贡献,请联系我们!
我是如何开始的
在本文中,我将尝试为您提供一些技巧,以帮助您为 Quarkus 做出第一次贡献。
不久前我也是一个新贡献者,您可能会想我当时是怎么开始的?
从小小的贡献开始:修复 bug 和改进文档!
之后,我有机会在 Devoxx France 会议上遇到 Quarkus 核心成员 Emmanuel Bernard 和 Clement Escoffier,我们深入讨论了 MongoDB,之后还有一些邮件交流。在此之后,我协助测试了 Mongo Client 扩展(由 Clément Escoffier 主导开发)。
这一切促成了 MongoDB with Panache 扩展的创建,这是一个庞大的设计、编码和重构、文档编写……过程!创建这个扩展花了我几周的时间(尽管核心开发只用了几天),所以如果您计划创建一个扩展,请做好准备(审查本身就花了数周时间,有超过 250 条 GitHub 评论)。
这既充满挑战,又令人兴奋,也富有启发……但如果您计划做同样的事情,请为漫长的旅程做好准备。
好的,现在让我们看看如何为 Quarkus 做出您的第一次贡献。
准备工作
在能够贡献之前,您必须 fork Quarkus 代码库 并在本地计算机上构建它,即使您计划在 Quarkus 的其他领域做出贡献(稍后将有更多信息),您也必须能够构建 Quarkus 的主代码库。
克隆仓库:git clone https://github.com/<your-fork-repo>/quarkus.git
然后通过 mvn clean install -Dquickly
构建 Quarkus。Maven 命令将启动 Quarkus 的最小化构建并在本地安装依赖项。
如果失败了,请遵循 CONTRIBUTING - Setup 页面来设置您的环境,总之,您总有一天需要阅读此页面!
如果您是 Quarkus 新手:请阅读 入门页面 中的指南,如果您不打算贡献这些领域,可以跳过原生和响应式部分,作为新贡献者,我建议您避免它们!
您可以阅读 CONTRIBUTING 页面获取通用指南,如果您不理解所有内容,请不要惊慌;)或者,如果您需要,也可以参考它,因为对于新来者来说,它可能有点难读。
然后,最困难的部分将开始,您需要找到您计划作为贡献者要做的事情,您可以在以下领域做出贡献:
-
文档
-
代码:核心、扩展、开发工具
-
集成测试
-
quickstart(快速入门)
-
网站
或者只是告诉我们您与 Quarkus 的故事,我们很乐意听到用户故事,并为此有一个 专门的页面 和博客分类 #user-story。
贡献技巧
现在是时候根据您可以进行的各种贡献类型,为您提供一些技巧来帮助您完成第一次贡献了。
文档
Quarkus 文档基于 guides,这些 guides 位于 Quarkus 代码库的 docs/src/main/asciidoc
目录下。
每个 guide 都有一个单独的 Asciidoc 文件。guide 的名称是 doc URL 的最后一部分,因此很容易找到。
在任何文档贡献之后,请始终通过 mvn clean package
构建 guide 并进行测试!
guides 以 HTML 格式生成,因此您可以在浏览器中打开它们,请务必测试链接,因为这是导致文档问题的最常见原因。
集成测试
Quarkus 的集成测试位于 Quarkus 主代码库的 integration-tests
目录中。
每个扩展至少应该有一个测试,此外还有一个 main
测试,它一起测试多个常见的 REST 服务扩展:JAX-RS、Health、JPA……
在更新测试时,最好在 JVM 模式下使用 mvn clean test
和在原生模式下使用 mvn clean integration-test -Pnative-image
进行测试(原生模式的 profile 名称可能不同,如果需要,请检查 pom.xml)。如果您尚未在计算机上设置原生镜像编译,可以由 CI 在原生模式下为您运行。
如果您计划添加新的集成测试,请寻求建议,因为需要额外的步骤来配置 CI。
代码
代码被拆分成多个部分,我并非所有部分都贡献过,所以我只会介绍我最了解的部分,但它们也是最容易贡献的部分,所以应该足以让您开始。
您会发现以下领域:
-
核心:这是 Quarkus 的核心运行时和部署模块。如果您想在此贡献,请寻求帮助。
-
开发工具:Maven 和 Gradle 插件所在之处。
-
bom:所有库的管理之处。更新库后,请务必运行所有相关的 Quarkus 测试。
-
扩展:所有扩展所在之处。扩展是将第三方库或框架集成到 Quarkus 中。
大多数贡献都发生在扩展内部,至少对于新贡献者来说是这样,因为其他领域更难上手。最好阅读 构建我的第一个扩展 指南,以了解扩展的工作原理。
扩展分为两部分(以及可选的第三部分):
-
部署:在构建时执行的代码。它应该包含一个构建处理器,该处理器执行构建步骤并生成构建项。如果您需要贡献扩展的部署部分,请务必阅读 扩展作者指南 并理解扩展理念部分。我个人喜欢 Sanne Grinovero 的这个旧演示文稿 Quarkus and GraalVM: booting Hibernate at supersonic speed, subatomic size,它解释了 Hibernate 如何集成到 Quarkus 中,但应该还有其他内容可以解释扩展设计。
-
spi:可选 - 允许与其他扩展部署模块共享某些构建项。
-
运行时:在运行时执行的代码。它包括扩展配置、一个记录器(记录运行时部署构建步骤,以便在应用程序启动时重新执行)、用户 API(如果有)以及允许启动库/框架的所有代码。
每个扩展都应该有自己的集成测试,如果没有,请检查该扩展是否在 main
测试中进行了测试。提交更改之前,请确保运行了测试。
每个扩展都有自己的指南,如果您添加了新功能,请在此处进行文档记录!
在提交之前,您必须确保您的代码通过了格式样式检查并遵循了 enforcer 规则。做到这一点最好的方法是通过 mvn clean install
在本地安装扩展。
创建 PR
在本地审查您的更改、测试它们并安装更新后的组件后,将它们推送到您的 fork。
在打开 PR 之前,请始终等待您自己的 fork 上的 GitHub Actions 运行完成,完整的 CI 运行需要数小时,因此最好确保它通过后再在 Quarkus 代码库上运行。
有一段 简短视频 解释了我们的 CI 以及如何在您的 fork 中激活它。
然后,创建一个 PR,审查过程就会开始;)
有一个机器人会为 PR 打标签并 ping 相关领域的维护者,如果它没有标记您的 PR,您可以等待几个小时让某人注意到,或者直接 ping 某人,或者在 Zulip 或邮件列表上联系。
总结
这是一篇很长的帖子,我希望它能帮助您为 Quarkus 做出贡献!
正如我在帖子中反复强调的:从小处着手,全面测试,寻求帮助。这是我的最佳建议。
今天,周一,欧洲中部夏令时间下午6:30,我将在 Quarkus Insights 上进行一次直播,主题为“如何首次为 Quarkus 贡献内容”,我将把这些建议付诸实践,并进行现场贡献。如果您对此感兴趣,欢迎加入我们,我们将尽力回答大家的问题,详情请参阅这篇 推文。