You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The core test runner. Determines which modules to test using:
81
+
79
82
1.**File-path analysis**: Maps changed files to Maven modules
80
-
2.**POM dependency analysis**: For `parent/pom.xml` changes, detects property
81
-
changes and finds modules that reference the affected properties in their
82
-
`pom.xml` files (uses simple grep, not Maveniverse Toolbox — see Known
83
-
Limitations below)
83
+
2.**POM dependency analysis**: For `parent/pom.xml` changes, detects property changes and finds modules that reference the affected properties in their `pom.xml` files (uses simple grep, not Maveniverse Toolbox — see Known Limitations below)
84
84
3.**Extra modules**: Additional modules passed via `/component-test`
85
85
86
86
Results are merged, deduplicated, and tested. The script also:
87
+
87
88
- Detects tests disabled in CI (`@DisabledIfSystemProperty(named = "ci.env.name")`)
88
89
- Applies an exclusion list for generated/meta modules
89
-
- Checks for excluded modules with associated integration tests (via
90
-
`manual-it-mapping.txt`) and advises contributors to run them manually
90
+
- Checks for excluded modules with associated integration tests (via `manual-it-mapping.txt`) and advises contributors to run them manually
91
91
- Generates a unified PR comment with all test information
92
92
93
93
### `install-mvnd`
94
+
94
95
Installs the Maven Daemon (mvnd) for faster builds.
95
96
96
97
### `install-packages`
98
+
97
99
Installs system packages required for the build.
98
100
99
101
## PR Labels
100
102
101
103
| Label | Effect |
102
-
|-------|--------|
104
+
|---|---|
103
105
|`skip-tests`| Skip all tests |
104
106
|`test-dependents`| Force testing dependent modules even if threshold exceeded |
105
107
106
108
## CI Environment
107
109
108
-
The CI sets `-Dci.env.name=github.com` via `MVND_OPTS` (in `install-mvnd`).
109
-
Tests can use `@DisabledIfSystemProperty(named = "ci.env.name")` to skip
110
-
flaky tests in CI. The test comment warns about these skipped tests.
110
+
The CI sets `-Dci.env.name=github.com` via `MVND_OPTS` (in `install-mvnd`). Tests can use `@DisabledIfSystemProperty(named = "ci.env.name")` to skip flaky tests in CI. The test comment warns about these skipped tests.
111
111
112
112
## Known Limitations of POM Dependency Detection
113
113
114
114
The property-grep approach has structural limitations that can cause missed modules:
115
115
116
-
1.**Managed dependencies without explicit `<version>`** — Most Camel modules
117
-
inherit dependency versions via `<dependencyManagement>` in the parent POM
118
-
and do not declare `<version>${property}</version>` themselves. When a managed
119
-
dependency version property changes, only modules that explicitly reference
120
-
the property are detected — modules relying on inheritance are missed.
116
+
1.**Managed dependencies without explicit**`<version>` — Most Camel modules inherit dependency versions via `<dependencyManagement>` in the parent POM and do not declare `<version>${property}</version>` themselves. When a managed dependency version property changes, only modules that explicitly reference the property are detected — modules relying on inheritance are missed.
121
117
122
-
2.**Maven plugin version changes are completely invisible** — Plugin version
123
-
properties (e.g. `<maven-surefire-plugin-version>`) are both defined and
124
-
consumed in `parent/pom.xml` via `<pluginManagement>`. Since the module
125
-
search excludes `parent/pom.xml`, no modules are found and **no tests run
126
-
at all** for plugin updates. Modules inherit plugins from the parent without
127
-
any `${property}` reference in their own `pom.xml`.
118
+
2.**Maven plugin version changes are completely invisible** — Plugin version properties (e.g. `<maven-surefire-plugin-version>`) are both defined and consumed in `parent/pom.xml` via `<pluginManagement>`. Since the module search excludes `parent/pom.xml`, no modules are found and **no tests run at all** for plugin updates. Modules inherit plugins from the parent without any `${property}` reference in their own `pom.xml`.
128
119
129
-
3.**BOM imports** — When a BOM version property changes (e.g.
130
-
`<spring-boot-bom-version>`), modules using artifacts from that BOM are not
131
-
detected because they reference the BOM's artifacts, not the BOM property.
120
+
3.**BOM imports** — When a BOM version property changes (e.g. `<spring-boot-bom-version>`), modules using artifacts from that BOM are not detected because they reference the BOM's artifacts, not the BOM property.
132
121
133
-
4.**Transitive dependency changes** — Modules affected only via transitive
134
-
dependencies are not detected.
122
+
4.**Transitive dependency changes** — Modules affected only via transitive dependencies are not detected.
135
123
136
-
5.**Non-property version changes** — Direct edits to `<version>` values (not
137
-
using `${property}` substitution) or structural changes to
138
-
`<dependencyManagement>` sections are not caught.
124
+
5.**Non-property version changes** — Direct edits to `<version>` values (not using `${property}` substitution) or structural changes to `<dependencyManagement>` sections are not caught.
139
125
140
-
These limitations mean the incremental build may under-test when parent POM
141
-
properties change. A future improvement could use
142
-
[Maveniverse Toolbox](https://github.com/maveniverse/toolbox)`tree-find` or
143
-
[Scalpel](https://github.com/maveniverse/scalpel) to resolve the full
144
-
dependency graph and detect all affected modules.
126
+
These limitations mean the incremental build may under-test when parent POM properties change. A future improvement could use [Maveniverse Toolbox](https://github.com/maveniverse/toolbox)`tree-find` or [Scalpel](https://github.com/maveniverse/scalpel) to resolve the full dependency graph and detect all affected modules.
145
127
146
128
## Manual Integration Test Advisories
147
129
148
-
Some modules are excluded from CI's `-amd` expansion (the `EXCLUSION_LIST`)
149
-
because they are generated code, meta-modules, or expensive integration test
150
-
suites. When a contributor changes one of these modules, CI cannot automatically
151
-
test all downstream effects.
130
+
Some modules are excluded from CI's `-amd` expansion (the `EXCLUSION_LIST`) because they are generated code, meta-modules, or expensive integration test suites. When a contributor changes one of these modules, CI cannot automatically test all downstream effects.
152
131
153
-
The file `manual-it-mapping.txt` (co-located with the incremental build script)
154
-
maps source modules to their associated integration test suites. When a changed
155
-
module has a mapping entry, CI posts an advisory in the PR comment:
132
+
The file `manual-it-mapping.txt` (co-located with the incremental build script) maps source modules to their associated integration test suites. When a changed module has a mapping entry, CI posts an advisory in the PR comment:
156
133
157
-
> You modified `dsl/camel-jbang/camel-jbang-core`. The related integration
158
-
> tests in `dsl/camel-jbang/camel-jbang-it` are excluded from CI. Consider
159
-
> running them manually:
134
+
> You modified `dsl/camel-jbang/camel-jbang-core`. The related integration tests in `dsl/camel-jbang/camel-jbang-it` are excluded from CI. Consider running them manually:
To add new mappings, edit `manual-it-mapping.txt` using the format:
141
+
165
142
```
166
143
source-artifact-id:it-module-path:command
167
144
```
168
145
169
146
## Multi-JDK Artifact Behavior
170
147
171
-
All non-experimental JDK matrix entries (17, 21) upload the CI comment
172
-
artifact with `overwrite: true`. This ensures a comment is posted even if
173
-
one JDK build fails. Since the comment content is identical across JDKs
174
-
(same modules are tested regardless of JDK version), last writer wins.
148
+
All non-experimental JDK matrix entries (17, 21) upload the CI comment artifact with `overwrite: true`. This ensures a comment is posted even if one JDK build fails. Since the comment content is identical across JDKs (same modules are tested regardless of JDK version), last writer wins.
175
149
176
150
## Comment Markers
177
151
178
152
PR comments use HTML markers for upsert (create-or-update) behavior:
179
-
- `<!-- ci-tested-modules -->` — Unified test summary comment
153
+
154
+
- `<!-- ci-tested-modules -->` — Unified test summary comment
0 commit comments