Skip to content

Commit 2a1e06e

Browse files
authored
Merge pull request #543 from jonesbusy/feature/test-multiple-bom
Allow multiple bom and allow downgrade from incrementals version to release
2 parents 70ce37e + d32abab commit 2a1e06e

3 files changed

Lines changed: 154 additions & 15 deletions

File tree

plugin-modernizer-core/src/main/java/io/jenkins/tools/pluginmodernizer/core/recipes/MigrateToJenkinsBaseLineProperty.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.jenkins.tools.pluginmodernizer.core.extractor.PomResolutionVisitor;
55
import io.jenkins.tools.pluginmodernizer.core.visitors.AddBeforePropertyVisitor;
66
import io.jenkins.tools.pluginmodernizer.core.visitors.AddPropertyCommentVisitor;
7+
import io.jenkins.tools.pluginmodernizer.core.visitors.UpdateBomVersionVisitor;
78
import org.jspecify.annotations.Nullable;
89
import org.openrewrite.Cursor;
910
import org.openrewrite.ExecutionContext;
@@ -117,15 +118,11 @@ private void performUpdate(Xml.Document document) {
117118
maybeUpdateModel();
118119
}
119120

120-
// Change the bom artifact ID
121-
Xml.Tag bom = document.getRoot()
122-
.getChild("dependencyManagement")
123-
.flatMap(dm -> dm.getChild("dependencies"))
124-
.flatMap(deps -> deps.getChild("dependency"))
125-
.filter(dep -> dep.getChildValue("groupId")
126-
.map("io.jenkins.tools.bom"::equals)
127-
.orElse(false))
128-
.orElseThrow();
121+
// Get the bom tag
122+
Xml.Tag bom = UpdateBomVersionVisitor.getBomTag(document);
123+
if (bom == null) {
124+
return;
125+
}
129126

130127
Xml.Tag artifactIdTag = bom.getChild("artifactId").orElseThrow();
131128
Xml.Tag version = bom.getChild("version").orElseThrow();

plugin-modernizer-core/src/main/java/io/jenkins/tools/pluginmodernizer/core/visitors/UpdateBomVersionVisitor.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,15 @@ public String getLatestBomVersion(String artifactId, String currentVersion, Exec
100100
* @param document The document
101101
* @return The bom tag
102102
*/
103-
public Xml.Tag getBomTag(Xml.Document document) {
103+
public static Xml.Tag getBomTag(Xml.Document document) {
104104
return document.getRoot()
105105
.getChild("dependencyManagement")
106106
.flatMap(dm -> dm.getChild("dependencies"))
107-
.flatMap(deps -> deps.getChild("dependency"))
108-
.filter(dep -> dep.getChildValue("groupId")
109-
.map("io.jenkins.tools.bom"::equals)
110-
.orElse(false))
107+
.flatMap(deps -> deps.getChildren("dependency").stream()
108+
.filter(dep -> dep.getChildValue("groupId")
109+
.map(RecipesConsts.PLUGINS_BOM_GROUP_ID::equals)
110+
.orElse(false))
111+
.findFirst())
111112
.orElse(null);
112113
}
113114

@@ -140,7 +141,9 @@ private String getLatestBomVersion(
140141
versions.add(v);
141142
}
142143
}
143-
if (!Semver.isVersion(currentVersion) && !versions.isEmpty()) {
144+
145+
// Take latest version available. Allow to downgrade from incrementals to release
146+
if (!Semver.isVersion(currentVersion) && !versions.isEmpty() || (!versions.contains(currentVersion))) {
144147
versions.sort(latestBomReleaseComparator);
145148
return versions.get(versions.size() - 1);
146149
} else {

plugin-modernizer-core/src/test/java/io/jenkins/tools/pluginmodernizer/core/recipes/DeclarativeRecipesTest.java

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.junit.jupiter.api.condition.EnabledOnOs;
1818
import org.junit.jupiter.api.condition.OS;
1919
import org.openrewrite.java.JavaParser;
20+
import org.openrewrite.maven.MavenParser;
2021
import org.openrewrite.test.RewriteTest;
2122
import org.slf4j.Logger;
2223
import org.slf4j.LoggerFactory;
@@ -644,6 +645,144 @@ void upgradeToRecommendCoreVersionTestWithBaseline() {
644645
.formatted(Settings.getBomVersion())));
645646
}
646647

648+
@Test
649+
void upgradeToRecommendCoreVersionTestWithMultipleBom() {
650+
rewriteRun(
651+
spec -> {
652+
spec.parser(MavenParser.builder().activeProfiles("consume-incrementals"));
653+
spec.recipeFromResource(
654+
"/META-INF/rewrite/recipes.yml",
655+
"io.jenkins.tools.pluginmodernizer.UpgradeToRecommendCoreVersion");
656+
},
657+
// language=xml
658+
pomXml(
659+
"""
660+
<?xml version="1.0" encoding="UTF-8"?>
661+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
662+
<modelVersion>4.0.0</modelVersion>
663+
<parent>
664+
<groupId>org.jenkins-ci.plugins</groupId>
665+
<artifactId>plugin</artifactId>
666+
<version>4.88</version>
667+
<relativePath />
668+
</parent>
669+
<artifactId>my-api</artifactId>
670+
<version>${revision}-${changelist}</version>
671+
<packaging>hpi</packaging>
672+
<name>My API Plugin</name>
673+
<properties>
674+
<revision>2.17.0</revision>
675+
<changelist>999999-SNAPSHOT</changelist>
676+
<jenkins.version>2.401.3</jenkins.version>
677+
</properties>
678+
<repositories>
679+
<repository>
680+
<id>repo.jenkins-ci.org</id>
681+
<url>https://repo.jenkins-ci.org/public/</url>
682+
</repository>
683+
</repositories>
684+
<pluginRepositories>
685+
<pluginRepository>
686+
<id>repo.jenkins-ci.org</id>
687+
<url>https://repo.jenkins-ci.org/public/</url>
688+
</pluginRepository>
689+
</pluginRepositories>
690+
<dependencyManagement>
691+
<dependencies>
692+
<dependency>
693+
<groupId>com.fasterxml.jackson</groupId>
694+
<artifactId>jackson-bom</artifactId>
695+
<version>2.17.0</version>
696+
<scope>import</scope>
697+
<type>pom</type>
698+
</dependency>
699+
<dependency>
700+
<groupId>io.jenkins.tools.bom</groupId>
701+
<artifactId>bom-2.401.x</artifactId>
702+
<version>2745.vc7b_fe4c876fa_</version>
703+
<scope>import</scope>
704+
<type>pom</type>
705+
</dependency>
706+
</dependencies>
707+
</dependencyManagement>
708+
<dependencies>
709+
<dependency>
710+
<groupId>com.fasterxml.jackson.core</groupId>
711+
<artifactId>jackson-databind</artifactId>
712+
</dependency>
713+
<dependency>
714+
<groupId>io.jenkins.plugins</groupId>
715+
<artifactId>json-api</artifactId>
716+
</dependency>
717+
</dependencies>
718+
</project>
719+
""",
720+
"""
721+
<?xml version="1.0" encoding="UTF-8"?>
722+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
723+
<modelVersion>4.0.0</modelVersion>
724+
<parent>
725+
<groupId>org.jenkins-ci.plugins</groupId>
726+
<artifactId>plugin</artifactId>
727+
<version>4.88</version>
728+
<relativePath />
729+
</parent>
730+
<artifactId>my-api</artifactId>
731+
<version>${revision}-${changelist}</version>
732+
<packaging>hpi</packaging>
733+
<name>My API Plugin</name>
734+
<properties>
735+
<revision>2.17.0</revision>
736+
<changelist>999999-SNAPSHOT</changelist>
737+
<!-- https://www.jenkins.io/doc/developer/plugin-development/choosing-jenkins-baseline/ -->
738+
<jenkins.baseline>2.452</jenkins.baseline>
739+
<jenkins.version>${jenkins.baseline}.4</jenkins.version>
740+
</properties>
741+
<repositories>
742+
<repository>
743+
<id>repo.jenkins-ci.org</id>
744+
<url>https://repo.jenkins-ci.org/public/</url>
745+
</repository>
746+
</repositories>
747+
<pluginRepositories>
748+
<pluginRepository>
749+
<id>repo.jenkins-ci.org</id>
750+
<url>https://repo.jenkins-ci.org/public/</url>
751+
</pluginRepository>
752+
</pluginRepositories>
753+
<dependencyManagement>
754+
<dependencies>
755+
<dependency>
756+
<groupId>com.fasterxml.jackson</groupId>
757+
<artifactId>jackson-bom</artifactId>
758+
<version>2.17.0</version>
759+
<scope>import</scope>
760+
<type>pom</type>
761+
</dependency>
762+
<dependency>
763+
<groupId>io.jenkins.tools.bom</groupId>
764+
<artifactId>bom-${jenkins.baseline}.x</artifactId>
765+
<version>%s</version>
766+
<scope>import</scope>
767+
<type>pom</type>
768+
</dependency>
769+
</dependencies>
770+
</dependencyManagement>
771+
<dependencies>
772+
<dependency>
773+
<groupId>com.fasterxml.jackson.core</groupId>
774+
<artifactId>jackson-databind</artifactId>
775+
</dependency>
776+
<dependency>
777+
<groupId>io.jenkins.plugins</groupId>
778+
<artifactId>json-api</artifactId>
779+
</dependency>
780+
</dependencies>
781+
</project>
782+
"""
783+
.formatted(Settings.getBomVersion())));
784+
}
785+
647786
@Test
648787
void upgradeToUpgradeToLatestJava11CoreVersion() {
649788
rewriteRun(

0 commit comments

Comments
 (0)