dynamic-datasource/CONTRIBUTING.md

89 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. FORK
Git Mirror 位于 https://github.com/baomidou/dynamic-datasource 。
# 2. RUN TEST
此项目在 OpenJDK 17 下完成构建,输出产物指向 OpenJDK 8。
当项目导入 IntelliJ IDEA 或 VSCode 时IDE 对项目的语言级别应当设置为 8。
对于单独的 `com.baomidou:dynamic-datasource-spring-boot3-starter` 子模块IDE 的语言级别应当设置为 17。
提交 PR 前,应在 OpenJDK 17 下执行 `./mvnw -T1C clean test` 以验证更改是否未破坏单元测试。若有需要请补充或更改单元测试。
假设贡献者处于新的 Ubuntu 22.04.3 LTS 实例下,其可通过如下 bash 命令来通过 SDKMAN! 管理 JDK 和工具链,并执行单元测试。
```bash
sudo apt install unzip zip curl sed -y
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java 17.0.8-ms
sdk use java 17.0.8-ms
git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/
./mvnw -T1C clean test
```
## 2.1. Execute NativeTest under GraalVM Native Image
项目的输出产物对在 GraalVM Native Image 下的可用性的验证,是通过 GraalVM Native Build Tools 的 Maven Plugin 子项目来完成的。
通过在 JVM 下运行单元测试,为单元测试打上 `junit-platform-unique-ids*`,此后构建为 GraalVM Native Image 进行 nativeTest 来测试在
GraalVM Native Image 下的单元测试覆盖率。请不要使用 `io.kotest:kotest-runner-junit5-jvm:5.5.4` 等在 `test listener` mode 下
failed to discover tests 的测试库。
项目定义了 `nativeTestInSpringBoot` 的 Maven Profile 用于为 `dynamic-datasource-spring-boot3-starter` 模块执行 nativeTest。
假设贡献者处于新的 Ubuntu 22.04.3 LTS 实例下,其可通过如下 bash 命令通过 SDKMAN! 管理 JDK 和工具链,
并为 `dynamic-datasource-spring-boot3-starter` 子模块执行 nativeTest。
```bash
sudo apt install unzip zip curl sed -y
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install java 21.0.1-graalce
sdk use java 21.0.1-graalce
sudo apt-get install build-essential libz-dev zlib1g-dev -y
git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/
./mvnw -PnativeTestInSpringBoot -T1C -e clean test
```
贡献者在提交 PR 后,位于 Github Actions 的 CI 将进行此验证。如果 nativeTest 执行失败,请跳转到[本文的 2.2 一节](./CONTRIBUTING.md)。
当贡献者发现缺少与 `dynamic-datasource` 无关的第三方库的 GraalVM Reachability Metadata 时,应当在
https://github.com/oracle/graalvm-reachability-metadata 打开新的 issue 并提交包含依赖的第三方库缺失的 GraalVM Reachability
Metadata 的 PR。
## 2.2 Generate or merge GraalVM Reachability Metadata for unit tests
如果 nativeTest 执行失败, 应为单元测试生成初步的 GraalVM Reachability Metadata并手动调整以修复 nativeTest。
如有需要,请使用 `org.junit.jupiter.api.condition.DisabledInNativeImage` 注解或 `org.graalvm.nativeimage.imagecode`
System Property 屏蔽部分单元测试在 GraalVM Native Image 下运行。
请不要为 SpEL 功能编写可能的 nativeTest参考尚未关闭的 https://github.com/spring-projects/spring-framework/issues/29548 。
项目定义了 `generateMetadata` 的 Maven Profile 用于在普通 JVM 下携带 GraalVM Tracing Agent 执行单元测试,并在特定目录下生成或合并
已有的 GraalVM Reachability Metadata 文件。可通过如下 bash 命令简单处理此流程。贡献者仍可能需要手动调整具体的 JSON 条目,并在适当的时候
调整 Maven Profile 和 GraalVM Tracing Agent 的 Filter 链。
以下命令仅为 `dynamic-datasource-spring-boot3-starter` 生成 Conditional 形态的 GraalVM Reachability Metadata 的一个举例。
对于测试类和测试文件独立使用的 GraalVM Reachability Metadata贡献者应该放置到相关子模块对应的
`${project.basedir}/src/test/resources/META-INF/native-image/${project.artifactId}-test-metadata/` 文件夹下。`${}` 内为
POM 4.0 的常规系统变量,自行替换。
```bash
git clone git@github.com:baomidou/dynamic-datasource.git
cd ./dynamic-datasource/
./mvnw -PgenerateMetadata -DskipNativeTests -e -T1C clean test native:metadata-copy
```
请手动删除无任何具体条目的 JSON 文件。
# 3. PR
PR 应提交到位于 Github 的 Git Mirror即 https://github.com/baomidou/dynamic-datasource 。
位于 Github Actions 的 CI 将在 OpenJDK 8+ 下对 PR 对应分支执行对应的单元测试。