Skip to content

Commit 6621940

Browse files
committed
Add condition isUsingBom
1 parent 7b68555 commit 6621940

2 files changed

Lines changed: 157 additions & 0 deletions

File tree

  • plugin-modernizer-core/src
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package io.jenkins.tools.pluginmodernizer.core.recipes;
2+
3+
import java.util.Optional;
4+
import org.openrewrite.*;
5+
import org.openrewrite.marker.Markers;
6+
import org.openrewrite.marker.SearchResult;
7+
import org.openrewrite.maven.tree.MavenResolutionResult;
8+
import org.openrewrite.maven.tree.Pom;
9+
import org.openrewrite.maven.tree.ResolvedPom;
10+
import org.openrewrite.xml.XmlVisitor;
11+
import org.openrewrite.xml.tree.Xml;
12+
13+
/**
14+
* Determines if this project is using a BOM in it's bom file
15+
*/
16+
public class IsUsingBom extends Recipe {
17+
18+
@Override
19+
public String getDisplayName() {
20+
return "Is the project a using Jenkins bom?";
21+
}
22+
23+
@Override
24+
public String getDescription() {
25+
return "Checks if the project is a using a Jenkins bom by the presence of io.jenkins.tools.bom group ID as managed dependency.";
26+
}
27+
28+
@Override
29+
public TreeVisitor<?, ExecutionContext> getVisitor() {
30+
return new XmlVisitor<ExecutionContext>() {
31+
@Override
32+
public Xml visitDocument(Xml.Document document, ExecutionContext ctx) {
33+
34+
// Ensure maven resolution result is present
35+
Markers markers = document.getMarkers();
36+
Optional<MavenResolutionResult> mavenResolutionResult = markers.findFirst(MavenResolutionResult.class);
37+
if (mavenResolutionResult.isEmpty()) {
38+
return document;
39+
}
40+
// Get the pom
41+
MavenResolutionResult resolutionResult = mavenResolutionResult.get();
42+
ResolvedPom resolvedPom = resolutionResult.getPom();
43+
Pom pom = resolvedPom.getRequested();
44+
45+
// Check if the project is using Jenkins bom
46+
boolean isUsingBom = pom.getDependencyManagement().stream()
47+
.anyMatch(dependency -> dependency.getGroupId().equals("io.jenkins.tools.bom"));
48+
49+
if (isUsingBom) {
50+
return SearchResult.found(document, "Project is using Jenkins bom");
51+
}
52+
53+
return document;
54+
}
55+
};
56+
}
57+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package io.jenkins.tools.pluginmodernizer.core.recipes;
2+
3+
import static org.openrewrite.maven.Assertions.pomXml;
4+
5+
import org.junit.jupiter.api.Test;
6+
import org.openrewrite.test.RecipeSpec;
7+
import org.openrewrite.test.RewriteTest;
8+
9+
public class IsUsingBomTest implements RewriteTest {
10+
11+
@Override
12+
public void defaults(RecipeSpec spec) {
13+
spec.recipe(new IsUsingBom());
14+
}
15+
16+
@Test
17+
void testNotUsingBom() throws Exception {
18+
rewriteRun(
19+
pomXml(
20+
"""
21+
<?xml version="1.0" encoding="UTF-8"?>
22+
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
23+
<modelVersion>4.0.0</modelVersion>
24+
<parent>
25+
<groupId>org.jenkins-ci.plugins</groupId>
26+
<artifactId>plugin</artifactId>
27+
<version>4.88</version>
28+
<relativePath />
29+
</parent>
30+
<groupId>io.jenkins.plugins</groupId>
31+
<artifactId>empty</artifactId>
32+
<version>1.0.0-SNAPSHOT</version>
33+
<packaging>hpi</packaging>
34+
<name>Empty Plugin</name>
35+
</project>
36+
"""));
37+
}
38+
39+
@Test
40+
void testWithBom() throws Exception {
41+
rewriteRun(
42+
pomXml(
43+
"""
44+
<?xml version="1.0" encoding="UTF-8"?>
45+
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
46+
<modelVersion>4.0.0</modelVersion>
47+
<parent>
48+
<groupId>org.jenkins-ci.plugins</groupId>
49+
<artifactId>plugin</artifactId>
50+
<version>4.88</version>
51+
<relativePath />
52+
</parent>
53+
<groupId>io.jenkins.plugins</groupId>
54+
<artifactId>empty</artifactId>
55+
<version>1.0.0-SNAPSHOT</version>
56+
<packaging>hpi</packaging>
57+
<name>Empty Plugin</name>
58+
<dependencyManagement>
59+
<dependencies>
60+
<dependency>
61+
<groupId>io.jenkins.tools.bom</groupId>
62+
<artifactId>bom-2.452.x</artifactId>
63+
<version>3814.v9563d972079a_</version>
64+
<type>pom</type>
65+
<scope>import</scope>
66+
</dependency>
67+
</dependencies>
68+
</dependencyManagement>
69+
</project>
70+
""",
71+
"""
72+
<!--~~(Project is using Jenkins bom)~~>--><?xml version="1.0" encoding="UTF-8"?>
73+
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
74+
<modelVersion>4.0.0</modelVersion>
75+
<parent>
76+
<groupId>org.jenkins-ci.plugins</groupId>
77+
<artifactId>plugin</artifactId>
78+
<version>4.88</version>
79+
<relativePath />
80+
</parent>
81+
<groupId>io.jenkins.plugins</groupId>
82+
<artifactId>empty</artifactId>
83+
<version>1.0.0-SNAPSHOT</version>
84+
<packaging>hpi</packaging>
85+
<name>Empty Plugin</name>
86+
<dependencyManagement>
87+
<dependencies>
88+
<dependency>
89+
<groupId>io.jenkins.tools.bom</groupId>
90+
<artifactId>bom-2.452.x</artifactId>
91+
<version>3814.v9563d972079a_</version>
92+
<type>pom</type>
93+
<scope>import</scope>
94+
</dependency>
95+
</dependencies>
96+
</dependencyManagement>
97+
</project>
98+
"""));
99+
}
100+
}

0 commit comments

Comments
 (0)