From f9aba525e52bf5919fe8e4879ee71315928998c0 Mon Sep 17 00:00:00 2001 From: Aftab Alam <88653530+itsAftabAlam@users.noreply.github.com> Date: Mon, 11 Dec 2023 15:57:08 +0530 Subject: [PATCH 1/2] implementing --skip-broken option --- .../tools/pluginmanager/cli/CliOptions.java | 13 +++++++++++++ .../tools/pluginmanager/config/Config.java | 18 ++++++++++++++++-- .../pluginmanager/impl/PluginManager.java | 12 ++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java index bcfe0bd3..f27fc97e 100644 --- a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java +++ b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java @@ -155,6 +155,9 @@ class CliOptions { handler = MultiCredentialsOptionHandler.class) private List credentials; + @Option(name = "--skip-broken", usage = "Lists skipped plugins when enabled", handler = BooleanOptionHandler.class) + private boolean skipBroken; + /** * Creates a configuration class with configurations specified from the CLI and/or environment variables. * @@ -184,6 +187,7 @@ Config setup() { .withSkipFailedPlugins(isSkipFailedPlugins()) .withCredentials(credentials) .withHashFunction(getHashFunction()) + .withSkipBroken(isSkipBroken()) .build(); } @@ -343,6 +347,15 @@ public boolean isVerbose() { return verbose; } + /** + * Gets the value corresponding to if user selected to list skipped plugins + * + * @return true if user selected CLI Option to list skipped plugins + */ + private boolean isSkipBroken() { + return skipBroken; + } + /** * Determines the update center url string. If a value is set via CLI option, it will override a value set via * environment variable. If neither are set, the default in the Settings class will be used. diff --git a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/config/Config.java b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/config/Config.java index fe499c9f..19b27800 100644 --- a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/config/Config.java +++ b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/config/Config.java @@ -56,6 +56,7 @@ public class Config { private final List credentials; private final Path cachePath; private final LogOutput logOutput; + private final boolean skipBroken; private Config( File pluginDir, @@ -80,7 +81,8 @@ private Config( HashFunction hashFunction, List credentials, Path cachePath, - boolean hideWarnings) { + boolean hideWarnings, + boolean skipBroken) { this.pluginDir = pluginDir; this.cleanPluginDir = cleanPluginDir; this.showWarnings = showWarnings; @@ -105,6 +107,7 @@ private Config( this.cachePath = cachePath; this.logOutput = new LogOutput(verbose); this.hideWarnings = hideWarnings; + this.skipBroken = skipBroken; } public File getPluginDir() { @@ -213,6 +216,10 @@ public LogOutput getLogOutput() { return logOutput; } + public boolean isSkipBroken(){ + return skipBroken; + } + public static class Builder { private File pluginDir; private boolean cleanPluginDir; @@ -237,6 +244,7 @@ public static class Builder { private List credentials = Collections.emptyList(); private HashFunction hashFunction = Settings.DEFAULT_HASH_FUNCTION; private Path cachePath = Settings.DEFAULT_CACHE_PATH; + private boolean skipBroken; private Builder() { } @@ -368,6 +376,11 @@ public Builder withCachePath(@NonNull Path cachePath) { return this; } + public Builder withSkipBroken(Boolean skipBroken){ + this.skipBroken = skipBroken; + return this; + } + public Config build() { return new Config( pluginDir, @@ -392,7 +405,8 @@ public Config build() { hashFunction, credentials, cachePath, - hideWarnings + hideWarnings, + skipBroken ); } diff --git a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java index c5be5a14..4c40cbed 100644 --- a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java +++ b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java @@ -242,6 +242,18 @@ public void start(boolean downloadUc) { if (cfg.doDownload()) { downloadPlugins(pluginsToBeDownloaded); } + if(cfg.isSkipBroken()){ + List failedPlugins = getFailedPlugins(); + if(failedPlugins.isEmpty()){ + System.out.println("No plugin is skipped"); + } + else{ + System.out.println("Following plugins are skipped due to failure:"); + for(Plugin failedPlugin: failedPlugins){ + System.out.println(failedPlugin.getName()); + } + } + } logMessage("Done"); } From 044f66d3eadf4041433a9c58d40f986f2b47bc99 Mon Sep 17 00:00:00 2001 From: Aftab Alam <88653530+itsAftabAlam@users.noreply.github.com> Date: Tue, 26 Dec 2023 12:47:52 +0530 Subject: [PATCH 2/2] show unresolved plugins --- .../tools/pluginmanager/impl/PluginManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java index 4c40cbed..c1a82ac5 100644 --- a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java +++ b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/impl/PluginManager.java @@ -236,12 +236,6 @@ public void start(boolean downloadUc) { listPlugins(); showSpecificSecurityWarnings(pluginsToBeDownloaded); checkVersionCompatibility(jenkinsVersion, pluginsToBeDownloaded, exceptions); - if (!exceptions.isEmpty()) { - throw new AggregatePluginPrerequisitesNotMetException(exceptions); - } - if (cfg.doDownload()) { - downloadPlugins(pluginsToBeDownloaded); - } if(cfg.isSkipBroken()){ List failedPlugins = getFailedPlugins(); if(failedPlugins.isEmpty()){ @@ -254,6 +248,12 @@ public void start(boolean downloadUc) { } } } + if (!exceptions.isEmpty()) { + throw new AggregatePluginPrerequisitesNotMetException(exceptions); + } + if (cfg.doDownload()) { + downloadPlugins(pluginsToBeDownloaded); + } logMessage("Done"); }