From a563d7222f84f8c17a2aef5fd8353f85c7386fb1 Mon Sep 17 00:00:00 2001 From: Quinten Yearsley Date: Mon, 11 Dec 2017 16:36:54 -0800 Subject: [PATCH] Add more fields to try-results --json for WPT importer Context: The WPT importer consumes the JSON produced by git cl try-results is consumed and uses it to determine when the CQ has passed (whether all non-experimental cq jobs were successful) and where layout test results are stored. Added fields: created_ts: This could be used to sort builds by time. tags: Includes user_agent tag and experimental tag, as well as experimental: whether the job is experimental Bug: 792652 Change-Id: Ic6099a21b21db668b88b1a8e54aefd84529a2a91 Reviewed-on: https://chromium-review.googlesource.com/819573 Commit-Queue: Quinten Yearsley Reviewed-by: Andrii Shyshkalov --- git_cl.py | 12 +++-- tests/git_cl_test.py | 119 ++++++++++++++++++++++++++++--------------- 2 files changed, 86 insertions(+), 45 deletions(-) diff --git a/git_cl.py b/git_cl.py index 171e2fde8..e7d5c265f 100755 --- a/git_cl.py +++ b/git_cl.py @@ -716,14 +716,18 @@ def write_try_results_json(output_file, builds): """ def convert_build_dict(build): + """Extracts some of the information from one build dict.""" + parameters = json.loads(build.get('parameters_json', '{}')) or {} return { 'buildbucket_id': build.get('id'), - 'status': build.get('status'), - 'result': build.get('result'), 'bucket': build.get('bucket'), - 'builder_name': json.loads( - build.get('parameters_json', '{}')).get('builder_name'), + 'builder_name': parameters.get('builder_name'), + 'created_ts': build.get('created_ts'), + 'experimental': build.get('experimental'), 'failure_reason': build.get('failure_reason'), + 'result': build.get('result'), + 'status': build.get('status'), + 'tags': build.get('tags'), 'url': build.get('url'), } diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py index 7a634dd6c..70aec89b9 100755 --- a/tests/git_cl_test.py +++ b/tests/git_cl_test.py @@ -3175,50 +3175,87 @@ class TestGitCl(TestCase): self.assertRegexpMatches(out.getvalue(), 'Landed as: .*deadbeef') BUILDBUCKET_BUILDS_MAP = { - '9000': { - 'id': '9000', - 'status': 'STARTED', - 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/2', - 'result_details_json': '{"properties": {}}', - 'bucket': 'master.x.y', - 'created_by': 'user:someone@chromium.org', - 'created_ts': '147200002222000', - 'parameters_json': '{"builder_name": "my-builder", "category": ""}', - }, - '8000': { - 'id': '8000', - 'status': 'COMPLETED', - 'result': 'FAILURE', - 'failure_reason': 'BUILD_FAILURE', - 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/1', - 'result_details_json': '{"properties": {}}', - 'bucket': 'master.x.y', - 'created_by': 'user:someone@chromium.org', - 'created_ts': '147200001111000', - 'parameters_json': '{"builder_name": "my-builder", "category": ""}', - }, - } + '9000': { + 'id': '9000', + 'bucket': 'master.x.y', + 'created_by': 'user:someone@chromium.org', + 'created_ts': '147200002222000', + 'experimental': False, + 'parameters_json': json.dumps({ + 'builder_name': 'my-bot', + 'properties': {'category': 'cq'}, + }), + 'status': 'STARTED', + 'tags': [ + 'build_address:x.y/my-bot/2', + 'builder:my-bot', + 'experimental:false', + 'user_agent:cq', + ], + 'url': 'http://build.cr.org/p/x.y/builders/my-bot/builds/2', + }, + '8000': { + 'id': '8000', + 'bucket': 'master.x.y', + 'created_by': 'user:someone@chromium.org', + 'created_ts': '147200001111000', + 'experimental': False, + 'failure_reason': 'BUILD_FAILURE', + 'parameters_json': json.dumps({ + 'builder_name': 'my-bot', + 'properties': {'category': 'cq'}, + }), + 'result_details_json': json.dumps({ + 'properties': {'buildnumber': 1}, + }), + 'result': 'FAILURE', + 'status': 'COMPLETED', + 'tags': [ + 'build_address:x.y/my-bot/1', + 'builder:my-bot', + 'experimental:false', + 'user_agent:cq', + ], + 'url': 'http://build.cr.org/p/x.y/builders/my-bot/builds/1', + }, + } def test_write_try_results_json(self): expected_output = [ - { - 'buildbucket_id': '8000', - 'bucket': 'master.x.y', - 'builder_name': 'my-builder', - 'status': 'COMPLETED', - 'result': 'FAILURE', - 'failure_reason': 'BUILD_FAILURE', - 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/1', - }, - { - 'buildbucket_id': '9000', - 'bucket': 'master.x.y', - 'builder_name': 'my-builder', - 'status': 'STARTED', - 'result': None, - 'failure_reason': None, - 'url': 'http://build.cr.org/p/x.y/builders/my-builder/builds/2', - } + { + 'bucket': 'master.x.y', + 'buildbucket_id': '8000', + 'builder_name': 'my-bot', + 'created_ts': '147200001111000', + 'experimental': False, + 'failure_reason': 'BUILD_FAILURE', + 'result': 'FAILURE', + 'status': 'COMPLETED', + 'tags': [ + 'build_address:x.y/my-bot/1', + 'builder:my-bot', + 'experimental:false', + 'user_agent:cq', + ], + 'url': 'http://build.cr.org/p/x.y/builders/my-bot/builds/1', + }, + { + 'bucket': 'master.x.y', + 'buildbucket_id': '9000', + 'builder_name': 'my-bot', + 'created_ts': '147200002222000', + 'experimental': False, + 'failure_reason': None, + 'result': None, + 'status': 'STARTED', + 'tags': [ + 'build_address:x.y/my-bot/2', + 'builder:my-bot', + 'experimental:false', + 'user_agent:cq', + ], + 'url': 'http://build.cr.org/p/x.y/builders/my-bot/builds/2', + }, ] self.calls = [(('write_json', 'output.json', expected_output), '')] git_cl.write_try_results_json('output.json', self.BUILDBUCKET_BUILDS_MAP)