@@ -105,6 +105,23 @@ Other test-related properties: `-PtestJavaVersion=17` (run tests on a different
105105` -PtestRetryCount=N ` , ` -PtestFailFast=true|false ` , ` -PprotobufVersion=4.31.1 ` (protobuf v4
106106compatibility tests).
107107
108+ Test JVMs default to a ` 1300m ` heap and up to four forks per task. Override these with
109+ ` -PtestMaxHeapSize=1500m ` and ` -PtestMaxParallelForks=2 ` ; ` --max-workers=2 ` also limits
110+ concurrent workers across projects. Task-specific limits, such as the integration tests' single
111+ fork and ` 1G ` heap, take precedence.
112+
113+ Use ` -PtestForkEvery=50 ` to replace a test JVM after 50 detected test classes, limiting state
114+ retained across classes. The default is ` 0 ` (no class limit). Gradle counts candidate classes
115+ passed to test workers before TestNG group filtering, so classes excluded by groups still count
116+ toward each batch. ` --tests ` can narrow candidates, but wildcard filters may still count classes
117+ that execute no matching tests. Test methods, data-provider rows and factory instances do not
118+ count separately.
119+ Tasks using TestNG XML suites and async-profiler keep recycling disabled; task-specific
120+ isolation, such as SASL's one class per worker, takes precedence.
121+
122+ Test JVMs write heap dumps on heap exhaustion to ` /tmp/java_pid<PID>.hprof ` , collected by CI's
123+ existing failure artifacts. Set ` -PtestHeapDumpPath=<existing-directory> ` to use another directory.
124+
108125Failed tests are retried once by default (` testRetryCount=1 ` ; ` 0 ` when running inside the IDE). When
109126running tests locally, prefer ** ` -PtestRetryCount=0 ` ** to catch failures (including flakiness) early
110127instead of having retries mask them.
@@ -333,6 +350,24 @@ locally. (`integrationTest` also accepts `-PtestGroups` / `-PexcludedTestGroups`
333350
334351### Running the full CI pipeline (Personal CI)
335352
353+ The shared ` setup-gradle ` action automatically selects a smaller memory profile on Linux runners
354+ with up to 8 GiB of physical RAM: a ` 2g ` Gradle heap, two workers across projects, up to two test
355+ forks per task, and new test workers after 50 detected classes. Larger runners retain the usual
356+ settings. The action's ` memory-profile ` input accepts ` auto ` (default), ` low-memory ` (force the
357+ smaller profile), or ` standard ` (leave the memory settings unchanged). Command-line ` -Dorg.gradle.jvmargs ` ,
358+ ` --max-workers ` and ` -Ptest* ` options can override the profile settings.
359+
360+ Develocity injection and build-scan publishing are disabled when the workflow repository is
361+ private or its visibility is unavailable, even if an access key is configured. Public repositories
362+ can also disable them with the action's ` build-scan-publish: 'false' ` input. CodeQL runs by default
363+ for public repositories; private repositories with GitHub Code Security enabled can opt in by
364+ setting the repository variable ` CI_ENABLE_CODEQL=true ` .
365+
366+ The CI workflows declare the token permissions needed by their jobs, including reading PR changes.
367+ This supports repositories whose organization or enterprise enforces read-only default workflow
368+ permissions. Explicit permissions do not override restrictions on tokens for fork pull requests or
369+ enterprise policies that prohibit particular actions.
370+
336371The full test suite is large and slow to run locally. While iterating on a change, run only the
337372narrowly-scoped tests relevant to the change (a single test class or package, see above) rather than
338373a module's entire test task. To validate a larger change against the ** full** CI pipeline, do not run
0 commit comments