Merge "Add configurable footer-message reports"
This commit is contained in:
commit
b9abf2f090
|
@ -238,6 +238,11 @@ explanation of each of the parameters::
|
||||||
reported back to Gerrit when at least one voting build fails.
|
reported back to Gerrit when at least one voting build fails.
|
||||||
Defaults to "Build failed."
|
Defaults to "Build failed."
|
||||||
|
|
||||||
|
**footer-message**
|
||||||
|
An optional field to supply additional information after test results.
|
||||||
|
Useful for adding information about the CI system such as debugging
|
||||||
|
and contact details.
|
||||||
|
|
||||||
**manager**
|
**manager**
|
||||||
There are currently two schemes for managing pipelines:
|
There are currently two schemes for managing pipelines:
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
includes:
|
||||||
|
- python-file: custom_functions.py
|
||||||
|
|
||||||
|
pipelines:
|
||||||
|
- name: gate
|
||||||
|
manager: DependentPipelineManager
|
||||||
|
failure-message: Build failed. For information on how to proceed, see http://wiki.example.org/Test_Failures
|
||||||
|
footer-message: For CI problems and help debugging, contact ci@example.org
|
||||||
|
trigger:
|
||||||
|
gerrit:
|
||||||
|
- event: comment-added
|
||||||
|
approval:
|
||||||
|
- approved: 1
|
||||||
|
success:
|
||||||
|
gerrit:
|
||||||
|
verified: 2
|
||||||
|
submit: true
|
||||||
|
smtp:
|
||||||
|
to: success@example.org
|
||||||
|
failure:
|
||||||
|
gerrit:
|
||||||
|
verified: -2
|
||||||
|
smtp:
|
||||||
|
to: failure@example.org
|
||||||
|
start:
|
||||||
|
gerrit:
|
||||||
|
verified: 0
|
||||||
|
precedence: high
|
||||||
|
|
||||||
|
projects:
|
||||||
|
- name: org/project
|
||||||
|
gate:
|
||||||
|
- test1
|
||||||
|
- test2
|
|
@ -3672,3 +3672,43 @@ class TestScheduler(testtools.TestCase):
|
||||||
self.worker.hold_jobs_in_build = False
|
self.worker.hold_jobs_in_build = False
|
||||||
self.worker.release()
|
self.worker.release()
|
||||||
self.waitUntilSettled()
|
self.waitUntilSettled()
|
||||||
|
|
||||||
|
def test_footer_message(self):
|
||||||
|
"Test a pipeline's footer message is correctly added to the report."
|
||||||
|
self.config.set('zuul', 'layout_config',
|
||||||
|
'tests/fixtures/layout-footer-message.yaml')
|
||||||
|
self.sched.reconfigure(self.config)
|
||||||
|
self.registerJobs()
|
||||||
|
|
||||||
|
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
||||||
|
A.addApproval('CRVW', 2)
|
||||||
|
self.worker.addFailTest('test1', A)
|
||||||
|
self.fake_gerrit.addEvent(A.addApproval('APRV', 1))
|
||||||
|
self.waitUntilSettled()
|
||||||
|
|
||||||
|
B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
|
||||||
|
B.addApproval('CRVW', 2)
|
||||||
|
self.fake_gerrit.addEvent(B.addApproval('APRV', 1))
|
||||||
|
self.waitUntilSettled()
|
||||||
|
|
||||||
|
self.assertEqual(2, len(self.smtp_messages))
|
||||||
|
|
||||||
|
failure_body = """\
|
||||||
|
Build failed. For information on how to proceed, see \
|
||||||
|
http://wiki.example.org/Test_Failures
|
||||||
|
|
||||||
|
- test1 http://logs.example.com/1/1/gate/test1/0 : FAILURE in 0s
|
||||||
|
- test2 http://logs.example.com/1/1/gate/test2/1 : SUCCESS in 0s
|
||||||
|
|
||||||
|
For CI problems and help debugging, contact ci@example.org"""
|
||||||
|
|
||||||
|
success_body = """\
|
||||||
|
Build succeeded.
|
||||||
|
|
||||||
|
- test1 http://logs.example.com/2/1/gate/test1/2 : SUCCESS in 0s
|
||||||
|
- test2 http://logs.example.com/2/1/gate/test2/3 : SUCCESS in 0s
|
||||||
|
|
||||||
|
For CI problems and help debugging, contact ci@example.org"""
|
||||||
|
|
||||||
|
self.assertEqual(failure_body, self.smtp_messages[0]['body'])
|
||||||
|
self.assertEqual(success_body, self.smtp_messages[1]['body'])
|
||||||
|
|
|
@ -79,6 +79,7 @@ class LayoutSchema(object):
|
||||||
'description': str,
|
'description': str,
|
||||||
'success-message': str,
|
'success-message': str,
|
||||||
'failure-message': str,
|
'failure-message': str,
|
||||||
|
'footer-message': str,
|
||||||
'dequeue-on-new-patchset': bool,
|
'dequeue-on-new-patchset': bool,
|
||||||
'trigger': trigger,
|
'trigger': trigger,
|
||||||
'success': report_actions,
|
'success': report_actions,
|
||||||
|
|
|
@ -64,6 +64,7 @@ class Pipeline(object):
|
||||||
self.description = None
|
self.description = None
|
||||||
self.failure_message = None
|
self.failure_message = None
|
||||||
self.success_message = None
|
self.success_message = None
|
||||||
|
self.footer_message = None
|
||||||
self.dequeue_on_new_patchset = True
|
self.dequeue_on_new_patchset = True
|
||||||
self.job_trees = {} # project -> JobTree
|
self.job_trees = {} # project -> JobTree
|
||||||
self.manager = None
|
self.manager = None
|
||||||
|
|
|
@ -228,6 +228,7 @@ class Scheduler(threading.Thread):
|
||||||
"Build failed.")
|
"Build failed.")
|
||||||
pipeline.success_message = conf_pipeline.get('success-message',
|
pipeline.success_message = conf_pipeline.get('success-message',
|
||||||
"Build succeeded.")
|
"Build succeeded.")
|
||||||
|
pipeline.footer_message = conf_pipeline.get('footer-message', "")
|
||||||
pipeline.dequeue_on_new_patchset = conf_pipeline.get(
|
pipeline.dequeue_on_new_patchset = conf_pipeline.get(
|
||||||
'dequeue-on-new-patchset', True)
|
'dequeue-on-new-patchset', True)
|
||||||
|
|
||||||
|
@ -1438,6 +1439,8 @@ class BasePipelineManager(object):
|
||||||
name = job.name + ' '
|
name = job.name + ' '
|
||||||
ret += '- %s%s : %s%s%s\n' % (name, url, result, elapsed,
|
ret += '- %s%s : %s%s%s\n' % (name, url, result, elapsed,
|
||||||
voting)
|
voting)
|
||||||
|
ret += '\n'
|
||||||
|
ret += self.pipeline.footer_message
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def formatDescription(self, build):
|
def formatDescription(self, build):
|
||||||
|
|
Loading…
Reference in New Issue