From cded3ea64f3a24ea0cb716204cfbc2d44ad3fa03 Mon Sep 17 00:00:00 2001 From: machenbach Date: Fri, 20 Nov 2015 06:49:29 -0800 Subject: [PATCH] [release] Add json output to release tools. This will allow callers (e.g. the infra recipe) to check which steps have been executed and monitor success/failure. BUG=chromium:559141 LOG=n NOTRY=true Review URL: https://codereview.chromium.org/1463143004 Cr-Commit-Position: refs/heads/master@{#32150} --- tools/release/auto_roll.py | 30 ++++-------------------------- tools/release/common_includes.py | 19 +++++++++++++++---- tools/release/test_scripts.py | 18 ------------------ 3 files changed, 19 insertions(+), 48 deletions(-) diff --git a/tools/release/auto_roll.py b/tools/release/auto_roll.py index f7692cf6f9..4cb83c78eb 100755 --- a/tools/release/auto_roll.py +++ b/tools/release/auto_roll.py @@ -13,31 +13,6 @@ from common_includes import * import chromium_roll -class CheckActiveRoll(Step): - MESSAGE = "Check active roll." - - @staticmethod - def ContainsChromiumRoll(changes): - for change in changes: - if change["subject"].startswith("Update V8 to"): - return True - return False - - def RunStep(self): - params = { - "closed": 3, - "owner": self._options.author, - "limit": 30, - "format": "json", - } - params = urllib.urlencode(params) - search_url = "https://codereview.chromium.org/search" - result = self.ReadURL(search_url, params, wait_plan=[5, 20]) - if self.ContainsChromiumRoll(json.loads(result)["results"]): - print "Stop due to existing Chromium roll." - return True - - class DetectLastRoll(Step): MESSAGE = "Detect commit ID of the last Chromium roll." @@ -96,6 +71,8 @@ class RollChromium(Step): args.append("--dry-run") if self._options.work_dir: args.extend(["--work-dir", self._options.work_dir]) + if self._options.chromium_roll_json_output: + args.extend(["--json-output", self._options.chromium_roll_json_output]) self._side_effect_handler.Call(chromium_roll.ChromiumRoll().Run, args) @@ -104,6 +81,8 @@ class AutoRoll(ScriptsBase): parser.add_argument("-c", "--chromium", required=True, help=("The path to your Chromium src/ " "directory to automate the V8 roll.")) + parser.add_argument("--chromium-roll-json-output", + help="File to write wrapped results summary to.") parser.add_argument("--max-age", default=3, type=int, help="Maximum age in days of the latest release.") parser.add_argument("--roll", help="Call Chromium roll script.", @@ -125,7 +104,6 @@ class AutoRoll(ScriptsBase): def _Steps(self): return [ - CheckActiveRoll, DetectLastRoll, RollChromium, ] diff --git a/tools/release/common_includes.py b/tools/release/common_includes.py index 41fe359624..8c69458fac 100644 --- a/tools/release/common_includes.py +++ b/tools/release/common_includes.py @@ -738,7 +738,7 @@ class Step(GitRecipesMixin): class BootstrapStep(Step): - MESSAGE = "Bootstapping v8 checkout." + MESSAGE = "Bootstrapping v8 checkout." def RunStep(self): if os.path.realpath(self.default_cwd) == os.path.realpath(V8_BASE): @@ -838,6 +838,8 @@ class ScriptsBase(object): help="The author email used for rietveld.") parser.add_argument("--dry-run", default=False, action="store_true", help="Perform only read-only actions.") + parser.add_argument("--json-output", + help="File to write results summary to.") parser.add_argument("-r", "--reviewer", default="", help="The account name to be used for reviews.") parser.add_argument("--sheriff", default=False, action="store_true", @@ -896,9 +898,18 @@ class ScriptsBase(object): for (number, step_class) in enumerate([BootstrapStep] + step_classes): steps.append(MakeStep(step_class, number, self._state, self._config, options, self._side_effect_handler)) - for step in steps[options.step:]: - if step.Run(): - return 0 + step_summary = [] + try: + for step in steps[options.step:]: + terminate = step.Run() + step_summary.append(step._text) + if terminate: + return 0 + finally: + if options.json_output: + with open(options.json_output, "w") as f: + json.dump({"step_summary": step_summary}, f) + return 0 def Run(self, args=None): diff --git a/tools/release/test_scripts.py b/tools/release/test_scripts.py index 825c191d4e..9dafe2d9cd 100644 --- a/tools/release/test_scripts.py +++ b/tools/release/test_scripts.py @@ -1103,18 +1103,6 @@ TBR=g_name@chromium.org,reviewer@chromium.org""" self.assertEquals("abc123", state["candidate"]) - def testAutoRollExistingRoll(self): - self.Expect([ - URL("https://codereview.chromium.org/search", - "owner=author%40chromium.org&limit=30&closed=3&format=json", - ("{\"results\": [{\"subject\": \"different\"}," - "{\"subject\": \"Update V8 to Version...\"}]}")), - ]) - - result = auto_roll.AutoRoll(TEST_CONFIG, self).Run( - AUTO_PUSH_ARGS + ["-c", TEST_CONFIG["CHROMIUM"]]) - self.assertEquals(0, result) - # Snippet from the original DEPS file. FAKE_DEPS = """ vars = { @@ -1131,9 +1119,6 @@ deps = { TEST_CONFIG["CHROMIUM"] = self.MakeEmptyTempDirectory() TextToFile(self.FAKE_DEPS, os.path.join(TEST_CONFIG["CHROMIUM"], "DEPS")) self.Expect([ - URL("https://codereview.chromium.org/search", - "owner=author%40chromium.org&limit=30&closed=3&format=json", - ("{\"results\": [{\"subject\": \"different\"}]}")), Cmd("git fetch origin +refs/tags/*:refs/tags/*", ""), Cmd("git rev-list --max-age=740800 --tags", "bad_tag\nhash_234\nhash_123"), @@ -1154,9 +1139,6 @@ deps = { TextToFile(self.FAKE_DEPS, os.path.join(TEST_CONFIG["CHROMIUM"], "DEPS")) self.Expect([ - URL("https://codereview.chromium.org/search", - "owner=author%40chromium.org&limit=30&closed=3&format=json", - ("{\"results\": [{\"subject\": \"different\"}]}")), Cmd("git fetch origin +refs/tags/*:refs/tags/*", ""), Cmd("git rev-list --max-age=740800 --tags", "bad_tag\nhash_234\nhash_123"),