Summary
Since rewrite 8.79.2, the scheduled CI in openrewrite/rewrite-spring has 5 consistently failing tests. The failures started on April 11, immediately after the 8.79.2 release (April 10, 23:25 UTC) was picked up by the latest.integration resolution. The last passing scheduled run was April 10 at 18:40 UTC.
Root Cause
- Cycle inflation: Marker updates in cycle 1 trigger unnecessary cycle 2
- Silent recipe failures: Dependency recipes fail to apply changes (ChangeDependency doesn't rename, AddDependency doesn't add)
Failing Tests
| Test |
Error |
Boot3UpgradeTest.xmlBindMissing |
"Expected recipe to complete in 1 cycle, but took 2 cycles" |
RenameDeprecatedStartersManagedVersionsTest.renameStarterWithoutVersionWhenDepMgmtPluginPresent |
Starter not renamed — actual output still has spring-boot-starter-web instead of spring-boot-starter-webmvc |
RenameDeprecatedStartersManagedVersionsTest.renameStarterWithVersionWhenDepMgmtPluginAbsent |
Same |
MigrateToModularStartersTest.addFlywayStarterWhenDependencyPresent [flyway-database-postgresql] |
"Expecting actual not to be null" — recipe produced no changes |
MigrateToModularStartersTest.addFlywayStarterWhenDependencyPresent [flyway-mysql] |
Same |
Failing CI Runs
Last passing scheduled run (April 10, pre-8.79.2): https://github.com/openrewrite/rewrite-spring/actions/runs/24258414542
Analysis
- Scanner phase: Records
modulesWithOldDependency and moduleRepositories by scanning GradleProject configurations
isAcceptable: Now also accepts JavaSourceFile instances so the editing visitor processes Java source files
visit: For Java source files, calls updateJavaSourceSet() which downloads JARs and updates type information
The RenameDeprecatedStartersManagedVersionsTest failures are particularly telling: the UpgradeSpringBoot_4_0 recipe chain successfully upgrades the Spring Boot plugin version (from 3.4.1 to 4.0.5), but the subsequent ChangeDependency sub-recipe for renaming spring-boot-starter-web → spring-boot-starter-webmvc silently doesn't fire. This suggests the JavaSourceSetUpdater integration in either UpgradeDependencyVersion or ChangeDependency is interfering with the recipe chain execution.
Affected Files
rewrite-gradle/src/main/java/org/openrewrite/gradle/ChangeDependency.java
rewrite-gradle/src/main/java/org/openrewrite/gradle/AddDependency.java
rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java
rewrite-maven/src/main/java/org/openrewrite/maven/utilities/JavaSourceSetUpdater.java
rewrite-java/src/main/java/org/openrewrite/java/marker/JavaSourceSet.java
Summary
Since rewrite 8.79.2, the scheduled CI in
openrewrite/rewrite-springhas 5 consistently failing tests. The failures started on April 11, immediately after the 8.79.2 release (April 10, 23:25 UTC) was picked up by thelatest.integrationresolution. The last passing scheduled run was April 10 at 18:40 UTC.flywayStarterOmitsVersionWhenManagedByParenttest but these 5 failures persist.Root Cause
JavaSourceSetUpdaterintegration toAddDependency,ChangeDependency,RemoveDependency, andUpgradeDependencyVersionfor both Maven and Gradle. This causes:Failing Tests
Boot3UpgradeTest.xmlBindMissingRenameDeprecatedStartersManagedVersionsTest.renameStarterWithoutVersionWhenDepMgmtPluginPresentspring-boot-starter-webinstead ofspring-boot-starter-webmvcRenameDeprecatedStartersManagedVersionsTest.renameStarterWithVersionWhenDepMgmtPluginAbsentMigrateToModularStartersTest.addFlywayStarterWhenDependencyPresent [flyway-database-postgresql]MigrateToModularStartersTest.addFlywayStarterWhenDependencyPresent [flyway-mysql]Failing CI Runs
Last passing scheduled run (April 10, pre-8.79.2): https://github.com/openrewrite/rewrite-spring/actions/runs/24258414542
Analysis
JavaSourceSetUpdaterchanges in PR Expand star imports in ChangePackage and related recipes when they would create ambiguity #7202 modified the Gradle dependency recipes in three ways:modulesWithOldDependencyandmoduleRepositoriesby scanningGradleProjectconfigurationsisAcceptable: Now also acceptsJavaSourceFileinstances so the editing visitor processes Java source filesvisit: For Java source files, callsupdateJavaSourceSet()which downloads JARs and updates type informationThe
RenameDeprecatedStartersManagedVersionsTestfailures are particularly telling: theUpgradeSpringBoot_4_0recipe chain successfully upgrades the Spring Boot plugin version (from 3.4.1 to 4.0.5), but the subsequentChangeDependencysub-recipe for renamingspring-boot-starter-web→spring-boot-starter-webmvcsilently doesn't fire. This suggests theJavaSourceSetUpdaterintegration in eitherUpgradeDependencyVersionorChangeDependencyis interfering with the recipe chain execution.Affected Files
rewrite-gradle/src/main/java/org/openrewrite/gradle/ChangeDependency.javarewrite-gradle/src/main/java/org/openrewrite/gradle/AddDependency.javarewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.javarewrite-maven/src/main/java/org/openrewrite/maven/utilities/JavaSourceSetUpdater.javarewrite-java/src/main/java/org/openrewrite/java/marker/JavaSourceSet.java