diff --git a/integrations/pom.xml b/integrations/pom.xml index 09794514..0e3e933c 100644 --- a/integrations/pom.xml +++ b/integrations/pom.xml @@ -221,7 +221,7 @@ org.jenkins-ci.plugins job-dsl - 1.72 + 1.73 true diff --git a/support/pom.xml b/support/pom.xml index 7c00fa4c..961dc426 100644 --- a/support/pom.xml +++ b/support/pom.xml @@ -38,19 +38,6 @@ true - - org.jenkins-ci.plugins - job-dsl - 1.66 - true - - - org.codehaus.groovy - groovy-all - - - - org.jenkins-ci.plugins role-strategy diff --git a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/ConfigurableScriptSource.java b/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/ConfigurableScriptSource.java deleted file mode 100644 index e1141c6b..00000000 --- a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/ConfigurableScriptSource.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.jenkins.plugins.casc.support.jobdsl; - -import io.jenkins.plugins.casc.Configurable; -import io.jenkins.plugins.casc.ConfiguratorException; -import io.jenkins.plugins.casc.model.CNode; - -/** - * @author Nicolas De Loof - */ -public abstract class ConfigurableScriptSource extends ScriptSource implements Configurable { - - @Override - public void configure(CNode node) throws ConfiguratorException { - configure(node.asScalar().getValue()); - } - - protected abstract void configure(String value); - - @Override - public void check(CNode node) throws ConfiguratorException { - node.asScalar(); - } - - @Override - public CNode describe() throws Exception { - return null; // Not relevant here - } - -} diff --git a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/FromFileScriptSource.java b/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/FromFileScriptSource.java deleted file mode 100644 index 6998aff1..00000000 --- a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/FromFileScriptSource.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.jenkins.plugins.casc.support.jobdsl; - -import hudson.Extension; -import hudson.model.Descriptor; -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import org.apache.commons.io.FileUtils; -import org.jenkinsci.Symbol; - -/** - * @author Nicolas De Loof - */ -public class FromFileScriptSource extends ConfigurableScriptSource { - - public String path; - - @Override - public void configure(String path) { - this.path = path; - } - - @Override - public String getScript() throws IOException { - return FileUtils.readFileToString(new File(path), StandardCharsets.UTF_8); - } - - @Extension - @Symbol("file") - public static class DescriptorImpl extends Descriptor { - - } -} diff --git a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/FromUrlScriptSource.java b/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/FromUrlScriptSource.java deleted file mode 100644 index 452b9aee..00000000 --- a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/FromUrlScriptSource.java +++ /dev/null @@ -1,33 +0,0 @@ -package io.jenkins.plugins.casc.support.jobdsl; - -import hudson.Extension; -import hudson.model.Descriptor; -import io.jenkins.plugins.casc.Configurable; -import java.io.IOException; -import java.net.URI; -import org.apache.commons.io.IOUtils; -import org.jenkinsci.Symbol; - -/** - * @author Nicolas De Loof - */ -public class FromUrlScriptSource extends ConfigurableScriptSource implements Configurable { - - public String url; - - @Override - public void configure(String url) { - this.url = url; - } - - @Override - public String getScript() throws IOException { - return IOUtils.toString(URI.create(url)); - } - - @Extension - @Symbol("url") - public static class DescriptorImpl extends Descriptor { - - } -} diff --git a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/InlineGroovyScriptSource.java b/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/InlineGroovyScriptSource.java deleted file mode 100644 index a5f4ac53..00000000 --- a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/InlineGroovyScriptSource.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.jenkins.plugins.casc.support.jobdsl; - -import hudson.Extension; -import hudson.model.Descriptor; -import io.jenkins.plugins.casc.Configurable; -import java.io.IOException; -import org.jenkinsci.Symbol; - -/** - * @author Nicolas De Loof - */ -public class InlineGroovyScriptSource extends ConfigurableScriptSource implements Configurable { - - public String script; - - @Override - public void configure(String script) { - this.script = script; - } - - @Override - public String getScript() throws IOException { - return script; - } - - @Extension - @Symbol("script") - public static class DescriptorImpl extends Descriptor { - - } -} diff --git a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/ScriptSource.java b/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/ScriptSource.java deleted file mode 100644 index 2e1591ac..00000000 --- a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/ScriptSource.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.jenkins.plugins.casc.support.jobdsl; - -import hudson.ExtensionPoint; -import hudson.model.AbstractDescribableImpl; -import java.io.IOException; - -/** - * @author Nicolas De Loof - */ -public abstract class ScriptSource extends AbstractDescribableImpl implements ExtensionPoint { - - public abstract String getScript() throws IOException; -} diff --git a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/SeedJobConfigurator.java b/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/SeedJobConfigurator.java deleted file mode 100644 index 387516fc..00000000 --- a/support/src/main/java/io/jenkins/plugins/casc/support/jobdsl/SeedJobConfigurator.java +++ /dev/null @@ -1,118 +0,0 @@ -package io.jenkins.plugins.casc.support.jobdsl; - -import edu.umd.cs.findbugs.annotations.CheckForNull; -import edu.umd.cs.findbugs.annotations.NonNull; -import hudson.Extension; -import io.jenkins.plugins.casc.Attribute; -import io.jenkins.plugins.casc.ConfigurationContext; -import io.jenkins.plugins.casc.Configurator; -import io.jenkins.plugins.casc.ConfiguratorException; -import io.jenkins.plugins.casc.RootElementConfigurator; -import io.jenkins.plugins.casc.SecretSourceResolver; -import io.jenkins.plugins.casc.impl.attributes.MultivaluedAttribute; -import io.jenkins.plugins.casc.model.CNode; -import io.jenkins.plugins.casc.model.Mapping; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import javaposse.jobdsl.dsl.GeneratedItems; -import javaposse.jobdsl.plugin.JenkinsDslScriptLoader; -import javaposse.jobdsl.plugin.JenkinsJobManagement; -import javaposse.jobdsl.plugin.LookupStrategy; -import org.kohsuke.accmod.Restricted; -import org.kohsuke.accmod.restrictions.NoExternalUse; - -import static io.vavr.API.Try; -import static io.vavr.API.unchecked; - -// TODO: Move outside the plugin? -/** - * @author Nicolas De Loof - */ -@Extension(optional = true, ordinal = -100) // Ordinal -100 Ensure it is loaded after GlobalJobDslSecurityConfiguration -@Restricted(NoExternalUse.class) -public class SeedJobConfigurator implements RootElementConfigurator { - - @NonNull - @Override - public String getName() { - return "jobs"; - } - - @Override - @SuppressWarnings("unchecked") - public Class getTarget() { - return GeneratedItems[].class; - } - - @NonNull - @Override - @SuppressWarnings("unchecked") - public Set> describe() { - return Collections.singleton(new MultivaluedAttribute("", ScriptSource.class)); - } - - @Override - public GeneratedItems[] getTargetComponent(ConfigurationContext context) { - return new GeneratedItems[0]; // Doesn't really make sense - } - - @NonNull - @Override - @SuppressWarnings("unchecked") - public GeneratedItems[] configure(CNode config, ConfigurationContext context) throws ConfiguratorException { - JenkinsJobManagement management = new JenkinsJobManagement(System.out, System.getenv(), null, null, LookupStrategy.JENKINS_ROOT); - Configurator configurator = context.lookupOrFail(ScriptSource.class); - return config.asSequence().stream() - .map(source -> getActualValue(source, context)) - .map(source -> getScriptFromSource(source, context, configurator)) - .map(script -> generateFromScript(script, management)) - .toArray(GeneratedItems[]::new); - } - - @Override - public GeneratedItems[] check(CNode config, ConfigurationContext context) throws ConfiguratorException { - // Any way to dry-run a job-dsl script ? - return new GeneratedItems[0]; - } - - @NonNull - @Override - public List> getConfigurators(ConfigurationContext context) { - return Collections.singletonList(context.lookup(ScriptSource.class)); - } - - @CheckForNull - @Override - public CNode describe(GeneratedItems[] instance, ConfigurationContext context) throws Exception { - return null; - } - - private CNode getActualValue(CNode config, ConfigurationContext context) { - return unchecked(() -> config.asMapping().entrySet().stream().findFirst()).apply() - .map(entry -> { - Mapping mapping = new Mapping(); - mapping.put(entry.getKey(), revealSourceOrGetValue(entry, context)); - return (CNode) mapping; - }).orElse(config); - } - - private String revealSourceOrGetValue(Map.Entry entry, ConfigurationContext context) { - String value = unchecked(() -> entry.getValue().asScalar().getValue()).apply(); - return SecretSourceResolver.resolve(context, value); - } - - private GeneratedItems generateFromScript(String script, JenkinsJobManagement management) { - return unchecked(() -> - Try(() -> new JenkinsDslScriptLoader(management).runScript(script)) - .getOrElseThrow(t -> new ConfiguratorException(this, "Failed to execute script with hash " + script.hashCode(), t))).apply(); - } - - private String getScriptFromSource(CNode source, ConfigurationContext context, Configurator configurator) { - return unchecked(() -> - Try(() -> configurator.configure(source, context)) - .getOrElseThrow(t -> new ConfiguratorException(this, "Failed to retrieve job-dsl script", t)) - .getScript()).apply(); - } -}