| # Copyright 2018 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from recipe_engine import recipe_api |
| |
| CATAPULT_URL = "https://chromeperf.appspot.com" |
| |
| |
| class CatapultApi(recipe_api.RecipeApi): |
| """CatapultApi provides support for the Catapult infra tool.""" |
| |
| @property |
| def _catapult(self): |
| return self.m.ensure_tool("catapult", self.resource("tool_manifest.json")) |
| |
| def upload_test_outputs(self, output_dir): |
| """Uploads test outputs to Catapult from a specified directory. |
| |
| Uploads only Catapult HistogramSet JSON files with the expected catapult |
| extension (.catapult_json) |
| |
| Args: |
| output_dir (Path): A directory containing catapult files produced by |
| the tests. |
| """ |
| for filepath in self.m.file.glob_paths( |
| "locate catapult files", |
| output_dir, |
| pattern=self.m.path.join("**", "*.catapult_json"), |
| test_data=["benchmark.catapult_json"], |
| ): |
| basename = self.m.path.basename(filepath) |
| with self.m.step.nest(f"upload {basename}"): |
| self._run("upload", "-url", CATAPULT_URL, "-timeout", "60s", filepath) |
| |
| def _run(self, subcommand, *flags, **kwargs): |
| """Return a catapult command step. |
| |
| Args: |
| subcommand (str): The Catapult CLI command to run; e.g. |
| 'make_histogram' or 'update'. |
| flags (seq(str)): Flags to pass to the subcommand. |
| kwargs (dict): Passed through to api.step(). |
| """ |
| cmd = [self._catapult, subcommand] |
| cmd.extend(flags) |
| with self.m.context(infra_steps=True): |
| return self.m.step("catapult " + subcommand, cmd, **kwargs) |