From f5f8e488495f6e9d32aec2ee5bdaca58bd1f5165 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 3 Aug 2022 11:06:18 -0400 Subject: [PATCH 1/6] Introducing more convenient `MavenRunner.Config` constructor --- .../org/jenkins/tools/test/PluginCompatTester.java | 9 ++------- .../tools/test/hook/MultiParentCompileHook.java | 5 +---- .../test/hook/NodeCleanupBeforeCompileHook.java | 8 +------- .../org/jenkins/tools/test/maven/MavenRunner.java | 12 +++++++++++- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/PluginCompatTester.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/PluginCompatTester.java index 293eb4bd8..9aaa7d4f4 100644 --- a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/PluginCompatTester.java +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/PluginCompatTester.java @@ -252,11 +252,9 @@ public PluginCompatReport testPlugins() SortedSet testedCores = config.getWar() == null ? generateCoreCoordinatesToTest(data, report) : coreVersionFromWAR(data); - MavenRunner.Config mconfig = new MavenRunner.Config(); - mconfig.userSettingsFile = config.getM2SettingsFile(); + MavenRunner.Config mconfig = new MavenRunner.Config(config); // TODO REMOVE mconfig.userProperties.put( "failIfNoTests", "false" ); - mconfig.userProperties.putAll(this.config.retrieveMavenProperties()); report.setTestJavaVersion(config.getTestJavaVersion()); boolean failed = false; @@ -791,11 +789,8 @@ private UpdateSite.Data scanBom(HashMap pluginGroupIds, String p private List getBomEntries() throws IOException, XmlPullParserException, PomExecutionException { File fullDepPom = new MavenBom(config.getBom()).writeFullDepPom(config.workDirectory); - MavenRunner.Config mconfig = new MavenRunner.Config(); - mconfig.userSettingsFile = config.getM2SettingsFile(); + MavenRunner.Config mconfig = new MavenRunner.Config(config); System.out.println(mconfig.userSettingsFile); - // TODO REMOVE - mconfig.userProperties.putAll(this.config.retrieveMavenProperties()); File buildLogFile = new File(config.workDirectory + File.separator + "bom-download.log"); diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java index db36d8e08..ae828753a 100644 --- a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java @@ -110,12 +110,9 @@ private void copy(Path eslintrc, File pluginFolder) { } private MavenRunner.Config getMavenConfig(PluginCompatTesterConfig config) throws IOException { - MavenRunner.Config mconfig = new MavenRunner.Config(); - mconfig.userSettingsFile = config.getM2SettingsFile(); + MavenRunner.Config mconfig = new MavenRunner.Config(config); // TODO REMOVE mconfig.userProperties.put("failIfNoTests", "false"); - mconfig.userProperties.putAll(config.retrieveMavenProperties()); - return mconfig; } diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java index 33964aac9..9cd2d6f71 100644 --- a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java @@ -21,7 +21,7 @@ public Map action(Map moreInfo) throws Exception PluginCompatTesterConfig config = (PluginCompatTesterConfig) moreInfo.get("config"); boolean shouldExecuteHook = (config.getIncludePlugins().contains("sse-gateway") || (config.getIncludePlugins().contains("workflow-cps"))); runner = new ExternalMavenRunner(config.getExternalMaven()); - mavenConfig = getMavenConfig(config); + mavenConfig = new MavenRunner.Config(config); if (shouldExecuteHook) { File pluginDir = (File) moreInfo.get("pluginDir"); @@ -63,10 +63,4 @@ private void removeNodeFolders(File path) throws IOException { } } - private MavenRunner.Config getMavenConfig(PluginCompatTesterConfig config) throws IOException { - MavenRunner.Config mconfig = new MavenRunner.Config(); - mconfig.userSettingsFile = config.getM2SettingsFile(); - mconfig.userProperties.putAll(config.retrieveMavenProperties()); - return mconfig; - } } diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java index fec7594f7..1082ac96a 100644 --- a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java @@ -1,17 +1,27 @@ package org.jenkins.tools.test.maven; import java.io.File; +import java.io.IOException; import java.util.Map; import java.util.TreeMap; import org.jenkins.tools.test.exception.PomExecutionException; +import org.jenkins.tools.test.model.PluginCompatTesterConfig; public interface MavenRunner { void run(Config config, File baseDirectory, File buildLogFile, String... goals) throws PomExecutionException; class Config { - public File userSettingsFile; + + public final File userSettingsFile; + public final Map userProperties = new TreeMap<>(); + + public Config(PluginCompatTesterConfig pctConfig) throws IOException { + userSettingsFile = pctConfig.getM2SettingsFile(); + userProperties.putAll(pctConfig.retrieveMavenProperties()); + } + } } From e5ede322c33dec181018b05227e6c16d8eab7446 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 4 Aug 2022 11:48:08 -0400 Subject: [PATCH 2/6] Switching `PluginCompatTesterConfig` to a no-arg ctor + setters --- .../tools/test/PluginCompatTesterCli.java | 23 +++++--- .../test/model/PluginCompatTesterConfig.java | 57 +++++++++++-------- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java index dd6253440..056ed7f30 100644 --- a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java +++ b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java @@ -93,16 +93,23 @@ public static void main(String[] args) throws IOException, PlexusContainerExcept } } - // We may need this data even in the -war mode - if (updateCenterUrl == null) { - updateCenterUrl = PluginCompatTesterConfig.DEFAULT_UPDATE_CENTER_URL; - } - if (parentCoordinates == null) { - parentCoordinates = PluginCompatTesterConfig.DEFAULT_PARENT_GAV; + PluginCompatTesterConfig config = new PluginCompatTesterConfig(); + + config.setUpdateCenterUrl(updateCenterUrl); + config.setWorkDirectory(options.getWorkDirectory()); + config.setReportFile(reportFile); + config.setM2SettingsFile(options.getM2SettingsFile()); + + if (parentCoordinates != null && !parentCoordinates.isEmpty()) { + String[] gavChunks = parentCoordinates.split(":"); + assert gavChunks.length == 3 || gavChunks.length == 2; + config.setParentGroupId(gavChunks[0]); + config.setParentArtifactId(gavChunks[1]); + if (gavChunks.length == 3 && !"".equals(gavChunks[2])) { + config.setParentVersion(gavChunks[2]); + } } - PluginCompatTesterConfig config = new PluginCompatTesterConfig(updateCenterUrl, parentCoordinates, - options.getWorkDirectory(), reportFile, options.getM2SettingsFile()); config.setWar(war); config.setBom(options.getBOM()); diff --git a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java index 4fa7c4ea2..19e34bdba 100644 --- a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java +++ b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java @@ -51,31 +51,26 @@ public class PluginCompatTesterConfig { private static final Logger LOGGER = Logger.getLogger(PluginCompatTesterConfig.class.getName()); - public static final String DEFAULT_UPDATE_CENTER_URL = "https://updates.jenkins.io/current/update-center.json"; - public static final String DEFAULT_PARENT_GROUP = "org.jenkins-ci.plugins"; - public static final String DEFAULT_PARENT_ARTIFACT = "plugin"; - public static final String DEFAULT_PARENT_GAV = DEFAULT_PARENT_GROUP + ":" + DEFAULT_PARENT_ARTIFACT; - // Update center used to retrieve plugins informations - public final String updateCenterUrl; + public String updateCenterUrl = "https://updates.jenkins.io/current/update-center.json"; // A working directory where the tested plugin's sources will be checked out - public final File workDirectory; + public File workDirectory; // A report file where will be generated testing report // If the file already exist, testing report will be merged into it - public final File reportFile; + public File reportFile; // Path for maven settings file where repository will be provided allowing to // download jenkins-core artifact (and dependencies) - private final File m2SettingsFile; + private File m2SettingsFile; // GroupId which will be used to replace tested plugin's parent groupId // If null, every recorded core coordinates (in report xml) will be played - private String parentGroupId = null; + private String parentGroupId = "org.jenkins-ci.plugins"; // ArtifactId which will be used to replace tested plugin's parent artifactId // If null, every recorded core coordinates (in report xml) will be played - private String parentArtifactId = null; + private String parentArtifactId = "plugin"; // Version which will be used to replace tested plugin's parent version // If null, latest core version (retrieved via the update center) will be used private String parentVersion = null; @@ -151,28 +146,42 @@ public class PluginCompatTesterConfig { // Flag to indicate if we want to store all the tests names or only failed ones on PCT report files private boolean storeAll; + /** + * @deprecated just for tests; use {@link #PluginCompatTesterConfig()} and call whatever setters are actually required + */ + @Deprecated public PluginCompatTesterConfig(File workDirectory, File reportFile, File m2SettingsFile){ - this(DEFAULT_UPDATE_CENTER_URL, DEFAULT_PARENT_GAV, - workDirectory, reportFile, m2SettingsFile); + setWorkDirectory(workDirectory); + setReportFile(reportFile); + setM2SettingsFile(m2SettingsFile); } - public PluginCompatTesterConfig(String updateCenterUrl, String parentGAV, - File workDirectory, File reportFile, File m2SettingsFile){ + public PluginCompatTesterConfig() {} + + public void setUpdateCenterUrl(String updateCenterUrl) { this.updateCenterUrl = updateCenterUrl; - if(parentGAV != null && !"".equals(parentGAV)){ - String[] gavChunks = parentGAV.split(":"); - assert gavChunks.length == 3 || gavChunks.length == 2; - this.parentGroupId = gavChunks[0]; - this.parentArtifactId = gavChunks[1]; - if(gavChunks.length == 3 && !"".equals(gavChunks[2])){ - this.setParentVersion(gavChunks[2]); - } - } + } + + public void setWorkDirectory(File workDirectory) { this.workDirectory = workDirectory; + } + + public void setReportFile(File reportFile) { this.reportFile = reportFile; + } + + public void setM2SettingsFile(File m2SettingsFile) { this.m2SettingsFile = m2SettingsFile; } + public void setParentGroupId(String parentGroupId) { + this.parentGroupId = parentGroupId; + } + + public void setParentArtifactId(String parentArtifactId) { + this.parentArtifactId = parentArtifactId; + } + public String getParentVersion() { return parentVersion; } From d95cbdb1617b59fa609728ea1e037b33a80001ea Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 4 Aug 2022 11:55:10 -0400 Subject: [PATCH 3/6] Support `-mavenOptions` --- .../main/java/org/jenkins/tools/test/CliOptions.java | 9 +++++++++ .../org/jenkins/tools/test/PluginCompatTesterCli.java | 1 + .../tools/test/model/PluginCompatTesterConfig.java | 10 ++++++++++ .../jenkins/tools/test/maven/ExternalMavenRunner.java | 1 + .../java/org/jenkins/tools/test/maven/MavenRunner.java | 4 ++++ 5 files changed, 25 insertions(+) diff --git a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/CliOptions.java b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/CliOptions.java index 5faca2f14..ddef962ff 100644 --- a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/CliOptions.java +++ b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/CliOptions.java @@ -41,6 +41,7 @@ import hudson.util.VersionNumber; import java.util.Collections; +import javax.annotation.Nonnull; /** * POJO containing CLI arguments & help. @@ -137,6 +138,9 @@ public class CliOptions { "These options will be used a la -D") private String mavenPropertiesFile; + @Parameter(names="-mavenOptions", description = "Options to pass to Maven (like -Pxxx; not to be confused with Java options, nor Maven properties).") + private List mavenOptions; + @Parameter(names="-hookPrefixes", description = "Prefixes of the extra hooks' classes") private String hookPrefixes; @@ -228,6 +232,11 @@ public String getMavenPropertiesFile() { return mavenPropertiesFile; } + @Nonnull + public List getMavenOptions() { + return mavenOptions != null ? Collections.unmodifiableList(mavenOptions) : Collections.emptyList(); + } + public String getCacheThresholdStatus() { return cacheThresholdStatus; } diff --git a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java index 056ed7f30..8e241b0f6 100644 --- a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java +++ b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java @@ -183,6 +183,7 @@ public static void main(String[] args) throws IOException, PlexusContainerExcept config.setMavenPropertiesFiles(options.getMavenPropertiesFile()); } + config.setMavenOptions(options.getMavenOptions()); PluginCompatTester tester = new PluginCompatTester(config); tester.testPlugins(); diff --git a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java index 19e34bdba..8f0552c10 100644 --- a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java +++ b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java @@ -125,6 +125,8 @@ public class PluginCompatTesterConfig { private Map mavenProperties = Collections.emptyMap(); private String mavenPropertiesFile; + + private List mavenOptions; // Classpath prefixes of the extra hooks private List hookPrefixes = new ArrayList<>(Collections.singletonList("org.jenkins")); @@ -297,6 +299,14 @@ public void setMavenPropertiesFiles( String mavenPropertiesFile ) { this.mavenPropertiesFile = mavenPropertiesFile; } + public List getMavenOptions() { + return mavenOptions; + } + + public void setMavenOptions(List mavenOptions) { + this.mavenOptions = mavenOptions; + } + @CheckForNull public File getBom() { return bom; diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java index 0283e3fe6..eaf5f777e 100644 --- a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java @@ -65,6 +65,7 @@ public void run(Config config, File baseDirectory, File buildLogFile, String... for (Map.Entry entry : config.userProperties.entrySet()) { cmd.add("--define=" + entry); } + cmd.addAll(config.mavenOptions); cmd.addAll(Arrays.asList(goals)); System.out.println("running " + cmd + " in " + baseDirectory + " >> " + buildLogFile); try { diff --git a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java index 1082ac96a..264931825 100644 --- a/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java +++ b/plugins-compat-tester/src/main/java/org/jenkins/tools/test/maven/MavenRunner.java @@ -2,6 +2,7 @@ import java.io.File; import java.io.IOException; +import java.util.List; import java.util.Map; import java.util.TreeMap; import org.jenkins.tools.test.exception.PomExecutionException; @@ -17,9 +18,12 @@ class Config { public final Map userProperties = new TreeMap<>(); + public final List mavenOptions; + public Config(PluginCompatTesterConfig pctConfig) throws IOException { userSettingsFile = pctConfig.getM2SettingsFile(); userProperties.putAll(pctConfig.retrieveMavenProperties()); + mavenOptions = pctConfig.getMavenOptions(); } } From 129933abf3519a373008464a36fed4c069ad02af Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 4 Aug 2022 11:57:02 -0400 Subject: [PATCH 4/6] Oops, `DEFAULT_PARENT_GROUP` & `DEFAULT_PARENT_ARTIFACT` actually used --- .../jenkins/tools/test/model/PluginCompatTesterConfig.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java index 8f0552c10..278b70d66 100644 --- a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java +++ b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java @@ -51,6 +51,9 @@ public class PluginCompatTesterConfig { private static final Logger LOGGER = Logger.getLogger(PluginCompatTesterConfig.class.getName()); + public static final String DEFAULT_PARENT_GROUP = "org.jenkins-ci.plugins"; + public static final String DEFAULT_PARENT_ARTIFACT = "plugin"; + // Update center used to retrieve plugins informations public String updateCenterUrl = "https://updates.jenkins.io/current/update-center.json"; @@ -67,10 +70,10 @@ public class PluginCompatTesterConfig { // GroupId which will be used to replace tested plugin's parent groupId // If null, every recorded core coordinates (in report xml) will be played - private String parentGroupId = "org.jenkins-ci.plugins"; + private String parentGroupId = DEFAULT_PARENT_GROUP; // ArtifactId which will be used to replace tested plugin's parent artifactId // If null, every recorded core coordinates (in report xml) will be played - private String parentArtifactId = "plugin"; + private String parentArtifactId = DEFAULT_PARENT_ARTIFACT; // Version which will be used to replace tested plugin's parent version // If null, latest core version (retrieved via the update center) will be used private String parentVersion = null; From 3c73912421763031112ab4b5e083105cbe7992df Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 4 Aug 2022 12:08:27 -0400 Subject: [PATCH 5/6] `PluginCompatTesterTest.testBom` failure --- .../org/jenkins/tools/test/model/PluginCompatTesterConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java index 278b70d66..5df894024 100644 --- a/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java +++ b/plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java @@ -129,7 +129,7 @@ public class PluginCompatTesterConfig { private Map mavenProperties = Collections.emptyMap(); private String mavenPropertiesFile; - private List mavenOptions; + private List mavenOptions = Collections.emptyList(); // Classpath prefixes of the extra hooks private List hookPrefixes = new ArrayList<>(Collections.singletonList("org.jenkins")); From a889cc19d99cd356f733a837b5641674e2a9722c Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 4 Aug 2022 13:08:47 -0400 Subject: [PATCH 6/6] `updateCenterUrl` is normally null --- .../java/org/jenkins/tools/test/PluginCompatTesterCli.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java index 8e241b0f6..c4e45524a 100644 --- a/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java +++ b/plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java @@ -95,7 +95,9 @@ public static void main(String[] args) throws IOException, PlexusContainerExcept PluginCompatTesterConfig config = new PluginCompatTesterConfig(); - config.setUpdateCenterUrl(updateCenterUrl); + if (updateCenterUrl != null) { + config.setUpdateCenterUrl(updateCenterUrl); + } config.setWorkDirectory(options.getWorkDirectory()); config.setReportFile(reportFile); config.setM2SettingsFile(options.getM2SettingsFile());