summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jenkins_jobs/local_yaml.py6
-rw-r--r--jenkins_jobs/modules/helpers.py21
-rw-r--r--jenkins_jobs/modules/project_matrix.py7
-rw-r--r--jenkins_jobs/modules/project_multibranch.py183
-rwxr-xr-xjenkins_jobs/modules/publishers.py29
-rw-r--r--tests/cmd/fixtures/multi-path/output_recursive/job41
-rw-r--r--tests/general/fixtures/custom-workspace002.xml1
-rw-r--r--tests/general/fixtures/matrix-axis-yaml.xml1
-rw-r--r--tests/general/fixtures/matrix-axis001.xml1
-rw-r--r--tests/general/fixtures/matrix-axis002.xml1
-rw-r--r--tests/general/fixtures/matrix-axis003.xml1
-rw-r--r--tests/general/fixtures/matrix-axis004.xml1
-rw-r--r--tests/general/fixtures/matrix-axis005.xml1
-rw-r--r--tests/general/fixtures/project-type002.xml1
-rw-r--r--tests/multibranch/fixtures/multibranch_defaults_id_mode.xml (renamed from tests/multibranch/fixtures/multibranch_defaults.xml)3
-rw-r--r--tests/multibranch/fixtures/multibranch_defaults_id_mode.yaml9
-rw-r--r--tests/multibranch/fixtures/multibranch_defaults_path_mode.xml63
-rw-r--r--tests/multibranch/fixtures/multibranch_defaults_path_mode.yaml (renamed from tests/multibranch/fixtures/multibranch_defaults.yaml)0
-rw-r--r--tests/multibranch/fixtures/scm_github_full.xml5
-rw-r--r--tests/multibranch/fixtures/scm_github_full.yaml3
-rw-r--r--tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.xml59
-rw-r--r--tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.yaml7
-rw-r--r--tests/publishers/fixtures/join-trigger002.xml22
-rw-r--r--tests/publishers/fixtures/join-trigger002.yaml8
-rw-r--r--tests/wrappers/fixtures/matrix-tie-parent.xml1
-rw-r--r--tests/yamlparser/fixtures/custom_distri.xml1
-rw-r--r--tests/yamlparser/fixtures/expand-yaml-for-template-job/dimensionality-test001.xml3
-rw-r--r--tests/yamlparser/fixtures/project-matrix002.xml1
-rw-r--r--tests/yamlparser/fixtures/trigger_parameterized_builds/parameter-override-ordering-003.xml2
29 files changed, 378 insertions, 64 deletions
diff --git a/jenkins_jobs/local_yaml.py b/jenkins_jobs/local_yaml.py
index c22fc3c6..9aeeb9af 100644
--- a/jenkins_jobs/local_yaml.py
+++ b/jenkins_jobs/local_yaml.py
@@ -203,6 +203,7 @@ import io
import logging
import os
import re
+import copy
import jinja2
import yaml
@@ -598,6 +599,11 @@ class LazyLoader(CustomLoader):
def __repr__(self):
return "%s %s" % (self._cls.yaml_tag, self._node.value)
+ def __deepcopy__(self, memodict={}):
+ return LazyLoader(
+ (copy.deepcopy(self._cls), self._loader, copy.deepcopy(self._node))
+ )
+
def format(self, *args, **kwargs):
node = yaml.ScalarNode(
tag=self._node.tag, value=self._node.value.format(*args, **kwargs)
diff --git a/jenkins_jobs/modules/helpers.py b/jenkins_jobs/modules/helpers.py
index 10945c71..258b13cb 100644
--- a/jenkins_jobs/modules/helpers.py
+++ b/jenkins_jobs/modules/helpers.py
@@ -19,6 +19,7 @@ import xml.etree.ElementTree as XML
from jenkins_jobs.errors import InvalidAttributeError
from jenkins_jobs.errors import JenkinsJobsException
from jenkins_jobs.errors import MissingAttributeError
+from jenkins_jobs.modules import hudson_model
def build_trends_publisher(plugin_name, xml_element, data):
@@ -613,6 +614,26 @@ def trigger_project(tconfigs, project_def, param_order=None):
)
+def trigger_threshold(
+ parent_element, element_name, threshold_name, supported_thresholds=None
+):
+ """Generate a resultThreshold XML element for build/join triggers"""
+ element = XML.SubElement(parent_element, element_name)
+
+ try:
+ threshold = hudson_model.THRESHOLDS[threshold_name.upper()]
+ except KeyError:
+ if not supported_thresholds:
+ supported_thresholds = hudson_model.THRESHOLDS.keys()
+ raise JenkinsJobsException(
+ "threshold must be one of %s" % ", ".join(supported_thresholds)
+ )
+ XML.SubElement(element, "name").text = threshold["name"]
+ XML.SubElement(element, "ordinal").text = threshold["ordinal"]
+ XML.SubElement(element, "color").text = threshold["color"]
+ return element
+
+
def convert_mapping_to_xml(parent, data, mapping, fail_required=True):
"""Convert mapping to XML
diff --git a/jenkins_jobs/modules/project_matrix.py b/jenkins_jobs/modules/project_matrix.py
index ebd566f5..01bc431d 100644
--- a/jenkins_jobs/modules/project_matrix.py
+++ b/jenkins_jobs/modules/project_matrix.py
@@ -162,9 +162,10 @@ class Matrix(jenkins_jobs.modules.base.Base):
strategy = data.get(strategy_name, {})
if strategy_name == "execution-strategy":
- XML.SubElement(root, "combinationFilter").text = str(
- strategy.get("combination-filter", "")
- ).rstrip()
+ if "combination-filter" in strategy:
+ XML.SubElement(root, "combinationFilter").text = str(
+ strategy.get("combination-filter", "")
+ ).rstrip()
XML.SubElement(ex_r, "runSequentially").text = str(
strategy.get("sequential", False)
).lower()
diff --git a/jenkins_jobs/modules/project_multibranch.py b/jenkins_jobs/modules/project_multibranch.py
index 93b5f380..49b5f8e3 100644
--- a/jenkins_jobs/modules/project_multibranch.py
+++ b/jenkins_jobs/modules/project_multibranch.py
@@ -60,10 +60,18 @@ Plugins required:
(default '-1, forever')
* **script-path** (`str`): Path to Jenkinsfile, relative to workspace.
(default 'Jenkinsfile')
+ * **script-id** (`str`): Script id from the global Jenkins script store
+ provided by the config-file provider plugin. Mutually exclusive with
+ **script-path** option.
+ * **sandbox** (`bool`): This option is strongly recommended if the
+ Jenkinsfile is using load to evaluate a groovy source file from an
+ SCM repository. Usable only with **script-id** option. (default 'false')
Job examples:
-.. literalinclude:: /../../tests/multibranch/fixtures/multibranch_defaults.yaml
+.. literalinclude:: /../../tests/multibranch/fixtures/multibranch_defaults_id_mode.yaml
+
+.. literalinclude:: /../../tests/multibranch/fixtures/multibranch_defaults_path_mode.yaml
.. literalinclude:: /../../tests/multibranch/fixtures/multi_scm_full.yaml
@@ -85,8 +93,39 @@ logger = logging.getLogger(str(__name__))
class WorkflowMultiBranch(jenkins_jobs.modules.base.Base):
sequence = 0
multibranch_path = "org.jenkinsci.plugins.workflow.multibranch"
+ multibranch_defaults_path = "org.jenkinsci.pipeline.workflow.multibranch"
jenkins_class = "".join([multibranch_path, ".WorkflowMultiBranchProject"])
- jenkins_factory_class = "".join([multibranch_path, ".WorkflowBranchProjectFactory"])
+ jenkins_factory = {
+ "script_path": {
+ "class": "".join([multibranch_path, ".WorkflowBranchProjectFactory"])
+ },
+ "script_id": {
+ "class": "".join(
+ [
+ multibranch_defaults_path,
+ ".defaults.PipelineBranchDefaultsProjectFactory",
+ ]
+ ),
+ "plugin": "pipeline-multibranch-defaults",
+ },
+ }
+
+ @staticmethod
+ def _factory_opts_check(data):
+
+ sandbox = data.get("sandbox", None)
+ script_id = data.get("script-id", None)
+ script_path = data.get("script-path", None)
+
+ if script_id and script_path:
+ error_msg = "script-id and script-path are mutually exclusive options"
+ raise JenkinsJobsException(error_msg)
+ elif not script_id and sandbox:
+ error_msg = (
+ "Sandbox mode is applicable only for multibranch with defaults"
+ "project type used with script-id option"
+ )
+ raise JenkinsJobsException(error_msg)
def root_xml(self, data):
xml_parent = XML.Element(self.jenkins_class)
@@ -268,28 +307,50 @@ class WorkflowMultiBranch(jenkins_jobs.modules.base.Base):
# Factory #
###########
- factory = XML.SubElement(
- xml_parent, "factory", {"class": self.jenkins_factory_class}
- )
+ self._factory_opts_check(data)
+
+ if data.get("script-id"):
+ mode = "script_id"
+ fopts_map = (
+ ("script-id", "scriptId", None),
+ ("sandbox", "useSandbox", None),
+ )
+ else:
+ mode = "script_path"
+ fopts_map = (("script-path", "scriptPath", "Jenkinsfile"),)
+
+ factory = XML.SubElement(xml_parent, "factory", self.jenkins_factory[mode])
XML.SubElement(
factory, "owner", {"class": self.jenkins_class, "reference": "../.."}
)
- XML.SubElement(factory, "scriptPath").text = data.get(
- "script-path", "Jenkinsfile"
- )
+
+ # multibranch default
+
+ helpers.convert_mapping_to_xml(factory, data, fopts_map, fail_required=False)
return xml_parent
class WorkflowMultiBranchDefaults(WorkflowMultiBranch):
- jenkins_class = (
- "org.jenkinsci.plugins.pipeline.multibranch"
- ".defaults.PipelineMultiBranchDefaultsProject"
- )
- jenkins_factory_class = (
- "org.jenkinsci.plugins.pipeline.multibranch"
- ".defaults.PipelineBranchDefaultsProjectFactory"
+ multibranch_path = "org.jenkinsci.plugins.workflow.multibranch"
+ multibranch_defaults_path = "org.jenkinsci.plugins.pipeline.multibranch"
+ jenkins_class = "".join(
+ [multibranch_defaults_path, ".defaults.PipelineMultiBranchDefaultsProject"]
)
+ jenkins_factory = {
+ "script_path": {
+ "class": "".join([multibranch_path, ".WorkflowBranchProjectFactory"]),
+ "plugin": "workflow-multibranch",
+ },
+ "script_id": {
+ "class": "".join(
+ [
+ multibranch_defaults_path,
+ ".defaults.PipelineBranchDefaultsProjectFactory",
+ ]
+ )
+ },
+ }
def bitbucket_scm(xml_parent, data):
@@ -804,7 +865,7 @@ def github_scm(xml_parent, data):
(default 'contributors')
:arg str discover-pr-origin: Discovers pull requests where the origin
repository is the same as the target repository.
- Valid options: merge-current, current, both. (default 'merge-current')
+ Valid options: merge-current, current, both, false. (default 'merge-current')
:arg bool discover-tags: Discovers tags on the repository.
(default false)
:arg list build-strategies: Provides control over whether to build a branch
@@ -946,18 +1007,19 @@ def github_scm(xml_parent, data):
XML.SubElement(dprf, "trust").attrib["class"] = trust_map[trust]
dpro_strategy = data.get("discover-pr-origin", "merge-current")
- dpro = XML.SubElement(
- traits, "".join([github_path_dscore, ".OriginPullRequestDiscoveryTrait"])
- )
- dpro_strategy_map = {"merge-current": "1", "current": "2", "both": "3"}
- if dpro_strategy not in dpro_strategy_map:
- raise InvalidAttributeError(
- "discover-pr-origin", dpro_strategy, dpro_strategy_map.keys()
+ if dpro_strategy:
+ dpro = XML.SubElement(
+ traits, "".join([github_path_dscore, ".OriginPullRequestDiscoveryTrait"])
)
- dpro_mapping = [
- ("discover-pr-origin", "strategyId", "merge-current", dpro_strategy_map)
- ]
- helpers.convert_mapping_to_xml(dpro, data, dpro_mapping, fail_required=True)
+ dpro_strategy_map = {"merge-current": "1", "current": "2", "both": "3"}
+ if dpro_strategy not in dpro_strategy_map:
+ raise InvalidAttributeError(
+ "discover-pr-origin", dpro_strategy, dpro_strategy_map.keys()
+ )
+ dpro_mapping = [
+ ("discover-pr-origin", "strategyId", "merge-current", dpro_strategy_map)
+ ]
+ helpers.convert_mapping_to_xml(dpro, data, dpro_mapping, fail_required=True)
if data.get("head-filter-regex", None):
rshf = XML.SubElement(traits, "jenkins.scm.impl.trait.RegexSCMHeadFilterTrait")
@@ -1193,7 +1255,27 @@ def property_strategies(xml_parent, data):
max-survivability (optional)
Requires the :jenkins-plugins:`Pipeline Multibranch Plugin
<workflow-multibranch>`
-
+ * **trigger-build-on-pr-comment** (str): The comment body to
+ trigger a new build for a PR job when it is received. This
+ is compiled as a case insensitive regular expression, so
+ use ``".*"`` to trigger a build on any comment whatsoever.
+ (optional)
+ Requires the :jenkins-plugins:`GitHub PR Comment Build Plugin
+ <github-pr-comment-build>`
+ * **trigger-build-on-pr-review** (bool): This property will
+ cause a job for a pull request ``(PR-*)`` to be triggered
+ immediately when a review is made on the PR in GitHub.
+ This has no effect on jobs that are not for pull requests.
+ (optional)
+ Requires the :jenkins-plugins:`GitHub PR Comment Build Plugin
+ <github-pr-comment-build>`
+ * **trigger-build-on-pr-update** (bool): This property will
+ cause a job for a pull request ``(PR-*)`` to be triggered
+ immediately when the PR title or description is edited in
+ GitHub. This has no effect on jobs that are not for pull
+ requests. (optional)
+ Requires the :jenkins-plugins:`GitHub PR Comment Build Plugin
+ <github-pr-comment-build>`
* **named-branches** (dict): Named branches get different properties.
Comprised of a list of defaults and a list of property strategy
exceptions for use with specific branches.
@@ -1210,6 +1292,27 @@ def property_strategies(xml_parent, data):
max-survivability (optional)
Requires the :jenkins-plugins:`Pipeline Multibranch Plugin
<workflow-multibranch>`
+ * **trigger-build-on-pr-comment** (str): The comment body to
+ trigger a new build for a PR job when it is received. This
+ is compiled as a case insensitive regular expression, so
+ use ``".*"`` to trigger a build on any comment whatsoever.
+ (optional)
+ Requires the :jenkins-plugins:`GitHub PR Comment Build Plugin
+ <github-pr-comment-build>`
+ * **trigger-build-on-pr-review** (bool): This property will
+ cause a job for a pull request ``(PR-*)`` to be triggered
+ immediately when a review is made on the PR in GitHub.
+ This has no effect on jobs that are not for pull requests.
+ (optional)
+ Requires the :jenkins-plugins:`GitHub PR Comment Build Plugin
+ <github-pr-comment-build>`
+ * **trigger-build-on-pr-update** (bool): This property will
+ cause a job for a pull request ``(PR-*)`` to be triggered
+ immediately when the PR title or description is edited in
+ GitHub. This has no effect on jobs that are not for pull
+ requests. (optional)
+ Requires the :jenkins-plugins:`GitHub PR Comment Build Plugin
+ <github-pr-comment-build>`
* **exceptions** (list): A list of branch names and the property
strategies to be used on that branch, instead of any listed
@@ -1375,6 +1478,7 @@ def apply_property_strategies(props_elem, props_list):
basic_property_strategies = "jenkins.branch"
workflow_multibranch = "org.jenkinsci.plugins.workflow.multibranch"
+ pr_comment_build = "com.adobe.jenkins.github__pr__comment__build"
# Valid options for the pipeline branch durability override.
pbdo_map = collections.OrderedDict(
[
@@ -1384,6 +1488,13 @@ def apply_property_strategies(props_elem, props_list):
]
)
+ pcb_bool_opts = collections.OrderedDict(
+ [
+ ("trigger-build-on-pr-review", ".TriggerPRReviewBranchProperty"),
+ ("trigger-build-on-pr-update", ".TriggerPRUpdateBranchProperty"),
+ ]
+ )
+
for dbs_list in props_list:
if dbs_list.get("suppress-scm-triggering", False):
@@ -1404,3 +1515,19 @@ def apply_property_strategies(props_elem, props_list):
{"plugin": "workflow-multibranch"},
)
XML.SubElement(pbdo_elem, "hint").text = pbdo_map.get(pbdo_val)
+
+ tbopc_val = dbs_list.get("trigger-build-on-pr-comment", None)
+ if tbopc_val:
+ tbopc_elem = XML.SubElement(
+ props_elem,
+ "".join([pr_comment_build, ".TriggerPRCommentBranchProperty"]),
+ {"plugin": "github-pr-comment-build"},
+ )
+ XML.SubElement(tbopc_elem, "commentBody").text = tbopc_val
+ for opt in pcb_bool_opts:
+ if dbs_list.get(opt, False):
+ XML.SubElement(
+ props_elem,
+ "".join([pr_comment_build, pcb_bool_opts.get(opt)]),
+ {"plugin": "github-pr-comment-build"},
+ )
diff --git a/jenkins_jobs/modules/publishers.py b/jenkins_jobs/modules/publishers.py
index 68b93e73..48bb420c 100755
--- a/jenkins_jobs/modules/publishers.py
+++ b/jenkins_jobs/modules/publishers.py
@@ -608,20 +608,12 @@ def trigger(registry, xml_parent, data):
tconfig = XML.SubElement(xml_parent, "hudson.tasks.BuildTrigger")
childProjects = XML.SubElement(tconfig, "childProjects")
childProjects.text = data["project"]
- tthreshold = XML.SubElement(tconfig, "threshold")
threshold = data.get("threshold", "SUCCESS")
supported_thresholds = ["SUCCESS", "UNSTABLE", "FAILURE"]
- if threshold not in supported_thresholds:
- raise JenkinsJobsException(
- "threshold must be one of %s" % ", ".join(supported_thresholds)
- )
- tname = XML.SubElement(tthreshold, "name")
- tname.text = hudson_model.THRESHOLDS[threshold]["name"]
- tordinal = XML.SubElement(tthreshold, "ordinal")
- tordinal.text = hudson_model.THRESHOLDS[threshold]["ordinal"]
- tcolor = XML.SubElement(tthreshold, "color")
- tcolor.text = hudson_model.THRESHOLDS[threshold]["color"]
+ helpers.trigger_threshold(
+ tconfig, "threshold", threshold, supported_thresholds=supported_thresholds
+ )
def clone_workspace(registry, xml_parent, data):
@@ -3501,11 +3493,13 @@ def join_trigger(registry, xml_parent, data):
Trigger a job after all the immediate downstream jobs have completed.
Requires the Jenkins :jenkins-plugins:`Join Plugin <join>`.
- :arg bool even-if-unstable: if true jobs will trigger even if some
- downstream jobs are marked as unstable (default false)
:arg list projects: list of projects to trigger
:arg list publishers: list of triggers from publishers module that
defines projects that need to be triggered
+ :arg str threshold: result threshold to trigger jobs (optional).
+ Valid values are "success", "unstable", "failure", and "aborted".
+ :arg bool even-if-unstable: if true jobs will trigger even if some
+ downstream jobs are marked as unstable (default false) (DEPRECATED)
Example:
@@ -3523,8 +3517,13 @@ def join_trigger(registry, xml_parent, data):
for edited_node in create_publishers(registry, pub):
publishers.append(edited_node)
- unstable = str(data.get("even-if-unstable", "false")).lower()
- XML.SubElement(jointrigger, "evenIfDownstreamUnstable").text = unstable
+ unstable = str(data.get("even-if-unstable", "")).lower()
+ if unstable:
+ XML.SubElement(jointrigger, "evenIfDownstreamUnstable").text = unstable
+
+ threshold = data.get("threshold", "")
+ if threshold:
+ helpers.trigger_threshold(jointrigger, "resultThreshold", threshold)
def jabber(registry, xml_parent, data):
diff --git a/tests/cmd/fixtures/multi-path/output_recursive/job4 b/tests/cmd/fixtures/multi-path/output_recursive/job4
index dd47f962..20f4d7fc 100644
--- a/tests/cmd/fixtures/multi-path/output_recursive/job4
+++ b/tests/cmd/fixtures/multi-path/output_recursive/job4
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes/>
<actions/>
<description>&lt;!-- Managed by Jenkins Job Builder --&gt;</description>
diff --git a/tests/general/fixtures/custom-workspace002.xml b/tests/general/fixtures/custom-workspace002.xml
index a3a266b6..3535e187 100644
--- a/tests/general/fixtures/custom-workspace002.xml
+++ b/tests/general/fixtures/custom-workspace002.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes/>
<actions/>
<keepDependencies>false</keepDependencies>
diff --git a/tests/general/fixtures/matrix-axis-yaml.xml b/tests/general/fixtures/matrix-axis-yaml.xml
index 33724b97..02ef44a0 100644
--- a/tests/general/fixtures/matrix-axis-yaml.xml
+++ b/tests/general/fixtures/matrix-axis-yaml.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<org.jenkinsci.plugins.yamlaxis.YamlAxis>
<name>python</name>
diff --git a/tests/general/fixtures/matrix-axis001.xml b/tests/general/fixtures/matrix-axis001.xml
index da2c6c0d..25929b6b 100644
--- a/tests/general/fixtures/matrix-axis001.xml
+++ b/tests/general/fixtures/matrix-axis001.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<ca.silvermaplesolutions.jenkins.plugins.daxis.DynamicAxis>
<name>config</name>
diff --git a/tests/general/fixtures/matrix-axis002.xml b/tests/general/fixtures/matrix-axis002.xml
index fa00869b..1f6363bf 100644
--- a/tests/general/fixtures/matrix-axis002.xml
+++ b/tests/general/fixtures/matrix-axis002.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<ca.silvermaplesolutions.jenkins.plugins.daxis.DynamicAxis>
<name>config</name>
diff --git a/tests/general/fixtures/matrix-axis003.xml b/tests/general/fixtures/matrix-axis003.xml
index 538337cc..1541278d 100644
--- a/tests/general/fixtures/matrix-axis003.xml
+++ b/tests/general/fixtures/matrix-axis003.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<jenkins.plugins.shiningpanda.matrix.PythonAxis>
<name>PYTHON</name>
diff --git a/tests/general/fixtures/matrix-axis004.xml b/tests/general/fixtures/matrix-axis004.xml
index 1c055910..ce276723 100644
--- a/tests/general/fixtures/matrix-axis004.xml
+++ b/tests/general/fixtures/matrix-axis004.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<hudson.matrix.JDKAxis>
<name>jdk</name>
diff --git a/tests/general/fixtures/matrix-axis005.xml b/tests/general/fixtures/matrix-axis005.xml
index 69122611..753e4d10 100644
--- a/tests/general/fixtures/matrix-axis005.xml
+++ b/tests/general/fixtures/matrix-axis005.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<ca.silvermaplesolutions.jenkins.plugins.daxis.DynamicAxis>
<name>config</name>
diff --git a/tests/general/fixtures/project-type002.xml b/tests/general/fixtures/project-type002.xml
index ede8bc0a..ae27ec89 100644
--- a/tests/general/fixtures/project-type002.xml
+++ b/tests/general/fixtures/project-type002.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes/>
<actions/>
<keepDependencies>false</keepDependencies>
diff --git a/tests/multibranch/fixtures/multibranch_defaults.xml b/tests/multibranch/fixtures/multibranch_defaults_id_mode.xml
index 94859b22..8136ab90 100644
--- a/tests/multibranch/fixtures/multibranch_defaults.xml
+++ b/tests/multibranch/fixtures/multibranch_defaults_id_mode.xml
@@ -58,6 +58,7 @@
</sources>
<factory class="org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineBranchDefaultsProjectFactory">
<owner class="org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject" reference="../.."/>
- <scriptPath>Jenkinsfile</scriptPath>
+ <scriptId>my-pipeline</scriptId>
+ <useSandbox>true</useSandbox>
</factory>
</org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject>
diff --git a/tests/multibranch/fixtures/multibranch_defaults_id_mode.yaml b/tests/multibranch/fixtures/multibranch_defaults_id_mode.yaml
new file mode 100644
index 00000000..b7b52f1a
--- /dev/null
+++ b/tests/multibranch/fixtures/multibranch_defaults_id_mode.yaml
@@ -0,0 +1,9 @@
+name: 'demo-multibranch-defaults'
+project-type: multibranch-defaults
+script-id: my-pipeline
+sandbox: true
+scm:
+ - github:
+ repo: 'foo'
+ repo-owner: 'johndoe'
+ credentials-id: 'secret'
diff --git a/tests/multibranch/fixtures/multibranch_defaults_path_mode.xml b/tests/multibranch/fixtures/multibranch_defaults_path_mode.xml
new file mode 100644
index 00000000..c8a0070e
--- /dev/null
+++ b/tests/multibranch/fixtures/multibranch_defaults_path_mode.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject plugin="workflow-multibranch">
+ <properties/>
+ <views>
+ <hudson.model.AllView>
+ <name>All</name>
+ <filterExecutors>false</filterExecutors>
+ <filterQueue>false</filterQueue>
+ <properties class="hudson.model.View$PropertyList"/>
+ <owner class="org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject" reference="../../.."/>
+ </hudson.model.AllView>
+ </views>
+ <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
+ <folderViews class="jenkins.branch.MultiBranchProjectViewHolder" plugin="branch-api">
+ <owner class="org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject" reference="../.."/>
+ </folderViews>
+ <healthMetrics>
+ <com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric plugin="cloudbees-folder">
+ <nonRecursive>false</nonRecursive>
+ </com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric>
+ </healthMetrics>
+ <icon class="jenkins.branch.MetadataActionFolderIcon" plugin="branch-api">
+ <owner class="org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject" reference="../.."/>
+ </icon>
+ <orphanedItemStrategy class="com.cloudbees.hudson.plugins.folder.computed.DefaultOrphanedItemStrategy" plugin="cloudbees-folder">
+ <pruneDeadBranches>true</pruneDeadBranches>
+ <daysToKeep>-1</daysToKeep>
+ <numToKeep>-1</numToKeep>
+ </orphanedItemStrategy>
+ <triggers/>
+ <sources class="jenkins.branch.MultiBranchProject$BranchSourceList" plugin="branch-api">
+ <data>
+ <jenkins.branch.BranchSource>
+ <source class="org.jenkinsci.plugins.github_branch_source.GitHubSCMSource" plugin="github-branch-source">
+ <id>gh-johndoe-foo</id>
+ <repoOwner>johndoe</repoOwner>
+ <repository>foo</repository>
+ <credentialsId>secret</credentialsId>
+ <traits>
+ <org.jenkinsci.plugins.github__branch__source.BranchDiscoveryTrait>
+ <strategyId>1</strategyId>
+ </org.jenkinsci.plugins.github__branch__source.BranchDiscoveryTrait>
+ <org.jenkinsci.plugins.github__branch__source.ForkPullRequestDiscoveryTrait>
+ <strategyId>1</strategyId>
+ <trust class="org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustContributors"/>
+ </org.jenkinsci.plugins.github__branch__source.ForkPullRequestDiscoveryTrait>
+ <org.jenkinsci.plugins.github__branch__source.OriginPullRequestDiscoveryTrait>
+ <strategyId>1</strategyId>
+ </org.jenkinsci.plugins.github__branch__source.OriginPullRequestDiscoveryTrait>
+ <jenkins.plugins.git.traits.WipeWorkspaceTrait>
+ <extension class="hudson.plugins.git.extensions.impl.WipeWorkspace"/>
+ </jenkins.plugins.git.traits.WipeWorkspaceTrait>
+ </traits>
+ </source>
+ </jenkins.branch.BranchSource>
+ </data>
+ <owner class="org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject" reference="../.."/>
+ </sources>
+ <factory class="org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory" plugin="workflow-multibranch">
+ <owner class="org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject" reference="../.."/>
+ <scriptPath>Jenkinsfile</scriptPath>
+ </factory>
+</org.jenkinsci.plugins.pipeline.multibranch.defaults.PipelineMultiBranchDefaultsProject>
diff --git a/tests/multibranch/fixtures/multibranch_defaults.yaml b/tests/multibranch/fixtures/multibranch_defaults_path_mode.yaml
index 51e41beb..51e41beb 100644
--- a/tests/multibranch/fixtures/multibranch_defaults.yaml
+++ b/tests/multibranch/fixtures/multibranch_defaults_path_mode.yaml
diff --git a/tests/multibranch/fixtures/scm_github_full.xml b/tests/multibranch/fixtures/scm_github_full.xml
index 2d914b2b..6a52b72a 100644
--- a/tests/multibranch/fixtures/scm_github_full.xml
+++ b/tests/multibranch/fixtures/scm_github_full.xml
@@ -107,6 +107,11 @@
<org.jenkinsci.plugins.workflow.multibranch.DurabilityHintBranchProperty plugin="workflow-multibranch">
<hint>MAX_SURVIVABILITY</hint>
</org.jenkinsci.plugins.workflow.multibranch.DurabilityHintBranchProperty>
+ <com.adobe.jenkins.github__pr__comment__build.TriggerPRCommentBranchProperty plugin="github-pr-comment-build">
+ <commentBody>Ci build!</commentBody>
+ </com.adobe.jenkins.github__pr__comment__build.TriggerPRCommentBranchProperty>
+ <com.adobe.jenkins.github__pr__comment__build.TriggerPRReviewBranchProperty plugin="github-pr-comment-build"/>
+ <com.adobe.jenkins.github__pr__comment__build.TriggerPRUpdateBranchProperty plugin="github-pr-comment-build"/>
</a>
</properties>
</strategy>
diff --git a/tests/multibranch/fixtures/scm_github_full.yaml b/tests/multibranch/fixtures/scm_github_full.yaml
index 42350c67..591e0fd8 100644
--- a/tests/multibranch/fixtures/scm_github_full.yaml
+++ b/tests/multibranch/fixtures/scm_github_full.yaml
@@ -20,6 +20,9 @@ scm:
all-branches:
- suppress-scm-triggering: true
- pipeline-branch-durability-override: max-survivability
+ - trigger-build-on-pr-comment: "Ci build!"
+ - trigger-build-on-pr-review: true
+ - trigger-build-on-pr-update: true
build-strategies:
- tags:
ignore-tags-newer-than: 1
diff --git a/tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.xml b/tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.xml
new file mode 100644
index 00000000..d700a816
--- /dev/null
+++ b/tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject plugin="workflow-multibranch">
+ <properties/>
+ <views>
+ <hudson.model.AllView>
+ <name>All</name>
+ <filterExecutors>false</filterExecutors>
+ <filterQueue>false</filterQueue>
+ <properties class="hudson.model.View$PropertyList"/>
+ <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../../.."/>
+ </hudson.model.AllView>
+ </views>
+ <viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
+ <folderViews class="jenkins.branch.MultiBranchProjectViewHolder" plugin="branch-api">
+ <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
+ </folderViews>
+ <healthMetrics>
+ <com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric plugin="cloudbees-folder">
+ <nonRecursive>false</nonRecursive>
+ </com.cloudbees.hudson.plugins.folder.health.WorstChildHealthMetric>
+ </healthMetrics>
+ <icon class="jenkins.branch.MetadataActionFolderIcon" plugin="branch-api">
+ <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
+ </icon>
+ <orphanedItemStrategy class="com.cloudbees.hudson.plugins.folder.computed.DefaultOrphanedItemStrategy" plugin="cloudbees-folder">
+ <pruneDeadBranches>true</pruneDeadBranches>
+ <daysToKeep>-1</daysToKeep>
+ <numToKeep>-1</numToKeep>
+ </orphanedItemStrategy>
+ <triggers/>
+ <sources class="jenkins.branch.MultiBranchProject$BranchSourceList" plugin="branch-api">
+ <data>
+ <jenkins.branch.BranchSource>
+ <source class="org.jenkinsci.plugins.github_branch_source.GitHubSCMSource" plugin="github-branch-source">
+ <id>gh-johndoe-foo</id>
+ <repoOwner>johndoe</repoOwner>
+ <repository>foo</repository>
+ <traits>
+ <org.jenkinsci.plugins.github__branch__source.BranchDiscoveryTrait>
+ <strategyId>1</strategyId>
+ </org.jenkinsci.plugins.github__branch__source.BranchDiscoveryTrait>
+ <org.jenkinsci.plugins.github__branch__source.ForkPullRequestDiscoveryTrait>
+ <strategyId>1</strategyId>
+ <trust class="org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustContributors"/>
+ </org.jenkinsci.plugins.github__branch__source.ForkPullRequestDiscoveryTrait>
+ <jenkins.plugins.git.traits.WipeWorkspaceTrait>
+ <extension class="hudson.plugins.git.extensions.impl.WipeWorkspace"/>
+ </jenkins.plugins.git.traits.WipeWorkspaceTrait>
+ </traits>
+ </source>
+ </jenkins.branch.BranchSource>
+ </data>
+ <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
+ </sources>
+ <factory class="org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory">
+ <owner class="org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject" reference="../.."/>
+ <scriptPath>Jenkinsfile</scriptPath>
+ </factory>
+</org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject>
diff --git a/tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.yaml b/tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.yaml
new file mode 100644
index 00000000..7852137e
--- /dev/null
+++ b/tests/multibranch/fixtures/scm_github_no_origin_pr_discovery.yaml
@@ -0,0 +1,7 @@
+name: 'demo-multibranch-github-no-fork-prs'
+project-type: multibranch
+scm:
+ - github:
+ repo: 'foo'
+ repo-owner: 'johndoe'
+ discover-pr-origin: no
diff --git a/tests/publishers/fixtures/join-trigger002.xml b/tests/publishers/fixtures/join-trigger002.xml
new file mode 100644
index 00000000..9df79716
--- /dev/null
+++ b/tests/publishers/fixtures/join-trigger002.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<project>
+ <publishers>
+ <hudson.tasks.BuildTrigger>
+ <childProjects>project-1,project-2</childProjects>
+ <threshold>
+ <name>FAILURE</name>
+ <ordinal>2</ordinal>
+ <color>RED</color>
+ </threshold>
+ </hudson.tasks.BuildTrigger>
+ <join.JoinTrigger>
+ <joinProjects>cleanup</joinProjects>
+ <joinPublishers/>
+ <resultThreshold>
+ <name>FAILURE</name>
+ <ordinal>2</ordinal>
+ <color>RED</color>
+ </resultThreshold>
+ </join.JoinTrigger>
+ </publishers>
+</project>
diff --git a/tests/publishers/fixtures/join-trigger002.yaml b/tests/publishers/fixtures/join-trigger002.yaml
new file mode 100644
index 00000000..80940e47
--- /dev/null
+++ b/tests/publishers/fixtures/join-trigger002.yaml
@@ -0,0 +1,8 @@
+publishers:
+ - trigger:
+ project: project-1,project-2
+ threshold: failure
+ - join-trigger:
+ projects:
+ - cleanup
+ threshold: failure
diff --git a/tests/wrappers/fixtures/matrix-tie-parent.xml b/tests/wrappers/fixtures/matrix-tie-parent.xml
index 9d2c65b8..f88d63b5 100644
--- a/tests/wrappers/fixtures/matrix-tie-parent.xml
+++ b/tests/wrappers/fixtures/matrix-tie-parent.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes/>
<buildWrappers>
<matrixtieparent.BuildWrapperMtp>
diff --git a/tests/yamlparser/fixtures/custom_distri.xml b/tests/yamlparser/fixtures/custom_distri.xml
index a12900d8..cf9e6467 100644
--- a/tests/yamlparser/fixtures/custom_distri.xml
+++ b/tests/yamlparser/fixtures/custom_distri.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<hudson.matrix.TextAxis>
<name>distribution</name>
diff --git a/tests/yamlparser/fixtures/expand-yaml-for-template-job/dimensionality-test001.xml b/tests/yamlparser/fixtures/expand-yaml-for-template-job/dimensionality-test001.xml
index 8d582dba..0923b125 100644
--- a/tests/yamlparser/fixtures/expand-yaml-for-template-job/dimensionality-test001.xml
+++ b/tests/yamlparser/fixtures/expand-yaml-for-template-job/dimensionality-test001.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<hudson.matrix.TextAxis>
<name>PLATFORM</name>
@@ -32,7 +31,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<hudson.matrix.TextAxis>
<name>PLATFORM</name>
@@ -61,7 +59,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<hudson.matrix.TextAxis>
<name>PLATFORM</name>
diff --git a/tests/yamlparser/fixtures/project-matrix002.xml b/tests/yamlparser/fixtures/project-matrix002.xml
index a31faada..e9fe8630 100644
--- a/tests/yamlparser/fixtures/project-matrix002.xml
+++ b/tests/yamlparser/fixtures/project-matrix002.xml
@@ -9,7 +9,6 @@
<color>BLUE</color>
</touchStoneResultCondition>
</executionStrategy>
- <combinationFilter/>
<axes/>
<actions/>
<description>&lt;!-- Managed by Jenkins Job Builder --&gt;</description>
diff --git a/tests/yamlparser/fixtures/trigger_parameterized_builds/parameter-override-ordering-003.xml b/tests/yamlparser/fixtures/trigger_parameterized_builds/parameter-override-ordering-003.xml
index f2bf89fa..18637ea3 100644
--- a/tests/yamlparser/fixtures/trigger_parameterized_builds/parameter-override-ordering-003.xml
+++ b/tests/yamlparser/fixtures/trigger_parameterized_builds/parameter-override-ordering-003.xml
@@ -3,7 +3,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<hudson.matrix.TextAxis>
<name>foo_bar</name>
@@ -45,7 +44,6 @@
<executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl">
<runSequentially>false</runSequentially>
</executionStrategy>
- <combinationFilter/>
<axes>
<hudson.matrix.TextAxis>
<name>foo_bar</name>