Custom parameter function takes QueueItem
With the change to use QueueItem, the custom parameter function
has lost some context. Pass a QueueItem instead of a Change in
order to get it back.
Add the parameters to the build object so that they can be used
by URL pattern functions.
Add a NEWS.rst file that lists backwards incompatible changes (of
which this is one).
Change-Id: I526850fb55e25b4b84202820dc3c313d37cbe535
Reviewed-on: https://review.openstack.org/36304
Reviewed-by: Jeremy Stanley <fungi@yuggoth.org>
Reviewed-by: Clark Boylan <clark.boylan@gmail.com>
Approved: James E. Blair <corvus@inaugust.com>
Tested-by: Jenkins
diff --git a/NEWS.rst b/NEWS.rst
new file mode 100644
index 0000000..fd0c32b
--- /dev/null
+++ b/NEWS.rst
@@ -0,0 +1,13 @@
+Since 1.2.0:
+
+* The Jenkins launcher is replaced with Gearman launcher. An internal
+ Gearman server is provided, and there is a Gearman plugin for
+ Jenkins, so migration to the new system should be fairly
+ straightforward. See the Launchers section of the documentation for
+ details.
+
+* The custom parameter function signature now takes a QueueItem as the
+ first argument, rather than the Change. The QueueItem has the full
+ context for why the change is being run (including the pipeline,
+ items ahead and behind, etc.). The Change is still available via
+ the "change" attribute on the QueueItem.
diff --git a/doc/source/zuul.rst b/doc/source/zuul.rst
index d5dabcd..430acf0 100644
--- a/doc/source/zuul.rst
+++ b/doc/source/zuul.rst
@@ -459,15 +459,15 @@
included with the :ref:`includes` directive. The function
should have the following signature:
- .. function:: parameters(change, parameters)
+ .. function:: parameters(item, parameters)
Manipulate the parameters passed to a job before a build is
launched. The ``parameters`` dictionary will already contain the
standard Zuul job parameters, and is expected to be modified
in-place.
- :param change: the current change
- :type change: zuul.model.Change
+ :param item: the current queue item
+ :type item: zuul.model.QueueItem
:param parameters: parameters to be passed to the job
:type parameters: dict
diff --git a/tests/fixtures/custom_functions.py b/tests/fixtures/custom_functions.py
index e796722..4712052 100644
--- a/tests/fixtures/custom_functions.py
+++ b/tests/fixtures/custom_functions.py
@@ -1,2 +1,2 @@
-def select_debian_node(change, params):
+def select_debian_node(item, params):
params['ZUUL_NODE'] = 'debian'
diff --git a/zuul/launcher/gearman.py b/zuul/launcher/gearman.py
index 6b6ca1f..9390eee 100644
--- a/zuul/launcher/gearman.py
+++ b/zuul/launcher/gearman.py
@@ -274,7 +274,7 @@
# ZUUL_SHORT_OLDREV
if callable(job.parameter_function):
- job.parameter_function(item.change, params)
+ job.parameter_function(item, params)
self.log.debug("Custom parameter function used for job %s, "
"change: %s, params: %s" % (job, item.change,
params))
@@ -284,6 +284,7 @@
else:
name = "build:%s" % job.name
build = Build(job, uuid)
+ build.parameters = params
gearman_job = gear.Job(name, json.dumps(params),
unique=uuid)
diff --git a/zuul/model.py b/zuul/model.py
index f1dd0b0..ac475ba 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -465,6 +465,7 @@
self.launch_time = time.time()
self.start_time = None
self.end_time = None
+ self.parameters = {}
self.fraction_complete = None
def __repr__(self):