From 1ed2ae45f59c2864ea05838b4da2750b85472824 Mon Sep 17 00:00:00 2001 From: borenet Date: Tue, 26 Jul 2016 11:52:17 -0700 Subject: Move Skia recipes from build repo BUG=skia:5563 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2175373002 Review-Url: https://codereview.chromium.org/2175373002 --- .gitignore | 1 + PRESUBMIT.py | 16 + infra/bots/compile_skia.isolate | 3 + infra/bots/gen_buildbot_specs.py | 172 +++ infra/bots/perf_skia.isolate | 2 +- infra/bots/recipe_modules/skia/__init__.py | 22 + infra/bots/recipe_modules/skia/android_devices.py | 99 ++ infra/bots/recipe_modules/skia/android_flavor.py | 316 +++++ infra/bots/recipe_modules/skia/api.py | 831 ++++++++++++ infra/bots/recipe_modules/skia/cmake_flavor.py | 14 + infra/bots/recipe_modules/skia/coverage_flavor.py | 76 ++ infra/bots/recipe_modules/skia/default_flavor.py | 234 ++++ infra/bots/recipe_modules/skia/fake_specs.py | 1349 ++++++++++++++++++++ infra/bots/recipe_modules/skia/ios_flavor.py | 176 +++ infra/bots/recipe_modules/skia/pdfium_flavor.py | 64 + .../skia/resources/binary_size_utils.py | 67 + .../skia/resources/elf_symbolizer.py | 477 +++++++ .../skia/resources/generate_and_upload_doxygen.py | 77 ++ .../skia/resources/run_binary_size_analysis.py | 820 ++++++++++++ .../skia/resources/upload_bench_results.py | 77 ++ .../skia/resources/upload_dm_results.py | 98 ++ infra/bots/recipe_modules/skia/ssh_devices.py | 30 + infra/bots/recipe_modules/skia/valgrind_flavor.py | 27 + infra/bots/recipe_modules/skia/xsan_flavor.py | 76 ++ .../bots/recipe_modules/skia_swarming/__init__.py | 16 + infra/bots/recipe_modules/skia_swarming/api.py | 285 +++++ infra/bots/recipes.py | 132 ++ .../Housekeeper-Nightly-RecreateSKPs_Canary.json | 280 ++++ .../Housekeeper-Weekly-RecreateSKPs.json | 351 +++++ infra/bots/recipes/swarm_RecreateSKPs.py | 191 +++ .../Build-Mac-Clang-Arm7-Debug-Android.json | 231 ++++ .../Build-Mac-Clang-Arm7-Release-iOS.json | 212 +++ ...Build-Mac-Clang-x86_64-Debug-CommandBuffer.json | 220 ++++ .../Build-Mac-Clang-x86_64-Release-CMake.json | 175 +++ ...Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot.json | 245 ++++ .../Build-Ubuntu-GCC-Arm7-Release-Android.json | 225 ++++ ...ild-Ubuntu-GCC-Arm7-Release-Android_Vulkan.json | 226 ++++ .../Build-Ubuntu-GCC-x86_64-Debug-MSAN.json | 230 ++++ .../Build-Ubuntu-GCC-x86_64-Release-CMake.json | 171 +++ .../Build-Ubuntu-GCC-x86_64-Release-PDFium.json | 248 ++++ .../Build-Ubuntu-GCC-x86_64-Release-Shared.json | 173 +++ .../Build-Ubuntu-GCC-x86_64-Release-Valgrind.json | 173 +++ .../Build-Win-MSVC-x86-Debug.json | 203 +++ .../Build-Win-MSVC-x86_64-Release-Vulkan.json | 205 +++ .../swarm_compile.expected/big_issue_number.json | 223 ++++ .../win_retry_failed_compile.json | 224 ++++ infra/bots/recipes/swarm_compile.py | 119 ++ .../Housekeeper-PerCommit-Trybot.json | 103 ++ .../Housekeeper-PerCommit.json | 116 ++ infra/bots/recipes/swarm_housekeeper.py | 85 ++ ...Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release.json | 563 ++++++++ ...eA-GPU-GTX550Ti-x86_64-Release-VisualBench.json | 202 +++ .../Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release.json | 198 +++ ...-ShuttleB-GPU-HD4600-x86_64-Release-Trybot.json | 202 +++ ...ttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json | 151 +++ .../swarm_perf.expected/big_issue_number.json | 202 +++ infra/bots/recipes/swarm_perf.py | 119 ++ ...ndroid-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug.json | 582 +++++++++ ...t-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug.json | 683 ++++++++++ ...-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json | 306 +++++ ...-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json | 149 +++ .../Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json | 260 ++++ ...ttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json | 266 ++++ ...VC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot.json | 262 ++++ ...Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug.json | 594 +++++++++ .../recipes/swarm_test.expected/adb_in_path.json | 679 ++++++++++ .../swarm_test.expected/big_issue_number.json | 262 ++++ .../download_and_push_skimage.json | 787 ++++++++++++ .../download_and_push_skps.json | 787 ++++++++++++ .../recipes/swarm_test.expected/failed_dm.json | 265 ++++ .../swarm_test.expected/failed_get_hashes.json | 685 ++++++++++ .../legacy_skimage_version.json | 250 ++++ .../swarm_test.expected/legacy_skp_version.json | 250 ++++ .../missing_SKP_VERSION_device.json | 791 ++++++++++++ .../missing_SK_IMAGE_VERSION_device.json | 791 ++++++++++++ infra/bots/recipes/swarm_test.py | 344 +++++ .../Build-Mac-Clang-x86_64-Release.json | 463 +++++++ ...uild-Ubuntu-GCC-Arm64-Debug-Android_Vulkan.json | 475 +++++++ .../Build-Ubuntu-GCC-x86_64-Debug.json | 461 +++++++ .../Build-Ubuntu-GCC-x86_64-Release-RemoteRun.json | 462 +++++++ .../Build-Ubuntu-GCC-x86_64-Release-Trybot.json | 466 +++++++ .../Build-Win-MSVC-x86_64-Release-Vulkan.json | 486 +++++++ .../Build-Win-MSVC-x86_64-Release.json | 473 +++++++ .../Housekeeper-Nightly-RecreateSKPs_Canary.json | 458 +++++++ .../Housekeeper-PerCommit.json | 733 +++++++++++ .../swarm_trigger.expected/Infra-PerCommit.json | 419 ++++++ ...ntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot.json | 884 +++++++++++++ ...IDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan.json | 1117 ++++++++++++++++ ...droid-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release.json | 854 +++++++++++++ ...ac-Clang-MacMini6.2-CPU-AVX-x86_64-Release.json | 845 ++++++++++++ ...-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json | 647 ++++++++++ ...-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json | 1057 +++++++++++++++ .../Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json | 1106 ++++++++++++++++ ...ttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json | 1050 +++++++++++++++ ...n8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release.json | 850 ++++++++++++ ...Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release.json | 853 +++++++++++++ ...st-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release.json | 844 ++++++++++++ infra/bots/recipes/swarm_trigger.py | 687 ++++++++++ infra/bots/swarm_recipe.isolate | 13 + infra/bots/test_skia.isolate | 2 +- infra/bots/upload_skps.py | 59 + infra/config/recipes.cfg | 21 + 102 files changed, 36599 insertions(+), 2 deletions(-) create mode 100755 infra/bots/gen_buildbot_specs.py create mode 100644 infra/bots/recipe_modules/skia/__init__.py create mode 100755 infra/bots/recipe_modules/skia/android_devices.py create mode 100644 infra/bots/recipe_modules/skia/android_flavor.py create mode 100644 infra/bots/recipe_modules/skia/api.py create mode 100644 infra/bots/recipe_modules/skia/cmake_flavor.py create mode 100644 infra/bots/recipe_modules/skia/coverage_flavor.py create mode 100644 infra/bots/recipe_modules/skia/default_flavor.py create mode 100644 infra/bots/recipe_modules/skia/fake_specs.py create mode 100644 infra/bots/recipe_modules/skia/ios_flavor.py create mode 100644 infra/bots/recipe_modules/skia/pdfium_flavor.py create mode 100644 infra/bots/recipe_modules/skia/resources/binary_size_utils.py create mode 100644 infra/bots/recipe_modules/skia/resources/elf_symbolizer.py create mode 100755 infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py create mode 100755 infra/bots/recipe_modules/skia/resources/run_binary_size_analysis.py create mode 100755 infra/bots/recipe_modules/skia/resources/upload_bench_results.py create mode 100755 infra/bots/recipe_modules/skia/resources/upload_dm_results.py create mode 100755 infra/bots/recipe_modules/skia/ssh_devices.py create mode 100644 infra/bots/recipe_modules/skia/valgrind_flavor.py create mode 100644 infra/bots/recipe_modules/skia/xsan_flavor.py create mode 100644 infra/bots/recipe_modules/skia_swarming/__init__.py create mode 100644 infra/bots/recipe_modules/skia_swarming/api.py create mode 100755 infra/bots/recipes.py create mode 100644 infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json create mode 100644 infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Weekly-RecreateSKPs.json create mode 100644 infra/bots/recipes/swarm_RecreateSKPs.py create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Debug-Android.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Release-iOS.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Release-CMake.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-MSAN.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-CMake.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-PDFium.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Shared.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Valgrind.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Debug.json create mode 100644 infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json create mode 100644 infra/bots/recipes/swarm_compile.expected/big_issue_number.json create mode 100644 infra/bots/recipes/swarm_compile.expected/win_retry_failed_compile.json create mode 100644 infra/bots/recipes/swarm_compile.py create mode 100644 infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit-Trybot.json create mode 100644 infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit.json create mode 100644 infra/bots/recipes/swarm_housekeeper.py create mode 100644 infra/bots/recipes/swarm_perf.expected/Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release.json create mode 100644 infra/bots/recipes/swarm_perf.expected/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench.json create mode 100644 infra/bots/recipes/swarm_perf.expected/Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release.json create mode 100644 infra/bots/recipes/swarm_perf.expected/Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot.json create mode 100644 infra/bots/recipes/swarm_perf.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json create mode 100644 infra/bots/recipes/swarm_perf.expected/big_issue_number.json create mode 100644 infra/bots/recipes/swarm_perf.py create mode 100644 infra/bots/recipes/swarm_test.expected/Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug.json create mode 100644 infra/bots/recipes/swarm_test.expected/Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug.json create mode 100644 infra/bots/recipes/swarm_test.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json create mode 100644 infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json create mode 100644 infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json create mode 100644 infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json create mode 100644 infra/bots/recipes/swarm_test.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot.json create mode 100644 infra/bots/recipes/swarm_test.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug.json create mode 100644 infra/bots/recipes/swarm_test.expected/adb_in_path.json create mode 100644 infra/bots/recipes/swarm_test.expected/big_issue_number.json create mode 100644 infra/bots/recipes/swarm_test.expected/download_and_push_skimage.json create mode 100644 infra/bots/recipes/swarm_test.expected/download_and_push_skps.json create mode 100644 infra/bots/recipes/swarm_test.expected/failed_dm.json create mode 100644 infra/bots/recipes/swarm_test.expected/failed_get_hashes.json create mode 100644 infra/bots/recipes/swarm_test.expected/legacy_skimage_version.json create mode 100644 infra/bots/recipes/swarm_test.expected/legacy_skp_version.json create mode 100644 infra/bots/recipes/swarm_test.expected/missing_SKP_VERSION_device.json create mode 100644 infra/bots/recipes/swarm_test.expected/missing_SK_IMAGE_VERSION_device.json create mode 100644 infra/bots/recipes/swarm_test.py create mode 100644 infra/bots/recipes/swarm_trigger.expected/Build-Mac-Clang-x86_64-Release.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Debug.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-RemoteRun.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-Trybot.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Housekeeper-PerCommit.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Infra-PerCommit.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release.json create mode 100644 infra/bots/recipes/swarm_trigger.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release.json create mode 100644 infra/bots/recipes/swarm_trigger.py create mode 100644 infra/bots/swarm_recipe.isolate create mode 100644 infra/bots/upload_skps.py create mode 100644 infra/config/recipes.cfg diff --git a/.gitignore b/.gitignore index 5f339bf27b..fd9145052a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ .idea .cproject .project +.recipe_deps/ .settings/ TAGS bower_components diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 1412b2b95f..a3af9e4445 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -169,6 +169,19 @@ def _ToolFlags(input_api, output_api): return results +def _RecipeSimulationTest(input_api, output_api): + """Run the recipe simulation test.""" + results = [] + recipes_py = os.path.join('infra', 'bots', 'recipes.py') + cmd = ['python', recipes_py, 'simulation_test'] + try: + subprocess.check_output(cmd) + except subprocess.CalledProcessError as e: + results.append(output_api.PresubmitError( + '`%s` failed:\n%s' % (' '.join(cmd), e.output))) + return results + + def _CommonChecks(input_api, output_api): """Presubmit checks common to upload and commit.""" results = [] @@ -202,6 +215,9 @@ def CheckChangeOnUpload(input_api, output_api): """ results = [] results.extend(_CommonChecks(input_api, output_api)) + # Run on upload, not commit, since the presubmit bot apparently doesn't have + # coverage installed. + results.extend(_RecipeSimulationTest(input_api, output_api)) return results diff --git a/infra/bots/compile_skia.isolate b/infra/bots/compile_skia.isolate index c29919938e..767fa3af9e 100644 --- a/infra/bots/compile_skia.isolate +++ b/infra/bots/compile_skia.isolate @@ -1,4 +1,7 @@ { + 'includes': [ + 'swarm_recipe.isolate', + ], 'variables': { 'files': [ '../../../.gclient', diff --git a/infra/bots/gen_buildbot_specs.py b/infra/bots/gen_buildbot_specs.py new file mode 100755 index 0000000000..d960ab217b --- /dev/null +++ b/infra/bots/gen_buildbot_specs.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python +# +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +'''Generate buildbot specs for all buildbots.''' + + +import datetime +import imp +import json +import os +import re +import subprocess +import sys +import tempfile + + +SKIA_DIR = os.path.abspath(os.path.join( + os.path.dirname(os.path.realpath(__file__)), + os.pardir, os.pardir)) + +BUILDBOT_SPEC_FILE = os.path.join(SKIA_DIR, 'tools', 'buildbot_spec.py') + +SKIA_RECIPES = [ + 'swarm_compile.py', + 'swarm_housekeeper.py', + 'swarm_perf.py', + 'swarm_RecreateSKPs.py', + 'swarm_test.py', + 'swarm_trigger.py' +] + + +def prettier_print(obj, indent, stream=sys.stdout, max_line_length=80): + """Pretty-print the object, in a nicer format than pprint.""" + + def _breakline(line): + """Break the line to fit under N characters.""" + # If we're under the limit, just return. + if len(line) <= max_line_length: + return [line] + + # Dict entries. + m = re.match(r'^(\s+)(.+): (.+)$', line) + if m: + return (_breakline(m.groups()[0] + m.groups()[1] + ':') + + _breakline(m.groups()[0] + ' ' + m.groups()[2])) + + # List entries and dict keys. + m = re.match(r"^(\s+)'(.+)'([:,])$", line) + if m: + prefix = m.groups()[0] + content = m.groups()[1] + max_len = max_line_length - len(prefix) - len("(''):") + parts = [] + while len(content) > max_len: + parts.append(content[:max_len]) + content = content[max_len:] + parts.append(content) + lines = _breakline(prefix + "('" + parts[0] + "'") + for p in parts[1:-1]: + lines.extend(_breakline(prefix + " '" + p + "'")) + lines.extend(_breakline(prefix + " '" + parts[-1] + "')" + m.groups()[2])) + return lines + + class LineBreakingStream(object): + """Stream wrapper which writes line-by-line, breaking them as needed.""" + def __init__(self, backing_stream): + self._backing_stream = backing_stream + self._current_line = '' + + def _writeline(self, line): + for l in _breakline(line): + self._backing_stream.write(l + '\n') + + def write(self, s): + self._current_line += s + split = self._current_line.split('\n') + for w in split[:-1]: + self._writeline(w) + self._current_line = split[len(split)-1] + + def flush(self): + self._writeline(self._current_line) + + def _pprint(obj, indent, stream): + indent_str = ' ' * indent + if isinstance(obj, dict): + stream.write('{\n') + for k in sorted(obj.iterkeys()): + stream.write(indent_str + '\'%s\': ' % k) + _pprint(obj[k], indent + 2, stream=stream) + stream.write(',\n') + stream.write(' ' * (indent-2) + '}') + elif isinstance(obj, list): + stream.write('[\n') + for v in obj: + stream.write(indent_str) + _pprint(v, indent + 2, stream=stream) + stream.write(',\n') + stream.write(' ' * (indent-2) + ']') + elif isinstance(obj, basestring): + stream.write('\'%s\'' % obj) + elif isinstance(obj, bool): + if obj: + stream.write('True') + else: + stream.write('False') + else: + stream.write(obj) + + s = LineBreakingStream(stream) + _pprint(obj, indent, stream=s) + s.flush() + + +def get_bots(): + """Find all of the bots referenced in Skia recipes.""" + recipes = os.path.join(SKIA_DIR, 'infra', 'bots', 'recipes') + bots = [] + for skia_recipe in SKIA_RECIPES: + skia_recipe = os.path.join(recipes, skia_recipe) + skia = imp.load_source('skia', skia_recipe) + for _, slaves in skia.TEST_BUILDERS.iteritems(): + for _, builders in slaves.iteritems(): + bots.extend(builders) + bots.sort() + return bots + + +def main(): + """Generate a spec for each of the above bots. Dump them all to a file.""" + # Get the list of bots. + bots = get_bots() + + # Create the fake specs. + specs = {} + tmp_spec_file = tempfile.NamedTemporaryFile(delete=False) + tmp_spec_file.close() + try: + for bot in bots: + subprocess.check_call(['python', BUILDBOT_SPEC_FILE, + tmp_spec_file.name, bot]) + with open(tmp_spec_file.name) as f: + spec = json.load(f) + spec['dm_flags'] = ['--dummy-flags'] + spec['nanobench_flags'] = ['--dummy-flags'] + specs[bot] = spec + finally: + os.remove(tmp_spec_file.name) + + out = os.path.join( + SKIA_DIR, 'infra', 'bots', 'recipe_modules', 'skia', 'fake_specs.py') + + with open(out, 'w') as f: + f.write('''# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This file is generated by the %s script. + +FAKE_SPECS = ''' % sys.argv[0]) + prettier_print(specs, indent=2, stream=f) + + print 'Wrote output to %s' % out + + +if __name__ == '__main__': + main() diff --git a/infra/bots/perf_skia.isolate b/infra/bots/perf_skia.isolate index e43e843938..b220aa5964 100644 --- a/infra/bots/perf_skia.isolate +++ b/infra/bots/perf_skia.isolate @@ -1,9 +1,9 @@ { 'includes': [ 'android_bin.isolate', - 'infrabots.isolate', 'ios_bin.isolate', 'resources.isolate', + 'swarm_recipe.isolate', ], 'variables': { 'files': [ diff --git a/infra/bots/recipe_modules/skia/__init__.py b/infra/bots/recipe_modules/skia/__init__.py new file mode 100644 index 0000000000..5f49d42e21 --- /dev/null +++ b/infra/bots/recipe_modules/skia/__init__.py @@ -0,0 +1,22 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +DEPS = [ + 'build/adb', + 'build/file', + 'build/gsutil', + 'build/swarming', + 'build/swarming_client', + 'depot_tools/gclient', + 'depot_tools/git', + 'depot_tools/tryserver', + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/platform', + 'recipe_engine/properties', + 'recipe_engine/python', + 'recipe_engine/raw_io', + 'recipe_engine/step', + 'recipe_engine/time', +] diff --git a/infra/bots/recipe_modules/skia/android_devices.py b/infra/bots/recipe_modules/skia/android_devices.py new file mode 100755 index 0000000000..1a59c77333 --- /dev/null +++ b/infra/bots/recipe_modules/skia/android_devices.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import collections +import json + + +DEFAULT_SDK_ROOT = '/home/chrome-bot/android-sdk-linux' +MAC_SDK_ROOT = '/Users/chrome-bot/adt-bundle-mac-x86_64-20140702/sdk' +MACMINI_SDK_ROOT = '/Users/chrome-bot/android-sdk-macosx' + +SlaveInfo = collections.namedtuple('SlaveInfo', + 'serial android_sdk_root has_root') + +SLAVE_INFO = { + 'skiabot-mac-10_8-compile-000': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-001': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-002': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-003': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-004': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-005': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-006': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-007': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-008': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-mac-10_8-compile-009': + SlaveInfo('noserial', MAC_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu15-androidone-001': + SlaveInfo('AG86044202A04GC', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu15-androidone-002': + SlaveInfo('AG8404EC06G02GC', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu15-androidone-003': + SlaveInfo('AG8404EC0688EGC', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-galaxys3-001': + SlaveInfo('4df713b8244a21cf', DEFAULT_SDK_ROOT, False), + 'skiabot-shuttle-ubuntu12-galaxys3-002': + SlaveInfo('32309a56e9b3a09f', DEFAULT_SDK_ROOT, False), + 'skiabot-shuttle-ubuntu12-galaxys4-001': + SlaveInfo('4d0032a5d8cb6125', MACMINI_SDK_ROOT, False), + 'skiabot-shuttle-ubuntu12-galaxys4-002': + SlaveInfo('4d00353cd8ed61c3', MACMINI_SDK_ROOT, False), + 'skiabot-shuttle-ubuntu12-nexus5-001': + SlaveInfo('03f61449437cc47b', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus5-002': + SlaveInfo('018dff3520c970f6', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu15-nexus6-001': + SlaveInfo('ZX1G22JJWS', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu15-nexus6-002': + SlaveInfo('ZX1G22JN35', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu15-nexus6-003': + SlaveInfo('ZX1G22JXXM', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus7-001': + SlaveInfo('015d210a13480604', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus7-002': + SlaveInfo('015d18848c280217', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus7-003': + SlaveInfo('015d16897c401e17', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus9-001': + SlaveInfo('HT43RJT00022', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus9-002': + SlaveInfo('HT4AEJT03112', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus9-003': + SlaveInfo('HT4ADJT03339', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus10-001': + SlaveInfo('R32C801B5LH', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexus10-003': + SlaveInfo('R32CB017X2L', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexusplayer-001': + SlaveInfo('D76C708B', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu12-nexusplayer-002': + SlaveInfo('8AB5139A', DEFAULT_SDK_ROOT, True), + 'skiabot-shuttle-ubuntu15-nvidia-shield-001': + SlaveInfo('04217150066510000078', MACMINI_SDK_ROOT, False), + 'skiabot-linux-housekeeper-003': + SlaveInfo('noserial', DEFAULT_SDK_ROOT, False), + 'vm690-m3': SlaveInfo('noserial', MACMINI_SDK_ROOT, False), + 'vm691-m3': SlaveInfo('noserial', MACMINI_SDK_ROOT, False), + 'vm692-m3': SlaveInfo('noserial', MACMINI_SDK_ROOT, False), + 'vm693-m3': SlaveInfo('noserial', MACMINI_SDK_ROOT, False), + 'skiabot-linux-swarm-000': SlaveInfo('noserial', DEFAULT_SDK_ROOT, True), + 'default': + SlaveInfo('noserial', DEFAULT_SDK_ROOT, False), +} + + +if __name__ == '__main__': + print json.dumps(SLAVE_INFO) # pragma: no cover + diff --git a/infra/bots/recipe_modules/skia/android_flavor.py b/infra/bots/recipe_modules/skia/android_flavor.py new file mode 100644 index 0000000000..442604e74e --- /dev/null +++ b/infra/bots/recipe_modules/skia/android_flavor.py @@ -0,0 +1,316 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# pylint: disable=W0201 + + +import android_devices +import copy +import default_flavor + + +"""Android flavor utils, used for building for and running tests on Android.""" + + +class _ADBWrapper(object): + """Wrapper for the ADB recipe module. + + The ADB recipe module looks for the ADB binary at a path we don't have checked + out on our bots. This wrapper ensures that we set a custom ADB path before + attempting to use the module. + """ + def __init__(self, adb_api, path_to_adb, serial_args, android_flavor): + self._adb = adb_api + self._adb.set_adb_path(path_to_adb) + self._has_root = False # This is set in install(). + self._serial_args = serial_args + self._wait_count = 0 + self._android_flavor = android_flavor + + def wait_for_device(self): + """Run 'adb wait-for-device'.""" + self._wait_count += 1 + cmd = [ + self._android_flavor.android_bin.join('adb_wait_for_device') + ] + self._serial_args + self._android_flavor._skia_api.run( + self._android_flavor._skia_api.m.step, + name='wait for device (%d)' % self._wait_count, + cmd=cmd, + env=self._android_flavor._default_env, + infra_step=True) + + cmd = [ + self._android_flavor.android_bin.join('adb_wait_for_charge'), + ] + self._serial_args + self._android_flavor._skia_api.run( + self._android_flavor._skia_api.m.step, + name='wait for charge (%d)' % self._wait_count, + cmd=cmd, + env=self._android_flavor._default_env, + infra_step=True) + + def maybe_wait_for_device(self): + """Run 'adb wait-for-device' if it hasn't already been run.""" + if self._wait_count == 0: + self.wait_for_device() + + def __call__(self, *args, **kwargs): + self.maybe_wait_for_device() + return self._android_flavor._skia_api.run(self._adb, *args, **kwargs) + + +class AndroidFlavorUtils(default_flavor.DefaultFlavorUtils): + def __init__(self, skia_api): + super(AndroidFlavorUtils, self).__init__(skia_api) + self.device = self._skia_api.builder_spec['device_cfg'] + self.android_bin = self._skia_api.skia_dir.join( + 'platform_tools', 'android', 'bin') + self._android_sdk_root = self._skia_api.slave_dir.join( + 'android_sdk', 'android-sdk') + self.serial = None + self.serial_args = [] + try: + path_to_adb = self._skia_api.m.step( + 'which adb', + cmd=['which', 'adb'], + stdout=self._skia_api.m.raw_io.output(), + infra_step=True).stdout.rstrip() + except self._skia_api.m.step.StepFailure: + path_to_adb = self._skia_api.m.path.join(self._android_sdk_root, + 'platform-tools', 'adb') + self._adb = _ADBWrapper( + self._skia_api.m.adb, path_to_adb, self.serial_args, self) + self._default_env = {'ANDROID_SDK_ROOT': self._android_sdk_root, + 'ANDROID_HOME': self._android_sdk_root, + 'SKIA_ANDROID_VERBOSE_SETUP': 1} + + def step(self, name, cmd, env=None, **kwargs): + self._adb.maybe_wait_for_device() + args = [ + self.android_bin.join('android_run_skia'), + '--verbose', + '--logcat', + '-d', self.device, + ] + self.serial_args + [ + '-t', self._skia_api.configuration, + ] + env = dict(env or {}) + env.update(self._default_env) + + return self._skia_api.run(self._skia_api.m.step, name=name, cmd=args + cmd, + env=env, **kwargs) + + def compile(self, target): + """Build the given target.""" + env = dict(self._default_env) + ccache = self._skia_api.ccache() + if ccache: + env['ANDROID_MAKE_CCACHE'] = ccache + + cmd = [self.android_bin.join('android_ninja'), target, '-d', self.device] + if 'Clang' in self._skia_api.builder_name: + cmd.append('--clang') + if 'GCC' in self._skia_api.builder_name: + cmd.append('--gcc') + if 'Vulkan' in self._skia_api.builder_name: + cmd.append('--vulkan') + self._skia_api.run(self._skia_api.m.step, 'build %s' % target, cmd=cmd, + env=env, cwd=self._skia_api.m.path['checkout']) + + def device_path_join(self, *args): + """Like os.path.join(), but for paths on a connected Android device.""" + return '/'.join(args) + + def device_path_exists(self, path): + """Like os.path.exists(), but for paths on a connected device.""" + exists_str = 'FILE_EXISTS' + return exists_str in self._adb( + name='exists %s' % self._skia_api.m.path.basename(path), + serial=self.serial, + cmd=['shell', 'if', '[', '-e', path, '];', + 'then', 'echo', exists_str + ';', 'fi'], + stdout=self._skia_api.m.raw_io.output(), + infra_step=True + ).stdout + + def _remove_device_dir(self, path): + """Remove the directory on the device.""" + self._adb(name='rmdir %s' % self._skia_api.m.path.basename(path), + serial=self.serial, + cmd=['shell', 'rm', '-r', path], + infra_step=True) + # Sometimes the removal fails silently. Verify that it worked. + if self.device_path_exists(path): + raise Exception('Failed to remove %s!' % path) # pragma: no cover + + def _create_device_dir(self, path): + """Create the directory on the device.""" + self._adb(name='mkdir %s' % self._skia_api.m.path.basename(path), + serial=self.serial, + cmd=['shell', 'mkdir', '-p', path], + infra_step=True) + + def copy_directory_contents_to_device(self, host_dir, device_dir): + """Like shutil.copytree(), but for copying to a connected device.""" + self._skia_api.run( + self._skia_api.m.step, + name='push %s' % self._skia_api.m.path.basename(host_dir), + cmd=[ + self.android_bin.join('adb_push_if_needed'), '--verbose', + ] + self.serial_args + [ + host_dir, device_dir, + ], + env=self._default_env, + infra_step=True) + + def copy_directory_contents_to_host(self, device_dir, host_dir): + """Like shutil.copytree(), but for copying from a connected device.""" + self._skia_api.run( + self._skia_api.m.step, + name='pull %s' % self._skia_api.m.path.basename(device_dir), + cmd=[ + self.android_bin.join('adb_pull_if_needed'), '--verbose', + ] + self.serial_args + [ + device_dir, host_dir, + ], + env=self._default_env, + infra_step=True) + + def copy_file_to_device(self, host_path, device_path): + """Like shutil.copyfile, but for copying to a connected device.""" + self._adb(name='push %s' % self._skia_api.m.path.basename(host_path), + serial=self.serial, + cmd=['push', host_path, device_path], + infra_step=True) + + def create_clean_device_dir(self, path): + """Like shutil.rmtree() + os.makedirs(), but on a connected device.""" + self._remove_device_dir(path) + self._create_device_dir(path) + + def has_root(self): + """Determine if we have root access on this device.""" + # Special case: GalaxyS3 hangs on `adb root`. Don't bother. + if 'GalaxyS3' in self._skia_api.builder_name: + return False + + # Determine if we have root access. + has_root = False + try: + output = self._adb(name='adb root', + serial=self.serial, + cmd=['root'], + stdout=self._skia_api.m.raw_io.output(), + infra_step=True).stdout.rstrip() + if ('restarting adbd as root' in output or + 'adbd is already running as root' in output): + has_root = True + except self._skia_api.m.step.StepFailure: # pragma: nocover + pass + # Wait for the device to reconnect. + self._skia_api.run( + self._skia_api.m.step, + name='wait', + cmd=['sleep', '10'], + infra_step=True) + self._adb.wait_for_device() + return has_root + + def install(self): + """Run device-specific installation steps.""" + self._has_root = self.has_root() + self._skia_api.run(self._skia_api.m.step, + name='kill skia', + cmd=[ + self.android_bin.join('android_kill_skia'), + '--verbose', + ] + self.serial_args, + env=self._default_env, + infra_step=True) + if self._has_root: + self._adb(name='stop shell', + serial=self.serial, + cmd=['shell', 'stop'], + infra_step=True) + + # Print out battery stats. + self._adb(name='starting battery stats', + serial=self.serial, + cmd=['shell', 'dumpsys', 'batteryproperties'], + infra_step=True) + + # Print out CPU scale info. + if self._has_root: + self._adb(name='cat scaling_governor', + serial=self.serial, + cmd=['shell', 'cat', + '/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'], + infra_step=True) + self._adb(name='cat cpu_freq', + serial=self.serial, + cmd=['shell', 'cat', + '/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq'], + infra_step=True) + + def cleanup_steps(self): + """Run any device-specific cleanup steps.""" + if self._skia_api.do_test_steps or self._skia_api.do_perf_steps: + self._adb(name='final battery stats', + serial=self.serial, + cmd=['shell', 'dumpsys', 'batteryproperties'], + infra_step=True) + self._adb(name='reboot', + serial=self.serial, + cmd=['reboot'], + infra_step=True) + self._skia_api.run( + self._skia_api.m.step, + name='wait for reboot', + cmd=['sleep', '10'], + infra_step=True) + self._adb.wait_for_device() + # The ADB binary conflicts with py-adb used by swarming. Kill it + # when finished to play nice. + self._adb(name='kill-server', + serial=self.serial, + cmd=['kill-server'], + infra_step=True) + + def read_file_on_device(self, path, *args, **kwargs): + """Read the given file.""" + return self._adb(name='read %s' % self._skia_api.m.path.basename(path), + serial=self.serial, + cmd=['shell', 'cat', path], + stdout=self._skia_api.m.raw_io.output(), + infra_step=True).stdout.rstrip() + + def remove_file_on_device(self, path, *args, **kwargs): + """Delete the given file.""" + return self._adb(name='rm %s' % self._skia_api.m.path.basename(path), + serial=self.serial, + cmd=['shell', 'rm', '-f', path], + infra_step=True, + *args, + **kwargs) + + def get_device_dirs(self): + """ Set the directories which will be used by the build steps.""" + device_scratch_dir = self._adb( + name='get EXTERNAL_STORAGE dir', + serial=self.serial, + cmd=['shell', 'echo', '$EXTERNAL_STORAGE'], + stdout=self._skia_api.m.raw_io.output(), + infra_step=True, + ).stdout.rstrip() + prefix = self.device_path_join(device_scratch_dir, 'skiabot', 'skia_') + return default_flavor.DeviceDirs( + dm_dir=prefix + 'dm', + perf_data_dir=prefix + 'perf', + resource_dir=prefix + 'resources', + images_dir=prefix + 'images', + skp_dir=prefix + 'skp/skps', + tmp_dir=prefix + 'tmp_dir') + diff --git a/infra/bots/recipe_modules/skia/api.py b/infra/bots/recipe_modules/skia/api.py new file mode 100644 index 0000000000..d6c73270db --- /dev/null +++ b/infra/bots/recipe_modules/skia/api.py @@ -0,0 +1,831 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# pylint: disable=W0201 + + +import json +import os +import re +import sys + +from recipe_engine import recipe_api +from recipe_engine import config_types + +from . import android_flavor +from . import cmake_flavor +from . import coverage_flavor +from . import default_flavor +from . import fake_specs +from . import ios_flavor +from . import pdfium_flavor +from . import valgrind_flavor +from . import xsan_flavor + + +BOTO_CHROMIUM_SKIA_GM = 'chromium-skia-gm.boto' + +GS_SUBDIR_TMPL_SK_IMAGE = 'skimage/v%s' +GS_SUBDIR_TMPL_SKP = 'playback_%s/skps' + +TEST_EXPECTED_SKP_VERSION = '42' +TEST_EXPECTED_SK_IMAGE_VERSION = '42' + +VERSION_FILE_SK_IMAGE = 'SK_IMAGE_VERSION' +VERSION_FILE_SKP = 'SKP_VERSION' + +VERSION_NONE = -1 + +BUILD_PRODUCTS_ISOLATE_WHITELIST = [ + 'dm', + 'dm.exe', + 'nanobench', + 'nanobench.exe', + '*.so', + '*.dll', + '*.dylib', + 'skia_launcher', + 'lib/*.so', + 'iOSShell.app', + 'iOSShell.ipa', + 'visualbench', + 'visualbench.exe', +] + + +def is_android(builder_cfg): + """Determine whether the given builder is an Android builder.""" + return ('Android' in builder_cfg.get('extra_config', '') or + builder_cfg.get('os') == 'Android') + + +def is_cmake(builder_cfg): + return 'CMake' in builder_cfg.get('extra_config', '') + + +def is_ios(builder_cfg): + return ('iOS' in builder_cfg.get('extra_config', '') or + builder_cfg.get('os') == 'iOS') + + +def is_pdfium(builder_cfg): + return 'PDFium' in builder_cfg.get('extra_config', '') + + +def is_valgrind(builder_cfg): + return 'Valgrind' in builder_cfg.get('extra_config', '') + + +def is_xsan(builder_cfg): + return ('ASAN' in builder_cfg.get('extra_config', '') or + 'MSAN' in builder_cfg.get('extra_config', '') or + 'TSAN' in builder_cfg.get('extra_config', '')) + + +class SkiaApi(recipe_api.RecipeApi): + + def get_flavor(self, builder_cfg): + """Return a flavor utils object specific to the given builder.""" + if is_android(builder_cfg): + return android_flavor.AndroidFlavorUtils(self) + elif is_cmake(builder_cfg): + return cmake_flavor.CMakeFlavorUtils(self) + elif is_ios(builder_cfg): + return ios_flavor.iOSFlavorUtils(self) + elif is_pdfium(builder_cfg): + return pdfium_flavor.PDFiumFlavorUtils(self) + elif is_valgrind(builder_cfg): + return valgrind_flavor.ValgrindFlavorUtils(self) + elif is_xsan(builder_cfg): + return xsan_flavor.XSanFlavorUtils(self) + elif builder_cfg.get('configuration') == 'Coverage': + return coverage_flavor.CoverageFlavorUtils(self) + else: + return default_flavor.DefaultFlavorUtils(self) + + @property + def home_dir(self): + """Find the home directory.""" + home_dir = os.path.expanduser('~') + if self._test_data.enabled: + home_dir = '[HOME]' + return home_dir + + def gsutil_env(self, boto_file): + """Environment variables for gsutil.""" + boto_path = None + if boto_file: + boto_path = self.m.path.join(self.home_dir, boto_file) + return {'AWS_CREDENTIAL_FILE': boto_path, + 'BOTO_CONFIG': boto_path} + + def get_builder_spec(self, skia_dir, builder_name): + """Obtain the buildbot spec for the given builder.""" + fake_spec = None + if self._test_data.enabled: + fake_spec = fake_specs.FAKE_SPECS[builder_name] + builder_spec = self.json_from_file( + skia_dir.join('tools', 'buildbot_spec.py'), + skia_dir, + builder_name, + fake_spec) + return builder_spec + + def make_path(self, *path): + """Return a Path object for the given path.""" + key = 'custom_%s' % '_'.join(path) + self.m.path.c.base_paths[key] = tuple(path) + return self.m.path[key] + + def setup(self): + """Prepare the bot to run.""" + # Setup + self.failed = [] + + self.builder_name = self.m.properties['buildername'] + self.master_name = self.m.properties['mastername'] + self.slave_name = self.m.properties['slavename'] + + self.slave_dir = self.m.path['slave_build'] + self.checkout_root = self.slave_dir + self.default_env = {} + self.gclient_env = {} + self.is_compile_bot = self.builder_name.startswith('Build-') + + self.default_env['CHROME_HEADLESS'] = '1' + # The 'depot_tools' directory comes from recipe DEPS and isn't provided by + # default. We have to set it manually. + self.m.path.c.base_paths['depot_tools'] = ( + self.m.path.c.base_paths['slave_build'] + + ('skia', 'infra', 'bots', '.recipe_deps', 'depot_tools')) + if 'Win' in self.builder_name: + self.m.path.c.base_paths['depot_tools'] = ( + 'c:\\', 'Users', 'chrome-bot', 'depot_tools') + + # Compile bots keep a persistent checkout. + self.persistent_checkout = (self.is_compile_bot or + 'RecreateSKPs' in self.builder_name) + if self.persistent_checkout: + if 'Win' in self.builder_name: + self.checkout_root = self.make_path('C:\\', 'b', 'work') + self.gclient_cache = self.make_path('C:\\', 'b', 'cache') + else: + self.checkout_root = self.make_path('/', 'b', 'work') + self.gclient_cache = self.make_path('/', 'b', 'cache') + + self.skia_dir = self.checkout_root.join('skia') + self.infrabots_dir = self.skia_dir.join('infra', 'bots') + + # Some bots also require a checkout of chromium. + self._need_chromium_checkout = 'CommandBuffer' in self.builder_name + if 'CommandBuffer' in self.builder_name: + self.gclient_env['GYP_CHROMIUM_NO_ACTION'] = '0' + if ((self.is_compile_bot and + 'SAN' in self.builder_name) or + 'RecreateSKPs' in self.builder_name): + self._need_chromium_checkout = True + + # Some bots also require a checkout of PDFium. + self._need_pdfium_checkout = 'PDFium' in self.builder_name + + # Check out the Skia code. + self.checkout_steps() + + # Obtain the spec for this builder from the Skia repo. Use it to set more + # properties. + self.builder_spec = self.get_builder_spec(self.skia_dir, self.builder_name) + + self.builder_cfg = self.builder_spec['builder_cfg'] + self.role = self.builder_cfg['role'] + + # Set some important variables. + self.resource_dir = self.skia_dir.join('resources') + self.images_dir = self.slave_dir.join('skimage') + if not self.m.path.exists(self.infrabots_dir.join( + 'assets', 'skimage', 'VERSION')): + # TODO(borenet): Remove this once enough time has passed. + self.images_dir = self.slave_dir.join('images') + self.skia_out = self.skia_dir.join('out', self.builder_name) + self.swarming_out_dir = self.make_path(self.m.properties['swarm_out_dir']) + self.local_skp_dir = self.slave_dir.join('skp') + if not self.m.path.exists(self.infrabots_dir.join( + 'assets', 'skp', 'VERSION')): + # TODO(borenet): Remove this once enough time has passed. + self.local_skp_dir = self.slave_dir.join('skps') + if not self.is_compile_bot: + self.skia_out = self.slave_dir.join('out') + self.tmp_dir = self.m.path['slave_build'].join('tmp') + if not self.m.path.exists(self.tmp_dir): + self._run_once(self.m.file.makedirs, + 'tmp_dir', + self.tmp_dir, + infra_step=True) + + self.gsutil_env_chromium_skia_gm = self.gsutil_env(BOTO_CHROMIUM_SKIA_GM) + + self.device_dirs = None + self._ccache = None + self._checked_for_ccache = False + self.configuration = self.builder_spec['configuration'] + self.default_env.update({'SKIA_OUT': self.skia_out, + 'BUILDTYPE': self.configuration}) + self.default_env.update(self.builder_spec['env']) + self.build_targets = [str(t) for t in self.builder_spec['build_targets']] + self.do_compile_steps = self.builder_spec.get('do_compile_steps', True) + self.do_test_steps = self.builder_spec['do_test_steps'] + self.do_perf_steps = self.builder_spec['do_perf_steps'] + self.is_trybot = self.builder_cfg['is_trybot'] + self.upload_dm_results = self.builder_spec['upload_dm_results'] + self.upload_perf_results = self.builder_spec['upload_perf_results'] + self.dm_dir = self.m.path.join( + self.swarming_out_dir, 'dm') + self.perf_data_dir = self.m.path.join(self.swarming_out_dir, + 'perfdata', self.builder_name, 'data') + self.dm_flags = self.builder_spec['dm_flags'] + self.nanobench_flags = self.builder_spec['nanobench_flags'] + + self.flavor = self.get_flavor(self.builder_cfg) + + def check_failure(self): + """Raise an exception if any step failed.""" + if self.failed: + raise self.m.step.StepFailure('Failed build steps: %s' % + ', '.join([f.name for f in self.failed])) + + def _run_once(self, fn, *args, **kwargs): + if not hasattr(self, '_already_ran'): + self._already_ran = {} + if not fn.__name__ in self._already_ran: + self._already_ran[fn.__name__] = fn(*args, **kwargs) + return self._already_ran[fn.__name__] + + def update_repo(self, parent_dir, repo): + """Update an existing repo. This is safe to call without gen_steps.""" + repo_path = parent_dir.join(repo.name) + if self.m.path.exists(repo_path): # pragma: nocover + if self.m.platform.is_win: + git = 'git.bat' + else: + git = 'git' + self.m.step('git remote set-url', + cmd=[git, 'remote', 'set-url', 'origin', repo.url], + cwd=repo_path, + infra_step=True) + self.m.step('git fetch', + cmd=[git, 'fetch'], + cwd=repo_path, + infra_step=True) + self.m.step('git reset', + cmd=[git, 'reset', '--hard', repo.revision], + cwd=repo_path, + infra_step=True) + self.m.step('git clean', + cmd=[git, 'clean', '-d', '-f'], + cwd=repo_path, + infra_step=True) + + def checkout_steps(self): + """Run the steps to obtain a checkout of Skia.""" + cfg_kwargs = {} + if not self.persistent_checkout: + # We should've obtained the Skia checkout through isolates, so we don't + # need to perform the checkout ourselves. + self.m.path['checkout'] = self.skia_dir + self.got_revision = self.m.properties['revision'] + return + + # Use a persistent gclient cache for Swarming. + cfg_kwargs['CACHE_DIR'] = self.gclient_cache + + # Create the checkout path if necessary. + if not self.m.path.exists(self.checkout_root): + self.m.file.makedirs('checkout_path', self.checkout_root, infra_step=True) + + # Initial cleanup. + gclient_cfg = self.m.gclient.make_config(**cfg_kwargs) + skia = gclient_cfg.solutions.add() + skia.name = 'skia' + skia.managed = False + skia.url = 'https://skia.googlesource.com/skia.git' + skia.revision = self.m.properties.get('revision') or 'origin/master' + self.update_repo(self.checkout_root, skia) + + # TODO(rmistry): Remove the below block after there is a solution for + # crbug.com/616443 + entries_file = self.checkout_root.join('.gclient_entries') + if self.m.path.exists(entries_file): + self.m.file.remove('remove %s' % entries_file, + entries_file, + infra_step=True) # pragma: no cover + + if self._need_chromium_checkout: + chromium = gclient_cfg.solutions.add() + chromium.name = 'src' + chromium.managed = False + chromium.url = 'https://chromium.googlesource.com/chromium/src.git' + chromium.revision = 'origin/lkgr' + self.update_repo(self.checkout_root, chromium) + + if self._need_pdfium_checkout: + pdfium = gclient_cfg.solutions.add() + pdfium.name = 'pdfium' + pdfium.managed = False + pdfium.url = 'https://pdfium.googlesource.com/pdfium.git' + pdfium.revision = 'origin/master' + self.update_repo(self.checkout_root, pdfium) + + # Run 'gclient sync'. + gclient_cfg.got_revision_mapping['skia'] = 'got_revision' + gclient_cfg.target_os.add('llvm') + checkout_kwargs = {} + checkout_kwargs['env'] = self.default_env + + # api.gclient.revert() assumes things about the layout of the code, so it + # fails for us. Run an appropriate revert sequence for trybots instead. + gclient_file = self.checkout_root.join('.gclient') + if (self.m.tryserver.is_tryserver and + self.m.path.exists(gclient_file)): # pragma: no cover + # These steps taken from: + # https://chromium.googlesource.com/chromium/tools/build/+/ + # 81a696760ab7c25f6606c54fc781b90b8af9fdd2/scripts/slave/ + # gclient_safe_revert.py + if self.m.path.exists(entries_file): + self.m.gclient('recurse', [ + 'recurse', '-i', 'sh', '-c', + 'if [ -e .git ]; then git remote update; fi']) + self.m.gclient( + 'revert', + ['revert', '-v', '-v', '-v', '--nohooks', '--upstream'], + cwd=self.checkout_root) + + update_step = self.m.gclient.checkout(gclient_config=gclient_cfg, + cwd=self.checkout_root, + revert=False, + **checkout_kwargs) + + self.got_revision = update_step.presentation.properties['got_revision'] + self.m.tryserver.maybe_apply_issue() + + if self._need_chromium_checkout: + self.m.gclient.runhooks(cwd=self.checkout_root, env=self.gclient_env) + + def copy_build_products(self, src, dst): + """Copy whitelisted build products from src to dst.""" + self.m.python.inline( + name='copy build products', + program='''import errno +import glob +import os +import shutil +import sys + +src = sys.argv[1] +dst = sys.argv[2] +build_products_whitelist = %s + +try: + os.makedirs(dst) +except OSError as e: + if e.errno != errno.EEXIST: + raise + +for pattern in build_products_whitelist: + path = os.path.join(src, pattern) + for f in glob.glob(path): + dst_path = os.path.join(dst, os.path.relpath(f, src)) + if not os.path.isdir(os.path.dirname(dst_path)): + os.makedirs(os.path.dirname(dst_path)) + print 'Copying build product %%s to %%s' %% (f, dst_path) + shutil.move(f, dst_path) +''' % str(BUILD_PRODUCTS_ISOLATE_WHITELIST), + args=[src, dst], + infra_step=True) + + def compile_steps(self, clobber=False): + """Run the steps to build Skia.""" + try: + for target in self.build_targets: + self.flavor.compile(target) + self.copy_build_products( + self.flavor.out_dir, + self.swarming_out_dir.join('out', self.configuration)) + self.flavor.copy_extra_build_products(self.swarming_out_dir) + finally: + if 'Win' in self.builder_cfg.get('os', ''): + self.m.python.inline( + name='cleanup', + program='''import psutil +for p in psutil.process_iter(): + try: + if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'): + p.kill() + except psutil._error.AccessDenied: + pass +''', + infra_step=True) + + def _readfile(self, filename, *args, **kwargs): + """Convenience function for reading files.""" + name = kwargs.pop('name') or 'read %s' % self.m.path.basename(filename) + return self.m.file.read(name, filename, infra_step=True, *args, **kwargs) + + def _writefile(self, filename, contents): + """Convenience function for writing files.""" + return self.m.file.write('write %s' % self.m.path.basename(filename), + filename, contents, infra_step=True) + + def rmtree(self, path): + """Wrapper around api.file.rmtree with environment fix.""" + env = {} + env['PYTHONPATH'] = str(self.m.path['checkout'].join( + 'infra', 'bots', '.recipe_deps', 'build', 'scripts')) + self.m.file.rmtree(self.m.path.basename(path), + path, + env=env, + infra_step=True) + + def run(self, steptype, name, abort_on_failure=True, + fail_build_on_failure=True, env=None, **kwargs): + """Run a step. If it fails, keep going but mark the build status failed.""" + env = dict(env or {}) + env.update(self.default_env) + try: + return steptype(name=name, env=env, **kwargs) + except self.m.step.StepFailure as e: + if abort_on_failure: + raise # pragma: no cover + if fail_build_on_failure: + self.failed.append(e) + + def check_actual_version(self, version_file, tmp_dir, test_actual_version): + """Assert that we have an actually-downloaded version of the dir.""" + actual_version_file = self.m.path.join(tmp_dir, version_file) + actual_version = self._readfile( + actual_version_file, + name='Get downloaded %s' % version_file, + test_data=test_actual_version).rstrip() + assert actual_version != VERSION_NONE + return actual_version + + def copy_dir(self, host_version, version_file, tmp_dir, + host_path, device_path, test_expected_version, + test_actual_version): + actual_version_file = self.m.path.join(tmp_dir, version_file) + # Copy to device. + device_version_file = self.flavor.device_path_join( + self.device_dirs.tmp_dir, version_file) + if str(actual_version_file) != str(device_version_file): + try: + device_version = self.flavor.read_file_on_device(device_version_file) + except self.m.step.StepFailure: + device_version = VERSION_NONE + if device_version != host_version: + self.flavor.remove_file_on_device(device_version_file) + self.flavor.create_clean_device_dir(device_path) + self.flavor.copy_directory_contents_to_device(host_path, device_path) + + # Copy the new version file. + self.flavor.copy_file_to_device(actual_version_file, + device_version_file) + + def _copy_images(self): + """Download and copy test images if needed.""" + version_file = self.infrabots_dir.join('assets', 'skimage', 'VERSION') + if self.m.path.exists(version_file): + test_data = self.m.properties.get( + 'test_downloaded_sk_image_version', TEST_EXPECTED_SK_IMAGE_VERSION) + version = self._readfile(version_file, + name='Get downloaded skimage VERSION', + test_data=test_data).rstrip() + self._writefile(self.m.path.join(self.tmp_dir, VERSION_FILE_SK_IMAGE), + version) + else: + # TODO(borenet): Remove this once enough time has passed. + version = self.check_actual_version( + VERSION_FILE_SK_IMAGE, + self.tmp_dir, + test_actual_version=self.m.properties.get( + 'test_downloaded_sk_image_version', + TEST_EXPECTED_SK_IMAGE_VERSION), + ) + self.copy_dir( + version, + VERSION_FILE_SK_IMAGE, + self.tmp_dir, + self.images_dir, + self.device_dirs.images_dir, + test_expected_version=self.m.properties.get( + 'test_downloaded_sk_image_version', + TEST_EXPECTED_SK_IMAGE_VERSION), + test_actual_version=self.m.properties.get( + 'test_downloaded_sk_image_version', + TEST_EXPECTED_SK_IMAGE_VERSION)) + return version + + def _copy_skps(self): + """Download and copy the SKPs if needed.""" + version_file = self.infrabots_dir.join('assets', 'skp', 'VERSION') + if self.m.path.exists(version_file): + test_data = self.m.properties.get( + 'test_downloaded_skp_version', TEST_EXPECTED_SKP_VERSION) + version = self._readfile(version_file, + name='Get downloaded SKP VERSION', + test_data=test_data).rstrip() + self._writefile(self.m.path.join(self.tmp_dir, VERSION_FILE_SKP), version) + else: + # TODO(borenet): Remove this once enough time has passed. + version = self.check_actual_version( + VERSION_FILE_SKP, + self.tmp_dir, + test_actual_version=self.m.properties.get( + 'test_downloaded_skp_version', + TEST_EXPECTED_SKP_VERSION), + ) + self.copy_dir( + version, + VERSION_FILE_SKP, + self.tmp_dir, + self.local_skp_dir, + self.device_dirs.skp_dir, + test_expected_version=self.m.properties.get( + 'test_downloaded_skp_version', TEST_EXPECTED_SKP_VERSION), + test_actual_version=self.m.properties.get( + 'test_downloaded_skp_version', TEST_EXPECTED_SKP_VERSION)) + return version + + def install(self): + """Copy the required executables and files to the device.""" + self.device_dirs = self.flavor.get_device_dirs() + + # Run any device-specific installation. + self.flavor.install() + + # TODO(borenet): Only copy files which have changed. + # Resources + self.flavor.copy_directory_contents_to_device(self.resource_dir, + self.device_dirs.resource_dir) + + def ccache(self): + if not self._checked_for_ccache: + self._checked_for_ccache = True + if not self.m.platform.is_win: + result = self.run( + self.m.python.inline, + name='has ccache?', + program='''import json +import subprocess +import sys + +ccache = None +try: + ccache = subprocess.check_output(['which', 'ccache']).rstrip() +except: + pass +print json.dumps({'ccache': ccache}) +''', + stdout=self.m.json.output(), + infra_step=True, + abort_on_failure=False, + fail_build_on_failure=False) + if result and result.stdout and result.stdout.get('ccache'): + self._ccache = result.stdout['ccache'] + + return self._ccache + + def json_from_file(self, filename, cwd, builder_name, test_data): + """Execute the given script to obtain JSON data.""" + return self.m.python( + 'exec %s' % self.m.path.basename(filename), + filename, + args=[self.m.json.output(), builder_name], + step_test_data=lambda: self.m.json.test_api.output(test_data), + cwd=cwd, + infra_step=True).json.output + + def test_steps(self): + """Run the DM test.""" + self._run_once(self.install) + self._run_once(self._copy_skps) + self._run_once(self._copy_images) + + use_hash_file = False + if self.upload_dm_results: + # This must run before we write anything into self.device_dirs.dm_dir + # or we may end up deleting our output on machines where they're the same. + self.flavor.create_clean_host_dir(self.dm_dir) + if str(self.dm_dir) != str(self.device_dirs.dm_dir): + self.flavor.create_clean_device_dir(self.device_dirs.dm_dir) + + # Obtain the list of already-generated hashes. + hash_filename = 'uninteresting_hashes.txt' + + # Ensure that the tmp_dir exists. + self._run_once(self.m.file.makedirs, + 'tmp_dir', + self.tmp_dir, + infra_step=True) + + host_hashes_file = self.tmp_dir.join(hash_filename) + hashes_file = self.flavor.device_path_join( + self.device_dirs.tmp_dir, hash_filename) + self.run( + self.m.python.inline, + 'get uninteresting hashes', + program=""" + import contextlib + import math + import socket + import sys + import time + import urllib2 + + HASHES_URL = 'https://gold.skia.org/_/hashes' + RETRIES = 5 + TIMEOUT = 60 + WAIT_BASE = 15 + + socket.setdefaulttimeout(TIMEOUT) + for retry in range(RETRIES): + try: + with contextlib.closing( + urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w: + hashes = w.read() + with open(sys.argv[1], 'w') as f: + f.write(hashes) + break + except Exception as e: + print 'Failed to get uninteresting hashes from %s:' % HASHES_URL + print e + if retry == RETRIES: + raise + waittime = WAIT_BASE * math.pow(2, retry) + print 'Retry in %d seconds.' % waittime + time.sleep(waittime) + """, + args=[host_hashes_file], + cwd=self.skia_dir, + abort_on_failure=False, + fail_build_on_failure=False, + infra_step=True) + + if self.m.path.exists(host_hashes_file): + self.flavor.copy_file_to_device(host_hashes_file, hashes_file) + use_hash_file = True + + # Run DM. + properties = [ + 'gitHash', self.got_revision, + 'master', self.master_name, + 'builder', self.builder_name, + 'build_number', self.m.properties['buildnumber'], + ] + if self.is_trybot: + properties.extend([ + 'issue', self.m.properties['issue'], + 'patchset', self.m.properties['patchset'], + ]) + + args = [ + 'dm', + '--undefok', # This helps branches that may not know new flags. + '--resourcePath', self.device_dirs.resource_dir, + '--skps', self.device_dirs.skp_dir, + '--images', self.flavor.device_path_join( + self.device_dirs.images_dir, 'dm'), + '--colorImages', self.flavor.device_path_join(self.device_dirs.images_dir, + 'colorspace'), + '--nameByHash', + '--properties' + ] + properties + + args.append('--key') + args.extend(self._KeyParams()) + if use_hash_file: + args.extend(['--uninterestingHashesFile', hashes_file]) + if self.upload_dm_results: + args.extend(['--writePath', self.device_dirs.dm_dir]) + + skip_flag = None + if self.builder_cfg.get('cpu_or_gpu') == 'CPU': + skip_flag = '--nogpu' + elif self.builder_cfg.get('cpu_or_gpu') == 'GPU': + skip_flag = '--nocpu' + if skip_flag: + args.append(skip_flag) + args.extend(self.dm_flags) + + self.run(self.flavor.step, 'dm', cmd=args, abort_on_failure=False, + env=self.default_env) + + if self.upload_dm_results: + # Copy images and JSON to host machine if needed. + self.flavor.copy_directory_contents_to_host(self.device_dirs.dm_dir, + self.dm_dir) + + # See skia:2789. + if ('Valgrind' in self.builder_name and + self.builder_cfg.get('cpu_or_gpu') == 'GPU'): + abandonGpuContext = list(args) + abandonGpuContext.append('--abandonGpuContext') + self.run(self.flavor.step, 'dm --abandonGpuContext', + cmd=abandonGpuContext, abort_on_failure=False) + preAbandonGpuContext = list(args) + preAbandonGpuContext.append('--preAbandonGpuContext') + self.run(self.flavor.step, 'dm --preAbandonGpuContext', + cmd=preAbandonGpuContext, abort_on_failure=False, + env=self.default_env) + + def perf_steps(self): + """Run Skia benchmarks.""" + self._run_once(self.install) + self._run_once(self._copy_skps) + self._run_once(self._copy_images) + + if self.upload_perf_results: + self.flavor.create_clean_device_dir(self.device_dirs.perf_data_dir) + + # Run nanobench. + properties = [ + '--properties', + 'gitHash', self.got_revision, + 'build_number', self.m.properties['buildnumber'], + ] + if self.is_trybot: + properties.extend([ + 'issue', self.m.properties['issue'], + 'patchset', self.m.properties['patchset'], + ]) + + target = 'nanobench' + if 'VisualBench' in self.builder_name: + target = 'visualbench' + args = [ + target, + '--undefok', # This helps branches that may not know new flags. + '-i', self.device_dirs.resource_dir, + '--skps', self.device_dirs.skp_dir, + '--images', self.flavor.device_path_join( + self.device_dirs.images_dir, 'nanobench'), + ] + + skip_flag = None + if self.builder_cfg.get('cpu_or_gpu') == 'CPU': + skip_flag = '--nogpu' + elif self.builder_cfg.get('cpu_or_gpu') == 'GPU': + skip_flag = '--nocpu' + if skip_flag: + args.append(skip_flag) + args.extend(self.nanobench_flags) + + if self.upload_perf_results: + json_path = self.flavor.device_path_join( + self.device_dirs.perf_data_dir, + 'nanobench_%s.json' % self.got_revision) + args.extend(['--outResultsFile', json_path]) + args.extend(properties) + + keys_blacklist = ['configuration', 'role', 'is_trybot'] + args.append('--key') + for k in sorted(self.builder_cfg.keys()): + if not k in keys_blacklist: + args.extend([k, self.builder_cfg[k]]) + + self.run(self.flavor.step, target, cmd=args, abort_on_failure=False, + env=self.default_env) + + # See skia:2789. + if ('Valgrind' in self.builder_name and + self.builder_cfg.get('cpu_or_gpu') == 'GPU'): + abandonGpuContext = list(args) + abandonGpuContext.extend(['--abandonGpuContext', '--nocpu']) + self.run(self.flavor.step, '%s --abandonGpuContext' % target, + cmd=abandonGpuContext, abort_on_failure=False, + env=self.default_env) + + # Upload results. + if self.upload_perf_results: + self.m.file.makedirs('perf_dir', self.perf_data_dir) + self.flavor.copy_directory_contents_to_host( + self.device_dirs.perf_data_dir, self.perf_data_dir) + + def cleanup_steps(self): + """Run any cleanup steps.""" + self.flavor.cleanup_steps() + + def _KeyParams(self): + """Build a unique key from the builder name (as a list). + + E.g. arch x86 gpu GeForce320M mode MacMini4.1 os Mac10.6 + """ + # Don't bother to include role, which is always Test. + # TryBots are uploaded elsewhere so they can use the same key. + blacklist = ['role', 'is_trybot'] + + flat = [] + for k in sorted(self.builder_cfg.keys()): + if k not in blacklist: + flat.append(k) + flat.append(self.builder_cfg[k]) + return flat diff --git a/infra/bots/recipe_modules/skia/cmake_flavor.py b/infra/bots/recipe_modules/skia/cmake_flavor.py new file mode 100644 index 0000000000..c88d369451 --- /dev/null +++ b/infra/bots/recipe_modules/skia/cmake_flavor.py @@ -0,0 +1,14 @@ +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import default_flavor + +"""CMake flavor utils, used for building Skia with CMake.""" + +class CMakeFlavorUtils(default_flavor.DefaultFlavorUtils): + def compile(self, target): + """Build Skia with CMake. Ignores `target`.""" + cmake_build = self._skia_api.skia_dir.join('cmake', 'cmake_build') + self._skia_api.run(self._skia_api.m.step, 'cmake_build', cmd=[cmake_build], + cwd=self._skia_api.m.path['checkout']) diff --git a/infra/bots/recipe_modules/skia/coverage_flavor.py b/infra/bots/recipe_modules/skia/coverage_flavor.py new file mode 100644 index 0000000000..5fd853363d --- /dev/null +++ b/infra/bots/recipe_modules/skia/coverage_flavor.py @@ -0,0 +1,76 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import datetime +import default_flavor +import posixpath +import ssh_devices + + +"""Utils for running coverage tests.""" + + +class CoverageFlavorUtils(default_flavor.DefaultFlavorUtils): + + def step(self, name, cmd, **kwargs): + """Run the given step through coverage.""" + compile_target = 'dm' + build_cmd = [self._skia_api.skia_dir.join('tools', 'llvm_coverage_build'), + compile_target] + self._skia_api.run(self._skia_api.m.step, + 'build %s' % compile_target, + cmd=build_cmd, + cwd=self._skia_api.m.path['checkout']) + + # Slice out the 'key' and 'properties' arguments to be reused. + key = [] + properties = [] + current = None + for i in xrange(0, len(cmd)): + if isinstance(cmd[i], basestring) and cmd[i] == '--key': + current = key + elif isinstance(cmd[i], basestring) and cmd[i] == '--properties': + current = properties + elif isinstance(cmd[i], basestring) and cmd[i].startswith('--'): + current = None + if current is not None: + current.append(cmd[i]) + + results_dir = self._skia_api.skia_out.join('coverage_results') + self.create_clean_host_dir(results_dir) + + # Run DM under coverage. + report_file_basename = '%s.cov' % self._skia_api.got_revision + report_file = results_dir.join(report_file_basename) + args = [ + 'python', + self._skia_api.skia_dir.join('tools', 'llvm_coverage_run.py'), + ] + cmd + ['--outResultsFile', report_file] + self._skia_api.run(self._skia_api.m.step, name=name, cmd=args, + cwd=self._skia_api.m.path['checkout'], **kwargs) + + # Generate nanobench-style JSON output from the coverage report. + nanobench_json = results_dir.join('nanobench_%s.json' % ( + self._skia_api.got_revision)) + line_by_line_basename = ('coverage_by_line_%s.json' % ( + self._skia_api.got_revision)) + line_by_line = results_dir.join(line_by_line_basename) + args = [ + 'python', + self._skia_api.skia_dir.join('tools', 'parse_llvm_coverage.py'), + '--report', report_file, '--nanobench', nanobench_json, + '--linebyline', line_by_line] + args.extend(key) + args.extend(properties) + self._skia_api.run( + self._skia_api.m.step, + 'Generate Coverage Data', + cmd=args, cwd=self._skia_api.m.path['checkout']) + + # Copy files from results_dir into swarming_out_dir. + for r in self._skia_api.m.file.listdir('results_dir', results_dir): + self._skia_api.m.file.copy( + 'Copy to swarming out', results_dir.join(r), + self._skia_api.swarming_out_dir) diff --git a/infra/bots/recipe_modules/skia/default_flavor.py b/infra/bots/recipe_modules/skia/default_flavor.py new file mode 100644 index 0000000000..11720bea91 --- /dev/null +++ b/infra/bots/recipe_modules/skia/default_flavor.py @@ -0,0 +1,234 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Default flavor utils class, used for desktop builders.""" + + +import json + + +WIN_TOOLCHAIN_DIR = 't' + + +class DeviceDirs(object): + def __init__(self, + dm_dir, + perf_data_dir, + resource_dir, + images_dir, + skp_dir, + tmp_dir): + self._dm_dir = dm_dir + self._perf_data_dir = perf_data_dir + self._resource_dir = resource_dir + self._images_dir = images_dir + self._skp_dir = skp_dir + self._tmp_dir = tmp_dir + + @property + def dm_dir(self): + """Where DM writes.""" + return self._dm_dir + + @property + def perf_data_dir(self): + return self._perf_data_dir + + @property + def resource_dir(self): + return self._resource_dir + + @property + def images_dir(self): + return self._images_dir + + @property + def skp_dir(self): + """Holds SKP files that are consumed by RenderSKPs and BenchPictures.""" + return self._skp_dir + + @property + def tmp_dir(self): + return self._tmp_dir + + +class DefaultFlavorUtils(object): + """Utilities to be used by build steps. + + The methods in this class define how certain high-level functions should + work. Each build step flavor should correspond to a subclass of + DefaultFlavorUtils which may override any of these functions as appropriate + for that flavor. + + For example, the AndroidFlavorUtils will override the functions for + copying files between the host and Android device, as well as the + 'step' function, so that commands may be run through ADB. + """ + def __init__(self, skia_api, *args, **kwargs): + self._skia_api = skia_api + self._chrome_path = None + self._win_toolchain_dir = self._skia_api.slave_dir.join(WIN_TOOLCHAIN_DIR) + win_toolchain_asset_path = self._skia_api.infrabots_dir.join( + 'assets', 'win_toolchain', 'VERSION') + if not self._skia_api.m.path.exists(win_toolchain_asset_path): + self._win_toolchain_dir = self._skia_api.slave_dir + + + def step(self, name, cmd, **kwargs): + """Wrapper for the Step API; runs a step as appropriate for this flavor.""" + path_to_app = self._skia_api.skia_out.join( + self._skia_api.configuration, cmd[0]) + if (self._skia_api.m.platform.is_linux and + 'x86_64' in self._skia_api.builder_name and + not 'TSAN' in self._skia_api.builder_name): + new_cmd = ['catchsegv', path_to_app] + else: + new_cmd = [path_to_app] + new_cmd.extend(cmd[1:]) + return self._skia_api.run(self._skia_api.m.step, + name, cmd=new_cmd, **kwargs) + + @property + def chrome_path(self): + """Path to a checkout of Chrome on this machine.""" + return self._win_toolchain_dir.join('src') + + def bootstrap_win_toolchain(self): + """Run bootstrapping script for the Windows toolchain.""" + bootstrap_script = self._skia_api.infrabots_dir.join( + 'bootstrap_win_toolchain_json.py') + win_toolchain_json = self._win_toolchain_dir.join( + 'src', 'build', 'win_toolchain.json') + self._skia_api.m.python( + 'bootstrap win toolchain', + script=bootstrap_script, + args=['--win_toolchain_json', win_toolchain_json, + '--depot_tools_parent_dir', + self._win_toolchain_dir]) + + def build_command_buffer(self): + """Build command_buffer.""" + script = self._skia_api.skia_dir.join('tools', 'build_command_buffer.py') + self._skia_api.run( + self._skia_api.m.python, 'build command_buffer', + script=script, + args=['--chrome-dir', self._skia_api.checkout_root, + '--output-dir', self.out_dir, + '--chrome-build-type', self._skia_api.configuration, + '--no-sync']) + + def compile(self, target): + """Build the given target.""" + # The CHROME_PATH environment variable is needed for builders that use + # toolchains downloaded by Chrome. + env = {'CHROME_PATH': self.chrome_path} + if self._skia_api.m.platform.is_win: + make_cmd = ['python', 'make.py'] + self._skia_api._run_once(self.bootstrap_win_toolchain) + if 'Vulkan' in self._skia_api.builder_name: + env['VK_SDK_PATH'] = self._skia_api.slave_dir.join('win_vulkan_sdk') + if not self._skia_api.m.path.exists(self._skia_api.infrabots_dir.join( + 'assets', 'win_vulkan_sdk', 'VERSION')): + # TODO(kjlubick): Remove this once enough time has passed. + env['VK_SDK_PATH'] = self._skia_api.slave_dir.join('vulkan_1.0.17.0') + else: + make_cmd = ['make'] + cmd = make_cmd + [target] + try: + self._skia_api.run(self._skia_api.m.step, 'build %s' % target, cmd=cmd, + env=env, cwd=self._skia_api.m.path['checkout']) + except self._skia_api.m.step.StepFailure: + if self._skia_api.m.platform.is_win: + # The linker occasionally crashes on Windows. Try again. + self._skia_api.run(self._skia_api.m.step, 'build %s' % target, cmd=cmd, + env=env, cwd=self._skia_api.m.path['checkout']) + if 'CommandBuffer' in self._skia_api.builder_name: + self._skia_api._run_once(self.build_command_buffer) + + def copy_extra_build_products(self, swarming_out_dir): + """Copy extra build products to specified directory. + + Copy flavor-specific build products to swarming_out_dir for use in test and + perf steps.""" + pass + + @property + def out_dir(self): + """Flavor-specific out directory.""" + return self._skia_api.skia_out.join(self._skia_api.configuration) + + def device_path_join(self, *args): + """Like os.path.join(), but for paths on a connected device.""" + return self._skia_api.m.path.join(*args) + + def device_path_exists(self, path): # pragma: no cover + """Like os.path.exists(), but for paths on a connected device.""" + return self._skia_api.m.path.exists(path, infra_step=True) + + def copy_directory_contents_to_device(self, host_dir, device_dir): + """Like shutil.copytree(), but for copying to a connected device.""" + # For "normal" builders who don't have an attached device, we expect + # host_dir and device_dir to be the same. + if str(host_dir) != str(device_dir): + raise ValueError('For builders who do not have attached devices, copying ' + 'from host to device is undefined and only allowed if ' + 'host_path and device_path are the same (%s vs %s).' % ( + str(host_dir), str(device_dir))) # pragma: no cover + + def copy_directory_contents_to_host(self, device_dir, host_dir): + """Like shutil.copytree(), but for copying from a connected device.""" + # For "normal" builders who don't have an attached device, we expect + # host_dir and device_dir to be the same. + if str(host_dir) != str(device_dir): + raise ValueError('For builders who do not have attached devices, copying ' + 'from device to host is undefined and only allowed if ' + 'host_path and device_path are the same (%s vs %s).' % ( + str(host_dir), str(device_dir))) # pragma: no cover + + def copy_file_to_device(self, host_path, device_path): + """Like shutil.copyfile, but for copying to a connected device.""" + # For "normal" builders who don't have an attached device, we expect + # host_dir and device_dir to be the same. + if str(host_path) != str(device_path): # pragma: no cover + raise ValueError('For builders who do not have attached devices, copying ' + 'from host to device is undefined and only allowed if ' + 'host_path and device_path are the same (%s vs %s).' % ( + str(host_path), str(device_path))) + + def create_clean_device_dir(self, path): + """Like shutil.rmtree() + os.makedirs(), but on a connected device.""" + self.create_clean_host_dir(path) + + def create_clean_host_dir(self, path): + """Convenience function for creating a clean directory.""" + self._skia_api.rmtree(path) + self._skia_api.m.file.makedirs( + self._skia_api.m.path.basename(path), path, infra_step=True) + + def install(self): + """Run device-specific installation steps.""" + pass + + def cleanup_steps(self): + """Run any device-specific cleanup steps.""" + pass + + def get_device_dirs(self): + """ Set the directories which will be used by the build steps. + + These refer to paths on the same device where the test executables will + run, for example, for Android bots these are paths on the Android device + itself. For desktop bots, these are just local paths. + """ + return DeviceDirs( + dm_dir=self._skia_api.dm_dir, + perf_data_dir=self._skia_api.perf_data_dir, + resource_dir=self._skia_api.resource_dir, + images_dir=self._skia_api.images_dir, + skp_dir=self._skia_api.local_skp_dir, + tmp_dir=self._skia_api.tmp_dir) + + def __repr__(self): + return '<%s object>' % self.__class__.__name__ # pragma: no cover diff --git a/infra/bots/recipe_modules/skia/fake_specs.py b/infra/bots/recipe_modules/skia/fake_specs.py new file mode 100644 index 0000000000..6390ba23ac --- /dev/null +++ b/infra/bots/recipe_modules/skia/fake_specs.py @@ -0,0 +1,1349 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This file is generated by the infra/bots/gen_buildbot_specs.py script. + +FAKE_SPECS = { + 'Build-Mac-Clang-Arm7-Debug-Android': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'Clang', + 'configuration': 'Debug', + 'extra_config': 'Android', + 'is_trybot': False, + 'os': 'Mac', + 'role': 'Build', + 'target_arch': 'Arm7', + }, + 'configuration': 'Debug', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + 'skia_arch_type=arm skia_clang_build=1 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Mac-Clang-Arm7-Release-iOS': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'Clang', + 'configuration': 'Release', + 'extra_config': 'iOS', + 'is_trybot': False, + 'os': 'Mac', + 'role': 'Build', + 'target_arch': 'Arm7', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + ('skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_a' + 's_errors=1'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Mac-Clang-x86_64-Debug-CommandBuffer': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'Clang', + 'configuration': 'Debug', + 'extra_config': 'CommandBuffer', + 'is_trybot': False, + 'os': 'Mac', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + ('skia_arch_type=x86_64 skia_clang_build=1 skia_command_buffer=1 sk' + 'ia_warnings_as_errors=1'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Mac-Clang-x86_64-Release': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'Clang', + 'configuration': 'Release', + 'is_trybot': False, + 'os': 'Mac', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + 'skia_arch_type=x86_64 skia_clang_build=1 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Mac-Clang-x86_64-Release-CMake': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'Clang', + 'configuration': 'Release', + 'extra_config': 'CMake', + 'is_trybot': False, + 'os': 'Mac', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + 'skia_arch_type=x86_64 skia_clang_build=1 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Debug', + 'extra_config': 'Android_Vulkan', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'Arm64', + }, + 'configuration': 'Debug', + 'device_cfg': 'arm64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=arm64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Debug', + 'extra_config': 'Android', + 'is_trybot': True, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'Arm7', + }, + 'configuration': 'Debug', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=arm skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-Arm7-Release-Android': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'extra_config': 'Android', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'Arm7', + }, + 'configuration': 'Release', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=arm skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'extra_config': 'Android_Vulkan', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'Arm7', + }, + 'configuration': 'Release', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=arm skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Debug': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Debug', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=x86_64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Debug-MSAN': { + 'build_targets': [ + 'dm', + 'nanobench', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Debug', + 'extra_config': 'MSAN', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=x86_64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': False, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Release-CMake': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'extra_config': 'CMake', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=x86_64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Release-PDFium': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'extra_config': 'PDFium', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=x86_64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Release-RemoteRun': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'extra_config': 'RemoteRun', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=x86_64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Release-Shared': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'extra_config': 'Shared', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + 'skia_arch_type=x86_64 skia_shared_lib=1 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Release-Trybot': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'is_trybot': True, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=x86_64 skia_warnings_as_errors=1', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Ubuntu-GCC-x86_64-Release-Valgrind': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'GCC', + 'configuration': 'Release', + 'extra_config': 'Valgrind', + 'is_trybot': False, + 'os': 'Ubuntu', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + ('skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warn' + 'ings_as_errors=1'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': False, + 'upload_perf_results': False, + }, + 'Build-Win-MSVC-x86-Debug': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'MSVC', + 'configuration': 'Debug', + 'is_trybot': False, + 'os': 'Win', + 'role': 'Build', + 'target_arch': 'x86', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 ' + 'skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Win-MSVC-x86_64-Release': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'MSVC', + 'configuration': 'Release', + 'is_trybot': False, + 'os': 'Win', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release_x64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_warnings_as_errors' + '=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Build-Win-MSVC-x86_64-Release-Vulkan': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'compiler': 'MSVC', + 'configuration': 'Release', + 'extra_config': 'Vulkan', + 'is_trybot': False, + 'os': 'Win', + 'role': 'Build', + 'target_arch': 'x86_64', + }, + 'configuration': 'Release_x64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_vulkan=1 skia_warn' + 'ings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg' + '=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Housekeeper-Nightly-RecreateSKPs_Canary': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'extra_config': 'RecreateSKPs_Canary', + 'frequency': 'Nightly', + 'is_trybot': False, + 'role': 'Housekeeper', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_shared_lib=1 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Housekeeper-PerCommit': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'frequency': 'PerCommit', + 'is_trybot': False, + 'role': 'Housekeeper', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_shared_lib=1 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Housekeeper-PerCommit-Trybot': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'frequency': 'PerCommit', + 'is_trybot': True, + 'role': 'Housekeeper', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_shared_lib=1 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Housekeeper-Weekly-RecreateSKPs': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'extra_config': 'RecreateSKPs', + 'frequency': 'Weekly', + 'is_trybot': False, + 'role': 'Housekeeper', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_shared_lib=1 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Infra-PerCommit': { + 'build_targets': [ + 'most', + ], + 'builder_cfg': { + 'frequency': 'PerCommit', + 'is_trybot': False, + 'role': 'Infra', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': 'skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release': { + 'build_targets': [ + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'Arm7', + 'compiler': 'GCC', + 'configuration': 'Release', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'Tegra3', + 'is_trybot': False, + 'model': 'Nexus7', + 'os': 'Android', + 'role': 'Perf', + }, + 'configuration': 'Release', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + 'skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'product.board': 'grouper', + 'upload_dm_results': True, + 'upload_perf_results': True, + }, + 'Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot': { + 'build_targets': [ + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'GCC', + 'configuration': 'Release', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX2', + 'is_trybot': True, + 'model': 'GCE', + 'os': 'Ubuntu', + 'role': 'Perf', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + 'skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': True, + }, + 'Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench': { + 'build_targets': [ + 'visualbench', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'GCC', + 'configuration': 'Release', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'GTX550Ti', + 'extra_config': 'VisualBench', + 'is_trybot': False, + 'model': 'ShuttleA', + 'os': 'Ubuntu', + 'role': 'Perf', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + ('skia_arch_type=x86_64 skia_dump_stats=1 skia_use_sdl=1 skia_warni' + 'ngs_as_errors=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': True, + }, + 'Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release': { + 'build_targets': [ + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'MSVC', + 'configuration': 'Release', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX2', + 'is_trybot': False, + 'model': 'GCE', + 'os': 'Win', + 'role': 'Perf', + }, + 'configuration': 'Release_x64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_gpu=0 skia_warning' + 's_as_errors=0 skia_win_debuggers_path=c:/DbgHelp'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': True, + }, + 'Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot': { + 'build_targets': [ + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'MSVC', + 'configuration': 'Release', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'HD4600', + 'is_trybot': True, + 'model': 'ShuttleB', + 'os': 'Win8', + 'role': 'Perf', + }, + 'configuration': 'Release_x64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': False, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 ski' + 'a_dump_stats=1 skia_warnings_as_errors=0 skia_win_debuggers_path=' + 'c:/DbgHelp'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': True, + }, + 'Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug': { + 'build_targets': [ + 'dm', + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'Arm7', + 'compiler': 'GCC', + 'configuration': 'Debug', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'Mali400', + 'is_trybot': False, + 'model': 'GalaxyS3', + 'os': 'Android', + 'role': 'Test', + }, + 'configuration': 'Debug', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=arm skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'product.board': 'm0', + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan': { + 'build_targets': [ + 'dm', + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'Arm64', + 'compiler': 'GCC', + 'configuration': 'Debug', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'TegraX1', + 'extra_config': 'Vulkan', + 'is_trybot': False, + 'model': 'NVIDIA_Shield', + 'os': 'Android', + 'role': 'Test', + }, + 'configuration': 'Debug', + 'device_cfg': 'arm64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': + 'skia_arch_type=arm64 skia_vulkan=1 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'product.board': 'foster', + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug': { + 'build_targets': [ + 'dm', + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'Arm7', + 'compiler': 'GCC', + 'configuration': 'Debug', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'Tegra3', + 'is_trybot': False, + 'model': 'Nexus7', + 'os': 'Android', + 'role': 'Test', + }, + 'configuration': 'Debug', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=arm skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'product.board': 'grouper', + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release': { + 'build_targets': [ + 'dm', + ], + 'builder_cfg': { + 'arch': 'Arm7', + 'compiler': 'GCC', + 'configuration': 'Release', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'Tegra3', + 'is_trybot': False, + 'model': 'Nexus7v2', + 'os': 'Android', + 'role': 'Test', + }, + 'configuration': 'Release', + 'device_cfg': 'arm_v7_neon', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': 'skia_arch_type=arm skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'product.board': 'flo', + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release': { + 'build_targets': [ + 'dm', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'Clang', + 'configuration': 'Release', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX', + 'is_trybot': False, + 'model': 'MacMini6.2', + 'os': 'Mac', + 'role': 'Test', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': True, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + ('skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings' + '_as_errors=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot': { + 'build_targets': [ + 'dm', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'Clang', + 'configuration': 'Coverage', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX2', + 'is_trybot': True, + 'model': 'GCE', + 'os': 'Ubuntu', + 'role': 'Test', + }, + 'configuration': 'Coverage', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_compile_steps': False, + 'do_perf_steps': False, + 'do_test_steps': True, + 'env': { + 'CC': '/usr/bin/clang-3.6', + 'CXX': '/usr/bin/clang++-3.6', + 'GYP_DEFINES': + ('skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings' + '_as_errors=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': False, + 'upload_perf_results': False, + }, + 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug': { + 'build_targets': [ + 'dm', + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'GCC', + 'configuration': 'Debug', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX2', + 'is_trybot': False, + 'model': 'GCE', + 'os': 'Ubuntu', + 'role': 'Test', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': + 'skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN': { + 'build_targets': [ + 'dm', + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'GCC', + 'configuration': 'Debug', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX2', + 'extra_config': 'MSAN', + 'is_trybot': False, + 'model': 'GCE', + 'os': 'Ubuntu', + 'role': 'Test', + }, + 'configuration': 'Debug', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': + 'skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0', + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': False, + 'upload_perf_results': False, + }, + 'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind': { + 'build_targets': [ + 'dm', + 'nanobench', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'GCC', + 'configuration': 'Release', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'GTX550Ti', + 'extra_config': 'Valgrind', + 'is_trybot': False, + 'model': 'ShuttleA', + 'os': 'Ubuntu', + 'role': 'Test', + }, + 'configuration': 'Release', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': + ('skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warn' + 'ings_as_errors=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': False, + 'upload_perf_results': False, + }, + 'Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release': { + 'build_targets': [ + 'dm', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'MSVC', + 'configuration': 'Release', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'HD7770', + 'is_trybot': False, + 'model': 'ShuttleA', + 'os': 'Win8', + 'role': 'Test', + }, + 'configuration': 'Release_x64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 ski' + 'a_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release': { + 'build_targets': [ + 'dm', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'MSVC', + 'configuration': 'Release', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX2', + 'is_trybot': False, + 'model': 'ShuttleB', + 'os': 'Win8', + 'role': 'Test', + }, + 'configuration': 'Release_x64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 ski' + 'a_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgH' + 'elp'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot': { + 'build_targets': [ + 'dm', + ], + 'builder_cfg': { + 'arch': 'x86_64', + 'compiler': 'MSVC', + 'configuration': 'Release', + 'cpu_or_gpu': 'CPU', + 'cpu_or_gpu_value': 'AVX2', + 'is_trybot': True, + 'model': 'ShuttleB', + 'os': 'Win8', + 'role': 'Test', + }, + 'configuration': 'Release_x64', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': True, + 'env': { + 'GYP_DEFINES': + ('qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 ski' + 'a_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgH' + 'elp'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug': { + 'build_targets': [ + 'iOSShell', + ], + 'builder_cfg': { + 'arch': 'Arm7', + 'compiler': 'Clang', + 'configuration': 'Debug', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'SGX554', + 'is_trybot': False, + 'model': 'iPad4', + 'os': 'iOS', + 'role': 'Test', + }, + 'configuration': 'Debug', + 'device_cfg': 'iPad4,1', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': True, + 'do_test_steps': True, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + ('skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_a' + 's_errors=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, + 'Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release': { + 'build_targets': [ + 'iOSShell', + ], + 'builder_cfg': { + 'arch': 'Arm7', + 'compiler': 'Clang', + 'configuration': 'Release', + 'cpu_or_gpu': 'GPU', + 'cpu_or_gpu_value': 'SGX554', + 'is_trybot': False, + 'model': 'iPad4', + 'os': 'iOS', + 'role': 'Test', + }, + 'configuration': 'Release', + 'device_cfg': 'iPad4,1', + 'dm_flags': [ + '--dummy-flags', + ], + 'do_perf_steps': False, + 'do_test_steps': True, + 'env': { + 'CC': '/usr/bin/clang', + 'CXX': '/usr/bin/clang++', + 'GYP_DEFINES': + ('skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_a' + 's_errors=0'), + }, + 'nanobench_flags': [ + '--dummy-flags', + ], + 'upload_dm_results': True, + 'upload_perf_results': False, + }, +} diff --git a/infra/bots/recipe_modules/skia/ios_flavor.py b/infra/bots/recipe_modules/skia/ios_flavor.py new file mode 100644 index 0000000000..d83cf213de --- /dev/null +++ b/infra/bots/recipe_modules/skia/ios_flavor.py @@ -0,0 +1,176 @@ +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import copy +import default_flavor + + +"""iOS flavor utils, used for building for and running tests on iOS.""" + + +class iOSFlavorUtils(default_flavor.DefaultFlavorUtils): + def __init__(self, skia_api): + super(iOSFlavorUtils, self).__init__(skia_api) + self.default_env = {} + self.default_env['XCODEBUILD'] = ( + self._skia_api.slave_dir.join('xcodebuild')) + self.ios_bin = self._skia_api.skia_dir.join( + 'platform_tools', 'ios', 'bin') + + def step(self, name, cmd, **kwargs): + args = [self.ios_bin.join('ios_run_skia')] + env = {} + env.update(kwargs.pop('env', {})) + env.update(self.default_env) + # Convert 'dm' and 'nanobench' from positional arguments + # to flags, which is what iOSShell expects to select which + # one is being run. + cmd = ["--" + c if c in ['dm', 'nanobench'] else c + for c in cmd] + return self._skia_api.run(self._skia_api.m.step, name=name, cmd=args + cmd, + env=env, + **kwargs) + + def compile(self, target): + """Build the given target.""" + cmd = [self.ios_bin.join('ios_ninja')] + self._skia_api.run(self._skia_api.m.step, 'build iOSShell', cmd=cmd, + cwd=self._skia_api.m.path['checkout']) + + def device_path_join(self, *args): + """Like os.path.join(), but for paths on a connected iOS device.""" + return '/'.join(args) + + def device_path_exists(self, path): + """Like os.path.exists(), but for paths on a connected device.""" + return self._skia_api.run( + self._skia_api.m.step, + 'exists %s' % path, + cmd=[self.ios_bin.join('ios_path_exists'), path], + env=self.default_env, + infra_step=True, + ) # pragma: no cover + + def _remove_device_dir(self, path): + """Remove the directory on the device.""" + return self._skia_api.run( + self._skia_api.m.step, + 'rmdir %s' % path, + cmd=[self.ios_bin.join('ios_rm'), path], + env=self.default_env, + infra_step=True, + ) + + def _create_device_dir(self, path): + """Create the directory on the device.""" + return self._skia_api.run( + self._skia_api.m.step, + 'mkdir %s' % path, + cmd=[self.ios_bin.join('ios_mkdir'), path], + env=self.default_env, + infra_step=True, + ) + + def copy_directory_contents_to_device(self, host_dir, device_dir): + """Like shutil.copytree(), but for copying to a connected device.""" + return self._skia_api.run( + self._skia_api.m.step, + name='push %s to %s' % (self._skia_api.m.path.basename(host_dir), + self._skia_api.m.path.basename(device_dir)), + cmd=[self.ios_bin.join('ios_push_if_needed'), + host_dir, device_dir], + env=self.default_env, + infra_step=True, + ) + + def copy_directory_contents_to_host(self, device_dir, host_dir): + """Like shutil.copytree(), but for copying from a connected device.""" + self._skia_api.run( + self._skia_api.m.step, + name='pull %s' % self._skia_api.m.path.basename(device_dir), + cmd=[self.ios_bin.join('ios_pull_if_needed'), + device_dir, host_dir], + env=self.default_env, + infra_step=True, + ) + + def copy_file_to_device(self, host_path, device_path): + """Like shutil.copyfile, but for copying to a connected device.""" + self._skia_api.run( + self._skia_api.m.step, + name='push %s' % host_path, + cmd=[self.ios_bin.join('ios_push_file'), host_path, device_path], + env=self.default_env, + infra_step=True, + ) # pragma: no cover + + def copy_extra_build_products(self, swarming_out_dir): + xcode_dir = self._skia_api.m.path.join( + 'xcodebuild', '%s-iphoneos' % self._skia_api.configuration) + self._skia_api.copy_build_products( + self._skia_api.skia_dir.join(xcode_dir), + swarming_out_dir.join(xcode_dir)) + + def create_clean_device_dir(self, path): + """Like shutil.rmtree() + os.makedirs(), but on a connected device.""" + self._remove_device_dir(path) + self._create_device_dir(path) + + def install(self): + """Run device-specific installation steps.""" + self._skia_api.run( + self._skia_api.m.step, + name='install iOSShell', + cmd=[self.ios_bin.join('ios_install')], + env=self.default_env, + infra_step=True) + + def cleanup_steps(self): + """Run any device-specific cleanup steps.""" + if self._skia_api.do_test_steps or self._skia_api.do_perf_steps: + self._skia_api.run( + self._skia_api.m.step, + name='reboot', + cmd=[self.ios_bin.join('ios_restart')], + env=self.default_env, + infra_step=True) + self._skia_api.run( + self._skia_api.m.step, + name='wait for reboot', + cmd=['sleep', '20'], + env=self.default_env, + infra_step=True) + + def read_file_on_device(self, path): + """Read the given file.""" + ret = self._skia_api.run( + self._skia_api.m.step, + name='read %s' % self._skia_api.m.path.basename(path), + cmd=[self.ios_bin.join('ios_cat_file'), path], + env=self.default_env, + stdout=self._skia_api.m.raw_io.output(), + infra_step=True) + return ret.stdout.rstrip() if ret.stdout else ret.stdout + + def remove_file_on_device(self, path): + """Remove the file on the device.""" + return self._skia_api.run( + self._skia_api.m.step, + 'rm %s' % path, + cmd=[self.ios_bin.join('ios_rm'), path], + env=self.default_env, + infra_step=True, + ) + + def get_device_dirs(self): + """ Set the directories which will be used by the build steps.""" + prefix = self.device_path_join('skiabot', 'skia_') + return default_flavor.DeviceDirs( + dm_dir=prefix + 'dm', + perf_data_dir=prefix + 'perf', + resource_dir=prefix + 'resources', + images_dir=prefix + 'images', + skp_dir=prefix + 'skp/skps', + tmp_dir=prefix + 'tmp_dir') diff --git a/infra/bots/recipe_modules/skia/pdfium_flavor.py b/infra/bots/recipe_modules/skia/pdfium_flavor.py new file mode 100644 index 0000000000..782daf0487 --- /dev/null +++ b/infra/bots/recipe_modules/skia/pdfium_flavor.py @@ -0,0 +1,64 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import re + +import default_flavor + + +"""PDFium flavor utils, used for building PDFium with Skia.""" + + +class PDFiumFlavorUtils(default_flavor.DefaultFlavorUtils): + + def compile(self, target): + """Build PDFium with Skia.""" + pdfium_dir = self._skia_api.checkout_root.join('pdfium') + + # Runhook to generate the gn binary in buildtools. + self._skia_api.run( + self._skia_api.m.step, + 'runhook', + cmd=['gclient', 'runhook', 'gn_linux64'], + cwd=pdfium_dir) + + # Setup gn args. + gn_args = ['pdf_use_skia=true', 'pdf_is_standalone=true', + 'clang_use_chrome_plugins=false'] + self._skia_api.run( + self._skia_api.m.step, + 'gn_gen', + cmd=['gn', 'gen', 'out/skia', '--args=%s' % ' '.join(gn_args)], + cwd=pdfium_dir, + env={'CHROMIUM_BUILDTOOLS_PATH': str(pdfium_dir.join('buildtools'))}) + + # Modify DEPS file to contain the current Skia revision. + skia_revision = self._skia_api.got_revision + deps_file = pdfium_dir.join('DEPS') + test_data = "'skia_revision': 'abc'" + + original_contents = self._skia_api.m.file.read( + 'read PDFium DEPS', deps_file, test_data=test_data, infra_step=True) + + deps_skia_regexp = re.compile( + r'(?<=["\']skia_revision["\']: ["\'])([a-fA-F0-9]+)(?=["\'])', + re.MULTILINE) + patched_contents = re.sub(deps_skia_regexp, str(skia_revision), + original_contents) + self._skia_api.m.file.write('write PDFium DEPs', deps_file, + patched_contents, infra_step=True) + + # gclient sync after updating DEPS. + self._skia_api.run( + self._skia_api.m.step, + 'sync_pdfium', + cmd=['gclient', 'sync'], + cwd=pdfium_dir) + + # Build PDFium. + self._skia_api.run( + self._skia_api.m.step, + 'build_pdfium', + cmd=['ninja', '-C', 'out/skia', '-j100'], + cwd=pdfium_dir) diff --git a/infra/bots/recipe_modules/skia/resources/binary_size_utils.py b/infra/bots/recipe_modules/skia/resources/binary_size_utils.py new file mode 100644 index 0000000000..c09a65dccd --- /dev/null +++ b/infra/bots/recipe_modules/skia/resources/binary_size_utils.py @@ -0,0 +1,67 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Common utilities for tools that deal with binary size information. + +Copied from chromium/src/build/android/pylib/symbols/binary_size_tools.py. +""" + +import logging +import re + + +def ParseNm(nm_lines): + """Parse nm output, returning data for all relevant (to binary size) + symbols and ignoring the rest. + + Args: + nm_lines: an iterable over lines of nm output. + + Yields: + (symbol name, symbol type, symbol size, source file path). + + Path may be None if nm couldn't figure out the source file. + """ + + # Match lines with size, symbol, optional location, optional discriminator + sym_re = re.compile(r'^[0-9a-f]{8,} ' # address (8+ hex digits) + '([0-9a-f]{8,}) ' # size (8+ hex digits) + '(.) ' # symbol type, one character + '([^\t]+)' # symbol name, separated from next by tab + '(?:\t(.*):[\d\?]+)?.*$') # location + # Match lines with addr but no size. + addr_re = re.compile(r'^[0-9a-f]{8,} (.) ([^\t]+)(?:\t.*)?$') + # Match lines that don't have an address at all -- typically external symbols. + noaddr_re = re.compile(r'^ {8,} (.) (.*)$') + # Match lines with no symbol name, only addr and type + addr_only_re = re.compile(r'^[0-9a-f]{8,} (.)$') + + for line in nm_lines: + line = line.rstrip() + match = sym_re.match(line) + if match: + size, sym_type, sym = match.groups()[0:3] + size = int(size, 16) + if sym_type in ('B', 'b'): + continue # skip all BSS for now. + path = match.group(4) + yield sym, sym_type, size, path + continue + match = addr_re.match(line) + if match: + # sym_type, sym = match.groups()[0:2] + continue # No size == we don't care. + match = noaddr_re.match(line) + if match: + sym_type, sym = match.groups() + if sym_type in ('U', 'w'): + continue # external or weak symbol + match = addr_only_re.match(line) + if match: + continue # Nothing to do. + + + # If we reach this part of the loop, there was something in the + # line that we didn't expect or recognize. + logging.warning('nm output parser failed to parse: %s', repr(line)) diff --git a/infra/bots/recipe_modules/skia/resources/elf_symbolizer.py b/infra/bots/recipe_modules/skia/resources/elf_symbolizer.py new file mode 100644 index 0000000000..de9c141219 --- /dev/null +++ b/infra/bots/recipe_modules/skia/resources/elf_symbolizer.py @@ -0,0 +1,477 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""The ElfSymbolizer class for symbolizing Executable and Linkable Files. + +Adapted for Skia's use from +chromium/src/build/android/pylib/symbols/elf_symbolizer.py. + +Main changes: +-- Added prefix_to_remove param to remove path prefix from tree data. +""" + +import collections +import datetime +import logging +import multiprocessing +import os +import posixpath +import Queue +import re +import subprocess +import sys +import threading + + +# addr2line builds a possibly infinite memory cache that can exhaust +# the computer's memory if allowed to grow for too long. This constant +# controls how many lookups we do before restarting the process. 4000 +# gives near peak performance without extreme memory usage. +ADDR2LINE_RECYCLE_LIMIT = 4000 + + +class ELFSymbolizer(object): + """An uber-fast (multiprocessing, pipelined and asynchronous) ELF symbolizer. + + This class is a frontend for addr2line (part of GNU binutils), designed to + symbolize batches of large numbers of symbols for a given ELF file. It + supports sharding symbolization against many addr2line instances and + pipelining of multiple requests per each instance (in order to hide addr2line + internals and OS pipe latencies). + + The interface exhibited by this class is a very simple asynchronous interface, + which is based on the following three methods: + - SymbolizeAsync(): used to request (enqueue) resolution of a given address. + - The |callback| method: used to communicated back the symbol information. + - Join(): called to conclude the batch to gather the last outstanding results. + In essence, before the Join method returns, this class will have issued as + many callbacks as the number of SymbolizeAsync() calls. In this regard, note + that due to multiprocess sharding, callbacks can be delivered out of order. + + Some background about addr2line: + - it is invoked passing the elf path in the cmdline, piping the addresses in + its stdin and getting results on its stdout. + - it has pretty large response times for the first requests, but it + works very well in streaming mode once it has been warmed up. + - it doesn't scale by itself (on more cores). However, spawning multiple + instances at the same time on the same file is pretty efficient as they + keep hitting the pagecache and become mostly CPU bound. + - it might hang or crash, mostly for OOM. This class deals with both of these + problems. + + Despite the "scary" imports and the multi* words above, (almost) no multi- + threading/processing is involved from the python viewpoint. Concurrency + here is achieved by spawning several addr2line subprocesses and handling their + output pipes asynchronously. Therefore, all the code here (with the exception + of the Queue instance in Addr2Line) should be free from mind-blowing + thread-safety concerns. + + The multiprocess sharding works as follows: + The symbolizer tries to use the lowest number of addr2line instances as + possible (with respect of |max_concurrent_jobs|) and enqueue all the requests + in a single addr2line instance. For few symbols (i.e. dozens) sharding isn't + worth the startup cost. + The multiprocess logic kicks in as soon as the queues for the existing + instances grow. Specifically, once all the existing instances reach the + |max_queue_size| bound, a new addr2line instance is kicked in. + In the case of a very eager producer (i.e. all |max_concurrent_jobs| instances + have a backlog of |max_queue_size|), back-pressure is applied on the caller by + blocking the SymbolizeAsync method. + + This module has been deliberately designed to be dependency free (w.r.t. of + other modules in this project), to allow easy reuse in external projects. + """ + + def __init__(self, elf_file_path, addr2line_path, callback, inlines=False, + max_concurrent_jobs=None, addr2line_timeout=30, max_queue_size=50, + source_root_path=None, strip_base_path=None, prefix_to_remove=None): + """Args: + elf_file_path: path of the elf file to be symbolized. + addr2line_path: path of the toolchain's addr2line binary. + callback: a callback which will be invoked for each resolved symbol with + the two args (sym_info, callback_arg). The former is an instance of + |ELFSymbolInfo| and contains the symbol information. The latter is an + embedder-provided argument which is passed to SymbolizeAsync(). + inlines: when True, the ELFSymbolInfo will contain also the details about + the outer inlining functions. When False, only the innermost function + will be provided. + max_concurrent_jobs: Max number of addr2line instances spawned. + Parallelize responsibly, addr2line is a memory and I/O monster. + max_queue_size: Max number of outstanding requests per addr2line instance. + addr2line_timeout: Max time (in seconds) to wait for a addr2line response. + After the timeout, the instance will be considered hung and respawned. + source_root_path: In some toolchains only the name of the source file is + is output, without any path information; disambiguation searches + through the source directory specified by |source_root_path| argument + for files whose name matches, adding the full path information to the + output. For example, if the toolchain outputs "unicode.cc" and there + is a file called "unicode.cc" located under |source_root_path|/foo, + the tool will replace "unicode.cc" with + "|source_root_path|/foo/unicode.cc". If there are multiple files with + the same name, disambiguation will fail because the tool cannot + determine which of the files was the source of the symbol. + strip_base_path: Rebases the symbols source paths onto |source_root_path| + (i.e replace |strip_base_path| with |source_root_path). + prefix_to_remove: Removes the prefix from ElfSymbolInfo output. Skia added + """ + assert(os.path.isfile(addr2line_path)), 'Cannot find ' + addr2line_path + self.elf_file_path = elf_file_path + self.addr2line_path = addr2line_path + self.callback = callback + self.inlines = inlines + self.max_concurrent_jobs = (max_concurrent_jobs or + min(multiprocessing.cpu_count(), 4)) + self.max_queue_size = max_queue_size + self.addr2line_timeout = addr2line_timeout + self.requests_counter = 0 # For generating monotonic request IDs. + self._a2l_instances = [] # Up to |max_concurrent_jobs| _Addr2Line inst. + + # Skia addition: remove the given prefix from tree paths. + self.prefix_to_remove = prefix_to_remove + + # If necessary, create disambiguation lookup table + self.disambiguate = source_root_path is not None + self.disambiguation_table = {} + self.strip_base_path = strip_base_path + if(self.disambiguate): + self.source_root_path = os.path.abspath(source_root_path) + self._CreateDisambiguationTable() + + # Create one addr2line instance. More instances will be created on demand + # (up to |max_concurrent_jobs|) depending on the rate of the requests. + self._CreateNewA2LInstance() + + def SymbolizeAsync(self, addr, callback_arg=None): + """Requests symbolization of a given address. + + This method is not guaranteed to return immediately. It generally does, but + in some scenarios (e.g. all addr2line instances have full queues) it can + block to create back-pressure. + + Args: + addr: address to symbolize. + callback_arg: optional argument which will be passed to the |callback|.""" + assert(isinstance(addr, int)) + + # Process all the symbols that have been resolved in the meanwhile. + # Essentially, this drains all the addr2line(s) out queues. + for a2l_to_purge in self._a2l_instances: + a2l_to_purge.ProcessAllResolvedSymbolsInQueue() + a2l_to_purge.RecycleIfNecessary() + + # Find the best instance according to this logic: + # 1. Find an existing instance with the shortest queue. + # 2. If all of instances' queues are full, but there is room in the pool, + # (i.e. < |max_concurrent_jobs|) create a new instance. + # 3. If there were already |max_concurrent_jobs| instances and all of them + # had full queues, make back-pressure. + + # 1. + def _SortByQueueSizeAndReqID(a2l): + return (a2l.queue_size, a2l.first_request_id) + a2l = min(self._a2l_instances, key=_SortByQueueSizeAndReqID) + + # 2. + if (a2l.queue_size >= self.max_queue_size and + len(self._a2l_instances) < self.max_concurrent_jobs): + a2l = self._CreateNewA2LInstance() + + # 3. + if a2l.queue_size >= self.max_queue_size: + a2l.WaitForNextSymbolInQueue() + + a2l.EnqueueRequest(addr, callback_arg) + + def Join(self): + """Waits for all the outstanding requests to complete and terminates.""" + for a2l in self._a2l_instances: + a2l.WaitForIdle() + a2l.Terminate() + + def _CreateNewA2LInstance(self): + assert(len(self._a2l_instances) < self.max_concurrent_jobs) + a2l = ELFSymbolizer.Addr2Line(self) + self._a2l_instances.append(a2l) + return a2l + + def _CreateDisambiguationTable(self): + """ Non-unique file names will result in None entries""" + self.disambiguation_table = {} + + for root, _, filenames in os.walk(self.source_root_path): + for f in filenames: + self.disambiguation_table[f] = os.path.join(root, f) if (f not in + self.disambiguation_table) else None + + + class Addr2Line(object): + """A python wrapper around an addr2line instance. + + The communication with the addr2line process looks as follows: + [STDIN] [STDOUT] (from addr2line's viewpoint) + > f001111 + > f002222 + < Symbol::Name(foo, bar) for f001111 + < /path/to/source/file.c:line_number + > f003333 + < Symbol::Name2() for f002222 + < /path/to/source/file.c:line_number + < Symbol::Name3() for f003333 + < /path/to/source/file.c:line_number + """ + + SYM_ADDR_RE = re.compile(r'([^:]+):(\?|\d+).*') + + def __init__(self, symbolizer): + self._symbolizer = symbolizer + self._lib_file_name = posixpath.basename(symbolizer.elf_file_path) + + # The request queue (i.e. addresses pushed to addr2line's stdin and not + # yet retrieved on stdout) + self._request_queue = collections.deque() + + # This is essentially len(self._request_queue). It has been optimized to a + # separate field because turned out to be a perf hot-spot. + self.queue_size = 0 + + # Keep track of the number of symbols a process has processed to + # avoid a single process growing too big and using all the memory. + self._processed_symbols_count = 0 + + # Objects required to handle the addr2line subprocess. + self._proc = None # Subprocess.Popen(...) instance. + self._thread = None # Threading.thread instance. + self._out_queue = None # Queue.Queue instance (for buffering a2l stdout). + self._RestartAddr2LineProcess() + + def EnqueueRequest(self, addr, callback_arg): + """Pushes an address to addr2line's stdin (and keeps track of it).""" + self._symbolizer.requests_counter += 1 # For global "age" of requests. + req_idx = self._symbolizer.requests_counter + self._request_queue.append((addr, callback_arg, req_idx)) + self.queue_size += 1 + self._WriteToA2lStdin(addr) + + def WaitForIdle(self): + """Waits until all the pending requests have been symbolized.""" + while self.queue_size > 0: + self.WaitForNextSymbolInQueue() + + def WaitForNextSymbolInQueue(self): + """Waits for the next pending request to be symbolized.""" + if not self.queue_size: + return + + # This outer loop guards against a2l hanging (detecting stdout timeout). + while True: + start_time = datetime.datetime.now() + timeout = datetime.timedelta(seconds=self._symbolizer.addr2line_timeout) + + # The inner loop guards against a2l crashing (checking if it exited). + while (datetime.datetime.now() - start_time < timeout): + # poll() returns !None if the process exited. a2l should never exit. + if self._proc.poll(): + logging.warning('addr2line crashed, respawning (lib: %s).' % + self._lib_file_name) + self._RestartAddr2LineProcess() + # TODO(primiano): the best thing to do in this case would be + # shrinking the pool size as, very likely, addr2line is crashed + # due to low memory (and the respawned one will die again soon). + + try: + lines = self._out_queue.get(block=True, timeout=0.25) + except Queue.Empty: + # On timeout (1/4 s.) repeat the inner loop and check if either the + # addr2line process did crash or we waited its output for too long. + continue + + # In nominal conditions, we get straight to this point. + self._ProcessSymbolOutput(lines) + return + + # If this point is reached, we waited more than |addr2line_timeout|. + logging.warning('Hung addr2line process, respawning (lib: %s).' % + self._lib_file_name) + self._RestartAddr2LineProcess() + + def ProcessAllResolvedSymbolsInQueue(self): + """Consumes all the addr2line output lines produced (without blocking).""" + if not self.queue_size: + return + while True: + try: + lines = self._out_queue.get_nowait() + except Queue.Empty: + break + self._ProcessSymbolOutput(lines) + + def RecycleIfNecessary(self): + """Restarts the process if it has been used for too long. + + A long running addr2line process will consume excessive amounts + of memory without any gain in performance.""" + if self._processed_symbols_count >= ADDR2LINE_RECYCLE_LIMIT: + self._RestartAddr2LineProcess() + + + def Terminate(self): + """Kills the underlying addr2line process. + + The poller |_thread| will terminate as well due to the broken pipe.""" + try: + self._proc.kill() + self._proc.communicate() # Essentially wait() without risking deadlock. + except Exception: # An exception while terminating? How interesting. + pass + self._proc = None + + def _WriteToA2lStdin(self, addr): + self._proc.stdin.write('%s\n' % hex(addr)) + if self._symbolizer.inlines: + # In the case of inlines we output an extra blank line, which causes + # addr2line to emit a (??,??:0) tuple that we use as a boundary marker. + self._proc.stdin.write('\n') + self._proc.stdin.flush() + + def _ProcessSymbolOutput(self, lines): + """Parses an addr2line symbol output and triggers the client callback.""" + (_, callback_arg, _) = self._request_queue.popleft() + self.queue_size -= 1 + + innermost_sym_info = None + sym_info = None + for (line1, line2) in lines: + prev_sym_info = sym_info + name = line1 if not line1.startswith('?') else None + source_path = None + source_line = None + m = ELFSymbolizer.Addr2Line.SYM_ADDR_RE.match(line2) + if m: + if not m.group(1).startswith('?'): + source_path = m.group(1) + if not m.group(2).startswith('?'): + source_line = int(m.group(2)) + else: + logging.warning('Got invalid symbol path from addr2line: %s' % line2) + + # In case disambiguation is on, and needed + was_ambiguous = False + disambiguated = False + if self._symbolizer.disambiguate: + if source_path and not posixpath.isabs(source_path): + path = self._symbolizer.disambiguation_table.get(source_path) + was_ambiguous = True + disambiguated = path is not None + source_path = path if disambiguated else source_path + + # Use absolute paths (so that paths are consistent, as disambiguation + # uses absolute paths) + if source_path and not was_ambiguous: + source_path = os.path.abspath(source_path) + + if source_path and self._symbolizer.strip_base_path: + # Strip the base path + source_path = re.sub('^' + self._symbolizer.strip_base_path, + self._symbolizer.source_root_path or '', source_path) + + sym_info = ELFSymbolInfo(name, source_path, source_line, was_ambiguous, + disambiguated, + self._symbolizer.prefix_to_remove) + if prev_sym_info: + prev_sym_info.inlined_by = sym_info + if not innermost_sym_info: + innermost_sym_info = sym_info + + self._processed_symbols_count += 1 + self._symbolizer.callback(innermost_sym_info, callback_arg) + + def _RestartAddr2LineProcess(self): + if self._proc: + self.Terminate() + + # The only reason of existence of this Queue (and the corresponding + # Thread below) is the lack of a subprocess.stdout.poll_avail_lines(). + # Essentially this is a pipe able to extract a couple of lines atomically. + self._out_queue = Queue.Queue() + + # Start the underlying addr2line process in line buffered mode. + + cmd = [self._symbolizer.addr2line_path, '--functions', '--demangle', + '--exe=' + self._symbolizer.elf_file_path] + if self._symbolizer.inlines: + cmd += ['--inlines'] + self._proc = subprocess.Popen(cmd, bufsize=1, stdout=subprocess.PIPE, + stdin=subprocess.PIPE, stderr=sys.stderr, close_fds=True) + + # Start the poller thread, which simply moves atomically the lines read + # from the addr2line's stdout to the |_out_queue|. + self._thread = threading.Thread( + target=ELFSymbolizer.Addr2Line.StdoutReaderThread, + args=(self._proc.stdout, self._out_queue, self._symbolizer.inlines)) + self._thread.daemon = True # Don't prevent early process exit. + self._thread.start() + + self._processed_symbols_count = 0 + + # Replay the pending requests on the new process (only for the case + # of a hung addr2line timing out during the game). + for (addr, _, _) in self._request_queue: + self._WriteToA2lStdin(addr) + + @staticmethod + def StdoutReaderThread(process_pipe, queue, inlines): + """The poller thread fn, which moves the addr2line stdout to the |queue|. + + This is the only piece of code not running on the main thread. It merely + writes to a Queue, which is thread-safe. In the case of inlines, it + detects the ??,??:0 marker and sends the lines atomically, such that the + main thread always receives all the lines corresponding to one symbol in + one shot.""" + try: + lines_for_one_symbol = [] + while True: + line1 = process_pipe.readline().rstrip('\r\n') + line2 = process_pipe.readline().rstrip('\r\n') + if not line1 or not line2: + break + inline_has_more_lines = inlines and (len(lines_for_one_symbol) == 0 or + (line1 != '??' and line2 != '??:0')) + if not inlines or inline_has_more_lines: + lines_for_one_symbol += [(line1, line2)] + if inline_has_more_lines: + continue + queue.put(lines_for_one_symbol) + lines_for_one_symbol = [] + process_pipe.close() + + # Every addr2line processes will die at some point, please die silently. + except (IOError, OSError): + pass + + @property + def first_request_id(self): + """Returns the request_id of the oldest pending request in the queue.""" + return self._request_queue[0][2] if self._request_queue else 0 + + +class ELFSymbolInfo(object): + """The result of the symbolization passed as first arg. of each callback.""" + + def __init__(self, name, source_path, source_line, was_ambiguous=False, + disambiguated=False, prefix_to_remove=None): + """All the fields here can be None (if addr2line replies with '??').""" + self.name = name + if source_path and source_path.startswith(prefix_to_remove): + source_path = source_path[len(prefix_to_remove) : ] + self.source_path = source_path + self.source_line = source_line + # In the case of |inlines|=True, the |inlined_by| points to the outer + # function inlining the current one (and so on, to form a chain). + self.inlined_by = None + self.disambiguated = disambiguated + self.was_ambiguous = was_ambiguous + + def __str__(self): + return '%s [%s:%d]' % ( + self.name or '??', self.source_path or '??', self.source_line or 0) diff --git a/infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py b/infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py new file mode 100755 index 0000000000..019fbdc5b9 --- /dev/null +++ b/infra/bots/recipe_modules/skia/resources/generate_and_upload_doxygen.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Generate Doxygen documentation.""" + + +import datetime +import os +import shutil +import subprocess +import sys + +from common.skia import global_constants + + +DOXYFILE_BASENAME = 'Doxyfile' # must match name of Doxyfile in skia root +DOXYGEN_BINARY = 'doxygen' +WORKDIR = os.path.join(os.pardir, 'doxygen_workdir') +DOXYGEN_CONFIG_DIR = os.path.join(WORKDIR, 'doxygen-config') +DOXYGEN_WORKING_DIR = os.path.join(WORKDIR, 'doxygen') +DOXYGEN_GS_PATH = '/'.join(['gs:/', global_constants.GS_GM_BUCKET, 'doxygen']) + +IFRAME_FOOTER_TEMPLATE = """ +
+Generated at %s for skia +by doxygen +%s
+""" + + +def recreate_dir(path): + """Delete and recreate the directory.""" + try: + shutil.rmtree(path) + except OSError: + if os.path.exists(path): + raise Exception('Could not remove %s' % path) + os.makedirs(path) + + +def generate_and_upload_doxygen(gsutil_path): + """Generate Doxygen.""" + # Create empty dir and add static_footer.txt + recreate_dir(DOXYGEN_WORKING_DIR) + static_footer_path = os.path.join(DOXYGEN_WORKING_DIR, 'static_footer.txt') + shutil.copyfile(os.path.join('tools', 'doxygen_footer.txt'), + static_footer_path) + + # Make copy of doxygen config file, overriding any necessary configs, + # and run doxygen. + recreate_dir(DOXYGEN_CONFIG_DIR) + modified_doxyfile = os.path.join(DOXYGEN_CONFIG_DIR, DOXYFILE_BASENAME) + with open(DOXYFILE_BASENAME, 'r') as reader: + with open(modified_doxyfile, 'w') as writer: + shutil.copyfileobj(reader, writer) + writer.write('OUTPUT_DIRECTORY = %s\n' % DOXYGEN_WORKING_DIR) + writer.write('HTML_FOOTER = %s\n' % static_footer_path) + subprocess.check_call([DOXYGEN_BINARY, modified_doxyfile]) + + # Create iframe_footer.html + with open(os.path.join(DOXYGEN_WORKING_DIR, 'iframe_footer.html'), 'w') as f: + f.write(IFRAME_FOOTER_TEMPLATE % ( + datetime.datetime.now().isoformat(' '), + subprocess.check_output([DOXYGEN_BINARY, '--version']).rstrip())) + + # Upload. + cmd = [gsutil_path, 'cp', '-a', 'public-read', '-R', + DOXYGEN_WORKING_DIR, DOXYGEN_GS_PATH] + subprocess.check_call(cmd) + + +if '__main__' == __name__: + generate_and_upload_doxygen(*sys.argv[1:]) + diff --git a/infra/bots/recipe_modules/skia/resources/run_binary_size_analysis.py b/infra/bots/recipe_modules/skia/resources/run_binary_size_analysis.py new file mode 100755 index 0000000000..f8c3c830ad --- /dev/null +++ b/infra/bots/recipe_modules/skia/resources/run_binary_size_analysis.py @@ -0,0 +1,820 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Generate a spatial analysis against an arbitrary library. + +Adapted for Skia's use case from +chromium/src/tools/binary_size/run_binary_size_analysis.py. Main changes: + +-- Cleans up some deprecated codes. +-- Always use relative code path so the tree root is Skia repo's root. +-- Instead of outputting the standalone HTML/CSS/JS filesets, writes the + TreeMap JSON data into a Google Storage bucket. +-- Adds githash and total_size to the JSON data. +-- Outputs another summary data in JSON Bench format for skiaperf ingestion. + +The output JSON data for visualization is in the following format: + +{ + "githash": 123abc, + "commit_ts": 1234567890, + "total_size": 1234567, + "key": {"source_type": "binary_size"}, + "tree_data": { + "maxDepth": 9, + "k": "p", "children":[ + {"k":"p","children":[ + {"k":"p","children":[ + {"k":"p","lastPathElement":true,"children":[ + {"k":"b","t":"t","children":[ + {"k":"s", "t":"t", "value":4029, + "n":"etc_encode_subblock_helper(unsigned char const*, ...)" + }, + ...... + } +} + +Another JSON file is generated for size summaries to be used in skiaperf. The +JSON format details can be found at: + https://github.com/google/skia/blob/master/bench/ResultsWriter.h#L54 +and: + https://skia.googlesource.com/buildbot/+/master/perf/go/ingester/nanobench.go + +In the binary size case, outputs look like: + +{ + "gitHash": "123abc", + "key": { + "source_type": "binarysize" + } + "results: { + "src_lazy_global_weak_symbol": { + "memory": { + "bytes": 41, + "options": { + "path": "src_lazy", + "symbol": "global_weak_symbol" + } + } + }, + "src_lazy_global_read_only_data": { + "memory": { + "bytes": 13476, + "options": { + "path": "src_lazy", + "symbol": "global_read_only_data" + } + } + }, + ... + } +} + +""" + +import collections +import datetime +import json +import logging +import multiprocessing +import optparse +import os +import re +import shutil +import struct +import subprocess +import sys +import tempfile +import time +import urllib2 + +import binary_size_utils +import elf_symbolizer + +from recipe_engine.types import freeze + +# Skia addition +from common.skia import global_constants + +# Node dictionary keys. These are output in json read by the webapp so +# keep them short to save file size. +# Note: If these change, the webapp must also change. +NODE_TYPE_KEY = 'k' +NODE_NAME_KEY = 'n' +NODE_CHILDREN_KEY = 'children' +NODE_SYMBOL_TYPE_KEY = 't' +NODE_SYMBOL_SIZE_KEY = 'value' +NODE_MAX_DEPTH_KEY = 'maxDepth' +NODE_LAST_PATH_ELEMENT_KEY = 'lastPathElement' + +# The display name of the bucket where we put symbols without path. +NAME_NO_PATH_BUCKET = '(No Path)' + +# Try to keep data buckets smaller than this to avoid killing the +# graphing lib. +BIG_BUCKET_LIMIT = 3000 + +# Skia addition: relative dir for libskia.so from code base. +LIBSKIA_RELATIVE_PATH = os.path.join('out', 'Release', 'lib') + +# Skia addition: dictionary mapping symbol type code to symbol name. +# See +# https://code.google.com/p/chromium/codesearch#chromium/src/tools/binary_size/template/D3SymbolTreeMap.js&l=74 +SYMBOL_MAP = freeze({ + 'A': 'global_absolute', + 'B': 'global_uninitialized_data', + 'b': 'local_uninitialized_data', + 'C': 'global_uninitialized_common', + 'D': 'global_initialized_data', + 'd': 'local_initialized_data', + 'G': 'global_small initialized_data', + 'g': 'local_small_initialized_data', + 'i': 'indirect_function', + 'N': 'debugging', + 'p': 'stack_unwind', + 'R': 'global_read_only_data', + 'r': 'local_read_only_data', + 'S': 'global_small_uninitialized_data', + 's': 'local_small_uninitialized_data', + 'T': 'global_code', + 't': 'local_code', + 'U': 'undefined', + 'u': 'unique', + 'V': 'global_weak_object', + 'v': 'local_weak_object', + 'W': 'global_weak_symbol', + 'w': 'local_weak_symbol', + '@': 'vtable_entry', + '-': 'stabs_debugging', + '?': 'unrecognized', +}) + + +def _MkChild(node, name): + child = node[NODE_CHILDREN_KEY].get(name) + if child is None: + child = {NODE_NAME_KEY: name, + NODE_CHILDREN_KEY: {}} + node[NODE_CHILDREN_KEY][name] = child + return child + + +def SplitNoPathBucket(node): + """NAME_NO_PATH_BUCKET can be too large for the graphing lib to + handle. Split it into sub-buckets in that case.""" + root_children = node[NODE_CHILDREN_KEY] + if NAME_NO_PATH_BUCKET in root_children: + no_path_bucket = root_children[NAME_NO_PATH_BUCKET] + old_children = no_path_bucket[NODE_CHILDREN_KEY] + count = 0 + for symbol_type, symbol_bucket in old_children.iteritems(): + count += len(symbol_bucket[NODE_CHILDREN_KEY]) + if count > BIG_BUCKET_LIMIT: + new_children = {} + no_path_bucket[NODE_CHILDREN_KEY] = new_children + current_bucket = None + index = 0 + for symbol_type, symbol_bucket in old_children.iteritems(): + for symbol_name, value in symbol_bucket[NODE_CHILDREN_KEY].iteritems(): + if index % BIG_BUCKET_LIMIT == 0: + group_no = (index / BIG_BUCKET_LIMIT) + 1 + current_bucket = _MkChild(no_path_bucket, + '%s subgroup %d' % (NAME_NO_PATH_BUCKET, + group_no)) + assert not NODE_TYPE_KEY in node or node[NODE_TYPE_KEY] == 'p' + node[NODE_TYPE_KEY] = 'p' # p for path + index += 1 + symbol_size = value[NODE_SYMBOL_SIZE_KEY] + AddSymbolIntoFileNode(current_bucket, symbol_type, + symbol_name, symbol_size) + + +def MakeChildrenDictsIntoLists(node): + largest_list_len = 0 + if NODE_CHILDREN_KEY in node: + largest_list_len = len(node[NODE_CHILDREN_KEY]) + child_list = [] + for child in node[NODE_CHILDREN_KEY].itervalues(): + child_largest_list_len = MakeChildrenDictsIntoLists(child) + if child_largest_list_len > largest_list_len: + largest_list_len = child_largest_list_len + child_list.append(child) + node[NODE_CHILDREN_KEY] = child_list + + return largest_list_len + + +def AddSymbolIntoFileNode(node, symbol_type, symbol_name, symbol_size): + """Puts symbol into the file path node |node|. + Returns the number of added levels in tree. I.e. returns 2.""" + + # 'node' is the file node and first step is to find its symbol-type bucket. + node[NODE_LAST_PATH_ELEMENT_KEY] = True + node = _MkChild(node, symbol_type) + assert not NODE_TYPE_KEY in node or node[NODE_TYPE_KEY] == 'b' + node[NODE_SYMBOL_TYPE_KEY] = symbol_type + node[NODE_TYPE_KEY] = 'b' # b for bucket + + # 'node' is now the symbol-type bucket. Make the child entry. + node = _MkChild(node, symbol_name) + if NODE_CHILDREN_KEY in node: + if node[NODE_CHILDREN_KEY]: + logging.warning('A container node used as symbol for %s.' % symbol_name) + # This is going to be used as a leaf so no use for child list. + del node[NODE_CHILDREN_KEY] + node[NODE_SYMBOL_SIZE_KEY] = symbol_size + node[NODE_SYMBOL_TYPE_KEY] = symbol_type + node[NODE_TYPE_KEY] = 's' # s for symbol + + return 2 # Depth of the added subtree. + + +def MakeCompactTree(symbols, symbol_path_origin_dir): + result = {NODE_NAME_KEY: '/', + NODE_CHILDREN_KEY: {}, + NODE_TYPE_KEY: 'p', + NODE_MAX_DEPTH_KEY: 0} + seen_symbol_with_path = False + for symbol_name, symbol_type, symbol_size, file_path in symbols: + + if 'vtable for ' in symbol_name: + symbol_type = '@' # hack to categorize these separately + if file_path and file_path != "??": + seen_symbol_with_path = True + else: + file_path = NAME_NO_PATH_BUCKET + + path_parts = file_path.split('/') + + # Find pre-existing node in tree, or update if it already exists + node = result + depth = 0 + while len(path_parts) > 0: + path_part = path_parts.pop(0) + if len(path_part) == 0: + continue + depth += 1 + node = _MkChild(node, path_part) + assert not NODE_TYPE_KEY in node or node[NODE_TYPE_KEY] == 'p' + node[NODE_TYPE_KEY] = 'p' # p for path + + depth += AddSymbolIntoFileNode(node, symbol_type, symbol_name, symbol_size) + result[NODE_MAX_DEPTH_KEY] = max(result[NODE_MAX_DEPTH_KEY], depth) + + if not seen_symbol_with_path: + logging.warning('Symbols lack paths. Data will not be structured.') + + # The (no path) bucket can be extremely large if we failed to get + # path information. Split it into subgroups if needed. + SplitNoPathBucket(result) + + largest_list_len = MakeChildrenDictsIntoLists(result) + + if largest_list_len > BIG_BUCKET_LIMIT: + logging.warning('There are sections with %d nodes. ' + 'Results might be unusable.' % largest_list_len) + return result + + +# Skia added: summarizes tree size by symbol type for the given root node. +# Returns a dict keyed by symbol type, and value the type's overall size. +# e.g., {"t": 12345, "W": 543}. +def GetTreeSizes(node): + if 'children' not in node or not node['children']: + return {node['t']: node['value']} + dic = {} + for i in node['children']: + for k, v in GetTreeSizes(i).items(): + dic.setdefault(k, 0) + dic[k] += v + + return dic + + +# Skia added: creates dict to be converted to JSON in bench format. +# See top of file for the structure description. +def GetBenchDict(githash, tree_root): + dic = {'gitHash': githash, + 'key': {'source_type': 'binarysize'}, + 'results': {},} + for i in tree_root['children']: + if '(No Path)' == i['n']: # Already at symbol summary level. + for k, v in GetTreeSizes(i).items(): + dic['results']['no_path_' + SYMBOL_MAP[k]] = { + 'memory': { + 'bytes': v, + 'options': {'path': 'no_path', + 'symbol': SYMBOL_MAP[k],},}} + else: # We need to go deeper. + for c in i['children']: + path = i['n'] + '_' + c['n'] + for k, v in GetTreeSizes(c).items(): + dic['results'][path + '_' + SYMBOL_MAP[k]] = { + 'memory': { + 'bytes': v, + 'options': {'path': path, + 'symbol': SYMBOL_MAP[k],}}} + + return dic + + +# Skia added: constructs 'gsutil cp' subprocess command list. +def GetGsCopyCommandList(gsutil, src, dst): + return [gsutil, '-h', 'Content-Type:application/json', 'cp', '-a', + 'public-read', src, dst] + + +def DumpCompactTree(symbols, symbol_path_origin_dir, ha, ts, issue, gsutil): + tree_root = MakeCompactTree(symbols, symbol_path_origin_dir) + json_data = {'tree_data': tree_root, + 'githash': ha, + 'commit_ts': ts, + 'key': {'source_type': 'binary_size'}, + 'total_size': sum(GetTreeSizes(tree_root).values()),} + tmpfile = tempfile.NamedTemporaryFile(delete=False).name + with open(tmpfile, 'w') as out: + # Use separators without whitespace to get a smaller file. + json.dump(json_data, out, separators=(',', ':')) + + GS_PREFIX = 'gs://' + global_constants.GS_GM_BUCKET + '/' + # Writes to Google Storage for visualization. + subprocess.check_call(GetGsCopyCommandList( + gsutil, tmpfile, GS_PREFIX + 'size/' + ha + '.json')) + # Updates the latest data. + if not issue: + subprocess.check_call(GetGsCopyCommandList(gsutil, tmpfile, + GS_PREFIX + 'size/latest.json')) + # Writes an extra copy using year/month/day/hour path for easy ingestion. + with open(tmpfile, 'w') as out: + json.dump(GetBenchDict(ha, tree_root), out, separators=(',', ':')) + now = datetime.datetime.utcnow() + ingest_path = '/'.join(('nano-json-v1', str(now.year).zfill(4), + str(now.month).zfill(2), str(now.day).zfill(2), + str(now.hour).zfill(2))) + if issue: + ingest_path = '/'.join('trybot', ingest_path, issue) + subprocess.check_call(GetGsCopyCommandList(gsutil, tmpfile, + GS_PREFIX + ingest_path + '/binarysize_' + ha + '.json')) + + +def MakeSourceMap(symbols): + sources = {} + for _sym, _symbol_type, size, path in symbols: + key = None + if path: + key = os.path.normpath(path) + else: + key = '[no path]' + if key not in sources: + sources[key] = {'path': path, 'symbol_count': 0, 'size': 0} + record = sources[key] + record['size'] += size + record['symbol_count'] += 1 + return sources + + +# Regex for parsing "nm" output. A sample line looks like this: +# 0167b39c 00000018 t ACCESS_DESCRIPTION_free /path/file.c:95 +# +# The fields are: address, size, type, name, source location +# Regular expression explained ( see also: https://xkcd.com/208 ): +# ([0-9a-f]{8,}+) The address +# [\s]+ Whitespace separator +# ([0-9a-f]{8,}+) The size. From here on out it's all optional. +# [\s]+ Whitespace separator +# (\S?) The symbol type, which is any non-whitespace char +# [\s*] Whitespace separator +# ([^\t]*) Symbol name, any non-tab character (spaces ok!) +# [\t]? Tab separator +# (.*) The location (filename[:linennum|?][ (discriminator n)] +sNmPattern = re.compile( + r'([0-9a-f]{8,})[\s]+([0-9a-f]{8,})[\s]*(\S?)[\s*]([^\t]*)[\t]?(.*)') + +class Progress(): + def __init__(self): + self.count = 0 + self.skip_count = 0 + self.collisions = 0 + self.time_last_output = time.time() + self.count_last_output = 0 + self.disambiguations = 0 + self.was_ambiguous = 0 + + +def RunElfSymbolizer(outfile, library, addr2line_binary, nm_binary, jobs, + disambiguate, src_path): + nm_output = RunNm(library, nm_binary) + nm_output_lines = nm_output.splitlines() + nm_output_lines_len = len(nm_output_lines) + address_symbol = {} + progress = Progress() + def map_address_symbol(symbol, addr): + progress.count += 1 + if addr in address_symbol: + # 'Collision between %s and %s.' % (str(symbol.name), + # str(address_symbol[addr].name)) + progress.collisions += 1 + else: + if symbol.disambiguated: + progress.disambiguations += 1 + if symbol.was_ambiguous: + progress.was_ambiguous += 1 + + address_symbol[addr] = symbol + + progress_output() + + def progress_output(): + progress_chunk = 100 + if progress.count % progress_chunk == 0: + time_now = time.time() + time_spent = time_now - progress.time_last_output + if time_spent > 1.0: + # Only output at most once per second. + progress.time_last_output = time_now + chunk_size = progress.count - progress.count_last_output + progress.count_last_output = progress.count + if time_spent > 0: + speed = chunk_size / time_spent + else: + speed = 0 + progress_percent = (100.0 * (progress.count + progress.skip_count) / + nm_output_lines_len) + disambiguation_percent = 0 + if progress.disambiguations != 0: + disambiguation_percent = (100.0 * progress.disambiguations / + progress.was_ambiguous) + + sys.stdout.write('\r%.1f%%: Looked up %d symbols (%d collisions, ' + '%d disambiguations where %.1f%% succeeded)' + ' - %.1f lookups/s.' % + (progress_percent, progress.count, progress.collisions, + progress.disambiguations, disambiguation_percent, speed)) + + # In case disambiguation was disabled, we remove the source path (which upon + # being set signals the symbolizer to enable disambiguation) + if not disambiguate: + src_path = None + symbol_path_origin_dir = os.path.dirname(library) + # Skia specific. + symbol_path_prefix = symbol_path_origin_dir.replace(LIBSKIA_RELATIVE_PATH, '') + symbolizer = elf_symbolizer.ELFSymbolizer(library, addr2line_binary, + map_address_symbol, + max_concurrent_jobs=jobs, + source_root_path=src_path, + prefix_to_remove=symbol_path_prefix) + user_interrupted = False + try: + for line in nm_output_lines: + match = sNmPattern.match(line) + if match: + location = match.group(5) + if not location: + addr = int(match.group(1), 16) + size = int(match.group(2), 16) + if addr in address_symbol: # Already looked up, shortcut + # ELFSymbolizer. + map_address_symbol(address_symbol[addr], addr) + continue + elif size == 0: + # Save time by not looking up empty symbols (do they even exist?) + print('Empty symbol: ' + line) + else: + symbolizer.SymbolizeAsync(addr, addr) + continue + + progress.skip_count += 1 + except KeyboardInterrupt: + user_interrupted = True + print('Interrupting - killing subprocesses. Please wait.') + + try: + symbolizer.Join() + except KeyboardInterrupt: + # Don't want to abort here since we will be finished in a few seconds. + user_interrupted = True + print('Patience you must have my young padawan.') + + print '' + + if user_interrupted: + print('Skipping the rest of the file mapping. ' + 'Output will not be fully classified.') + + symbol_path_origin_dir = os.path.dirname(library) + # Skia specific: path prefix to strip. + symbol_path_prefix = symbol_path_origin_dir.replace(LIBSKIA_RELATIVE_PATH, '') + + with open(outfile, 'w') as out: + for line in nm_output_lines: + match = sNmPattern.match(line) + if match: + location = match.group(5) + if not location: + addr = int(match.group(1), 16) + symbol = address_symbol.get(addr) + if symbol is not None: + path = '??' + if symbol.source_path is not None: + path = symbol.source_path.replace(symbol_path_prefix, '') + line_number = 0 + if symbol.source_line is not None: + line_number = symbol.source_line + out.write('%s\t%s:%d\n' % (line, path, line_number)) + continue + + out.write('%s\n' % line) + + print('%d symbols in the results.' % len(address_symbol)) + + +def RunNm(binary, nm_binary): + cmd = [nm_binary, '-C', '--print-size', '--size-sort', '--reverse-sort', + binary] + nm_process = subprocess.Popen(cmd, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + (process_output, err_output) = nm_process.communicate() + + if nm_process.returncode != 0: + if err_output: + raise Exception, err_output + else: + raise Exception, process_output + + return process_output + + +def GetNmSymbols(nm_infile, outfile, library, jobs, verbose, + addr2line_binary, nm_binary, disambiguate, src_path): + if nm_infile is None: + if outfile is None: + outfile = tempfile.NamedTemporaryFile(delete=False).name + + if verbose: + print 'Running parallel addr2line, dumping symbols to ' + outfile + RunElfSymbolizer(outfile, library, addr2line_binary, nm_binary, jobs, + disambiguate, src_path) + + nm_infile = outfile + + elif verbose: + print 'Using nm input from ' + nm_infile + with file(nm_infile, 'r') as infile: + return list(binary_size_utils.ParseNm(infile)) + + +PAK_RESOURCE_ID_TO_STRING = { "inited": False } + +def LoadPakIdsFromResourceFile(filename): + """Given a file name, it loads everything that looks like a resource id + into PAK_RESOURCE_ID_TO_STRING.""" + with open(filename) as resource_header: + for line in resource_header: + if line.startswith("#define "): + line_data = line.split() + if len(line_data) == 3: + try: + resource_number = int(line_data[2]) + resource_name = line_data[1] + PAK_RESOURCE_ID_TO_STRING[resource_number] = resource_name + except ValueError: + pass + +def GetReadablePakResourceName(pak_file, resource_id): + """Pak resources have a numeric identifier. It is not helpful when + trying to locate where footprint is generated. This does its best to + map the number to a usable string.""" + if not PAK_RESOURCE_ID_TO_STRING['inited']: + # Try to find resource header files generated by grit when + # building the pak file. We'll look for files named *resources.h" + # and lines of the type: + # #define MY_RESOURCE_JS 1234 + PAK_RESOURCE_ID_TO_STRING['inited'] = True + gen_dir = os.path.join(os.path.dirname(pak_file), 'gen') + if os.path.isdir(gen_dir): + for dirname, _dirs, files in os.walk(gen_dir): + for filename in files: + if filename.endswith('resources.h'): + LoadPakIdsFromResourceFile(os.path.join(dirname, filename)) + return PAK_RESOURCE_ID_TO_STRING.get(resource_id, + 'Pak Resource %d' % resource_id) + +def AddPakData(symbols, pak_file): + """Adds pseudo-symbols from a pak file.""" + pak_file = os.path.abspath(pak_file) + with open(pak_file, 'rb') as pak: + data = pak.read() + + PAK_FILE_VERSION = 4 + HEADER_LENGTH = 2 * 4 + 1 # Two uint32s. (file version, number of entries) + # and one uint8 (encoding of text resources) + INDEX_ENTRY_SIZE = 2 + 4 # Each entry is a uint16 and a uint32. + version, num_entries, _encoding = struct.unpack(' 0: + # Read the index and data. + data = data[HEADER_LENGTH:] + for _ in range(num_entries): + resource_id, offset = struct.unpack(' 2 or major == 2 and minor > 22 + + if supports_dwarf4: + return + + print('Checking version of debug information in %s.' % library) + debug_info = subprocess.check_output(['readelf', '--debug-dump=info', + '--dwarf-depth=1', library]) + dwarf_version_re = re.compile(r'^\s+Version:\s+(\d+)$', re.M) + parsed_dwarf_format_output = dwarf_version_re.search(debug_info) + version = int(parsed_dwarf_format_output.group(1)) + if version > 2: + print('The supplied tools only support DWARF2 debug data but the binary\n' + + 'uses DWARF%d. Update the tools or compile the binary\n' % version + + 'with -gdwarf-2.') + sys.exit(1) + + +def main(): + usage = """%prog [options] + + Runs a spatial analysis on a given library, looking up the source locations + of its symbols and calculating how much space each directory, source file, + and so on is taking. The result is a report that can be used to pinpoint + sources of large portions of the binary, etceteras. + + Under normal circumstances, you only need to pass two arguments, thusly: + + %prog --library /path/to/library --destdir /path/to/output + + In this mode, the program will dump the symbols from the specified library + and map those symbols back to source locations, producing a web-based + report in the specified output directory. + + Other options are available via '--help'. + """ + parser = optparse.OptionParser(usage=usage) + parser.add_option('--nm-in', metavar='PATH', + help='if specified, use nm input from instead of ' + 'generating it. Note that source locations should be ' + 'present in the file; i.e., no addr2line symbol lookups ' + 'will be performed when this option is specified. ' + 'Mutually exclusive with --library.') + parser.add_option('--destdir', metavar='PATH', + help='write output to the specified directory. An HTML ' + 'report is generated here along with supporting files; ' + 'any existing report will be overwritten. Not used in ' + 'Skia.') + parser.add_option('--library', metavar='PATH', + help='if specified, process symbols in the library at ' + 'the specified path. Mutually exclusive with --nm-in.') + parser.add_option('--pak', metavar='PATH', + help='if specified, includes the contents of the ' + 'specified *.pak file in the output.') + parser.add_option('--nm-binary', + help='use the specified nm binary to analyze library. ' + 'This is to be used when the nm in the path is not for ' + 'the right architecture or of the right version.') + parser.add_option('--addr2line-binary', + help='use the specified addr2line binary to analyze ' + 'library. This is to be used when the addr2line in ' + 'the path is not for the right architecture or ' + 'of the right version.') + parser.add_option('--jobs', type='int', + help='number of jobs to use for the parallel ' + 'addr2line processing pool; defaults to 1. More ' + 'jobs greatly improve throughput but eat RAM like ' + 'popcorn, and take several gigabytes each. Start low ' + 'and ramp this number up until your machine begins to ' + 'struggle with RAM. ' + 'This argument is only valid when using --library.') + parser.add_option('-v', dest='verbose', action='store_true', + help='be verbose, printing lots of status information.') + parser.add_option('--nm-out', metavar='PATH', + help='keep the nm output file, and store it at the ' + 'specified path. This is useful if you want to see the ' + 'fully processed nm output after the symbols have been ' + 'mapped to source locations. By default, a tempfile is ' + 'used and is deleted when the program terminates.' + 'This argument is only valid when using --library.') + parser.add_option('--legacy', action='store_true', + help='emit legacy binary size report instead of modern') + parser.add_option('--disable-disambiguation', action='store_true', + help='disables the disambiguation process altogether,' + ' NOTE: this may, depending on your toolchain, produce' + ' output with some symbols at the top layer if addr2line' + ' could not get the entire source path.') + parser.add_option('--source-path', default='./', + help='the path to the source code of the output binary, ' + 'default set to current directory. Used in the' + ' disambiguation process.') + parser.add_option('--githash', default='latest', + help='Git hash for the binary version. Added by Skia.') + parser.add_option('--commit_ts', type='int', default=-1, + help='Timestamp for the commit. Added by Skia.') + parser.add_option('--issue_number', default='', + help='The trybot issue number in string. Added by Skia.') + parser.add_option('--gsutil_path', default='gsutil', + help='Path to gsutil binary. Added by Skia.') + opts, _args = parser.parse_args() + + if ((not opts.library) and (not opts.nm_in)) or (opts.library and opts.nm_in): + parser.error('exactly one of --library or --nm-in is required') + if (opts.nm_in): + if opts.jobs: + print >> sys.stderr, ('WARNING: --jobs has no effect ' + 'when used with --nm-in') + if not opts.jobs: + # Use the number of processors but cap between 2 and 4 since raw + # CPU power isn't the limiting factor. It's I/O limited, memory + # bus limited and available-memory-limited. Too many processes and + # the computer will run out of memory and it will be slow. + opts.jobs = max(2, min(4, str(multiprocessing.cpu_count()))) + + if opts.addr2line_binary: + assert os.path.isfile(opts.addr2line_binary) + addr2line_binary = opts.addr2line_binary + else: + addr2line_binary = _find_in_system_path('addr2line') + assert addr2line_binary, 'Unable to find addr2line in the path. '\ + 'Use --addr2line-binary to specify location.' + + if opts.nm_binary: + assert os.path.isfile(opts.nm_binary) + nm_binary = opts.nm_binary + else: + nm_binary = _find_in_system_path('nm') + assert nm_binary, 'Unable to find nm in the path. Use --nm-binary '\ + 'to specify location.' + + if opts.pak: + assert os.path.isfile(opts.pak), 'Could not find ' % opts.pak + + print('addr2line: %s' % addr2line_binary) + print('nm: %s' % nm_binary) + + if opts.library: + CheckDebugFormatSupport(opts.library, addr2line_binary) + + symbols = GetNmSymbols(opts.nm_in, opts.nm_out, opts.library, + opts.jobs, opts.verbose is True, + addr2line_binary, nm_binary, + opts.disable_disambiguation is None, + opts.source_path) + + if opts.pak: + AddPakData(symbols, opts.pak) + + if opts.legacy: # legacy report + print 'Do Not set legacy flag.' + + else: # modern report + if opts.library: + symbol_path_origin_dir = os.path.dirname(os.path.abspath(opts.library)) + else: + # Just a guess. Hopefully all paths in the input file are absolute. + symbol_path_origin_dir = os.path.abspath(os.getcwd()) + DumpCompactTree(symbols, symbol_path_origin_dir, opts.githash, + opts.commit_ts, opts.issue_number, opts.gsutil_path) + print 'Report data uploaded to GS.' + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/infra/bots/recipe_modules/skia/resources/upload_bench_results.py b/infra/bots/recipe_modules/skia/resources/upload_bench_results.py new file mode 100755 index 0000000000..9c17f8777f --- /dev/null +++ b/infra/bots/recipe_modules/skia/resources/upload_bench_results.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" Upload benchmark performance data results. """ + +import gzip +import os +import os.path +import re +import subprocess +import sys +import tempfile + +from common.skia import builder_name_schema +from common.skia import global_constants +from datetime import datetime + + +def _UploadJSONResults(builder_name, build_number, dest_gsbase, gs_subdir, + full_json_path, gzipped=True, gsutil_path='gsutil', + issue_number=None): + now = datetime.utcnow() + gs_json_path = '/'.join((str(now.year).zfill(4), str(now.month).zfill(2), + str(now.day).zfill(2), str(now.hour).zfill(2))) + gs_dir = '/'.join((gs_subdir, gs_json_path, builder_name)) + if builder_name_schema.IsTrybot(builder_name): + if not issue_number: + raise Exception('issue_number build property is missing!') + gs_dir = '/'.join(('trybot', gs_dir, build_number, issue_number)) + full_path_to_upload = full_json_path + file_to_upload = os.path.basename(full_path_to_upload) + http_header = ['Content-Type:application/json'] + if gzipped: + http_header.append('Content-Encoding:gzip') + gzipped_file = os.path.join(tempfile.gettempdir(), file_to_upload) + # Apply gzip. + with open(full_path_to_upload, 'rb') as f_in: + with gzip.open(gzipped_file, 'wb') as f_out: + f_out.writelines(f_in) + full_path_to_upload = gzipped_file + cmd = ['python', gsutil_path] + for header in http_header: + cmd.extend(['-h', header]) + cmd.extend(['cp', '-a', 'public-read', full_path_to_upload, + '/'.join((dest_gsbase, gs_dir, file_to_upload))]) + print ' '.join(cmd) + subprocess.check_call(cmd) + + +def main(builder_name, build_number, perf_data_dir, got_revision, gsutil_path, + issue_number=None): + """Uploads gzipped nanobench JSON data.""" + # Find the nanobench JSON + file_list = os.listdir(perf_data_dir) + RE_FILE_SEARCH = re.compile( + 'nanobench_({})_[0-9]+\.json'.format(got_revision)) + nanobench_name = None + + for file_name in file_list: + if RE_FILE_SEARCH.search(file_name): + nanobench_name = file_name + break + + if nanobench_name: + dest_gsbase = 'gs://' + global_constants.GS_GM_BUCKET + nanobench_json_file = os.path.join(perf_data_dir, + nanobench_name) + _UploadJSONResults(builder_name, build_number, dest_gsbase, 'nano-json-v1', + nanobench_json_file, gsutil_path=gsutil_path, + issue_number=issue_number) + + +if __name__ == '__main__': + main(*sys.argv[1:]) + diff --git a/infra/bots/recipe_modules/skia/resources/upload_dm_results.py b/infra/bots/recipe_modules/skia/resources/upload_dm_results.py new file mode 100755 index 0000000000..1bee64fb78 --- /dev/null +++ b/infra/bots/recipe_modules/skia/resources/upload_dm_results.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Upload DM output PNG files and JSON summary to Google Storage.""" + +import datetime +import json +import os +import shutil +import sys +import tempfile + +def main(dm_dir, git_hash, builder_name, build_number, try_issue, import_path): + """Upload DM output PNG files and JSON summary to Google Storage. + + dm_dir: path to PNG files and JSON summary (str) + git_hash: this build's Git hash (str) + builder_name: name of this builder (str) + build_number: nth build on this builder (str or int) + try_issue: Rietveld issue if this is a try job (str, int, or None) + import_path: Path to import the gs_utils package (str) + """ + # import gs_utils + sys.path.insert(0, import_path) + import gs_utils + + # Private, but Google-readable. + ACL = gs_utils.GSUtils.PredefinedACL.PRIVATE + FINE_ACLS = [( + gs_utils.GSUtils.IdType.GROUP_BY_DOMAIN, + 'google.com', + gs_utils.GSUtils.Permission.READ + )] + + # Move dm.json and verbose.log to their own directory for easy upload. + tmp = tempfile.mkdtemp() + shutil.move(os.path.join(dm_dir, 'dm.json'), + os.path.join(tmp, 'dm.json')) + shutil.move(os.path.join(dm_dir, 'verbose.log'), + os.path.join(tmp, 'verbose.log')) + + # Make sure the JSON file parses correctly. + json_file_name = os.path.join(tmp, 'dm.json') + with open(json_file_name) as jsonFile: + try: + json.load(jsonFile) + except ValueError: + json_content = open(json_file_name).read() + print >> sys.stderr, "Invalid JSON: \n\n%s\n" % json_content + raise + + # Only images are left in dm_dir. Upload any new ones. + gs = gs_utils.GSUtils() + bucket, image_dest_dir = 'chromium-skia-gm', 'dm-images-v1' + print 'Uploading images to gs://' + bucket + '/' + image_dest_dir + gs.upload_dir_contents(dm_dir, + bucket, + image_dest_dir, + upload_if = gs.UploadIf.ALWAYS, + predefined_acl = ACL, + fine_grained_acl_list = FINE_ACLS) + + + # /dm-json-v1/year/month/day/hour/git-hash/builder/build-number/dm.json + now = datetime.datetime.utcnow() + summary_dest_dir = '/'.join(['dm-json-v1', + str(now.year ).zfill(4), + str(now.month).zfill(2), + str(now.day ).zfill(2), + str(now.hour ).zfill(2), + git_hash, + builder_name, + str(build_number)]) + + # Trybot results are further siloed by CL. + if try_issue: + summary_dest_dir = '/'.join(['trybot', summary_dest_dir, str(try_issue)]) + + # Upload the JSON summary and verbose.log. + print 'Uploading logs to gs://' + bucket + '/' + summary_dest_dir + gs.upload_dir_contents(tmp, + bucket, + summary_dest_dir, + predefined_acl = ACL, + fine_grained_acl_list = FINE_ACLS) + + + # Just for hygiene, put dm.json and verbose.log back. + shutil.move(os.path.join(tmp, 'dm.json'), + os.path.join(dm_dir, 'dm.json')) + shutil.move(os.path.join(tmp, 'verbose.log'), + os.path.join(dm_dir, 'verbose.log')) + os.rmdir(tmp) + +if '__main__' == __name__: + main(*sys.argv[1:]) diff --git a/infra/bots/recipe_modules/skia/ssh_devices.py b/infra/bots/recipe_modules/skia/ssh_devices.py new file mode 100755 index 0000000000..d8ce937572 --- /dev/null +++ b/infra/bots/recipe_modules/skia/ssh_devices.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import collections +import json + + +DEFAULT_PORT = '22' +DEFAULT_USER = 'chrome-bot' + + +SlaveInfo = collections.namedtuple('SlaveInfo', + 'ssh_user ssh_host ssh_port') + +SLAVE_INFO = { + 'skiabot-shuttle-ubuntu12-003': + SlaveInfo('root', '192.168.1.123', DEFAULT_PORT), + 'skiabot-shuttle-ubuntu12-004': + SlaveInfo('root', '192.168.1.134', DEFAULT_PORT), + 'default': + SlaveInfo('nouser', 'noip', 'noport'), +} + + +if __name__ == '__main__': + print json.dumps(SLAVE_INFO) # pragma: no cover + diff --git a/infra/bots/recipe_modules/skia/valgrind_flavor.py b/infra/bots/recipe_modules/skia/valgrind_flavor.py new file mode 100644 index 0000000000..2c00566436 --- /dev/null +++ b/infra/bots/recipe_modules/skia/valgrind_flavor.py @@ -0,0 +1,27 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +import default_flavor + + +"""Utils for running under Valgrind.""" + + +class ValgrindFlavorUtils(default_flavor.DefaultFlavorUtils): + def __init__(self, *args, **kwargs): + super(ValgrindFlavorUtils, self).__init__(*args, **kwargs) + self._suppressions_file = self._skia_api.skia_dir.join( + 'tools', 'valgrind.supp') + + def step(self, name, cmd, **kwargs): + new_cmd = ['valgrind', '--gen-suppressions=all', '--leak-check=full', + '--track-origins=yes', '--error-exitcode=1', '--num-callers=40', + '--suppressions=%s' % self._suppressions_file] + path_to_app = self.out_dir.join(cmd[0]) + new_cmd.append(path_to_app) + new_cmd.extend(cmd[1:]) + return self._skia_api.run(self._skia_api.m.step, name, cmd=new_cmd, + **kwargs) + diff --git a/infra/bots/recipe_modules/skia/xsan_flavor.py b/infra/bots/recipe_modules/skia/xsan_flavor.py new file mode 100644 index 0000000000..ac4cac9b04 --- /dev/null +++ b/infra/bots/recipe_modules/skia/xsan_flavor.py @@ -0,0 +1,76 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Utils for running under *SAN""" + + +import default_flavor + + +class XSanFlavorUtils(default_flavor.DefaultFlavorUtils): + def __init__(self, *args, **kwargs): + super(XSanFlavorUtils, self).__init__(*args, **kwargs) + self._sanitizer = { + # We'd love to just pass 'address,undefined' and get all the checks, but + # we're not anywhere close to being able to do that. Instead we start + # with a set of checks that we know pass or nearly pass. See here for + # more information: + # http://clang.llvm.org/docs/UsersManual.html#controlling-code-generation + 'ASAN': ('address,bool,function,integer-divide-by-zero,nonnull-attribute,' + 'null,object-size,return,returns-nonnull-attribute,shift,' + 'signed-integer-overflow,unreachable,vla-bound,vptr'), + # MSAN and TSAN can't run together with ASAN, so they're their own bots. + 'MSAN': 'memory', + 'TSAN': 'thread', + }[self._skia_api.builder_cfg['extra_config'].replace('Swarming', '')] + + def compile(self, target): + cmd = [self._skia_api.skia_dir.join('tools', 'xsan_build'), + self._sanitizer, target] + self._skia_api.run(self._skia_api.m.step, 'build %s' % target, cmd=cmd, + cwd=self._skia_api.skia_dir) + + def copy_extra_build_products(self, swarming_out_dir): + # Include msan_out if MSAN. + if 'MSAN' in self._skia_api.builder_cfg['extra_config']: + msan_out = self._skia_api.m.path.join( + 'third_party', 'externals', 'llvm', 'msan_out') + self._skia_api.m.file.copytree( + 'copy msan_out', + self._skia_api.skia_dir.join(msan_out), + swarming_out_dir.join(msan_out), + symlinks=True) + # Include llvm_symbolizer from the Chromium DEPS so that suppressions work + # by symbol name. + # TODO(benjaminwagner): Figure out how to add this to Skia DEPS for + # target_os 'llvm'. + self._skia_api.m.file.copytree( + 'copy llvm-build', + self._skia_api.checkout_root.join('src', 'third_party', 'llvm-build'), + swarming_out_dir.join('llvm-build'), + symlinks=True) + + def step(self, name, cmd, env=None, **kwargs): + """Wrapper for the Step API; runs a step as appropriate for this flavor.""" + skia_dir = self._skia_api.skia_dir + lsan_suppressions = skia_dir.join('tools', 'lsan.supp') + tsan_suppressions = skia_dir.join('tools', 'tsan.supp') + ubsan_suppressions = skia_dir.join('tools', 'ubsan.supp') + env = dict(env or {}) + env['ASAN_OPTIONS'] = 'symbolize=1 detect_leaks=1' + env['LSAN_OPTIONS'] = ('symbolize=1 print_suppressions=1 suppressions=%s' % + lsan_suppressions) + env['TSAN_OPTIONS'] = 'suppressions=%s' % tsan_suppressions + env['UBSAN_OPTIONS'] = 'suppressions=%s' % ubsan_suppressions + self._skia_api.default_env['PATH'] = '%%(PATH)s:%s' % ( + self._skia_api.slave_dir.join('llvm-build', 'Release+Asserts', 'bin')) + env['LD_LIBRARY_PATH'] = self._skia_api.slave_dir.join( + 'third_party', 'externals', 'llvm', 'msan_out', 'lib') + + path_to_app = self.out_dir.join(cmd[0]) + new_cmd = [path_to_app] + new_cmd.extend(cmd[1:]) + return self._skia_api.run(self._skia_api.m.step, name, cmd=new_cmd, env=env, + **kwargs) diff --git a/infra/bots/recipe_modules/skia_swarming/__init__.py b/infra/bots/recipe_modules/skia_swarming/__init__.py new file mode 100644 index 0000000000..78051368f5 --- /dev/null +++ b/infra/bots/recipe_modules/skia_swarming/__init__.py @@ -0,0 +1,16 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +DEPS = [ + 'build/file', + 'build/isolate', + 'build/swarming', + 'build/swarming_client', + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/python', + 'recipe_engine/raw_io', + 'recipe_engine/step', + 'skia', +] diff --git a/infra/bots/recipe_modules/skia_swarming/api.py b/infra/bots/recipe_modules/skia_swarming/api.py new file mode 100644 index 0000000000..e5f05b1491 --- /dev/null +++ b/infra/bots/recipe_modules/skia_swarming/api.py @@ -0,0 +1,285 @@ +# Copyright 2016 The Chromium 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 +import shlex + + +DEFAULT_TASK_EXPIRATION = 20*60*60 +DEFAULT_TASK_TIMEOUT = 4*60*60 +DEFAULT_IO_TIMEOUT = 40*60 + +MILO_LOG_LINK = 'https://luci-milo.appspot.com/swarming/task/%s' + + +class SkiaSwarmingApi(recipe_api.RecipeApi): + """Provides steps to run Skia tasks on swarming bots.""" + + @property + def swarming_temp_dir(self): + """Path where artifacts like isolate file and json output will be stored.""" + return self.m.path['slave_build'].join('swarming_temp_dir') + + @property + def tasks_output_dir(self): + """Directory where the outputs of the swarming tasks will be stored.""" + return self.swarming_temp_dir.join('outputs') + + def isolated_file_path(self, task_name): + """Get the path to the given task's .isolated file.""" + return self.swarming_temp_dir.join('skia-task-%s.isolated' % task_name) + + def setup(self, luci_go_dir, swarming_rev=None): + """Performs setup steps for swarming.""" + self.m.swarming_client.checkout(revision=swarming_rev) + self.m.swarming.check_client_version(step_test_data=(0, 8, 6)) + self.setup_go_isolate(luci_go_dir) + self.m.swarming.add_default_tag('allow_milo:1') + + # TODO(rmistry): Remove once the Go binaries are moved to recipes or buildbot. + def setup_go_isolate(self, luci_go_dir): + """Generates and puts in place the isolate Go binary.""" + self.m.step('download luci-go linux', + ['download_from_google_storage', '--no_resume', + '--platform=linux*', '--no_auth', '--bucket', 'chromium-luci', + '-d', luci_go_dir.join('linux64')]) + self.m.step('download luci-go mac', + ['download_from_google_storage', '--no_resume', + '--platform=darwin', '--no_auth', '--bucket', 'chromium-luci', + '-d', luci_go_dir.join('mac64')]) + self.m.step('download luci-go win', + ['download_from_google_storage', '--no_resume', + '--platform=win32', '--no_auth', '--bucket', 'chromium-luci', + '-d', luci_go_dir.join('win64')]) + # Copy binaries to the expected location. + dest = self.m.path['slave_build'].join('luci-go') + self.m.skia.rmtree(dest) + self.m.file.copytree('Copy Go binary', + source=luci_go_dir, + dest=dest) + + def isolate_and_trigger_task( + self, isolate_path, isolate_base_dir, task_name, isolate_vars, + swarm_dimensions, isolate_blacklist=None, extra_isolate_hashes=None, + idempotent=False, store_output=True, extra_args=None, expiration=None, + hard_timeout=None, io_timeout=None, cipd_packages=None): + """Isolate inputs and trigger the task to run.""" + os_type = swarm_dimensions.get('os', 'linux') + isolated_hash = self.isolate_task( + isolate_path, isolate_base_dir, os_type, task_name, isolate_vars, + blacklist=isolate_blacklist, extra_hashes=extra_isolate_hashes) + tasks = self.trigger_swarming_tasks([(task_name, isolated_hash)], + swarm_dimensions, + idempotent=idempotent, + store_output=store_output, + extra_args=extra_args, + expiration=expiration, + hard_timeout=hard_timeout, + io_timeout=io_timeout, + cipd_packages=cipd_packages) + assert len(tasks) == 1 + return tasks[0] + + def isolate_task(self, isolate_path, base_dir, os_type, task_name, + isolate_vars, blacklist=None, extra_hashes=None): + """Isolate inputs for the given task.""" + self.create_isolated_gen_json(isolate_path, base_dir, os_type, + task_name, isolate_vars, + blacklist=blacklist) + hashes = self.batcharchive([task_name]) + assert len(hashes) == 1 + isolated_hash = hashes[0][1] + if extra_hashes: + isolated_hash = self.add_isolated_includes(task_name, extra_hashes) + return isolated_hash + + def create_isolated_gen_json(self, isolate_path, base_dir, os_type, + task_name, extra_variables, blacklist=None): + """Creates an isolated.gen.json file (used by the isolate recipe module). + + Args: + isolate_path: path obj. Path to the isolate file. + base_dir: path obj. Dir that is the base of all paths in the isolate file. + os_type: str. The OS type to use when archiving the isolate file. + Eg: linux. + task_name: str. The isolated.gen.json file will be suffixed by this str. + extra_variables: dict of str to str. The extra vars to pass to isolate. + Eg: {'SLAVE_NUM': '1', 'MASTER': 'ChromiumPerfFYI'} + blacklist: list of regular expressions indicating which files/directories + not to archive. + """ + self.m.file.makedirs('swarming tmp dir', self.swarming_temp_dir) + isolated_path = self.isolated_file_path(task_name) + isolate_args = [ + '--isolate', isolate_path, + '--isolated', isolated_path, + '--config-variable', 'OS', os_type, + ] + if blacklist: + for b in blacklist: + isolate_args.extend(['--blacklist', b]) + for k, v in extra_variables.iteritems(): + isolate_args.extend(['--extra-variable', k, v]) + isolated_gen_dict = { + 'version': 1, + 'dir': base_dir, + 'args': isolate_args, + } + isolated_gen_json = self.swarming_temp_dir.join( + '%s.isolated.gen.json' % task_name) + self.m.file.write( + 'Write %s.isolated.gen.json' % task_name, + isolated_gen_json, + self.m.json.dumps(isolated_gen_dict, indent=4), + ) + + def batcharchive(self, targets): + """Calls batcharchive on the skia.isolated.gen.json file. + + Args: + targets: list of str. The suffixes of the isolated.gen.json files to + archive. + + Returns: + list of tuples containing (task_name, swarming_hash). + """ + return self.m.isolate.isolate_tests( + verbose=True, # To avoid no output timeouts. + build_dir=self.swarming_temp_dir, + targets=targets).presentation.properties['swarm_hashes'].items() + + def add_isolated_includes(self, task_name, include_hashes): + """Add the hashes to the task's .isolated file, return new .isolated hash. + + Args: + task: str. Name of the task to which to add the given hash. + include_hashes: list of str. Hashes of the new includes. + Returns: + Updated hash of the .isolated file. + """ + isolated_file = self.isolated_file_path(task_name) + self.m.python.inline('add_isolated_input', program=""" + import json + import sys + with open(sys.argv[1]) as f: + isolated = json.load(f) + if not isolated.get('includes'): + isolated['includes'] = [] + for h in sys.argv[2:]: + isolated['includes'].append(h) + with open(sys.argv[1], 'w') as f: + json.dump(isolated, f, sort_keys=True) + """, args=[isolated_file] + include_hashes) + isolateserver = self.m.swarming_client.path.join('isolateserver.py') + r = self.m.python('upload new .isolated file for %s' % task_name, + script=isolateserver, + args=['archive', '--isolate-server', + self.m.isolate.isolate_server, isolated_file], + stdout=self.m.raw_io.output()) + return shlex.split(r.stdout)[0] + + def trigger_swarming_tasks( + self, swarm_hashes, dimensions, idempotent=False, store_output=True, + extra_args=None, expiration=None, hard_timeout=None, io_timeout=None, + cipd_packages=None): + """Triggers swarming tasks using swarm hashes. + + Args: + swarm_hashes: list of str. List of swarm hashes from the isolate server. + dimensions: dict of str to str. The dimensions to run the task on. + Eg: {'os': 'Ubuntu', 'gpu': '10de', 'pool': 'Skia'} + idempotent: bool. Whether or not to de-duplicate tasks. + store_output: bool. Whether task output should be stored. + extra_args: list of str. Extra arguments to pass to the task. + expiration: int. Task will expire if not picked up within this time. + DEFAULT_TASK_EXPIRATION is used if this argument is None. + hard_timeout: int. Task will timeout if not completed within this time. + DEFAULT_TASK_TIMEOUT is used if this argument is None. + io_timeout: int. Task will timeout if there is no output within this time. + DEFAULT_IO_TIMEOUT is used if this argument is None. + cipd_packages: CIPD packages which these tasks depend on. + + Returns: + List of swarming.SwarmingTask instances. + """ + swarming_tasks = [] + for task_name, swarm_hash in swarm_hashes: + swarming_task = self.m.swarming.task( + title=task_name, + cipd_packages=cipd_packages, + isolated_hash=swarm_hash) + if store_output: + swarming_task.task_output_dir = self.tasks_output_dir.join(task_name) + swarming_task.dimensions = dimensions + swarming_task.idempotent = idempotent + swarming_task.priority = 90 + swarming_task.expiration = ( + expiration if expiration else DEFAULT_TASK_EXPIRATION) + swarming_task.hard_timeout = ( + hard_timeout if hard_timeout else DEFAULT_TASK_TIMEOUT) + swarming_task.io_timeout = ( + io_timeout if io_timeout else DEFAULT_IO_TIMEOUT) + if extra_args: + swarming_task.extra_args = extra_args + swarming_tasks.append(swarming_task) + step_results = self.m.swarming.trigger(swarming_tasks) + for step_result in step_results: + self._add_log_links(step_result) + return swarming_tasks + + def collect_swarming_task(self, swarming_task): + """Collects the specified swarming task. + + Args: + swarming_task: An instance of swarming.SwarmingTask. + """ + try: + rv = self.m.swarming.collect_task(swarming_task) + except self.m.step.StepFailure as e: # pragma: no cover + step_result = self.m.step.active_result + # Change step result to Infra failure if the swarming task failed due to + # expiration, time outs, bot crashes or task cancelations. + # Infra failures have step.EXCEPTION. + states_infra_failure = ( + self.m.swarming.State.EXPIRED, self.m.swarming.State.TIMED_OUT, + self.m.swarming.State.BOT_DIED, self.m.swarming.State.CANCELED) + if step_result.json.output['shards'][0]['state'] in states_infra_failure: + step_result.presentation.status = self.m.step.EXCEPTION + raise self.m.step.InfraFailure(e.name, step_result) + raise + finally: + step_result = self.m.step.active_result + # Add log link. + self._add_log_links(step_result) + return rv + + def collect_swarming_task_isolate_hash(self, swarming_task): + """Wait for the given swarming task to finish and return its output hash. + + Args: + swarming_task: An instance of swarming.SwarmingTask. + Returns: + the hash of the isolate output of the task. + """ + res = self.collect_swarming_task(swarming_task) + return res.json.output['shards'][0]['isolated_out']['isolated'] + + def _add_log_links(self, step_result): + """Add Milo log links to all shards in the step.""" + ids = [] + shards = step_result.json.output.get('shards') + if shards: + for shard in shards: + ids.append(shard['id']) + else: + for _, task in step_result.json.output.get('tasks', {}).iteritems(): + ids.append(task['task_id']) + for idx, task_id in enumerate(ids): + link = MILO_LOG_LINK % task_id + k = 'view steps on Milo' + if len(ids) > 1: # pragma: nocover + k += ' (shard index %d, %d total)' % (idx, len(ids)) + step_result.presentation.links[k] = link + diff --git a/infra/bots/recipes.py b/infra/bots/recipes.py new file mode 100755 index 0000000000..c406462e68 --- /dev/null +++ b/infra/bots/recipes.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# Copyright 2016 The LUCI Authors. All rights reserved. +# Use of this source code is governed under the Apache License, Version 2.0 +# that can be found in the LICENSE file. +"""Bootstrap script to clone and forward to the recipe engine tool. +*********************************************************************** +** DO NOT MODIFY EXCEPT IN THE PER-REPO CONFIGURATION SECTION BELOW. ** +*********************************************************************** +This is a copy of https://github.com/luci/recipes-py/blob/master/doc/recipes.py. +To fix bugs, fix in the github repo then copy it back to here and fix the +PER-REPO CONFIGURATION section to look like this one. +""" +import os +#### PER-REPO CONFIGURATION (editable) #### + +# The root of the repository relative to the directory of this file. +REPO_ROOT = os.path.join(os.pardir, os.pardir) + +# The path of the recipes.cfg file relative to the root of the repository. +RECIPES_CFG = os.path.join('infra', 'config', 'recipes.cfg') + +#### END PER-REPO CONFIGURATION #### +BOOTSTRAP_VERSION = 1 +import ast +import logging +import random +import re +import subprocess +import sys +import time +import traceback +def parse_protobuf(fh): + """Parse the protobuf text format just well enough to understand recipes.cfg. + We don't use the protobuf library because we want to be as self-contained + as possible in this bootstrap, so it can be simply vendored into a client + repo. + We assume all fields are repeated since we don't have a proto spec to work + with. + Args: + fh: a filehandle containing the text format protobuf. + Returns: + A recursive dictionary of lists. + """ + def parse_atom(text): + if text == 'true': + return True + if text == 'false': + return False + return ast.literal_eval(text) + ret = {} + for line in fh: + line = line.strip() + m = re.match(r'(\w+)\s*:\s*(.*)', line) + if m: + ret.setdefault(m.group(1), []).append(parse_atom(m.group(2))) + continue + m = re.match(r'(\w+)\s*{', line) + if m: + subparse = parse_protobuf(fh) + ret.setdefault(m.group(1), []).append(subparse) + continue + if line == '}': + return ret + if line == '': + continue + raise ValueError('Could not understand line: <%s>' % line) + return ret +def get_unique(things): + if len(things) == 1: + return things[0] + elif len(things) == 0: + raise ValueError("Expected to get one thing, but dinna get none.") + else: + logging.warn('Expected to get one thing, but got a bunch: %s\n%s' % + (things, traceback.format_stack())) + return things[0] +def _subprocess_call(argv, **kwargs): + logging.info('Running %r', argv) + return subprocess.call(argv, **kwargs) +def _subprocess_check_call(argv, **kwargs): + logging.info('Running %r', argv) + subprocess.check_call(argv, **kwargs) +def main(): + if '--verbose' in sys.argv: + logging.getLogger().setLevel(logging.INFO) + if sys.platform.startswith(('win', 'cygwin')): + git = 'git.bat' + else: + git = 'git' + # Find the repository and config file to operate on. + repo_root = os.path.abspath( + os.path.join(os.path.dirname(__file__), REPO_ROOT)) + recipes_cfg_path = os.path.join(repo_root, RECIPES_CFG) + with open(recipes_cfg_path, 'rU') as fh: + protobuf = parse_protobuf(fh) + engine_buf = get_unique([ + b for b in protobuf['deps'] if b.get('project_id') == ['recipe_engine'] ]) + engine_url = get_unique(engine_buf['url']) + engine_revision = get_unique(engine_buf['revision']) + engine_subpath = (get_unique(engine_buf.get('path_override', [''])) + .replace('/', os.path.sep)) + recipes_path = os.path.join(repo_root, + get_unique(protobuf['recipes_path']).replace('/', os.path.sep)) + deps_path = os.path.join(recipes_path, '.recipe_deps') + engine_path = os.path.join(deps_path, 'recipe_engine') + # Ensure that we have the recipe engine cloned. + def ensure_engine(): + if not os.path.exists(deps_path): + os.makedirs(deps_path) + if not os.path.exists(engine_path): + _subprocess_check_call([git, 'clone', engine_url, engine_path]) + needs_fetch = _subprocess_call( + [git, 'rev-parse', '--verify', '%s^{commit}' % engine_revision], + cwd=engine_path, stdout=open(os.devnull, 'w')) + if needs_fetch: + _subprocess_check_call([git, 'fetch'], cwd=engine_path) + _subprocess_check_call( + [git, 'checkout', '--quiet', engine_revision], cwd=engine_path) + try: + ensure_engine() + except subprocess.CalledProcessError: + logging.exception('ensure_engine failed') + # Retry errors. + time.sleep(random.uniform(2,5)) + ensure_engine() + args = ['--package', recipes_cfg_path, + '--bootstrap-script', __file__] + sys.argv[1:] + return _subprocess_call([ + sys.executable, '-u', + os.path.join(engine_path, engine_subpath, 'recipes.py')] + args) +if __name__ == '__main__': + sys.exit(main()) diff --git a/infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json b/infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json new file mode 100644 index 0000000000..fcba352a20 --- /dev/null +++ b/infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json @@ -0,0 +1,280 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}, {'deps_file': 'DEPS', 'managed': False, 'name': 'src', 'url': 'https://chromium.googlesource.com/chromium/src.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--revision", + "src@origin/lkgr", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"src/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 170242@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "runhooks" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient runhooks" + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Housekeeper-Nightly-RecreateSKPs_Canary" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"RecreateSKPs_Canary\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"frequency\": \"Nightly\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Housekeeper\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_shared_lib=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "runhooks" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "CPPFLAGS": "-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient runhooks (2)" + }, + { + "cmd": [ + "build/gyp_chromium" + ], + "cwd": "[CUSTOM_/_B_WORK]/src", + "env": { + "CPPFLAGS": "-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1", + "GYP_GENERATORS": "ninja" + }, + "name": "gyp_chromium" + }, + { + "cmd": [ + "ninja", + "-C", + "out/Release", + "chrome" + ], + "cwd": "[CUSTOM_/_B_WORK]/src", + "name": "Build Chrome" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport urllib2\n\nBOTO_URL = 'http://metadata/computeMetadata/v1/project/attributes/boto-file'\n\ndest_path = '[SLAVE_BUILD]/tmp/.boto'\ndest_dir = os.path.dirname(dest_path)\nif not os.path.exists(dest_dir):\n os.makedirs(dest_dir)\n\nreq = urllib2.Request(BOTO_URL, headers={'Metadata-Flavor': 'Google'})\ncontents = urllib2.urlopen(req).read()\n\nwith open(dest_path, 'w') as f:\n f.write(contents)\n" + ], + "name": "download boto file", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@BOTO_URL = 'http://metadata/computeMetadata/v1/project/attributes/boto-file'@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@dest_path = '[SLAVE_BUILD]/tmp/.boto'@@@", + "@@@STEP_LOG_LINE@python.inline@dest_dir = os.path.dirname(dest_path)@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.exists(dest_dir):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dest_dir)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@req = urllib2.Request(BOTO_URL, headers={'Metadata-Flavor': 'Google'})@@@", + "@@@STEP_LOG_LINE@python.inline@contents = urllib2.urlopen(req).read()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@with open(dest_path, 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(contents)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/skp_output" + ], + "name": "rmtree skp_output", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/skp_output", + "511" + ], + "name": "makedirs skp_output", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "[CUSTOM_/_B_WORK]/skia/infra/bots/assets/skp/create.py", + "--chrome_src_path", + "[CUSTOM_/_B_WORK]/src", + "--browser_executable", + "[CUSTOM_/_B_WORK]/src/out/Release/chrome", + "--target_dir", + "[SLAVE_BUILD]/skp_output" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[SLAVE_BUILD]/tmp/.boto", + "BOTO_CONFIG": "[SLAVE_BUILD]/tmp/.boto", + "CHROME_HEADLESS": "1", + "PATH": "[DEPOT_TOOLS]:%(PATH)s" + }, + "name": "Recreate SKPs" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Weekly-RecreateSKPs.json b/infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Weekly-RecreateSKPs.json new file mode 100644 index 0000000000..51875510ee --- /dev/null +++ b/infra/bots/recipes/swarm_RecreateSKPs.expected/Housekeeper-Weekly-RecreateSKPs.json @@ -0,0 +1,351 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}, {'deps_file': 'DEPS', 'managed': False, 'name': 'src', 'url': 'https://chromium.googlesource.com/chromium/src.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--revision", + "src@origin/lkgr", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"src/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 170242@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "runhooks" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient runhooks" + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Housekeeper-Weekly-RecreateSKPs" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"RecreateSKPs\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"frequency\": \"Weekly\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Housekeeper\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_shared_lib=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "runhooks" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "CPPFLAGS": "-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient runhooks (2)" + }, + { + "cmd": [ + "build/gyp_chromium" + ], + "cwd": "[CUSTOM_/_B_WORK]/src", + "env": { + "CPPFLAGS": "-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1", + "GYP_GENERATORS": "ninja" + }, + "name": "gyp_chromium" + }, + { + "cmd": [ + "ninja", + "-C", + "out/Release", + "chrome" + ], + "cwd": "[CUSTOM_/_B_WORK]/src", + "name": "Build Chrome" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport urllib2\n\nBOTO_URL = 'http://metadata/computeMetadata/v1/project/attributes/boto-file'\n\ndest_path = '[SLAVE_BUILD]/tmp/.boto'\ndest_dir = os.path.dirname(dest_path)\nif not os.path.exists(dest_dir):\n os.makedirs(dest_dir)\n\nreq = urllib2.Request(BOTO_URL, headers={'Metadata-Flavor': 'Google'})\ncontents = urllib2.urlopen(req).read()\n\nwith open(dest_path, 'w') as f:\n f.write(contents)\n" + ], + "name": "download boto file", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@BOTO_URL = 'http://metadata/computeMetadata/v1/project/attributes/boto-file'@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@dest_path = '[SLAVE_BUILD]/tmp/.boto'@@@", + "@@@STEP_LOG_LINE@python.inline@dest_dir = os.path.dirname(dest_path)@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.exists(dest_dir):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dest_dir)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@req = urllib2.Request(BOTO_URL, headers={'Metadata-Flavor': 'Google'})@@@", + "@@@STEP_LOG_LINE@python.inline@contents = urllib2.urlopen(req).read()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@with open(dest_path, 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(contents)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/skp_output" + ], + "name": "rmtree skp_output", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/skp_output", + "511" + ], + "name": "makedirs skp_output", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "[CUSTOM_/_B_WORK]/skia/infra/bots/assets/skp/create.py", + "--chrome_src_path", + "[CUSTOM_/_B_WORK]/src", + "--browser_executable", + "[CUSTOM_/_B_WORK]/src/out/Release/chrome", + "--target_dir", + "[SLAVE_BUILD]/skp_output", + "--upload_to_partner_bucket" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[SLAVE_BUILD]/tmp/.boto", + "BOTO_CONFIG": "[SLAVE_BUILD]/tmp/.boto", + "CHROME_HEADLESS": "1", + "PATH": "[DEPOT_TOOLS]:%(PATH)s" + }, + "name": "Recreate SKPs" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport urllib2\n\nTOKEN_FILE = '.depot_tools_oauth2_tokens'\nTOKEN_FILE_BACKUP = '.depot_tools_oauth2_tokens.old'\nTOKEN_URL = 'http://metadata/computeMetadata/v1/project/attributes/depot_tools_auth_update_skps'\n\nreq = urllib2.Request(TOKEN_URL, headers={'Metadata-Flavor': 'Google'})\ncontents = urllib2.urlopen(req).read()\n\nhome = os.path.expanduser('~')\ntoken_file = os.path.join(home, TOKEN_FILE)\nif os.path.isfile(token_file):\n os.rename(token_file, os.path.join(home, TOKEN_FILE_BACKUP))\n\nwith open(token_file, 'w') as f:\n f.write(contents)\n" + ], + "name": "depot-tools-auth login", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@TOKEN_FILE = '.depot_tools_oauth2_tokens'@@@", + "@@@STEP_LOG_LINE@python.inline@TOKEN_FILE_BACKUP = '.depot_tools_oauth2_tokens.old'@@@", + "@@@STEP_LOG_LINE@python.inline@TOKEN_URL = 'http://metadata/computeMetadata/v1/project/attributes/depot_tools_auth_update_skps'@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@req = urllib2.Request(TOKEN_URL, headers={'Metadata-Flavor': 'Google'})@@@", + "@@@STEP_LOG_LINE@python.inline@contents = urllib2.urlopen(req).read()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@home = os.path.expanduser('~')@@@", + "@@@STEP_LOG_LINE@python.inline@token_file = os.path.join(home, TOKEN_FILE)@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.isfile(token_file):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.rename(token_file, os.path.join(home, TOKEN_FILE_BACKUP))@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@with open(token_file, 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(contents)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "[CUSTOM_/_B_WORK]/skia/infra/bots/upload_skps.py", + "--target_dir", + "[SLAVE_BUILD]/skp_output" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "[DEPOT_TOOLS]:%(PATH)s" + }, + "name": "Upload SKPs" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\n\n\nTOKEN_FILE = '.depot_tools_oauth2_tokens'\nTOKEN_FILE_BACKUP = '.depot_tools_oauth2_tokens.old'\n\n\nhome = os.path.expanduser('~')\ntoken_file = os.path.join(home, TOKEN_FILE)\nif os.path.isfile(token_file):\n os.remove(token_file)\n\nbackup_file = os.path.join(home, TOKEN_FILE_BACKUP)\nif os.path.isfile(backup_file):\n os.rename(backup_file, token_file)\n" + ], + "name": "depot-tools-auth logout", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@TOKEN_FILE = '.depot_tools_oauth2_tokens'@@@", + "@@@STEP_LOG_LINE@python.inline@TOKEN_FILE_BACKUP = '.depot_tools_oauth2_tokens.old'@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@home = os.path.expanduser('~')@@@", + "@@@STEP_LOG_LINE@python.inline@token_file = os.path.join(home, TOKEN_FILE)@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.isfile(token_file):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.remove(token_file)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@backup_file = os.path.join(home, TOKEN_FILE_BACKUP)@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.isfile(backup_file):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.rename(backup_file, token_file)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_RecreateSKPs.py b/infra/bots/recipes/swarm_RecreateSKPs.py new file mode 100644 index 0000000000..6863b020b7 --- /dev/null +++ b/infra/bots/recipes/swarm_RecreateSKPs.py @@ -0,0 +1,191 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Recipe for the Skia RecreateSKPs Bot.""" + + +DEPS = [ + 'build/file', + 'depot_tools/gclient', + 'recipe_engine/path', + 'recipe_engine/properties', + 'recipe_engine/python', + 'recipe_engine/raw_io', + 'recipe_engine/step', + 'skia', +] + + +TEST_BUILDERS = { + 'client.skia.compile': { + 'skiabot-linux-swarm-000': [ + 'Housekeeper-Nightly-RecreateSKPs_Canary', + 'Housekeeper-Weekly-RecreateSKPs', + ], + }, +} + + +DEPOT_TOOLS_AUTH_TOKEN_FILE = '.depot_tools_oauth2_tokens' +DEPOT_TOOLS_AUTH_TOKEN_FILE_BACKUP = '.depot_tools_oauth2_tokens.old' +UPDATE_SKPS_KEY = 'depot_tools_auth_update_skps' + + +class depot_tools_auth(object): + """Temporarily authenticate to depot_tools via GCE metadata.""" + def __init__(self, api, metadata_key): + self.m = api + self._key = metadata_key + + def __enter__(self): + return self.m.python.inline( + 'depot-tools-auth login', + """ +import os +import urllib2 + +TOKEN_FILE = '%s' +TOKEN_FILE_BACKUP = '%s' +TOKEN_URL = 'http://metadata/computeMetadata/v1/project/attributes/%s' + +req = urllib2.Request(TOKEN_URL, headers={'Metadata-Flavor': 'Google'}) +contents = urllib2.urlopen(req).read() + +home = os.path.expanduser('~') +token_file = os.path.join(home, TOKEN_FILE) +if os.path.isfile(token_file): + os.rename(token_file, os.path.join(home, TOKEN_FILE_BACKUP)) + +with open(token_file, 'w') as f: + f.write(contents) + """ % (DEPOT_TOOLS_AUTH_TOKEN_FILE, + DEPOT_TOOLS_AUTH_TOKEN_FILE_BACKUP, + self._key), + ) + + def __exit__(self, t, v, tb): + return self.m.python.inline( + 'depot-tools-auth logout', + """ +import os + + +TOKEN_FILE = '%s' +TOKEN_FILE_BACKUP = '%s' + + +home = os.path.expanduser('~') +token_file = os.path.join(home, TOKEN_FILE) +if os.path.isfile(token_file): + os.remove(token_file) + +backup_file = os.path.join(home, TOKEN_FILE_BACKUP) +if os.path.isfile(backup_file): + os.rename(backup_file, token_file) + """ % (DEPOT_TOOLS_AUTH_TOKEN_FILE, + DEPOT_TOOLS_AUTH_TOKEN_FILE_BACKUP), + ) + + +def RunSteps(api): + # Check out Chrome. + api.skia.setup() + api.gclient.runhooks( + env={'CPPFLAGS': '-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1'}) + + src_dir = api.skia.checkout_root.join('src') + + # Call build/gyp_chromium + api.step('gyp_chromium', + ['build/gyp_chromium'], + env={'CPPFLAGS': '-DSK_ALLOW_CROSSPROCESS_PICTUREIMAGEFILTERS=1', + 'GYP_GENERATORS': 'ninja'}, + cwd=src_dir) + # Build Chrome. + api.step('Build Chrome', + ['ninja', '-C', 'out/Release', 'chrome'], + cwd=src_dir) + + # Download boto file (needed by recreate_skps.py) to tmp dir. + boto_file = api.path['slave_build'].join('tmp', '.boto') + api.python.inline( + 'download boto file', + """ +import os +import urllib2 + +BOTO_URL = 'http://metadata/computeMetadata/v1/project/attributes/boto-file' + +dest_path = '%s' +dest_dir = os.path.dirname(dest_path) +if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + +req = urllib2.Request(BOTO_URL, headers={'Metadata-Flavor': 'Google'}) +contents = urllib2.urlopen(req).read() + +with open(dest_path, 'w') as f: + f.write(contents) + """ % boto_file) + + # Clean up the output dir. + output_dir = api.path['slave_build'].join('skp_output') + if api.path.exists(output_dir): + api.file.rmtree('skp_output', output_dir) + api.file.makedirs('skp_output', output_dir) + + # Capture the SKPs. + path_var= api.path.pathsep.join([str(api.path['depot_tools']), '%(PATH)s']) + env = { + 'CHROME_HEADLESS': '1', + 'PATH': path_var, + } + boto_env = { + 'AWS_CREDENTIAL_FILE': boto_file, + 'BOTO_CONFIG': boto_file, + } + recreate_skps_env = {} + recreate_skps_env.update(env) + recreate_skps_env.update(boto_env) + asset_dir = api.skia.infrabots_dir.join('assets', 'skp') + cmd = ['python', asset_dir.join('create.py'), + '--chrome_src_path', src_dir, + '--browser_executable', src_dir.join('out', 'Release', 'chrome'), + '--target_dir', output_dir] + if 'Canary' not in api.properties['buildername']: + cmd.append('--upload_to_partner_bucket') + api.step('Recreate SKPs', + cmd=cmd, + cwd=api.skia.skia_dir, + env=recreate_skps_env) + + # Upload the SKPs. + if 'Canary' not in api.properties['buildername']: + cmd = ['python', + api.skia.skia_dir.join('infra', 'bots', 'upload_skps.py'), + '--target_dir', output_dir] + with depot_tools_auth(api, UPDATE_SKPS_KEY): + api.step('Upload SKPs', + cmd=cmd, + cwd=api.skia.skia_dir, + env=env) + + +def GenTests(api): + for mastername, slaves in TEST_BUILDERS.iteritems(): + for slavename, builders_by_slave in slaves.iteritems(): + for builder in builders_by_slave: + test = ( + api.test(builder) + + api.properties(buildername=builder, + mastername=mastername, + slavename=slavename, + revision='abc123', + buildnumber=2, + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists(api.path['slave_build'].join('skp_output')) + ) + yield test diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Debug-Android.json b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Debug-Android.json new file mode 100644 index 0000000000..c41a39b07d --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Debug-Android.json @@ -0,0 +1,231 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Mac-Clang-Arm7-Debug-Android" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm7\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_clang_build=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import json\nimport subprocess\nimport sys\n\nccache = None\ntry:\n ccache = subprocess.check_output(['which', 'ccache']).rstrip()\nexcept:\n pass\nprint json.dumps({'ccache': ccache})\n" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_warnings_as_errors=0", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-Arm7-Debug-Android" + }, + "name": "has ccache?", + "stdout": "/path/to/tmp/json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"ccache\": \"/usr/bin/ccache\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@ccache = None@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ ccache = subprocess.check_output(['which', 'ccache']).rstrip()@@@", + "@@@STEP_LOG_LINE@python.inline@except:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_LINE@python.inline@print json.dumps({'ccache': ccache})@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/platform_tools/android/bin/android_ninja", + "most", + "-d", + "arm_v7_neon", + "--clang" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_MAKE_CCACHE": "/usr/bin/ccache", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_warnings_as_errors=0", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-Arm7-Debug-Android" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-Arm7-Debug-Android/Debug", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Debug" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Release-iOS.json b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Release-iOS.json new file mode 100644 index 0000000000..98f383e384 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-Arm7-Release-iOS.json @@ -0,0 +1,212 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Mac-Clang-Arm7-Release-iOS" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"iOS\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm7\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/platform_tools/ios/bin/ios_ninja" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Release", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-Arm7-Release-iOS" + }, + "name": "build iOSShell" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-Arm7-Release-iOS/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/xcodebuild/Release-iphoneos", + "[CUSTOM_[SWARM_OUT_DIR]]/xcodebuild/Release-iphoneos" + ], + "name": "copy build products (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json new file mode 100644 index 0000000000..01f4146298 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Debug-CommandBuffer.json @@ -0,0 +1,220 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}, {'deps_file': 'DEPS', 'managed': False, 'name': 'src', 'url': 'https://chromium.googlesource.com/chromium/src.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--revision", + "src@origin/lkgr", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"src/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 170242@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "runhooks" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "GYP_CHROMIUM_NO_ACTION": "0", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient runhooks" + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Mac-Clang-x86_64-Debug-CommandBuffer" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"CommandBuffer\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_clang_build=1 skia_command_buffer=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "make", + "most" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]/src", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_clang_build=1 skia_command_buffer=1 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x86_64-Debug-CommandBuffer" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/build_command_buffer.py", + "--chrome-dir", + "[CUSTOM_/_B_WORK]", + "--output-dir", + "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x86_64-Debug-CommandBuffer/Debug", + "--chrome-build-type", + "Debug", + "--no-sync" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_clang_build=1 skia_command_buffer=1 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x86_64-Debug-CommandBuffer" + }, + "name": "build command_buffer" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x86_64-Debug-CommandBuffer/Debug", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Debug" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Release-CMake.json b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Release-CMake.json new file mode 100644 index 0000000000..1c4787cbc9 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Mac-Clang-x86_64-Release-CMake.json @@ -0,0 +1,175 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Mac-Clang-x86_64-Release-CMake" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"CMake\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_clang_build=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/cmake/cmake_build" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Release", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_clang_build=1 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x86_64-Release-CMake" + }, + "name": "cmake_build" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x86_64-Release-CMake/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot.json new file mode 100644 index 0000000000..cb18a44a53 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot.json @@ -0,0 +1,245 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[DEPOT_TOOLS]/apply_issue.py", + "-r", + "[CUSTOM_/_B_WORK]/skia", + "-i", + "500", + "-p", + "1", + "-s", + "https://codereview.chromium.org", + "--no-auth" + ], + "name": "apply_issue", + "~followup_annotations": [ + "@@@STEP_LINK@Applied issue 500@https://codereview.chromium.org/500@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm7\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import json\nimport subprocess\nimport sys\n\nccache = None\ntry:\n ccache = subprocess.check_output(['which', 'ccache']).rstrip()\nexcept:\n pass\nprint json.dumps({'ccache': ccache})\n" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot" + }, + "name": "has ccache?", + "stdout": "/path/to/tmp/json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"ccache\": \"/usr/bin/ccache\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@ccache = None@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ ccache = subprocess.check_output(['which', 'ccache']).rstrip()@@@", + "@@@STEP_LOG_LINE@python.inline@except:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_LINE@python.inline@print json.dumps({'ccache': ccache})@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/platform_tools/android/bin/android_ninja", + "most", + "-d", + "arm_v7_neon", + "--gcc" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_MAKE_CCACHE": "/usr/bin/ccache", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot/Debug", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Debug" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android.json new file mode 100644 index 0000000000..0e5441e2c3 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android.json @@ -0,0 +1,225 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-Arm7-Release-Android" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm7\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import json\nimport subprocess\nimport sys\n\nccache = None\ntry:\n ccache = subprocess.check_output(['which', 'ccache']).rstrip()\nexcept:\n pass\nprint json.dumps({'ccache': ccache})\n" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Release-Android" + }, + "name": "has ccache?", + "stdout": "/path/to/tmp/json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"ccache\": \"/usr/bin/ccache\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@ccache = None@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ ccache = subprocess.check_output(['which', 'ccache']).rstrip()@@@", + "@@@STEP_LOG_LINE@python.inline@except:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_LINE@python.inline@print json.dumps({'ccache': ccache})@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/platform_tools/android/bin/android_ninja", + "most", + "-d", + "arm_v7_neon", + "--gcc" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_MAKE_CCACHE": "/usr/bin/ccache", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Release-Android" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Release-Android/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan.json new file mode 100644 index 0000000000..69105139bb --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan.json @@ -0,0 +1,226 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Android_Vulkan\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm7\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import json\nimport subprocess\nimport sys\n\nccache = None\ntry:\n ccache = subprocess.check_output(['which', 'ccache']).rstrip()\nexcept:\n pass\nprint json.dumps({'ccache': ccache})\n" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan" + }, + "name": "has ccache?", + "stdout": "/path/to/tmp/json", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"ccache\": \"/usr/bin/ccache\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@ccache = None@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ ccache = subprocess.check_output(['which', 'ccache']).rstrip()@@@", + "@@@STEP_LOG_LINE@python.inline@except:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_LINE@python.inline@print json.dumps({'ccache': ccache})@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/platform_tools/android/bin/android_ninja", + "most", + "-d", + "arm_v7_neon", + "--gcc", + "--vulkan" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_MAKE_CCACHE": "/usr/bin/ccache", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-MSAN.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-MSAN.json new file mode 100644 index 0000000000..70176850aa --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Debug-MSAN.json @@ -0,0 +1,230 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}, {'deps_file': 'DEPS', 'managed': False, 'name': 'src', 'url': 'https://chromium.googlesource.com/chromium/src.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--revision", + "src@origin/lkgr", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"src/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 170242@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "runhooks" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient runhooks" + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Debug-MSAN" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"MSAN\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/tools/xsan_build", + "memory", + "dm" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Debug-MSAN" + }, + "name": "build dm" + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/tools/xsan_build", + "memory", + "nanobench" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Debug-MSAN" + }, + "name": "build nanobench" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Debug-MSAN/Debug", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Debug" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[CUSTOM_/_B_WORK]/skia/third_party/externals/llvm/msan_out", + "[CUSTOM_[SWARM_OUT_DIR]]/third_party/externals/llvm/msan_out", + "1" + ], + "name": "copy msan_out" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[CUSTOM_/_B_WORK]/src/third_party/llvm-build", + "[CUSTOM_[SWARM_OUT_DIR]]/llvm-build", + "1" + ], + "name": "copy llvm-build" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-CMake.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-CMake.json new file mode 100644 index 0000000000..e5b34501f6 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-CMake.json @@ -0,0 +1,171 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-CMake" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"CMake\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "[CUSTOM_/_B_WORK]/skia/cmake/cmake_build" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-CMake" + }, + "name": "cmake_build" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-CMake/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-PDFium.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-PDFium.json new file mode 100644 index 0000000000..6595796ca3 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-PDFium.json @@ -0,0 +1,248 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}, {'deps_file': 'DEPS', 'managed': False, 'name': 'pdfium', 'url': 'https://pdfium.googlesource.com/pdfium.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--revision", + "pdfium@origin/master", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"pdfium/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 52055@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-PDFium" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"PDFium\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "gclient", + "runhook", + "gn_linux64" + ], + "cwd": "[CUSTOM_/_B_WORK]/pdfium", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-PDFium" + }, + "name": "runhook" + }, + { + "cmd": [ + "gn", + "gen", + "out/skia", + "--args=pdf_use_skia=true pdf_is_standalone=true clang_use_chrome_plugins=false" + ], + "cwd": "[CUSTOM_/_B_WORK]/pdfium", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "CHROMIUM_BUILDTOOLS_PATH": "[CUSTOM_/_B_WORK]/pdfium/buildtools", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-PDFium" + }, + "name": "gn_gen" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[CUSTOM_/_B_WORK]/pdfium/DEPS", + "/path/to/tmp/" + ], + "name": "read PDFium DEPS" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "'skia_revision': '164710'", + "[CUSTOM_/_B_WORK]/pdfium/DEPS" + ], + "name": "write PDFium DEPs" + }, + { + "cmd": [ + "gclient", + "sync" + ], + "cwd": "[CUSTOM_/_B_WORK]/pdfium", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-PDFium" + }, + "name": "sync_pdfium" + }, + { + "cmd": [ + "ninja", + "-C", + "out/skia", + "-j100" + ], + "cwd": "[CUSTOM_/_B_WORK]/pdfium", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-PDFium" + }, + "name": "build_pdfium" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-PDFium/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Shared.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Shared.json new file mode 100644 index 0000000000..3fff23e838 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Shared.json @@ -0,0 +1,173 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-Shared" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Shared\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_shared_lib=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "make", + "most" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]/src", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_shared_lib=1 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-Shared" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-Shared/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Valgrind.json b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Valgrind.json new file mode 100644 index 0000000000..ad7abf7cdf --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Ubuntu-GCC-x86_64-Release-Valgrind.json @@ -0,0 +1,173 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_/_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_/_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]/gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_/_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_/_B_WORK]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-Valgrind" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Valgrind\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "make", + "most" + ], + "cwd": "[CUSTOM_/_B_WORK]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]/src", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=1", + "PATH": "%(PATH)s:RECIPE_PACKAGE_REPO[depot_tools]:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-Valgrind" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_/_B_WORK]/skia/out/Build-Ubuntu-GCC-x86_64-Release-Valgrind/Release", + "[CUSTOM_[SWARM_OUT_DIR]]/out/Release" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Debug.json b/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Debug.json new file mode 100644 index 0000000000..9cf159bf6a --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86-Debug.json @@ -0,0 +1,203 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_C:\\_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_C:\\\\_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86-Debug" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\infra\\bots\\bootstrap_win_toolchain_json.py", + "--win_toolchain_json", + "[SLAVE_BUILD]\\src\\build\\win_toolchain.json", + "--depot_tools_parent_dir", + "[SLAVE_BUILD]" + ], + "name": "bootstrap win toolchain" + }, + { + "cmd": [ + "python", + "make.py", + "most" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]\\src", + "GYP_DEFINES": "qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Debug" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Debug\\Debug", + "[CUSTOM_[SWARM_OUT_DIR]]\\out\\Debug" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import psutil\nfor p in psutil.process_iter():\n try:\n if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):\n p.kill()\n except psutil._error.AccessDenied:\n pass\n" + ], + "name": "cleanup", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import psutil@@@", + "@@@STEP_LOG_LINE@python.inline@for p in psutil.process_iter():@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):@@@", + "@@@STEP_LOG_LINE@python.inline@ p.kill()@@@", + "@@@STEP_LOG_LINE@python.inline@ except psutil._error.AccessDenied:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json b/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json new file mode 100644 index 0000000000..fd18b404c3 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json @@ -0,0 +1,205 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_C:\\_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_C:\\\\_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86_64-Release-Vulkan" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Vulkan\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_vulkan=1 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\infra\\bots\\bootstrap_win_toolchain_json.py", + "--win_toolchain_json", + "[SLAVE_BUILD]\\src\\build\\win_toolchain.json", + "--depot_tools_parent_dir", + "[SLAVE_BUILD]" + ], + "name": "bootstrap win toolchain" + }, + { + "cmd": [ + "python", + "make.py", + "most" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]\\src", + "GYP_DEFINES": "qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_vulkan=1 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86_64-Release-Vulkan", + "VK_SDK_PATH": "[SLAVE_BUILD]\\vulkan_1.0.17.0" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86_64-Release-Vulkan\\Release_x64", + "[CUSTOM_[SWARM_OUT_DIR]]\\out\\Release_x64" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import psutil\nfor p in psutil.process_iter():\n try:\n if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):\n p.kill()\n except psutil._error.AccessDenied:\n pass\n" + ], + "name": "cleanup", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import psutil@@@", + "@@@STEP_LOG_LINE@python.inline@for p in psutil.process_iter():@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):@@@", + "@@@STEP_LOG_LINE@python.inline@ p.kill()@@@", + "@@@STEP_LOG_LINE@python.inline@ except psutil._error.AccessDenied:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/big_issue_number.json b/infra/bots/recipes/swarm_compile.expected/big_issue_number.json new file mode 100644 index 0000000000..51a3de6c76 --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/big_issue_number.json @@ -0,0 +1,223 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_C:\\_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_C:\\\\_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[DEPOT_TOOLS]\\apply_issue.py", + "-r", + "[CUSTOM_C:\\_B_WORK]\\skia", + "-i", + "2147533002", + "-p", + "1", + "-s", + "https://codereview.chromium.org", + "--no-auth" + ], + "name": "apply_issue", + "~followup_annotations": [ + "@@@STEP_LINK@Applied issue 2147533002@https://codereview.chromium.org/2147533002@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86-Debug" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\infra\\bots\\bootstrap_win_toolchain_json.py", + "--win_toolchain_json", + "[SLAVE_BUILD]\\src\\build\\win_toolchain.json", + "--depot_tools_parent_dir", + "[SLAVE_BUILD]" + ], + "name": "bootstrap win toolchain" + }, + { + "cmd": [ + "python", + "make.py", + "most" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]\\src", + "GYP_DEFINES": "qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Debug" + }, + "name": "build most" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Debug\\Debug", + "[CUSTOM_[SWARM_OUT_DIR]]\\out\\Debug" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import psutil\nfor p in psutil.process_iter():\n try:\n if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):\n p.kill()\n except psutil._error.AccessDenied:\n pass\n" + ], + "name": "cleanup", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import psutil@@@", + "@@@STEP_LOG_LINE@python.inline@for p in psutil.process_iter():@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):@@@", + "@@@STEP_LOG_LINE@python.inline@ p.kill()@@@", + "@@@STEP_LOG_LINE@python.inline@ except psutil._error.AccessDenied:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.expected/win_retry_failed_compile.json b/infra/bots/recipes/swarm_compile.expected/win_retry_failed_compile.json new file mode 100644 index 0000000000..d658a642af --- /dev/null +++ b/infra/bots/recipes/swarm_compile.expected/win_retry_failed_compile.json @@ -0,0 +1,224 @@ +[ + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_C:\\_B_WORK]", + "511" + ], + "name": "makedirs checkout_path", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "config", + "--spec", + "cache_dir = '[CUSTOM_C:\\\\_B_CACHE]'\nsolutions = [{'deps_file': 'DEPS', 'managed': False, 'name': 'skia', 'url': 'https://skia.googlesource.com/skia.git'}]\ntarget_os = ['llvm']" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient setup" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_PACKAGE_REPO[depot_tools]\\gclient.py", + "sync", + "--nohooks", + "--force", + "--verbose", + "--delete_unversioned_trees", + "--revision", + "skia@abc123", + "--output-json", + "/path/to/tmp/json" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]", + "env": { + "CHROME_HEADLESS": "1", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]" + }, + "name": "gclient sync", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"solutions\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"skia/\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"revision\": 164710@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@got_revision@164710@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86-Debug" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CUSTOM_C:\\_B_WORK]\\skia\\infra\\bots\\bootstrap_win_toolchain_json.py", + "--win_toolchain_json", + "[SLAVE_BUILD]\\src\\build\\win_toolchain.json", + "--depot_tools_parent_dir", + "[SLAVE_BUILD]" + ], + "name": "bootstrap win toolchain" + }, + { + "cmd": [ + "python", + "make.py", + "most" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]\\src", + "GYP_DEFINES": "qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Debug" + }, + "name": "build most", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_FAILURE@@@" + ] + }, + { + "cmd": [ + "python", + "make.py", + "most" + ], + "cwd": "[CUSTOM_C:\\_B_WORK]\\skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "CHROME_PATH": "[SLAVE_BUILD]\\src", + "GYP_DEFINES": "qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0", + "PATH": "%(PATH)s;RECIPE_PACKAGE_REPO[depot_tools];RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Debug" + }, + "name": "build most (2)" + }, + { + "cmd": [ + "python", + "-u", + "import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n", + "[CUSTOM_C:\\_B_WORK]\\skia\\out\\Build-Win-MSVC-x86-Debug\\Debug", + "[CUSTOM_[SWARM_OUT_DIR]]\\out\\Debug" + ], + "name": "copy build products", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import errno@@@", + "@@@STEP_LOG_LINE@python.inline@import glob@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import shutil@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@dst = sys.argv[2]@@@", + "@@@STEP_LOG_LINE@python.inline@build_products_whitelist = ['dm', 'dm.exe', 'nanobench', 'nanobench.exe', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'iOSShell.app', 'iOSShell.ipa', 'visualbench', 'visualbench.exe']@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@try:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(dst)@@@", + "@@@STEP_LOG_LINE@python.inline@except OSError as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ if e.errno != errno.EEXIST:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@for pattern in build_products_whitelist:@@@", + "@@@STEP_LOG_LINE@python.inline@ path = os.path.join(src, pattern)@@@", + "@@@STEP_LOG_LINE@python.inline@ for f in glob.glob(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ dst_path = os.path.join(dst, os.path.relpath(f, src))@@@", + "@@@STEP_LOG_LINE@python.inline@ if not os.path.isdir(os.path.dirname(dst_path)):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(os.path.dirname(dst_path))@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Copying build product %s to %s' % (f, dst_path)@@@", + "@@@STEP_LOG_LINE@python.inline@ shutil.move(f, dst_path)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import psutil\nfor p in psutil.process_iter():\n try:\n if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):\n p.kill()\n except psutil._error.AccessDenied:\n pass\n" + ], + "name": "cleanup", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import psutil@@@", + "@@@STEP_LOG_LINE@python.inline@for p in psutil.process_iter():@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ if p.name in ('mspdbsrv.exe', 'vctip.exe', 'cl.exe', 'link.exe'):@@@", + "@@@STEP_LOG_LINE@python.inline@ p.kill()@@@", + "@@@STEP_LOG_LINE@python.inline@ except psutil._error.AccessDenied:@@@", + "@@@STEP_LOG_LINE@python.inline@ pass@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_compile.py b/infra/bots/recipes/swarm_compile.py new file mode 100644 index 0000000000..8e7370fdbc --- /dev/null +++ b/infra/bots/recipes/swarm_compile.py @@ -0,0 +1,119 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# Recipe module for Skia Swarming compile. + + +DEPS = [ + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/platform', + 'recipe_engine/properties', + 'skia', +] + + +TEST_BUILDERS = { + 'client.skia.compile': { + 'skiabot-linux-swarm-000': [ + 'Build-Mac-Clang-Arm7-Debug-Android', + 'Build-Mac-Clang-Arm7-Release-iOS', + 'Build-Mac-Clang-x86_64-Debug-CommandBuffer', + 'Build-Mac-Clang-x86_64-Release-CMake', + 'Build-Ubuntu-GCC-Arm7-Debug-Android-Trybot', + 'Build-Ubuntu-GCC-Arm7-Release-Android', + 'Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan', + 'Build-Ubuntu-GCC-x86_64-Debug-MSAN', + 'Build-Ubuntu-GCC-x86_64-Release-CMake', + 'Build-Ubuntu-GCC-x86_64-Release-PDFium', + 'Build-Ubuntu-GCC-x86_64-Release-Shared', + 'Build-Ubuntu-GCC-x86_64-Release-Valgrind', + 'Build-Win-MSVC-x86-Debug', + 'Build-Win-MSVC-x86_64-Release-Vulkan', + ], + }, +} + + +def RunSteps(api): + api.skia.setup() + api.skia.compile_steps() + api.skia.cleanup_steps() + api.skia.check_failure() + + +def GenTests(api): + for mastername, slaves in TEST_BUILDERS.iteritems(): + for slavename, builders_by_slave in slaves.iteritems(): + for builder in builders_by_slave: + test = ( + api.test(builder) + + api.properties(buildername=builder, + mastername=mastername, + slavename=slavename, + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + ) + if 'Win' in builder: + test += api.platform('win', 64) + elif 'Mac' in builder: + test += api.platform('mac', 64) + else: + test += api.platform('linux', 64) + if 'Android' in builder: + ccache = '/usr/bin/ccache' + test += api.step_data('has ccache?', + stdout=api.json.output({'ccache':ccache})) + test += api.step_data( + 'which adb', + retcode=1) + if 'Trybot' in builder: + test += api.properties(issue=500, + patchset=1, + rietveld='https://codereview.chromium.org') + + yield test + + mastername = 'client.skia.compile' + slavename = 'skiabot-win-compile-000' + buildername = 'Build-Win-MSVC-x86-Debug' + yield ( + api.test('win_retry_failed_compile') + + api.properties(buildername=buildername, + mastername=mastername, + slavename=slavename, + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + api.platform('win', 64) + + api.step_data('build most', retcode=1) + ) + + yield ( + api.test('big_issue_number') + + api.properties(buildername=buildername, + mastername=mastername, + slavename=slavename, + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + rietveld='https://codereview.chromium.org', + patchset=1, + issue=2147533002L) + + api.path.exists( + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + api.platform('win', 64) + ) diff --git a/infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit-Trybot.json b/infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit-Trybot.json new file mode 100644 index 0000000000..e73056dd75 --- /dev/null +++ b/infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit-Trybot.json @@ -0,0 +1,103 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Housekeeper-PerCommit-Trybot" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"frequency\": \"PerCommit\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Housekeeper\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_shared_lib=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "[SLAVE_BUILD]/skia/platform_tools/android/tests/run_all.py" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_shared_lib=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "android platform self-tests" + }, + { + "cmd": [ + "python", + "RECIPE_MODULE[skia::skia]/resources/run_binary_size_analysis.py", + "--library", + "[SLAVE_BUILD]/out/Release/lib/libskia.so", + "--githash", + "abc123", + "--gsutil_path", + "[DEPOT_TOOLS]/third_party/gsutil/gsutil", + "--issue_number", + "500" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_shared_lib=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "generate and upload binary size data" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit.json b/infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit.json new file mode 100644 index 0000000000..5c68f034d4 --- /dev/null +++ b/infra/bots/recipes/swarm_housekeeper.expected/Housekeeper-PerCommit.json @@ -0,0 +1,116 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Housekeeper-PerCommit" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"frequency\": \"PerCommit\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Housekeeper\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_shared_lib=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "[SLAVE_BUILD]/skia/platform_tools/android/tests/run_all.py" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_shared_lib=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "android platform self-tests" + }, + { + "cmd": [ + "python", + "RECIPE_MODULE[skia::skia]/resources/generate_and_upload_doxygen.py", + "[DEPOT_TOOLS]/third_party/gsutil/gsutil" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_shared_lib=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "generate and upload doxygen" + }, + { + "cmd": [ + "python", + "RECIPE_MODULE[skia::skia]/resources/run_binary_size_analysis.py", + "--library", + "[SLAVE_BUILD]/out/Release/lib/libskia.so", + "--githash", + "abc123", + "--gsutil_path", + "[DEPOT_TOOLS]/third_party/gsutil/gsutil" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_shared_lib=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "generate and upload binary size data" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_housekeeper.py b/infra/bots/recipes/swarm_housekeeper.py new file mode 100644 index 0000000000..bf9cabbbf9 --- /dev/null +++ b/infra/bots/recipes/swarm_housekeeper.py @@ -0,0 +1,85 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# Recipe for the Skia PerCommit Housekeeper. + + +DEPS = [ + 'recipe_engine/path', + 'recipe_engine/properties', + 'recipe_engine/python', + 'skia', + 'recipe_engine/step', +] + + +TEST_BUILDERS = { + 'client.skia.fyi': { + 'skiabot-linux-housekeeper-000': [ + 'Housekeeper-PerCommit', + 'Housekeeper-PerCommit-Trybot', + ], + }, +} + + +def RunSteps(api): + # Checkout, compile, etc. + api.skia.setup() + + cwd = api.path['checkout'] + + api.skia.run( + api.step, + 'android platform self-tests', + cmd=['python', + cwd.join('platform_tools', 'android', 'tests', 'run_all.py')], + cwd=cwd, + abort_on_failure=False) + + # TODO(borenet): Detect static initializers? + + gsutil_path = api.path['depot_tools'].join('third_party', 'gsutil', + 'gsutil') + if not api.skia.is_trybot: + api.skia.run( + api.step, + 'generate and upload doxygen', + cmd=['python', api.skia.resource('generate_and_upload_doxygen.py'), + gsutil_path], + cwd=cwd, + abort_on_failure=False) + + cmd = ['python', api.skia.resource('run_binary_size_analysis.py'), + '--library', api.skia.skia_out.join('Release', 'lib', 'libskia.so'), + '--githash', api.properties['revision'], + '--gsutil_path', gsutil_path] + if api.skia.is_trybot: + cmd.extend(['--issue_number', str(api.skia.m.properties['issue'])]) + api.skia.run( + api.step, + 'generate and upload binary size data', + cmd=cmd, + cwd=cwd, + abort_on_failure=False) + +def GenTests(api): + for mastername, slaves in TEST_BUILDERS.iteritems(): + for slavename, builders_by_slave in slaves.iteritems(): + for buildername in builders_by_slave: + test = ( + api.test(buildername) + + api.properties(buildername=buildername, + mastername=mastername, + slavename=slavename, + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists(api.path['slave_build']) + ) + if 'Trybot' in buildername: + test.properties['issue'] = '500' + yield test diff --git a/infra/bots/recipes/swarm_perf.expected/Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release.json b/infra/bots/recipes/swarm_perf.expected/Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release.json new file mode 100644 index 0000000000..e88e5498f8 --- /dev/null +++ b/infra/bots/recipes/swarm_perf.expected/Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release.json @@ -0,0 +1,563 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Perf\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": true@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "root" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_perf" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_perf" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_perf", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_perf", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_perf" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_perf" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Release", + "nanobench", + "--undefok", + "-i", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/nanobench", + "--nocpu", + "--dummy-flags", + "--outResultsFile", + "/storage/emulated/legacy/skiabot/skia_perf/nanobench_abc123.json", + "--properties", + "gitHash", + "abc123", + "build_number", + "5", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "nanobench" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release/data", + "511" + ], + "name": "makedirs perf_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_perf", + "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release/data" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_perf" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_dump_stats=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_perf.expected/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench.json b/infra/bots/recipes/swarm_perf.expected/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench.json new file mode 100644 index 0000000000..e737719ab5 --- /dev/null +++ b/infra/bots/recipes/swarm_perf.expected/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench.json @@ -0,0 +1,202 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"visualbench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"GTX550Ti\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"VisualBench\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleA\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Perf\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_dump_stats=1 skia_use_sdl=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": true@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench/data" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench/data", + "511" + ], + "name": "makedirs data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "catchsegv", + "[SLAVE_BUILD]/out/Release/visualbench", + "--undefok", + "-i", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/nanobench", + "--nocpu", + "--dummy-flags", + "--outResultsFile", + "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench/data/nanobench_abc123.json", + "--properties", + "gitHash", + "abc123", + "build_number", + "5", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "GTX550Ti", + "extra_config", + "VisualBench", + "model", + "ShuttleA", + "os", + "Ubuntu" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_dump_stats=1 skia_use_sdl=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "visualbench" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/perfdata/Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench/data", + "511" + ], + "name": "makedirs perf_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_perf.expected/Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release.json b/infra/bots/recipes/swarm_perf.expected/Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release.json new file mode 100644 index 0000000000..e530601a86 --- /dev/null +++ b/infra/bots/recipes/swarm_perf.expected/Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release.json @@ -0,0 +1,198 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release" + ], + "cwd": "[SLAVE_BUILD]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Perf\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": true@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skp\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skimage\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release\\data" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]\\skia\\infra\\bots\\.recipe_deps\\build\\scripts" + }, + "name": "rmtree data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release\\data", + "511" + ], + "name": "makedirs data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]\\out\\Release_x64\\nanobench", + "--undefok", + "-i", + "[SLAVE_BUILD]\\skia\\resources", + "--skps", + "[SLAVE_BUILD]\\skp", + "--images", + "[SLAVE_BUILD]\\skimage\\nanobench", + "--nogpu", + "--dummy-flags", + "--outResultsFile", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release\\data\\nanobench_abc123.json", + "--properties", + "gitHash", + "abc123", + "build_number", + "5", + "--key", + "arch", + "x86_64", + "compiler", + "MSVC", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "GCE", + "os", + "Win" + ], + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp", + "SKIA_OUT": "[SLAVE_BUILD]\\out" + }, + "name": "nanobench" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release\\data", + "511" + ], + "name": "makedirs perf_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_perf.expected/Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot.json b/infra/bots/recipes/swarm_perf.expected/Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot.json new file mode 100644 index 0000000000..81a2a618c3 --- /dev/null +++ b/infra/bots/recipes/swarm_perf.expected/Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot.json @@ -0,0 +1,202 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot" + ], + "cwd": "[SLAVE_BUILD]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"HD4600\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleB\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win8\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Perf\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_dump_stats=1 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": true@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skp\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skimage\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]\\skia\\infra\\bots\\.recipe_deps\\build\\scripts" + }, + "name": "rmtree data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data", + "511" + ], + "name": "makedirs data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]\\out\\Release_x64\\nanobench", + "--undefok", + "-i", + "[SLAVE_BUILD]\\skia\\resources", + "--skps", + "[SLAVE_BUILD]\\skp", + "--images", + "[SLAVE_BUILD]\\skimage\\nanobench", + "--nocpu", + "--dummy-flags", + "--outResultsFile", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data\\nanobench_abc123.json", + "--properties", + "gitHash", + "abc123", + "build_number", + "5", + "issue", + "500", + "patchset", + "1", + "--key", + "arch", + "x86_64", + "compiler", + "MSVC", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "HD4600", + "model", + "ShuttleB", + "os", + "Win8" + ], + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_dump_stats=1 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp", + "SKIA_OUT": "[SLAVE_BUILD]\\out" + }, + "name": "nanobench" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data", + "511" + ], + "name": "makedirs perf_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_perf.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json b/infra/bots/recipes/swarm_perf.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json new file mode 100644 index 0000000000..000dcf271c --- /dev/null +++ b/infra/bots/recipes/swarm_perf.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json @@ -0,0 +1,151 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"GTX550Ti\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Valgrind\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleA\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "valgrind", + "--gen-suppressions=all", + "--leak-check=full", + "--track-origins=yes", + "--error-exitcode=1", + "--num-callers=40", + "--suppressions=[SLAVE_BUILD]/skia/tools/valgrind.supp", + "[SLAVE_BUILD]/out/Release/nanobench", + "--undefok", + "-i", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/nanobench", + "--nocpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "nanobench" + }, + { + "cmd": [ + "valgrind", + "--gen-suppressions=all", + "--leak-check=full", + "--track-origins=yes", + "--error-exitcode=1", + "--num-callers=40", + "--suppressions=[SLAVE_BUILD]/skia/tools/valgrind.supp", + "[SLAVE_BUILD]/out/Release/nanobench", + "--undefok", + "-i", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/nanobench", + "--nocpu", + "--dummy-flags", + "--abandonGpuContext", + "--nocpu" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "nanobench --abandonGpuContext" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_perf.expected/big_issue_number.json b/infra/bots/recipes/swarm_perf.expected/big_issue_number.json new file mode 100644 index 0000000000..70d5b823df --- /dev/null +++ b/infra/bots/recipes/swarm_perf.expected/big_issue_number.json @@ -0,0 +1,202 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot" + ], + "cwd": "[SLAVE_BUILD]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"HD4600\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleB\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win8\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Perf\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_dump_stats=1 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": true@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skp\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skimage\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]\\skia\\infra\\bots\\.recipe_deps\\build\\scripts" + }, + "name": "rmtree data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data", + "511" + ], + "name": "makedirs data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]\\out\\Release_x64\\nanobench", + "--undefok", + "-i", + "[SLAVE_BUILD]\\skia\\resources", + "--skps", + "[SLAVE_BUILD]\\skp", + "--images", + "[SLAVE_BUILD]\\skimage\\nanobench", + "--nocpu", + "--dummy-flags", + "--outResultsFile", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data\\nanobench_abc123.json", + "--properties", + "gitHash", + "abc123", + "build_number", + "5", + "issue", + "2147533002", + "patchset", + "1", + "--key", + "arch", + "x86_64", + "compiler", + "MSVC", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "HD4600", + "model", + "ShuttleB", + "os", + "Win8" + ], + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_dump_stats=1 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp", + "SKIA_OUT": "[SLAVE_BUILD]\\out" + }, + "name": "nanobench" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\perfdata\\Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot\\data", + "511" + ], + "name": "makedirs perf_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_perf.py b/infra/bots/recipes/swarm_perf.py new file mode 100644 index 0000000000..8fda6f04af --- /dev/null +++ b/infra/bots/recipes/swarm_perf.py @@ -0,0 +1,119 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# Recipe module for Skia Swarming perf. + + +DEPS = [ + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/platform', + 'recipe_engine/properties', + 'recipe_engine/raw_io', + 'skia', +] + + +TEST_BUILDERS = { + 'client.skia': { + 'skiabot-linux-swarm-000': [ + 'Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release', + 'Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot', + 'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind', + 'Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release', + 'Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench', + ], + }, +} + + +def RunSteps(api): + api.skia.setup() + api.skia.perf_steps() + api.skia.cleanup_steps() + api.skia.check_failure() + + +def GenTests(api): + def AndroidTestData(builder): + test_data = ( + api.step_data( + 'get EXTERNAL_STORAGE dir', + stdout=api.raw_io.output('/storage/emulated/legacy')) + + api.step_data( + 'adb root', + stdout=api.raw_io.output('restarting adbd as root')) + + api.step_data( + 'read SKP_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data( + 'read SK_IMAGE_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data( + 'exists skia_perf', + stdout=api.raw_io.output('')) + + api.step_data( + 'which adb', + retcode=1) + ) + return test_data + + for mastername, slaves in TEST_BUILDERS.iteritems(): + for slavename, builders_by_slave in slaves.iteritems(): + for builder in builders_by_slave: + test = ( + api.test(builder) + + api.properties(buildername=builder, + mastername=mastername, + slavename=slavename, + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + ) + if ('Android' in builder and + ('Test' in builder or 'Perf' in builder) and + not 'Appurify' in builder): + test += AndroidTestData(builder) + if 'Trybot' in builder: + test += api.properties(issue=500, + patchset=1, + rietveld='https://codereview.chromium.org') + if 'Win' in builder: + test += api.platform('win', 64) + + yield test + + builder = 'Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot' + yield ( + api.test('big_issue_number') + + api.properties(buildername=builder, + mastername='client.skia.compile', + slavename='skiabot-linux-swarm-000', + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + rietveld='https://codereview.chromium.org', + patchset=1, + issue=2147533002L) + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + api.platform('win', 64) + ) diff --git a/infra/bots/recipes/swarm_test.expected/Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug.json b/infra/bots/recipes/swarm_test.expected/Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug.json new file mode 100644 index 0000000000..f221df619d --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug.json @@ -0,0 +1,582 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Mali400\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GalaxyS3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"m0\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug", + "build_number", + "5", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Mali400", + "model", + "GalaxyS3", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug.json b/infra/bots/recipes/swarm_test.expected/Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug.json new file mode 100644 index 0000000000..cfc6afa823 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug.json @@ -0,0 +1,683 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "root" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug", + "build_number", + "5", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json new file mode 100644 index 0000000000..bf198b3002 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json @@ -0,0 +1,306 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Coverage\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Coverage\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_compile_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang-3.6\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++-3.6\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/tools/llvm_coverage_build", + "dm" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Coverage", + "CC": "/usr/bin/clang-3.6", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++-3.6", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "build dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/out/coverage_results" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree coverage_results", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/out/coverage_results", + "511" + ], + "name": "makedirs coverage_results", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "[SLAVE_BUILD]/skia/tools/llvm_coverage_run.py", + "dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot", + "build_number", + "5", + "issue", + "500", + "patchset", + "1", + "--key", + "arch", + "x86_64", + "compiler", + "Clang", + "configuration", + "Coverage", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "GCE", + "os", + "Ubuntu", + "--nogpu", + "--dummy-flags", + "--outResultsFile", + "[SLAVE_BUILD]/out/coverage_results/abc123.cov" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Coverage", + "CC": "/usr/bin/clang-3.6", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++-3.6", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "python", + "[SLAVE_BUILD]/skia/tools/parse_llvm_coverage.py", + "--report", + "[SLAVE_BUILD]/out/coverage_results/abc123.cov", + "--nanobench", + "[SLAVE_BUILD]/out/coverage_results/nanobench_abc123.json", + "--linebyline", + "[SLAVE_BUILD]/out/coverage_results/coverage_by_line_abc123.json", + "--key", + "arch", + "x86_64", + "compiler", + "Clang", + "configuration", + "Coverage", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "GCE", + "os", + "Ubuntu", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot", + "build_number", + "5", + "issue", + "500", + "patchset", + "1" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Coverage", + "CC": "/usr/bin/clang-3.6", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++-3.6", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "Generate Coverage Data" + }, + { + "cmd": [ + "python", + "-u", + "\nimport json, os, sys\nif os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):\n with open(sys.argv[2], 'w') as f:\n json.dump(os.listdir(sys.argv[1]), f)\n", + "[SLAVE_BUILD]/out/coverage_results", + "/path/to/tmp/json" + ], + "name": "listdir results_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@[@@@", + "@@@STEP_LOG_LINE@json.output@ \"file 1\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"file 2\"@@@", + "@@@STEP_LOG_LINE@json.output@]@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json, os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]) and os.path.isdir(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[2], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(os.listdir(sys.argv[1]), f)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/out/coverage_results/file 1", + "[CUSTOM_[SWARM_OUT_DIR]]" + ], + "name": "Copy to swarming out" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/out/coverage_results/file 2", + "[CUSTOM_[SWARM_OUT_DIR]]" + ], + "name": "Copy to swarming out (2)" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json new file mode 100644 index 0000000000..f762fc0961 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json @@ -0,0 +1,149 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"MSAN\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/out/Debug/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN", + "build_number", + "5", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "extra_config", + "MSAN", + "model", + "GCE", + "os", + "Ubuntu", + "--nogpu", + "--dummy-flags" + ], + "env": { + "ASAN_OPTIONS": "symbolize=1 detect_leaks=1", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "LD_LIBRARY_PATH": "[SLAVE_BUILD]/third_party/externals/llvm/msan_out/lib", + "LSAN_OPTIONS": "symbolize=1 print_suppressions=1 suppressions=[SLAVE_BUILD]/skia/tools/lsan.supp", + "PATH": "%(PATH)s:[SLAVE_BUILD]/llvm-build/Release+Asserts/bin", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "TSAN_OPTIONS": "suppressions=[SLAVE_BUILD]/skia/tools/tsan.supp", + "UBSAN_OPTIONS": "suppressions=[SLAVE_BUILD]/skia/tools/ubsan.supp" + }, + "name": "dm" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json new file mode 100644 index 0000000000..d11d9833fb --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json @@ -0,0 +1,260 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "catchsegv", + "[SLAVE_BUILD]/out/Debug/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "build_number", + "5", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "GCE", + "os", + "Ubuntu", + "--uninterestingHashesFile", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "--writePath", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "--nogpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json new file mode 100644 index 0000000000..50b9535469 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json @@ -0,0 +1,266 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"GTX550Ti\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Valgrind\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleA\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "valgrind", + "--gen-suppressions=all", + "--leak-check=full", + "--track-origins=yes", + "--error-exitcode=1", + "--num-callers=40", + "--suppressions=[SLAVE_BUILD]/skia/tools/valgrind.supp", + "[SLAVE_BUILD]/out/Release/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "build_number", + "5", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Release", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "GTX550Ti", + "extra_config", + "Valgrind", + "model", + "ShuttleA", + "os", + "Ubuntu", + "--nocpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "valgrind", + "--gen-suppressions=all", + "--leak-check=full", + "--track-origins=yes", + "--error-exitcode=1", + "--num-callers=40", + "--suppressions=[SLAVE_BUILD]/skia/tools/valgrind.supp", + "[SLAVE_BUILD]/out/Release/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "build_number", + "5", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Release", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "GTX550Ti", + "extra_config", + "Valgrind", + "model", + "ShuttleA", + "os", + "Ubuntu", + "--nocpu", + "--dummy-flags", + "--abandonGpuContext" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm --abandonGpuContext" + }, + { + "cmd": [ + "valgrind", + "--gen-suppressions=all", + "--leak-check=full", + "--track-origins=yes", + "--error-exitcode=1", + "--num-callers=40", + "--suppressions=[SLAVE_BUILD]/skia/tools/valgrind.supp", + "[SLAVE_BUILD]/out/Release/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "build_number", + "5", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Release", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "GTX550Ti", + "extra_config", + "Valgrind", + "model", + "ShuttleA", + "os", + "Ubuntu", + "--nocpu", + "--dummy-flags", + "--preAbandonGpuContext" + ], + "env": { + "BUILDTYPE": "Release", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm --preAbandonGpuContext" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot.json b/infra/bots/recipes/swarm_test.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot.json new file mode 100644 index 0000000000..a054f3409b --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot.json @@ -0,0 +1,262 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot" + ], + "cwd": "[SLAVE_BUILD]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleB\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win8\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skp\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skimage\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]\\skia\\infra\\bots\\.recipe_deps\\build\\scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]\\tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]\\tmp\\uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]\\skia", + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp", + "SKIA_OUT": "[SLAVE_BUILD]\\out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]\\out\\Release_x64\\dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]\\skia\\resources", + "--skps", + "[SLAVE_BUILD]\\skp", + "--images", + "[SLAVE_BUILD]\\skimage\\dm", + "--colorImages", + "[SLAVE_BUILD]\\skimage\\colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot", + "build_number", + "5", + "issue", + "500", + "patchset", + "1", + "--key", + "arch", + "x86_64", + "compiler", + "MSVC", + "configuration", + "Release", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "ShuttleB", + "os", + "Win8", + "--uninterestingHashesFile", + "[SLAVE_BUILD]\\tmp\\uninteresting_hashes.txt", + "--writePath", + "[CUSTOM_[SWARM_OUT_DIR]]\\dm", + "--nogpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp", + "SKIA_OUT": "[SLAVE_BUILD]\\out" + }, + "name": "dm" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug.json b/infra/bots/recipes/swarm_test.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug.json new file mode 100644 index 0000000000..2f6684e12d --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug.json @@ -0,0 +1,594 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"iOSShell\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"SGX554\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"iPad4\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"iOS\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"iPad4,1\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_install" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "install iOSShell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_push_if_needed", + "[SLAVE_BUILD]/skia/resources", + "skiabot/skia_resources" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "push resources to skia_resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_cat_file", + "skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_rm", + "skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "rm skiabot/skia_tmp_dir/SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_rm", + "skiabot/skia_skp/skps" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "rmdir skiabot/skia_skp/skps" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_mkdir", + "skiabot/skia_skp/skps" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "mkdir skiabot/skia_skp/skps" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_push_if_needed", + "[SLAVE_BUILD]/skp", + "skiabot/skia_skp/skps" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "push skp to skps" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_push_file", + "[SLAVE_BUILD]/tmp/SKP_VERSION", + "skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "push [SLAVE_BUILD]/tmp/SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_cat_file", + "skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_rm", + "skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "rm skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_rm", + "skiabot/skia_images" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "rmdir skiabot/skia_images" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_mkdir", + "skiabot/skia_images" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "mkdir skiabot/skia_images" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_push_if_needed", + "[SLAVE_BUILD]/skimage", + "skiabot/skia_images" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "push skimage to skia_images" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_push_file", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION", + "skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "push [SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_rm", + "skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "rmdir skiabot/skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_mkdir", + "skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "mkdir skiabot/skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_push_file", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "push [SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_run_skia", + "--dm", + "--undefok", + "--resourcePath", + "skiabot/skia_resources", + "--skps", + "skiabot/skia_skp/skps", + "--images", + "skiabot/skia_images/dm", + "--colorImages", + "skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug", + "build_number", + "5", + "--key", + "arch", + "Arm7", + "compiler", + "Clang", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "SGX554", + "model", + "iPad4", + "os", + "iOS", + "--uninterestingHashesFile", + "skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_pull_if_needed", + "skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/ios/bin/ios_restart" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "20" + ], + "env": { + "BUILDTYPE": "Debug", + "CC": "/usr/bin/clang", + "CHROME_HEADLESS": "1", + "CXX": "/usr/bin/clang++", + "GYP_DEFINES": "skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out", + "XCODEBUILD": "[SLAVE_BUILD]/xcodebuild" + }, + "name": "wait for reboot" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/adb_in_path.json b/infra/bots/recipes/swarm_test.expected/adb_in_path.json new file mode 100644 index 0000000000..8e9ffa7da7 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/adb_in_path.json @@ -0,0 +1,679 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "/usr/bin/adb", + "root" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "/usr/bin/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug", + "build_number", + "6", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "/usr/bin/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "/usr/bin/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "/usr/bin/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/big_issue_number.json b/infra/bots/recipes/swarm_test.expected/big_issue_number.json new file mode 100644 index 0000000000..3a6e7feb24 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/big_issue_number.json @@ -0,0 +1,262 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]\\skia\\tools\\buildbot_spec.py", + "/path/to/tmp/json", + "Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot" + ], + "cwd": "[SLAVE_BUILD]\\skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleB\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win8\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skp\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]\\skia\\infra\\bots\\assets\\skimage\\VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]\\tmp\\SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]\\skia\\infra\\bots\\.recipe_deps\\build\\scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]\\dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]\\tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]\\tmp\\uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]\\skia", + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp", + "SKIA_OUT": "[SLAVE_BUILD]\\out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]\\out\\Release_x64\\dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]\\skia\\resources", + "--skps", + "[SLAVE_BUILD]\\skp", + "--images", + "[SLAVE_BUILD]\\skimage\\dm", + "--colorImages", + "[SLAVE_BUILD]\\skimage\\colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia.compile", + "builder", + "Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot", + "build_number", + "5", + "issue", + "2147533002", + "patchset", + "1", + "--key", + "arch", + "x86_64", + "compiler", + "MSVC", + "configuration", + "Release", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "ShuttleB", + "os", + "Win8", + "--uninterestingHashesFile", + "[SLAVE_BUILD]\\tmp\\uninteresting_hashes.txt", + "--writePath", + "[CUSTOM_[SWARM_OUT_DIR]]\\dm", + "--nogpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Release_x64", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp", + "SKIA_OUT": "[SLAVE_BUILD]\\out" + }, + "name": "dm" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/download_and_push_skimage.json b/infra/bots/recipes/swarm_test.expected/download_and_push_skimage.json new file mode 100644 index 0000000000..119469871f --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/download_and_push_skimage.json @@ -0,0 +1,787 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "root" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-f", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rm SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_images" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_images" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_images", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_images", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_images" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_images" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skimage", + "/storage/emulated/legacy/skiabot/skia_images" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push skimage" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug", + "build_number", + "6", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/download_and_push_skps.json b/infra/bots/recipes/swarm_test.expected/download_and_push_skps.json new file mode 100644 index 0000000000..f835ba2229 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/download_and_push_skps.json @@ -0,0 +1,787 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "root" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-f", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rm SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_skp/skps" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skps" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skps", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_skp/skps" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skps" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skp", + "/storage/emulated/legacy/skiabot/skia_skp/skps" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push skp" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/SKP_VERSION", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug", + "build_number", + "6", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/failed_dm.json b/infra/bots/recipes/swarm_test.expected/failed_dm.json new file mode 100644 index 0000000000..1b6a579772 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/failed_dm.json @@ -0,0 +1,265 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "catchsegv", + "[SLAVE_BUILD]/out/Debug/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "build_number", + "6", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "GCE", + "os", + "Ubuntu", + "--uninterestingHashesFile", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "--writePath", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "--nogpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_FAILURE@@@" + ] + }, + { + "name": "$result", + "reason": "Failed build steps: dm", + "recipe_result": null, + "status_code": 1 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/failed_get_hashes.json b/infra/bots/recipes/swarm_test.expected/failed_get_hashes.json new file mode 100644 index 0000000000..f1f3d8789d --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/failed_get_hashes.json @@ -0,0 +1,685 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "root" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug", + "build_number", + "6", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/legacy_skimage_version.json b/infra/bots/recipes/swarm_test.expected/legacy_skimage_version.json new file mode 100644 index 0000000000..4e3706af49 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/legacy_skimage_version.json @@ -0,0 +1,250 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "catchsegv", + "[SLAVE_BUILD]/out/Debug/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skp", + "--images", + "[SLAVE_BUILD]/images/dm", + "--colorImages", + "[SLAVE_BUILD]/images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "build_number", + "6", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "GCE", + "os", + "Ubuntu", + "--uninterestingHashesFile", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "--writePath", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "--nogpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/legacy_skp_version.json b/infra/bots/recipes/swarm_test.expected/legacy_skp_version.json new file mode 100644 index 0000000000..a54f76f557 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/legacy_skp_version.json @@ -0,0 +1,250 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/tmp/SKP_VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "catchsegv", + "[SLAVE_BUILD]/out/Debug/dm", + "--undefok", + "--resourcePath", + "[SLAVE_BUILD]/skia/resources", + "--skps", + "[SLAVE_BUILD]/skps", + "--images", + "[SLAVE_BUILD]/skimage/dm", + "--colorImages", + "[SLAVE_BUILD]/skimage/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "build_number", + "6", + "--key", + "arch", + "x86_64", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "CPU", + "cpu_or_gpu_value", + "AVX2", + "model", + "GCE", + "os", + "Ubuntu", + "--uninterestingHashesFile", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "--writePath", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "--nogpu", + "--dummy-flags" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/missing_SKP_VERSION_device.json b/infra/bots/recipes/swarm_test.expected/missing_SKP_VERSION_device.json new file mode 100644 index 0000000000..5fbd98f897 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/missing_SKP_VERSION_device.json @@ -0,0 +1,791 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "root" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-f", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rm SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_skp/skps" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skps" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skps", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_skp/skps" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skps" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skp", + "/storage/emulated/legacy/skiabot/skia_skp/skps" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push skp" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/SKP_VERSION", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push SKP_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug", + "build_number", + "6", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.expected/missing_SK_IMAGE_VERSION_device.json b/infra/bots/recipes/swarm_test.expected/missing_SK_IMAGE_VERSION_device.json new file mode 100644 index 0000000000..901c90d276 --- /dev/null +++ b/infra/bots/recipes/swarm_test.expected/missing_SK_IMAGE_VERSION_device.json @@ -0,0 +1,791 @@ +[ + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"grouper\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "which", + "adb" + ], + "name": "which adb", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (1)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "echo", + "$EXTERNAL_STORAGE" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get EXTERNAL_STORAGE dir", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "root" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "adb root", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (2)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_kill_skia", + "--verbose" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill skia" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "stop" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "stop shell" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "starting battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat scaling_governor" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "cat cpu_freq" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skia/resources", + "/storage/emulated/legacy/skiabot/skia_resources" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push resources" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded SKP VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SKP_VERSION" + ], + "name": "write SKP_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SKP_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SKP_VERSION", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "Get downloaded skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "42", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION" + ], + "name": "write SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "cat", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "read SK_IMAGE_VERSION", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "step returned non-zero exit code: 1", + "@@@STEP_EXCEPTION@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-f", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rm SK_IMAGE_VERSION" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_images" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_images" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_images", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_images", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_images" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_images" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_push_if_needed", + "--verbose", + "[SLAVE_BUILD]/skimage", + "/storage/emulated/legacy/skiabot/skia_images" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push skimage" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/SK_IMAGE_VERSION", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/SK_IMAGE_VERSION" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push SK_IMAGE_VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "PYTHONPATH": "[SLAVE_BUILD]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[CUSTOM_[SWARM_OUT_DIR]]/dm", + "511" + ], + "name": "makedirs dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "rm", + "-r", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "rmdir skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "if", + "[", + "-e", + "/storage/emulated/legacy/skiabot/skia_dm", + "];", + "then", + "echo", + "FILE_EXISTS;", + "fi" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "exists skia_dm", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "mkdir", + "-p", + "/storage/emulated/legacy/skiabot/skia_dm" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "mkdir skia_dm" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/tmp", + "511" + ], + "name": "makedirs tmp_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[1], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt" + ], + "cwd": "[SLAVE_BUILD]/skia", + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "get uninteresting hashes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", + "@@@STEP_LOG_LINE@python.inline@import math@@@", + "@@@STEP_LOG_LINE@python.inline@import socket@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@", + "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", + "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", + "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", + "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", + "@@@STEP_LOG_LINE@python.inline@ try:@@@", + "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", + "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", + "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", + "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", + "@@@STEP_LOG_LINE@python.inline@ print e@@@", + "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise@@@", + "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", + "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "push", + "[SLAVE_BUILD]/tmp/uninteresting_hashes.txt", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "push uninteresting_hashes.txt" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/android_run_skia", + "--verbose", + "--logcat", + "-d", + "arm_v7_neon", + "-t", + "Debug", + "dm", + "--undefok", + "--resourcePath", + "/storage/emulated/legacy/skiabot/skia_resources", + "--skps", + "/storage/emulated/legacy/skiabot/skia_skp/skps", + "--images", + "/storage/emulated/legacy/skiabot/skia_images/dm", + "--colorImages", + "/storage/emulated/legacy/skiabot/skia_images/colorspace", + "--nameByHash", + "--properties", + "gitHash", + "abc123", + "master", + "client.skia", + "builder", + "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug", + "build_number", + "6", + "--key", + "arch", + "Arm7", + "compiler", + "GCC", + "configuration", + "Debug", + "cpu_or_gpu", + "GPU", + "cpu_or_gpu_value", + "Tegra3", + "model", + "Nexus7", + "os", + "Android", + "--uninterestingHashesFile", + "/storage/emulated/legacy/skiabot/skia_tmp_dir/uninteresting_hashes.txt", + "--writePath", + "/storage/emulated/legacy/skiabot/skia_dm", + "--nocpu", + "--dummy-flags" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_pull_if_needed", + "--verbose", + "/storage/emulated/legacy/skiabot/skia_dm", + "[CUSTOM_[SWARM_OUT_DIR]]/dm" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "pull skia_dm" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "shell", + "dumpsys", + "batteryproperties" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "final battery stats" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "reboot" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "reboot" + }, + { + "cmd": [ + "sleep", + "10" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for reboot" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_device" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for device (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/skia/platform_tools/android/bin/adb_wait_for_charge" + ], + "env": { + "ANDROID_HOME": "[SLAVE_BUILD]/android_sdk/android-sdk", + "ANDROID_SDK_ROOT": "[SLAVE_BUILD]/android_sdk/android-sdk", + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_ANDROID_VERBOSE_SETUP": "1", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "wait for charge (3)" + }, + { + "cmd": [ + "[SLAVE_BUILD]/android_sdk/android-sdk/platform-tools/adb", + "kill-server" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "GYP_DEFINES": "skia_arch_type=arm skia_warnings_as_errors=0", + "SKIA_OUT": "[SLAVE_BUILD]/out" + }, + "name": "kill-server" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_test.py b/infra/bots/recipes/swarm_test.py new file mode 100644 index 0000000000..a56da1ea5d --- /dev/null +++ b/infra/bots/recipes/swarm_test.py @@ -0,0 +1,344 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# Recipe module for Skia Swarming test. + + +DEPS = [ + 'recipe_engine/json', + 'recipe_engine/path', + 'recipe_engine/platform', + 'recipe_engine/properties', + 'recipe_engine/raw_io', + 'skia', +] + + +TEST_BUILDERS = { + 'client.skia': { + 'skiabot-linux-swarm-000': [ + 'Test-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Debug', + 'Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug', + 'Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug', + 'Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot', + 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug', + 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN', + 'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind', + 'Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot', + ], + }, +} + + +def RunSteps(api): + api.skia.setup() + api.skia.test_steps() + api.skia.cleanup_steps() + api.skia.check_failure() + + +def GenTests(api): + def AndroidTestData(builder, adb=None): + test_data = ( + api.step_data( + 'get EXTERNAL_STORAGE dir', + stdout=api.raw_io.output('/storage/emulated/legacy')) + + api.step_data( + 'read SKP_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data( + 'read SK_IMAGE_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data( + 'exists skia_dm', + stdout=api.raw_io.output('')) + ) + if 'GalaxyS3' not in builder: + test_data += api.step_data( + 'adb root', + stdout=api.raw_io.output('restarting adbd as root')) + if adb: + test_data += api.step_data( + 'which adb', + stdout=api.raw_io.output(adb)) + else: + test_data += api.step_data( + 'which adb', + retcode=1) + + return test_data + + for mastername, slaves in TEST_BUILDERS.iteritems(): + for slavename, builders_by_slave in slaves.iteritems(): + for builder in builders_by_slave: + test = ( + api.test(builder) + + api.properties(buildername=builder, + mastername=mastername, + slavename=slavename, + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + ) + if ('Android' in builder and + ('Test' in builder or 'Perf' in builder) and + not 'Appurify' in builder): + test += AndroidTestData(builder) + if 'Trybot' in builder: + test += api.properties(issue=500, + patchset=1, + rietveld='https://codereview.chromium.org') + if 'Win' in builder: + test += api.platform('win', 64) + + + yield test + + builder = 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug' + yield ( + api.test('failed_dm') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + api.step_data('dm', retcode=1) + ) + + builder = 'Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Debug' + yield ( + api.test('failed_get_hashes') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + AndroidTestData(builder) + + api.step_data('read SKP_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data('read SK_IMAGE_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data('get uninteresting hashes', retcode=1) + ) + + yield ( + api.test('download_and_push_skps') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + AndroidTestData(builder) + + api.step_data('read SKP_VERSION', + stdout=api.raw_io.output('2')) + + api.step_data('read SK_IMAGE_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data( + 'exists skps', + stdout=api.raw_io.output('')) + ) + + yield ( + api.test('missing_SKP_VERSION_device') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + AndroidTestData(builder) + + api.step_data('read SKP_VERSION', + retcode=1) + + api.step_data('read SK_IMAGE_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data( + 'exists skps', + stdout=api.raw_io.output('')) + ) + + yield ( + api.test('download_and_push_skimage') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + AndroidTestData(builder) + + api.step_data('read SKP_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data('read SK_IMAGE_VERSION', + stdout=api.raw_io.output('2')) + + api.step_data( + 'exists skia_images', + stdout=api.raw_io.output('')) + ) + + yield ( + api.test('missing_SK_IMAGE_VERSION_device') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + AndroidTestData(builder) + + api.step_data('read SKP_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data('read SK_IMAGE_VERSION', + retcode=1) + + api.step_data( + 'exists skia_images', + stdout=api.raw_io.output('')) + ) + + yield ( + api.test('adb_in_path') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + AndroidTestData(builder, adb='/usr/bin/adb') + + api.step_data('read SKP_VERSION', + stdout=api.raw_io.output('42')) + + api.step_data('read SK_IMAGE_VERSION', + stdout=api.raw_io.output('42')) + ) + + builder = 'Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release-Trybot' + yield ( + api.test('big_issue_number') + + api.properties(buildername=builder, + mastername='client.skia.compile', + slavename='skiabot-linux-swarm-000', + buildnumber=5, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]', + rietveld='https://codereview.chromium.org', + patchset=1, + issue=2147533002L) + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + + api.platform('win', 64) + ) + + builder = 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug' + yield ( + api.test('legacy_skimage_version') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skp', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + ) + + yield ( + api.test('legacy_skp_version') + + api.properties(buildername=builder, + mastername='client.skia', + slavename='skiabot-linux-swarm-000', + buildnumber=6, + revision='abc123', + path_config='kitchen', + swarm_out_dir='[SWARM_OUT_DIR]') + + api.path.exists( + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('skia', 'infra', 'bots', 'assets', + 'skimage', 'VERSION'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') + ) + ) diff --git a/infra/bots/recipes/swarm_trigger.expected/Build-Mac-Clang-x86_64-Release.json b/infra/bots/recipes/swarm_trigger.expected/Build-Mac-Clang-x86_64-Release.json new file mode 100644 index 0000000000..13161babe2 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Build-Mac-Clang-x86_64-Release.json @@ -0,0 +1,463 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Mac-Clang-x86_64-Release" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_clang_build=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Mac\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Mac/[dummy has/Build-Mac-Clang-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Mac", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Build-Mac-Clang-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Mac", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Mac", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Mac-Clang-x86_64-Release", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Mac", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Mac/[dummy has/Build-Mac-Clang-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Mac/[dummy has/Build-Mac-Clang-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Mac/[dummy has/Build-Mac-Clang-x86_64-Release/5\", \"tasks\": {\"compile_skia/Mac/[dummy has/Build-Mac-Clang-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Mac", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan.json b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan.json new file mode 100644 index 0000000000..0c8e0cbd0c --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan.json @@ -0,0 +1,475 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Android_Vulkan\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/android_sdk/VERSION", + "/path/to/tmp/" + ], + "name": "read android_sdk VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "--cipd-package", + "android_sdk:skia/bots/android_sdk:version:0", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Debug.json b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Debug.json new file mode 100644 index 0000000000..23f6913e51 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Debug.json @@ -0,0 +1,461 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Debug" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Debug/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Build-Ubuntu-GCC-x86_64-Debug", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-x86_64-Debug", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Debug/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Debug/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Debug/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Debug/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-RemoteRun.json b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-RemoteRun.json new file mode 100644 index 0000000000..82055b06e0 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-RemoteRun.json @@ -0,0 +1,462 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-RemoteRun" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"RemoteRun\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-RemoteRun/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Build-Ubuntu-GCC-x86_64-Release-RemoteRun", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-x86_64-Release-RemoteRun", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-RemoteRun/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-RemoteRun/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-RemoteRun/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-RemoteRun/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-Trybot.json b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-Trybot.json new file mode 100644 index 0000000000..30478ecfd5 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Build-Ubuntu-GCC-x86_64-Release-Trybot.json @@ -0,0 +1,466 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-Trybot" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-Trybot/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Build-Ubuntu-GCC-x86_64-Release-Trybot", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "rietveld:https://codereview.chromium.org/500/#ps1", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "rietveld=https://codereview.chromium.org", + "buildername=Build-Ubuntu-GCC-x86_64-Release-Trybot", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "patchset=1", + "issue=500", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-Trybot/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-Trybot/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-Trybot/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Build-Ubuntu-GCC-x86_64-Release-Trybot/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json b/infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json new file mode 100644 index 0000000000..45c82e5d12 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release-Vulkan.json @@ -0,0 +1,486 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86_64-Release-Vulkan" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Vulkan\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_vulkan=1 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/win_toolchain/VERSION", + "/path/to/tmp/" + ], + "name": "read win_toolchain VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/win_vulkan_sdk/VERSION", + "/path/to/tmp/" + ], + "name": "read win_vulkan_sdk VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Windows\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release-Vulkan/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Windows", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Build-Win-MSVC-x86_64-Release-Vulkan", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Windows", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Windows", + "--idempotent", + "--cipd-package", + "t:skia/bots/win_toolchain:version:0", + "--cipd-package", + "win_vulkan_sdk:skia/bots/win_vulkan_sdk:version:0", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Win-MSVC-x86_64-Release-Vulkan", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release-Vulkan/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release-Vulkan/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release-Vulkan/5\", \"tasks\": {\"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release-Vulkan/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release.json b/infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release.json new file mode 100644 index 0000000000..48a23bf9d3 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Build-Win-MSVC-x86_64-Release.json @@ -0,0 +1,473 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86_64-Release" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/win_toolchain/VERSION", + "/path/to/tmp/" + ], + "name": "read win_toolchain VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Windows\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Windows", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Build-Win-MSVC-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Windows", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Windows", + "--idempotent", + "--cipd-package", + "t:skia/bots/win_toolchain:version:0", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Win-MSVC-x86_64-Release", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release/5\", \"tasks\": {\"compile_skia/Windows/[dummy has/Build-Win-MSVC-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json b/infra/bots/recipes/swarm_trigger.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json new file mode 100644 index 0000000000..c70fba445d --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Housekeeper-Nightly-RecreateSKPs_Canary.json @@ -0,0 +1,458 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Housekeeper-Nightly-RecreateSKPs_Canary" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"RecreateSKPs_Canary\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"frequency\": \"Nightly\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Housekeeper\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_shared_lib=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-RecreateSKPs_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/RecreateSKPs_skia.isolated.gen.json" + ], + "name": "Write RecreateSKPs_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/RecreateSKPs_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"RecreateSKPs_skia\": \"[dummy hash for RecreateSKPs_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"RecreateSKPs_skia\": \"[dummy hash for RecreateSKPs_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "RecreateSKPs_skia/Ubuntu/[dummy has/Housekeeper-Nightly-RecreateSKPs_Canary/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Housekeeper-Nightly-RecreateSKPs_Canary", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for RecreateSKPs_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:RecreateSKPs_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:RecreateSKPs_skia on Ubuntu", + "[dummy hash for RecreateSKPs_skia]", + "--", + "--workdir", + "../../..", + "swarm_RecreateSKPs", + "buildername=Housekeeper-Nightly-RecreateSKPs_Canary", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] RecreateSKPs_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"RecreateSKPs_skia/Ubuntu/[dummy has/Housekeeper-Nightly-RecreateSKPs_Canary/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"RecreateSKPs_skia/Ubuntu/[dummy has/Housekeeper-Nightly-RecreateSKPs_Canary/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"RecreateSKPs_skia/Ubuntu/[dummy has/Housekeeper-Nightly-RecreateSKPs_Canary/5\", \"tasks\": {\"RecreateSKPs_skia/Ubuntu/[dummy has/Housekeeper-Nightly-RecreateSKPs_Canary/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "RecreateSKPs_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Housekeeper-PerCommit.json b/infra/bots/recipes/swarm_trigger.expected/Housekeeper-PerCommit.json new file mode 100644 index 0000000000..1e1d5e0dff --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Housekeeper-PerCommit.json @@ -0,0 +1,733 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Housekeeper-PerCommit" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"frequency\": \"PerCommit\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Housekeeper\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_shared_lib=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-Shared" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Shared\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_shared_lib=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Housekeeper-PerCommit/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Housekeeper-PerCommit", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-x86_64-Release-Shared", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Housekeeper-PerCommit/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Housekeeper-PerCommit/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Housekeeper-PerCommit/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Housekeeper-PerCommit/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/housekeeper_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-housekeeper_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/housekeeper_skia.isolated.gen.json" + ], + "name": "Write housekeeper_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/housekeeper_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"housekeeper_skia\": \"[dummy hash for housekeeper_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"housekeeper_skia\": \"[dummy hash for housekeeper_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-housekeeper_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-housekeeper_skia.isolated" + ], + "name": "upload new .isolated file for housekeeper_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "housekeeper_skia/Ubuntu/def456/Housekeeper-PerCommit/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Housekeeper-PerCommit", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:housekeeper_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:housekeeper_skia on Ubuntu", + "def456", + "--", + "--workdir", + "../../..", + "swarm_housekeeper", + "buildername=Housekeeper-PerCommit", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] housekeeper_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"housekeeper_skia/Ubuntu/def456/Housekeeper-PerCommit/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"housekeeper_skia/Ubuntu/def456/Housekeeper-PerCommit/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"housekeeper_skia/Ubuntu/def456/Housekeeper-PerCommit/5\", \"tasks\": {\"housekeeper_skia/Ubuntu/def456/Housekeeper-PerCommit/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "housekeeper_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Infra-PerCommit.json b/infra/bots/recipes/swarm_trigger.expected/Infra-PerCommit.json new file mode 100644 index 0000000000..d1ad75195f --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Infra-PerCommit.json @@ -0,0 +1,419 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/infra_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-infra_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/infra_skia.isolated.gen.json" + ], + "name": "Write infra_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/infra_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"infra_skia\": \"[dummy hash for infra_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"infra_skia\": \"[dummy hash for infra_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "infra_skia/Ubuntu/[dummy has/Infra-PerCommit/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Infra-PerCommit", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for infra_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:infra_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:infra_skia on Ubuntu", + "[dummy hash for infra_skia]", + "--", + "--workdir", + "../../..", + "swarm_infra", + "buildername=Infra-PerCommit", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] infra_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"infra_skia/Ubuntu/[dummy has/Infra-PerCommit/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"infra_skia/Ubuntu/[dummy has/Infra-PerCommit/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"infra_skia/Ubuntu/[dummy has/Infra-PerCommit/5\", \"tasks\": {\"infra_skia/Ubuntu/[dummy has/Infra-PerCommit/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "infra_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot.json b/infra/bots/recipes/swarm_trigger.expected/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot.json new file mode 100644 index 0000000000..dcdf88dc44 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot.json @@ -0,0 +1,884 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Perf\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": true@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-Trybot" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "rietveld:https://codereview.chromium.org/500/#ps1", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "rietveld=https://codereview.chromium.org", + "buildername=Build-Ubuntu-GCC-x86_64-Release-Trybot", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "patchset=1", + "issue=500", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/perf_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "Write perf_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia\": \"[dummy hash for perf_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"perf_skia\": \"[dummy hash for perf_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated" + ], + "name": "upload new .isolated file for perf_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "perf_skia/Ubuntu/def456/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64-avx2", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:perf_skia", + "--tag", + "os:Ubuntu", + "--tag", + "rietveld:https://codereview.chromium.org/500/#ps1", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:perf_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_perf", + "rietveld=https://codereview.chromium.org", + "buildername=Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "patchset=1", + "issue=500", + "revision=abc123" + ], + "name": "[trigger] perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"perf_skia/Ubuntu/def456/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia/Ubuntu/def456/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree perf_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"perf_skia/Ubuntu/def456/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\", \"tasks\": {\"perf_skia/Ubuntu/def456/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "name": "perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "git", + "show", + "HEAD", + "--format=%at", + "-s" + ], + "cwd": "[ROOT]/skia", + "name": "git show", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/perfdata/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/data" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree data", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/perfdata/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/data", + "511" + ], + "name": "makedirs perf_dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia/0/perfdata/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/data/nanobench_abc123.json", + "[SLAVE_BUILD]/perfdata/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/data/nanobench_abc123_1408633190.json" + ], + "name": "perf_results" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_bench_results.py", + "Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot", + "5", + "[SLAVE_BUILD]/perfdata/Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot/data", + "abc123", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "500" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload perf results" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan.json b/infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan.json new file mode 100644 index 0000000000..2ea683f61d --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan.json @@ -0,0 +1,1117 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"TegraX1\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Vulkan\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"NVIDIA_Shield\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm64 skia_vulkan=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"foster\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/android_sdk/VERSION", + "/path/to/tmp/" + ], + "name": "read android_sdk VERSION" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Android_Vulkan\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "--cipd-package", + "android_sdk:skia/bots/android_sdk:version:0", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Android\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "device_type", + "foster", + "--dimension", + "os", + "Android", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Android", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Android", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Android", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/perf_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Android\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "Write perf_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "isolate tests (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia\": \"[dummy hash for perf_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"perf_skia\": \"[dummy hash for perf_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated", + "abc123" + ], + "name": "add_isolated_input (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated" + ], + "name": "upload new .isolated file for perf_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "perf_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "device_type", + "foster", + "--dimension", + "os", + "Android", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:perf_skia", + "--tag", + "os:Android", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:perf_skia on Android", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_perf", + "buildername=Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] perf_skia on Android", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"perf_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\", \"tasks\": {\"test_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Android", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/dm" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/dm", + "[SLAVE_BUILD]/dm", + "0" + ], + "name": "dm_dir" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_dm_results.py", + "[SLAVE_BUILD]/dm", + "abc123", + "Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan", + "5", + "", + "[SLAVE_BUILD]/skia/common/py/utils" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload DM Results" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree perf_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"perf_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\", \"tasks\": {\"perf_skia/Android/def456/Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "name": "perf_skia on Android", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release.json b/infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release.json new file mode 100644 index 0000000000..abe569114a --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release.json @@ -0,0 +1,854 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"Tegra3\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"Nexus7v2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"product.board\": \"flo\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/android_sdk/VERSION", + "/path/to/tmp/" + ], + "name": "read android_sdk VERSION" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-Arm7-Release-Android" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Android\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm7\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"arm_v7_neon\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "--cipd-package", + "android_sdk:skia/bots/android_sdk:version:0", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-Arm7-Release-Android", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Android\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Android/def456/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "device_type", + "flo", + "--dimension", + "os", + "Android", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Android", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Android", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Android", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Android/def456/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Android/def456/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Android/def456/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\", \"tasks\": {\"test_skia/Android/def456/Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Android", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/dm" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/dm", + "[SLAVE_BUILD]/dm", + "0" + ], + "name": "dm_dir" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_dm_results.py", + "[SLAVE_BUILD]/dm", + "abc123", + "Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release", + "5", + "", + "[SLAVE_BUILD]/skia/common/py/utils" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload DM Results" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release.json b/infra/bots/recipes/swarm_trigger.expected/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release.json new file mode 100644 index 0000000000..a70034c8e2 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release.json @@ -0,0 +1,845 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"MacMini6.2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Mac-Clang-x86_64-Release" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_clang_build=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Mac\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Mac/[dummy has/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Mac", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Mac", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Mac", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Mac-Clang-x86_64-Release", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Mac", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Mac/[dummy has/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Mac/[dummy has/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Mac/[dummy has/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\", \"tasks\": {\"compile_skia/Mac/[dummy has/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Mac", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Mac\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Mac/def456/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Mac", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Mac", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Mac", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Mac", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Mac/def456/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Mac/def456/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Mac/def456/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\", \"tasks\": {\"test_skia/Mac/def456/Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Mac", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/dm" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/dm", + "[SLAVE_BUILD]/dm", + "0" + ], + "name": "dm_dir" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_dm_results.py", + "[SLAVE_BUILD]/dm", + "abc123", + "Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release", + "5", + "", + "[SLAVE_BUILD]/skia/common/py/utils" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload DM Results" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json new file mode 100644 index 0000000000..c1f03dc564 --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot.json @@ -0,0 +1,647 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Coverage\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Coverage\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_compile_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang-3.6\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++-3.6\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_clang_build=1 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/coverage_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Ubuntu/[dummy has/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64-avx2", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for test_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Ubuntu", + "--tag", + "rietveld:https://codereview.chromium.org/500/#ps1", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "[dummy hash for test_skia]", + "--", + "--workdir", + "../../..", + "swarm_test", + "rietveld=https://codereview.chromium.org", + "buildername=Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "patchset=1", + "issue=500", + "revision=abc123" + ], + "name": "[trigger] test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Ubuntu/[dummy has/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Ubuntu/[dummy has/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Ubuntu/[dummy has/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5\", \"tasks\": {\"test_skia/Ubuntu/[dummy has/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "git", + "show", + "HEAD", + "--format=%at", + "-s" + ], + "cwd": "[ROOT]/skia", + "name": "git show", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "cp", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/abc123.cov", + "gs://skia-infra/coverage-raw-v1/trybot/2012/05/14/12/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5/500/abc123.cov" + ], + "env": { + "AWS_CREDENTIAL_FILE": null, + "BOTO_CONFIG": null + }, + "name": "gsutil upload raw coverage data", + "~followup_annotations": [ + "@@@STEP_LINK@gsutil.upload@https://storage.cloud.google.com/skia-infra/coverage-raw-v1/trybot/2012/05/14/12/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5/500/abc123.cov@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/nanobench_abc123.json", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/nanobench_abc123_1408633190.json" + ], + "name": "nanobench JSON" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport sys\nos.remove(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/nanobench_abc123.json" + ], + "name": "old nanobench JSON", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@os.remove(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_bench_results.py", + "Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot", + "5", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0", + "abc123", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "500" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "upload nanobench coverage results" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/coverage_by_line_abc123.json", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/coverage_by_line_abc123_1408633190.json" + ], + "name": "Line-by-line coverage JSON" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport sys\nos.remove(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/coverage_by_line_abc123.json" + ], + "name": "old line-by-line coverage JSON", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@os.remove(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "cp", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/coverage_by_line_abc123_1408633190.json", + "gs://skia-infra/coverage-json-v1/trybot/2012/05/14/12/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5/500/coverage_by_line_abc123_1408633190.json" + ], + "env": { + "AWS_CREDENTIAL_FILE": null, + "BOTO_CONFIG": null + }, + "name": "gsutil upload line-by-line coverage data", + "~followup_annotations": [ + "@@@STEP_LINK@gsutil.upload@https://storage.cloud.google.com/skia-infra/coverage-json-v1/trybot/2012/05/14/12/Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot/5/500/coverage_by_line_abc123_1408633190.json@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json new file mode 100644 index 0000000000..6703954b4a --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN.json @@ -0,0 +1,1057 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"MSAN\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Debug-MSAN" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"MSAN\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-x86_64-Debug-MSAN", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64-avx2", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/perf_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "Write perf_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "isolate tests (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia\": \"[dummy hash for perf_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"perf_skia\": \"[dummy hash for perf_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated", + "abc123" + ], + "name": "add_isolated_input (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated" + ], + "name": "upload new .isolated file for perf_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64-avx2", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:perf_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:perf_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_perf", + "buildername=Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\", \"tasks\": {\"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree perf_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\", \"tasks\": {\"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "name": "perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json new file mode 100644 index 0000000000..84f6f94f8a --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug.json @@ -0,0 +1,1106 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"GCE\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Debug" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Debug\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-x86_64-Debug", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64-avx2", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/perf_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "Write perf_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "isolate tests (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia\": \"[dummy hash for perf_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"perf_skia\": \"[dummy hash for perf_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated", + "abc123" + ], + "name": "add_isolated_input (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated" + ], + "name": "upload new .isolated file for perf_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64-avx2", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:perf_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:perf_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_perf", + "buildername=Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\", \"tasks\": {\"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/dm" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/dm", + "[SLAVE_BUILD]/dm", + "0" + ], + "name": "dm_dir" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_dm_results.py", + "[SLAVE_BUILD]/dm", + "abc123", + "Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug", + "5", + "", + "[SLAVE_BUILD]/skia/common/py/utils" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload DM Results" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree perf_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\", \"tasks\": {\"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "name": "perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json new file mode 100644 index 0000000000..8949288c8e --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind.json @@ -0,0 +1,1050 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"GTX550Ti\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Valgrind\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleA\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Ubuntu-GCC-x86_64-Release-Valgrind" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"GCC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"Valgrind\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Ubuntu\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=x86_64 skia_release_optimization_level=1 skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Ubuntu", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Ubuntu-GCC-x86_64-Release-Valgrind", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\", \"tasks\": {\"compile_skia/Ubuntu/[dummy has/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "172800", + "--io-timeout", + "3600", + "--hard-timeout", + "32400", + "--dimension", + "gpu", + "10de:1244", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/perf_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Ubuntu\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "Write perf_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/perf_skia.isolated.gen.json" + ], + "name": "isolate tests (3)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia\": \"[dummy hash for perf_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"perf_skia\": \"[dummy hash for perf_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated", + "abc123" + ], + "name": "add_isolated_input (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-perf_skia.isolated" + ], + "name": "upload new .isolated file for perf_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "172800", + "--io-timeout", + "3600", + "--hard-timeout", + "32400", + "--dimension", + "gpu", + "10de:1244", + "--dimension", + "os", + "Ubuntu", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:perf_skia", + "--tag", + "os:Ubuntu", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:perf_skia on Ubuntu", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_perf", + "buildername=Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\", \"tasks\": {\"test_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree perf_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\", \"tasks\": {\"perf_skia/Ubuntu/def456/Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/perf_skia" + ], + "name": "perf_skia on Ubuntu", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release.json b/infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release.json new file mode 100644 index 0000000000..2babaf180e --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release.json @@ -0,0 +1,850 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"HD7770\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleA\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win8\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86_64-Release" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/win_toolchain/VERSION", + "/path/to/tmp/" + ], + "name": "read win_toolchain VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Windows\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Windows", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Windows", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Windows", + "--idempotent", + "--cipd-package", + "t:skia/bots/win_toolchain:version:0", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Win-MSVC-x86_64-Release", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\", \"tasks\": {\"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Windows\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Windows/def456/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "1002:683d", + "--dimension", + "os", + "Windows", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Windows", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Windows", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Windows", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Windows/def456/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Windows/def456/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Windows/def456/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\", \"tasks\": {\"test_skia/Windows/def456/Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Windows", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/dm" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/dm", + "[SLAVE_BUILD]/dm", + "0" + ], + "name": "dm_dir" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_dm_results.py", + "[SLAVE_BUILD]/dm", + "abc123", + "Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release", + "5", + "", + "[SLAVE_BUILD]/skia/common/py/utils" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload DM Results" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release.json b/infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release.json new file mode 100644 index 0000000000..865fd0101c --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release.json @@ -0,0 +1,853 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"dm\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"x86_64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"CPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"AVX2\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"ShuttleB\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win8\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/Qt5.1.0/5.1.0/msvc2012_64/ skia_arch_type=x86_64 skia_gpu=0 skia_warnings_as_errors=0 skia_win_debuggers_path=c:/DbgHelp\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Win-MSVC-x86_64-Release" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"MSVC\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Win\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"x86_64\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release_x64\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"qt_sdk=C:/Qt/4.8.5/ skia_arch_type=x86_64 skia_warnings_as_errors=1 skia_win_debuggers_path=c:/DbgHelp skia_win_ltcg=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/win_toolchain/VERSION", + "/path/to/tmp/" + ], + "name": "read win_toolchain VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Windows\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Windows", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Windows", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Windows", + "--idempotent", + "--cipd-package", + "t:skia/bots/win_toolchain:version:0", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Win-MSVC-x86_64-Release", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\", \"tasks\": {\"compile_skia/Windows/[dummy has/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Windows", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Windows-2008ServerR2-SP1\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/Windows-2008ServerR2-SP1/def456/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "cpu", + "x86-64", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Windows-2008ServerR2-SP1", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:Windows-2008ServerR2-SP1", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on Windows-2008ServerR2-SP1", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on Windows-2008ServerR2-SP1", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/Windows-2008ServerR2-SP1/def456/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/Windows-2008ServerR2-SP1/def456/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/Windows-2008ServerR2-SP1/def456/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\", \"tasks\": {\"test_skia/Windows-2008ServerR2-SP1/def456/Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on Windows-2008ServerR2-SP1", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/dm" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/dm", + "[SLAVE_BUILD]/dm", + "0" + ], + "name": "dm_dir" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_dm_results.py", + "[SLAVE_BUILD]/dm", + "abc123", + "Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release", + "5", + "", + "[SLAVE_BUILD]/skia/common/py/utils" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload DM Results" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release.json b/infra/bots/recipes/swarm_trigger.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release.json new file mode 100644 index 0000000000..b749deadcc --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.expected/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release.json @@ -0,0 +1,844 @@ +[ + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[ROOT]/skia", + "name": "git rev-parse", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-c", + "\"print 'abc123'\"" + ], + "name": "got_revision", + "~followup_annotations": [ + "@@@SET_BUILD_PROPERTY@got_revision@\"abc123\"@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "import os\nfor r, _, files in os.walk(os.getcwd()):\n for fname in files:\n f = os.path.join(r, fname)\n if os.path.isfile(f):\n if os.access(f, os.X_OK):\n os.chmod(f, 0755)\n else:\n os.chmod(f, 0644)\n" + ], + "cwd": "[ROOT]/skia", + "name": "fix filemodes", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@for r, _, files in os.walk(os.getcwd()):@@@", + "@@@STEP_LOG_LINE@python.inline@ for fname in files:@@@", + "@@@STEP_LOG_LINE@python.inline@ f = os.path.join(r, fname)@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.isfile(f):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.access(f, os.X_OK):@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0755)@@@", + "@@@STEP_LOG_LINE@python.inline@ else:@@@", + "@@@STEP_LOG_LINE@python.inline@ os.chmod(f, 0644)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[SLAVE_BUILD]/swarming.client", + "--url", + "https://chromium.googlesource.com/external/swarming.client.git" + ], + "name": "git setup (swarming_client)" + }, + { + "cmd": [ + "git", + "retry", + "fetch", + "origin", + "master" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git fetch (swarming_client)" + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git checkout (swarming_client)" + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "read revision", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@
checked out 'deadbeef'
@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "git clean (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule sync (swarming_client)" + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[SLAVE_BUILD]/swarming.client", + "name": "submodule update (swarming_client)" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "--version" + ], + "name": "swarming.py --version", + "stdout": "/path/to/tmp/", + "~followup_annotations": [ + "@@@STEP_TEXT@0.8.6@@@" + ] + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=linux*", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/linux64" + ], + "name": "download luci-go linux" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=darwin", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/mac64" + ], + "name": "download luci-go mac" + }, + { + "cmd": [ + "download_from_google_storage", + "--no_resume", + "--platform=win32", + "--no_auth", + "--bucket", + "chromium-luci", + "-d", + "[ROOT]/skia/infra/bots/tools/luci-go/win64" + ], + "name": "download luci-go win" + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/luci-go" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree luci-go", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[ROOT]/skia/infra/bots/tools/luci-go", + "[SLAVE_BUILD]/luci-go", + "0" + ], + "name": "Copy Go binary" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::gsutil]/resources/gsutil_wrapper.py", + "--", + "RECIPE_PACKAGE_REPO[depot_tools]/gsutil.py", + "----", + "help" + ], + "name": "gsutil help" + }, + { + "cmd": [ + "python", + "-u", + "[ROOT]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release" + ], + "cwd": "[ROOT]/skia", + "name": "exec buildbot_spec.py", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"iOSShell\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"arch\": \"Arm7\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu\": \"GPU\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"cpu_or_gpu_value\": \"SGX554\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"model\": \"iPad4\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"iOS\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Test\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"device_cfg\": \"iPad4,1\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=0\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/skia/tools/buildbot_spec.py", + "/path/to/tmp/json", + "Build-Mac-Clang-Arm7-Release-iOS" + ], + "cwd": "[SLAVE_BUILD]/skia", + "name": "exec buildbot_spec.py (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"build_targets\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"most\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"builder_cfg\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compiler\": \"Clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"extra_config\": \"iOS\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"is_trybot\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"os\": \"Mac\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"role\": \"Build\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"target_arch\": \"Arm7\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"configuration\": \"Release\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"dm_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_perf_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"do_test_steps\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"env\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"CC\": \"/usr/bin/clang\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"CXX\": \"/usr/bin/clang++\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"GYP_DEFINES\": \"skia_arch_type=arm skia_clang_build=1 skia_os=ios skia_warnings_as_errors=1\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"nanobench_flags\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"--dummy-flags\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_dm_results\": true, @@@", + "@@@STEP_LOG_LINE@json.output@ \"upload_perf_results\": false@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/compile_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-compile_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"Mac\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "Write compile_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/compile_skia.isolated.gen.json" + ], + "name": "isolate tests", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia\": \"[dummy hash for compile_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"compile_skia\": \"[dummy hash for compile_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "compile_skia/Mac/[dummy has/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "gpu", + "none", + "--dimension", + "os", + "Mac", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:[dummy hash for compile_skia]", + "--tag", + "master:client.skia", + "--tag", + "name:compile_skia", + "--tag", + "os:Mac", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:compile_skia on Mac", + "--idempotent", + "[dummy hash for compile_skia]", + "--", + "--workdir", + "../../..", + "swarm_compile", + "buildername=Build-Mac-Clang-Arm7-Release-iOS", + "mastername=client.skia.compile", + "buildnumber=1", + "slavename=skiabot-dummy-compile-slave", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] compile_skia on Mac", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"compile_skia/Mac/[dummy has/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"compile_skia/Mac/[dummy has/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"compile_skia/Mac/[dummy has/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\", \"tasks\": {\"compile_skia/Mac/[dummy has/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json" + ], + "name": "compile_skia on Mac", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skp/VERSION", + "/path/to/tmp/" + ], + "name": "read skp VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "[ROOT]/skia/infra/bots/assets/skimage/VERSION", + "/path/to/tmp/" + ], + "name": "read skimage VERSION" + }, + { + "cmd": [ + "python", + "-u", + "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n if os.path.exists(path):\n print \"%s exists but is not a dir\" % path\n sys.exit(1)\n os.makedirs(path, mode)\n", + "[SLAVE_BUILD]/swarming_temp_dir", + "511" + ], + "name": "makedirs swarming tmp dir (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import sys, os@@@", + "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(path):@@@", + "@@@STEP_LOG_LINE@python.inline@ print \"%s exists but is not a dir\" % path@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", + "@@@STEP_LOG_LINE@python.inline@ os.makedirs(path, mode)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n", + "{\n \"args\": [\n \"--isolate\", \n \"[ROOT]/skia/infra/bots/test_skia.isolate\", \n \"--isolated\", \n \"[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated\", \n \"--config-variable\", \n \"OS\", \n \"iOS-9.2\", \n \"--blacklist\", \n \".git\", \n \"--blacklist\", \n \"out\", \n \"--blacklist\", \n \"*.pyc\", \n \"--blacklist\", \n \".recipe_deps\", \n \"--extra-variable\", \n \"WORKDIR\", \n \"[SLAVE_BUILD]\"\n ], \n \"dir\": \"[SLAVE_BUILD]\", \n \"version\": 1\n}", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "Write test_skia.isolated.gen.json" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[build::isolate]/resources/isolate.py", + "[SLAVE_BUILD]/swarming.client", + "batcharchive", + "--dump-json", + "/path/to/tmp/json", + "--isolate-server", + "https://isolateserver.appspot.com", + "--verbose", + "[SLAVE_BUILD]/swarming_temp_dir/test_skia.isolated.gen.json" + ], + "name": "isolate tests (2)", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia\": \"[dummy hash for test_skia]\"@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@SET_BUILD_PROPERTY@swarm_hashes@{\"test_skia\": \"[dummy hash for test_skia]\"}@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport json\nimport sys\nwith open(sys.argv[1]) as f:\n isolated = json.load(f)\nif not isolated.get('includes'):\n isolated['includes'] = []\nfor h in sys.argv[2:]:\n isolated['includes'].append(h)\nwith open(sys.argv[1], 'w') as f:\n json.dump(isolated, f, sort_keys=True)\n", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated", + "abc123" + ], + "name": "add_isolated_input", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import json@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1]) as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated = json.load(f)@@@", + "@@@STEP_LOG_LINE@python.inline@if not isolated.get('includes'):@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'] = []@@@", + "@@@STEP_LOG_LINE@python.inline@for h in sys.argv[2:]:@@@", + "@@@STEP_LOG_LINE@python.inline@ isolated['includes'].append(h)@@@", + "@@@STEP_LOG_LINE@python.inline@with open(sys.argv[1], 'w') as f:@@@", + "@@@STEP_LOG_LINE@python.inline@ json.dump(isolated, f, sort_keys=True)@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/isolateserver.py", + "archive", + "--isolate-server", + "https://isolateserver.appspot.com", + "[SLAVE_BUILD]/swarming_temp_dir/skia-task-test_skia.isolated" + ], + "name": "upload new .isolated file for test_skia", + "stdout": "/path/to/tmp/" + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "trigger", + "--swarming", + "https://chromium-swarm.appspot.com", + "--isolate-server", + "https://isolateserver.appspot.com", + "--priority", + "90", + "--shards", + "1", + "--task-name", + "test_skia/iOS-9.2/def456/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5", + "--dump-json", + "/path/to/tmp/json", + "--expiration", + "72000", + "--io-timeout", + "2400", + "--hard-timeout", + "14400", + "--dimension", + "device", + "iPad4,1", + "--dimension", + "os", + "iOS-9.2", + "--dimension", + "pool", + "Skia", + "--tag", + "allow_milo:1", + "--tag", + "buildername:Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release", + "--tag", + "buildnumber:5", + "--tag", + "data:def456", + "--tag", + "master:client.skia", + "--tag", + "name:test_skia", + "--tag", + "os:iOS-9.2", + "--tag", + "slavename:skiabot-linux-swarm-000", + "--tag", + "stepname:test_skia on iOS-9.2", + "--cipd-package", + "skp:skia/bots/skp:version:0", + "--cipd-package", + "skimage:skia/bots/skimage:version:0", + "def456", + "--", + "--workdir", + "../../..", + "swarm_test", + "buildername=Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release", + "mastername=client.skia", + "buildnumber=5", + "slavename=skiabot-linux-swarm-000", + "reason=Triggered by Skia swarm_trigger Recipe", + "swarm_out_dir=${ISOLATED_OUTDIR}", + "revision=abc123" + ], + "name": "[trigger] test_skia on iOS-9.2", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"base_task_name\": \"test_skia/iOS-9.2/def456/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"tasks\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"test_skia/iOS-9.2/def456/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"shard_index\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"task_id\": \"10000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0@https://chromium-swarm.appspot.com/user/task/10000@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/10000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree test_skia", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[SLAVE_BUILD]/swarming.client/swarming.py", + "collect", + "--swarming", + "https://chromium-swarm.appspot.com", + "--decorate", + "--print-status-updates", + "--json", + "{\"base_task_name\": \"test_skia/iOS-9.2/def456/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\", \"tasks\": {\"test_skia/iOS-9.2/def456/Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release/5\": {\"shard_index\": 0, \"task_id\": \"10000\", \"view_url\": \"https://chromium-swarm.appspot.com/user/task/10000\"}}}", + "--task-summary-json", + "/path/to/tmp/json", + "--task-output-dir", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia" + ], + "name": "test_skia on iOS-9.2", + "~followup_annotations": [ + "@@@STEP_TEXT@swarming pending 71s@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"shards\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"abandoned_ts\": null, @@@", + "@@@STEP_LOG_LINE@json.output@ \"bot_id\": \"vm30\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"completed_ts\": \"2014-09-25T01:42:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"created_ts\": \"2014-09-25T01:41:00.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"durations\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 5.7, @@@", + "@@@STEP_LOG_LINE@json.output@ 31.5@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"exit_codes\": [@@@", + "@@@STEP_LOG_LINE@json.output@ 0, @@@", + "@@@STEP_LOG_LINE@json.output@ 0@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"id\": \"148aa78d7aa0000\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"internal_failure\": false, @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated_out\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"isolated\": \"abc123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"isolatedserver\": \"https://isolateserver.appspot.com\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"namespace\": \"default-gzip\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"view_url\": \"blah\"@@@", + "@@@STEP_LOG_LINE@json.output@ }, @@@", + "@@@STEP_LOG_LINE@json.output@ \"modified_ts\": \"2014-09-25 01:42:00\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"name\": \"heartbeat-canary-2014-09-25_01:41:55-os=Windows\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"outputs\": [@@@", + "@@@STEP_LOG_LINE@json.output@ \"Heart beat succeeded on win32.\\n\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"Foo\"@@@", + "@@@STEP_LOG_LINE@json.output@ ], @@@", + "@@@STEP_LOG_LINE@json.output@ \"started_ts\": \"2014-09-25T01:42:11.123\", @@@", + "@@@STEP_LOG_LINE@json.output@ \"state\": 112, @@@", + "@@@STEP_LOG_LINE@json.output@ \"try_number\": 1, @@@", + "@@@STEP_LOG_LINE@json.output@ \"user\": \"unknown\"@@@", + "@@@STEP_LOG_LINE@json.output@ }@@@", + "@@@STEP_LOG_LINE@json.output@ ]@@@", + "@@@STEP_LOG_LINE@json.output@}@@@", + "@@@STEP_LOG_END@json.output@@@", + "@@@STEP_LINK@shard #0 isolated out@blah@@@", + "@@@STEP_LINK@view steps on Milo@https://luci-milo.appspot.com/swarming/task/148aa78d7aa0000@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os, sys\nfrom common import chromium_utils # Error? See https://crbug.com/584783.\n\n\nif os.path.exists(sys.argv[1]):\n chromium_utils.RemoveDirectory(sys.argv[1])\n", + "[SLAVE_BUILD]/dm" + ], + "env": { + "PYTHONPATH": "[ROOT]/skia/infra/bots/.recipe_deps/build/scripts" + }, + "name": "rmtree dm", + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os, sys@@@", + "@@@STEP_LOG_LINE@python.inline@from common import chromium_utils # Error? See https://crbug.com/584783.@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@if os.path.exists(sys.argv[1]):@@@", + "@@@STEP_LOG_LINE@python.inline@ chromium_utils.RemoveDirectory(sys.argv[1])@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport shutil\nimport sys\nshutil.copytree(sys.argv[1], sys.argv[2], symlinks=bool(sys.argv[3]))\n", + "[SLAVE_BUILD]/swarming_temp_dir/outputs/test_skia/0/dm", + "[SLAVE_BUILD]/dm", + "0" + ], + "name": "dm_dir" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[skia::skia]/resources/upload_dm_results.py", + "[SLAVE_BUILD]/dm", + "abc123", + "Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release", + "5", + "", + "[SLAVE_BUILD]/skia/common/py/utils" + ], + "cwd": "[ROOT]/skia", + "env": { + "AWS_CREDENTIAL_FILE": "[HOME]/chromium-skia-gm.boto", + "BOTO_CONFIG": "[HOME]/chromium-skia-gm.boto" + }, + "name": "Upload DM Results" + }, + { + "name": "$result", + "recipe_result": null, + "status_code": 0 + } +] \ No newline at end of file diff --git a/infra/bots/recipes/swarm_trigger.py b/infra/bots/recipes/swarm_trigger.py new file mode 100644 index 0000000000..5bc7ca653c --- /dev/null +++ b/infra/bots/recipes/swarm_trigger.py @@ -0,0 +1,687 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# Recipe module for Skia Swarming trigger. + + +import json + + +DEPS = [ + 'build/file', + 'build/gsutil', + 'depot_tools/depot_tools', + 'depot_tools/git', + 'depot_tools/tryserver', + 'recipe_engine/path', + 'recipe_engine/properties', + 'recipe_engine/python', + 'recipe_engine/raw_io', + 'recipe_engine/step', + 'recipe_engine/time', + 'skia', + 'skia_swarming', +] + + +TEST_BUILDERS = { + 'client.skia': { + 'skiabot-linux-swarm-000': [ + 'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind', + 'Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot', + 'Build-Mac-Clang-x86_64-Release', + 'Build-Ubuntu-GCC-Arm64-Debug-Android_Vulkan', + 'Build-Ubuntu-GCC-x86_64-Debug', + 'Build-Ubuntu-GCC-x86_64-Release-RemoteRun', + 'Build-Ubuntu-GCC-x86_64-Release-Trybot', + 'Build-Win-MSVC-x86_64-Release', + 'Build-Win-MSVC-x86_64-Release-Vulkan', + 'Housekeeper-PerCommit', + 'Housekeeper-Nightly-RecreateSKPs_Canary', + 'Infra-PerCommit', + 'Perf-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Trybot', + 'Test-Android-GCC-Nexus7v2-GPU-Tegra3-Arm7-Release', + 'Test-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan', + 'Test-iOS-Clang-iPad4-GPU-SGX554-Arm7-Release', + 'Test-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release', + 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug', + 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN', + 'Test-Win8-MSVC-ShuttleA-GPU-HD7770-x86_64-Release', + 'Test-Win8-MSVC-ShuttleB-CPU-AVX2-x86_64-Release', + ], + }, +} + + +def derive_compile_bot_name(builder_name, builder_spec): + builder_cfg = builder_spec['builder_cfg'] + if builder_cfg['role'] == 'Housekeeper': + return 'Build-Ubuntu-GCC-x86_64-Release-Shared' + if builder_cfg['role'] in ('Test', 'Perf'): + os = builder_cfg['os'] + extra_config = builder_cfg.get('extra_config') + if os == 'Android': + if extra_config == 'Vulkan': + extra_config = '%s_%s' % (os, 'Vulkan') + else: + extra_config = os + os = 'Ubuntu' + elif os == 'iOS': + extra_config = os + os = 'Mac' + elif 'Win' in os: + os = 'Win' + builder_name = 'Build-%s-%s-%s-%s' % ( + os, + builder_cfg['compiler'], + builder_cfg['arch'], + builder_cfg['configuration'] + ) + if extra_config: + builder_name += '-%s' % extra_config + if builder_cfg['is_trybot']: + builder_name += '-Trybot' + return builder_name + + +def swarm_dimensions(builder_spec): + """Return a dict of keys and values to be used as Swarming bot dimensions.""" + dimensions = { + 'pool': 'Skia', + } + builder_cfg = builder_spec['builder_cfg'] + dimensions['os'] = builder_cfg.get('os', 'Ubuntu') + if 'Win' in builder_cfg.get('os', ''): + dimensions['os'] = 'Windows' + if builder_cfg['role'] in ('Test', 'Perf'): + if 'Android' in builder_cfg['os']: + # For Android, the device type is a better dimension than CPU or GPU. + dimensions['device_type'] = builder_spec['product.board'] + elif 'iOS' in builder_cfg['os']: + # For iOS, the device type is a better dimension than CPU or GPU. + dimensions['device'] = builder_spec['device_cfg'] + # TODO(borenet): Replace this hack with something better. + dimensions['os'] = 'iOS-9.2' + elif builder_cfg['cpu_or_gpu'] == 'CPU': + dimensions['gpu'] = 'none' + dimensions['cpu'] = { + 'AVX': 'x86-64', + 'AVX2': 'x86-64-avx2', + 'SSE4': 'x86-64', + }[builder_cfg['cpu_or_gpu_value']] + if ('Win' in builder_cfg['os'] and + builder_cfg['cpu_or_gpu_value'] == 'AVX2'): + # AVX2 is not correctly detected on Windows. Fall back on other + # dimensions to ensure that we correctly target machines which we know + # have AVX2 support. + dimensions['cpu'] = 'x86-64' + dimensions['os'] = 'Windows-2008ServerR2-SP1' + else: + dimensions['gpu'] = { + 'GeForce320M': '10de:08a4', + 'GT610': '10de:104a', + 'GTX550Ti': '10de:1244', + 'GTX660': '10de:11c0', + 'GTX960': '10de:1401', + 'HD4000': '8086:0a2e', + 'HD4600': '8086:0412', + 'HD7770': '1002:683d', + }[builder_cfg['cpu_or_gpu_value']] + else: + dimensions['gpu'] = 'none' + return dimensions + + +def fix_filemodes(api, path): + """Set all filemodes to 644 or 755 in the given directory path.""" + api.python.inline( + name='fix filemodes', + program='''import os +for r, _, files in os.walk(os.getcwd()): + for fname in files: + f = os.path.join(r, fname) + if os.path.isfile(f): + if os.access(f, os.X_OK): + os.chmod(f, 0755) + else: + os.chmod(f, 0644) +''', + cwd=path) + + +def trigger_task(api, task_name, builder, master, slave, buildnumber, + builder_spec, got_revision, infrabots_dir, idempotent=False, + store_output=True, extra_isolate_hashes=None, expiration=None, + hard_timeout=None, io_timeout=None, cipd_packages=None): + """Trigger the given bot to run as a Swarming task.""" + # TODO(borenet): We're using Swarming directly to run the recipe through + # recipes.py. Once it's possible to track the state of a Buildbucket build, + # we should switch to use the trigger recipe module instead. + + properties = { + 'buildername': builder, + 'mastername': master, + 'buildnumber': buildnumber, + 'reason': 'Triggered by Skia swarm_trigger Recipe', + 'revision': got_revision, + 'slavename': slave, + 'swarm_out_dir': '${ISOLATED_OUTDIR}', + } + builder_cfg = builder_spec['builder_cfg'] + if builder_cfg['is_trybot']: + properties['issue'] = str(api.properties['issue']) + properties['patchset'] = str(api.properties['patchset']) + properties['rietveld'] = api.properties['rietveld'] + + extra_args = [ + '--workdir', '../../..', + 'swarm_%s' % task_name, + ] + for k, v in properties.iteritems(): + extra_args.append('%s=%s' % (k, v)) + + isolate_base_dir = api.path['slave_build'] + dimensions = swarm_dimensions(builder_spec) + isolate_blacklist = ['.git', 'out', '*.pyc', '.recipe_deps'] + isolate_vars = { + 'WORKDIR': api.path['slave_build'], + } + + isolate_file = '%s_skia.isolate' % task_name + if 'Coverage' == builder_cfg.get('configuration'): + isolate_file = 'coverage_skia.isolate' + if 'RecreateSKPs' in builder: + isolate_file = 'compile_skia.isolate' + return api.skia_swarming.isolate_and_trigger_task( + infrabots_dir.join(isolate_file), + isolate_base_dir, + '%s_skia' % task_name, + isolate_vars, + dimensions, + isolate_blacklist=isolate_blacklist, + extra_isolate_hashes=extra_isolate_hashes, + idempotent=idempotent, + store_output=store_output, + extra_args=extra_args, + expiration=expiration, + hard_timeout=hard_timeout, + io_timeout=io_timeout, + cipd_packages=cipd_packages) + + +def checkout_steps(api): + """Run the steps to obtain a checkout of Skia.""" + # In this case, we're already running inside a checkout of Skia, so just + # report the currently-checked-out commit. + checkout_path = api.path['root'].join('skia') + got_revision = api.git( + 'rev-parse', 'HEAD', cwd=checkout_path, + stdout=api.raw_io.output(), + step_test_data=lambda: api.raw_io.test_api.stream_output('abc123\n'), + ).stdout.rstrip() + cmd = ['python', '-c', '"print \'%s\'"' % got_revision] + res = api.step('got_revision', cmd=cmd) + res.presentation.properties['got_revision'] = got_revision + api.path['checkout'] = checkout_path + fix_filemodes(api, api.path['checkout']) + return got_revision + + +def housekeeper_swarm(api, builder_spec, got_revision, infrabots_dir, + extra_isolate_hashes): + task = trigger_task( + api, + 'housekeeper', + api.properties['buildername'], + api.properties['mastername'], + api.properties['slavename'], + api.properties['buildnumber'], + builder_spec, + got_revision, + infrabots_dir, + idempotent=False, + store_output=False, + extra_isolate_hashes=extra_isolate_hashes) + return api.skia_swarming.collect_swarming_task(task) + + +def recreate_skps_swarm(api, builder_spec, got_revision, infrabots_dir, + extra_isolate_hashes): + task = trigger_task( + api, + 'RecreateSKPs', + api.properties['buildername'], + api.properties['mastername'], + api.properties['slavename'], + api.properties['buildnumber'], + builder_spec, + got_revision, + infrabots_dir, + idempotent=False, + store_output=False, + extra_isolate_hashes=extra_isolate_hashes) + return api.skia_swarming.collect_swarming_task(task) + + +def infra_swarm(api, got_revision, infrabots_dir, extra_isolate_hashes): + # Fake the builder spec. + builder_spec = { + 'builder_cfg': { + 'role': 'Infra', + 'is_trybot': api.properties['buildername'].endswith('-Trybot'), + } + } + task = trigger_task( + api, + 'infra', + api.properties['buildername'], + api.properties['mastername'], + api.properties['slavename'], + api.properties['buildnumber'], + builder_spec, + got_revision, + infrabots_dir, + idempotent=False, + store_output=False, + extra_isolate_hashes=extra_isolate_hashes) + return api.skia_swarming.collect_swarming_task(task) + + +def compile_steps_swarm(api, builder_spec, got_revision, infrabots_dir, + extra_isolate_hashes, cipd_packages): + builder_name = derive_compile_bot_name(api.properties['buildername'], + builder_spec) + compile_builder_spec = builder_spec + if builder_name != api.properties['buildername']: + compile_builder_spec = api.skia.get_builder_spec( + api.path['slave_build'].join('skia'), builder_name) + + extra_hashes = extra_isolate_hashes[:] + + # Windows bots require a toolchain. + if 'Win' in builder_name: + version_file = infrabots_dir.join('assets', 'win_toolchain', 'VERSION') + version = api.skia._readfile(version_file, + name='read win_toolchain VERSION', + test_data='0').rstrip() + version = 'version:%s' % version + pkg = ('t', 'skia/bots/win_toolchain', version) + cipd_packages.append(pkg) + + if 'Vulkan' in builder_name: + version_file = infrabots_dir.join('assets', 'win_vulkan_sdk', 'VERSION') + cipd_packages.append(cipd_pkg(api, infrabots_dir, 'win_vulkan_sdk')) + + # Fake these properties for compile tasks so that they can be de-duped. + master = 'client.skia.compile' + slave = 'skiabot-dummy-compile-slave' + buildnumber = 1 + + task = trigger_task( + api, + 'compile', + builder_name, + master, + slave, + buildnumber, + compile_builder_spec, + got_revision, + infrabots_dir, + idempotent=True, + store_output=False, + extra_isolate_hashes=extra_hashes, + cipd_packages=cipd_packages) + + # Wait for compile to finish, record the results hash. + return api.skia_swarming.collect_swarming_task_isolate_hash(task) + + +def get_timeouts(builder_cfg): + """Some builders require longer than the default timeouts. + + Returns tuple of (expiration, hard_timeout, io_timeout). If those values are + none then default timeouts should be used. + """ + expiration = None + hard_timeout = None + io_timeout = None + if 'Valgrind' in builder_cfg.get('extra_config', ''): + expiration = 2*24*60*60 + hard_timeout = 9*60*60 + io_timeout = 60*60 + return expiration, hard_timeout, io_timeout + + +def perf_steps_trigger(api, builder_spec, got_revision, infrabots_dir, + extra_hashes, cipd_packages): + """Trigger perf tests via Swarming.""" + + expiration, hard_timeout, io_timeout = get_timeouts( + builder_spec['builder_cfg']) + return trigger_task( + api, + 'perf', + api.properties['buildername'], + api.properties['mastername'], + api.properties['slavename'], + api.properties['buildnumber'], + builder_spec, + got_revision, + infrabots_dir, + extra_isolate_hashes=extra_hashes, + expiration=expiration, + hard_timeout=hard_timeout, + io_timeout=io_timeout, + cipd_packages=cipd_packages) + + +def perf_steps_collect(api, task, upload_perf_results, got_revision, + is_trybot): + """Wait for perf steps to finish and upload results.""" + # Wait for nanobench to finish, download the results. + api.skia.rmtree(task.task_output_dir) + api.skia_swarming.collect_swarming_task(task) + + # Upload the results. + if upload_perf_results: + perf_data_dir = api.path['slave_build'].join( + 'perfdata', api.properties['buildername'], 'data') + git_timestamp = api.git.get_timestamp(test_data='1408633190', + infra_step=True) + api.skia.rmtree(perf_data_dir) + api.file.makedirs('perf_dir', perf_data_dir, infra_step=True) + src_results_file = task.task_output_dir.join( + '0', 'perfdata', api.properties['buildername'], 'data', + 'nanobench_%s.json' % got_revision) + dst_results_file = perf_data_dir.join( + 'nanobench_%s_%s.json' % (got_revision, git_timestamp)) + api.file.copy('perf_results', src_results_file, dst_results_file, + infra_step=True) + + gsutil_path = api.depot_tools.gsutil_py_path + upload_args = [api.properties['buildername'], api.properties['buildnumber'], + perf_data_dir, got_revision, gsutil_path] + if is_trybot: + upload_args.append(api.properties['issue']) + api.python( + 'Upload perf results', + script=api.skia.resource('upload_bench_results.py'), + args=upload_args, + cwd=api.path['checkout'], + env=api.skia.gsutil_env('chromium-skia-gm.boto'), + infra_step=True) + + +def test_steps_trigger(api, builder_spec, got_revision, infrabots_dir, + extra_hashes, cipd_packages): + """Trigger DM via Swarming.""" + expiration, hard_timeout, io_timeout = get_timeouts( + builder_spec['builder_cfg']) + return trigger_task( + api, + 'test', + api.properties['buildername'], + api.properties['mastername'], + api.properties['slavename'], + api.properties['buildnumber'], + builder_spec, + got_revision, + infrabots_dir, + extra_isolate_hashes=extra_hashes, + expiration=expiration, + hard_timeout=hard_timeout, + io_timeout=io_timeout, + cipd_packages=cipd_packages) + + +def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot, + builder_cfg): + """Collect the test results from Swarming.""" + # Wait for tests to finish, download the results. + api.skia.rmtree(task.task_output_dir) + api.skia_swarming.collect_swarming_task(task) + + # Upload the results. + if upload_dm_results: + dm_dir = api.path['slave_build'].join('dm') + dm_src = task.task_output_dir.join('0', 'dm') + api.skia.rmtree(dm_dir) + api.file.copytree('dm_dir', dm_src, dm_dir, infra_step=True) + + # Upload them to Google Storage. + api.python( + 'Upload DM Results', + script=api.skia.resource('upload_dm_results.py'), + args=[ + dm_dir, + got_revision, + api.properties['buildername'], + api.properties['buildnumber'], + api.properties['issue'] if is_trybot else '', + api.path['slave_build'].join('skia', 'common', 'py', 'utils'), + ], + cwd=api.path['checkout'], + env=api.skia.gsutil_env('chromium-skia-gm.boto'), + infra_step=True) + + if builder_cfg['configuration'] == 'Coverage': + upload_coverage_results(api, task, got_revision, is_trybot) + + +def upload_coverage_results(api, task, got_revision, is_trybot): + results_dir = task.task_output_dir.join('0') + git_timestamp = api.git.get_timestamp(test_data='1408633190', + infra_step=True) + + # Upload raw coverage data. + cov_file_basename = '%s.cov' % got_revision + cov_file = results_dir.join(cov_file_basename) + now = api.time.utcnow() + gs_json_path = '/'.join(( + str(now.year).zfill(4), str(now.month).zfill(2), + str(now.day).zfill(2), str(now.hour).zfill(2), + api.properties['buildername'], + str(api.properties['buildnumber']))) + if is_trybot: + gs_json_path = '/'.join(('trybot', gs_json_path, + str(api.properties['issue']))) + api.gsutil.upload( + name='upload raw coverage data', + source=cov_file, + bucket='skia-infra', + dest='/'.join(('coverage-raw-v1', gs_json_path, + cov_file_basename)), + env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None}, + ) + + # Transform the nanobench_${git_hash}.json file received from swarming bot + # into the nanobench_${git_hash}_${timestamp}.json file + # upload_bench_results.py expects. + src_nano_file = results_dir.join('nanobench_%s.json' % got_revision) + dst_nano_file = results_dir.join( + 'nanobench_%s_%s.json' % (got_revision, git_timestamp)) + api.file.copy('nanobench JSON', src_nano_file, dst_nano_file, + infra_step=True) + api.file.remove('old nanobench JSON', src_nano_file) + + # Upload nanobench JSON data. + gsutil_path = api.depot_tools.gsutil_py_path + upload_args = [api.properties['buildername'], api.properties['buildnumber'], + results_dir, got_revision, gsutil_path] + if is_trybot: + upload_args.append(api.properties['issue']) + api.python( + 'upload nanobench coverage results', + script=api.skia.resource('upload_bench_results.py'), + args=upload_args, + cwd=api.path['checkout'], + env=api.skia.gsutil_env('chromium-skia-gm.boto'), + infra_step=True) + + # Transform the coverage_by_line_${git_hash}.json file received from + # swarming bot into a coverage_by_line_${git_hash}_${timestamp}.json file. + src_lbl_file = results_dir.join('coverage_by_line_%s.json' % got_revision) + dst_lbl_file_basename = 'coverage_by_line_%s_%s.json' % ( + got_revision, git_timestamp) + dst_lbl_file = results_dir.join(dst_lbl_file_basename) + api.file.copy('Line-by-line coverage JSON', src_lbl_file, dst_lbl_file, + infra_step=True) + api.file.remove('old line-by-line coverage JSON', src_lbl_file) + + # Upload line-by-line coverage data. + api.gsutil.upload( + name='upload line-by-line coverage data', + source=dst_lbl_file, + bucket='skia-infra', + dest='/'.join(('coverage-json-v1', gs_json_path, + dst_lbl_file_basename)), + env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None}, + ) + + +def cipd_pkg(api, infrabots_dir, asset_name): + """Find and return the CIPD package info for the given asset.""" + version_file = infrabots_dir.join('assets', asset_name, 'VERSION') + version = api.skia._readfile(version_file, + name='read %s VERSION' % asset_name, + test_data='0').rstrip() + version = 'version:%s' % version + return (asset_name, 'skia/bots/%s' % asset_name, version) + + +def RunSteps(api): + got_revision = checkout_steps(api) + infrabots_dir = api.path['checkout'].join('infra', 'bots') + api.skia_swarming.setup( + infrabots_dir.join('tools', 'luci-go'), + swarming_rev='') + + # Run gsutil.py to ensure that it's installed. + api.gsutil(['help']) + + extra_hashes = [] + + # Get ready to compile. + compile_cipd_deps = [] + extra_compile_hashes = [] + + infrabots_dir = api.path['checkout'].join('infra', 'bots') + if 'Infra' in api.properties['buildername']: + return infra_swarm(api, got_revision, infrabots_dir, extra_hashes) + + builder_spec = api.skia.get_builder_spec(api.path['checkout'], + api.properties['buildername']) + builder_cfg = builder_spec['builder_cfg'] + + if 'RecreateSKPs' in api.properties['buildername']: + recreate_skps_swarm(api, builder_spec, got_revision, infrabots_dir, + extra_hashes) + return + + # Android bots require an SDK. + if 'Android' in api.properties['buildername']: + compile_cipd_deps.append(cipd_pkg(api, infrabots_dir, 'android_sdk')) + + # Compile. + do_compile_steps = builder_spec.get('do_compile_steps', True) + if do_compile_steps: + extra_hashes.append(compile_steps_swarm( + api, builder_spec, got_revision, infrabots_dir, extra_compile_hashes, + cipd_packages=compile_cipd_deps)) + + if builder_cfg['role'] == 'Housekeeper': + housekeeper_swarm(api, builder_spec, got_revision, infrabots_dir, + extra_hashes) + return + + # Get ready to test/perf. + + # CIPD packages needed by test/perf. + cipd_packages = [] + + do_test_steps = builder_spec['do_test_steps'] + do_perf_steps = builder_spec['do_perf_steps'] + + if not (do_test_steps or do_perf_steps): + return + + # SKPs, SkImages. + cipd_packages.append(cipd_pkg(api, infrabots_dir, 'skp')) + cipd_packages.append(cipd_pkg(api, infrabots_dir, 'skimage')) + + # Trigger test and perf tasks. + test_task = None + perf_task = None + if do_test_steps: + test_task = test_steps_trigger(api, builder_spec, got_revision, + infrabots_dir, extra_hashes, cipd_packages) + if do_perf_steps: + perf_task = perf_steps_trigger(api, builder_spec, got_revision, + infrabots_dir, extra_hashes, cipd_packages) + is_trybot = builder_cfg['is_trybot'] + if test_task: + test_steps_collect(api, test_task, builder_spec['upload_dm_results'], + got_revision, is_trybot, builder_cfg) + if perf_task: + perf_steps_collect(api, perf_task, builder_spec['upload_perf_results'], + got_revision, is_trybot) + + +def test_for_bot(api, builder, mastername, slavename, testname=None): + """Generate a test for the given bot.""" + testname = testname or builder + test = ( + api.test(testname) + + api.properties(buildername=builder, + mastername=mastername, + slavename=slavename, + buildnumber=5, + path_config='kitchen', + revision='abc123') + ) + paths = [ + api.path['slave_build'].join('skia'), + api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt'), + ] + if 'Trybot' in builder: + test += api.properties(issue=500, + patchset=1, + rietveld='https://codereview.chromium.org') + if 'Android' in builder: + paths.append(api.path['slave_build'].join( + 'skia', 'infra', 'bots', 'assets', 'android_sdk', 'VERSION')) + if 'Test' in builder and 'Coverage' not in builder: + test += api.step_data( + 'upload new .isolated file for test_skia', + stdout=api.raw_io.output('def456 XYZ.isolated')) + if ('Test' in builder and 'Debug' in builder) or 'Perf' in builder or ( + 'Valgrind' in builder and 'Test' in builder): + test += api.step_data( + 'upload new .isolated file for perf_skia', + stdout=api.raw_io.output('def456 XYZ.isolated')) + if 'Housekeeper' in builder and 'RecreateSKPs' not in builder: + test += api.step_data( + 'upload new .isolated file for housekeeper_skia', + stdout=api.raw_io.output('def456 XYZ.isolated')) + if 'Win' in builder: + paths.append(api.path['slave_build'].join( + 'skia', 'infra', 'bots', 'assets', 'win_toolchain', 'VERSION')) + paths.append(api.path['slave_build'].join( + 'skia', 'infra', 'bots', 'assets', 'win_vulkan_sdk', 'VERSION')) + paths.append(api.path['slave_build'].join( + 'skia', 'infra', 'bots', 'assets', 'skimage', 'VERSION')) + paths.append(api.path['slave_build'].join( + 'skia', 'infra', 'bots', 'assets', 'skp', 'VERSION')) + + test += api.path.exists(*paths) + + return test + + +def GenTests(api): + for mastername, slaves in TEST_BUILDERS.iteritems(): + for slavename, builders_by_slave in slaves.iteritems(): + for builder in builders_by_slave: + yield test_for_bot(api, builder, mastername, slavename) diff --git a/infra/bots/swarm_recipe.isolate b/infra/bots/swarm_recipe.isolate new file mode 100644 index 0000000000..8a6803ff03 --- /dev/null +++ b/infra/bots/swarm_recipe.isolate @@ -0,0 +1,13 @@ +{ + 'includes': [ + 'infrabots.isolate', + ], + 'variables': { + 'command': [ + 'python', 'recipes.py', 'run', + ], + 'files': [ + '../config/recipes.cfg', + ], + }, +} diff --git a/infra/bots/test_skia.isolate b/infra/bots/test_skia.isolate index e43e843938..b220aa5964 100644 --- a/infra/bots/test_skia.isolate +++ b/infra/bots/test_skia.isolate @@ -1,9 +1,9 @@ { 'includes': [ 'android_bin.isolate', - 'infrabots.isolate', 'ios_bin.isolate', 'resources.isolate', + 'swarm_recipe.isolate', ], 'variables': { 'files': [ diff --git a/infra/bots/upload_skps.py b/infra/bots/upload_skps.py new file mode 100644 index 0000000000..8d76b801dc --- /dev/null +++ b/infra/bots/upload_skps.py @@ -0,0 +1,59 @@ +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Create a CL to update the SKP version.""" + + +import argparse +import os +import subprocess +import sys + +sys.path.insert(0, os.path.join(os.getcwd(), 'common')) +# pylint:disable=F0401 +from py.utils import git_utils + + + +CHROMIUM_SKIA = 'https://chromium.googlesource.com/skia.git' +COMMIT_MSG = '''Update SKP version + +Automatic commit by the RecreateSKPs bot. + +TBR= +NO_MERGE_BUILDS +''' +SKIA_COMMITTER_EMAIL = 'skia.buildbots@gmail.com' +SKIA_COMMITTER_NAME = 'skia.buildbots' +SKIA_REPO = 'https://skia.googlesource.com/skia.git' + + +def main(target_dir): + subprocess.check_call(['git', 'config', '--local', 'user.name', + SKIA_COMMITTER_NAME]) + subprocess.check_call(['git', 'config', '--local', 'user.email', + SKIA_COMMITTER_EMAIL]) + if CHROMIUM_SKIA in subprocess.check_output(['git', 'remote', '-v']): + subprocess.check_call(['git', 'remote', 'set-url', 'origin', SKIA_REPO, + CHROMIUM_SKIA]) + + # Download CIPD. + cipd_sha1 = os.path.join(os.getcwd(), 'infra', 'bots', 'tools', 'luci-go', + 'linux64', 'cipd.sha1') + subprocess.check_call(['download_from_google_storage', '-s', cipd_sha1, + '--bucket', 'chromium-luci']) + + with git_utils.GitBranch(branch_name='update_skp_version', + commit_msg=COMMIT_MSG, + commit_queue=True): + upload_script = os.path.join( + os.getcwd(), 'infra', 'bots', 'assets', 'skp', 'upload.py') + subprocess.check_call(['python', upload_script, '-t', target_dir]) + + +if '__main__' == __name__: + parser = argparse.ArgumentParser() + parser.add_argument("--target_dir") + args = parser.parse_args() + main(args.target_dir) diff --git a/infra/config/recipes.cfg b/infra/config/recipes.cfg new file mode 100644 index 0000000000..26a6e7ac1d --- /dev/null +++ b/infra/config/recipes.cfg @@ -0,0 +1,21 @@ +api_version: 1 +project_id: "skia" +recipes_path: "infra/bots" +deps { + project_id: "depot_tools" + url: "https://chromium.googlesource.com/chromium/tools/depot_tools.git" + branch: "master" + revision: "6da50398be9a06bbbd9640f30b2c53f96544d19b" +} +deps { + project_id: "recipe_engine" + url: "https://chromium.googlesource.com/external/github.com/luci/recipes-py.git" + branch: "master" + revision: "ece774fd870a6b883cdd0f541a686ec3ca581613" +} +deps { + project_id: "build" + url: "https://chromium.googlesource.com/chromium/tools/build.git" + branch: "master" + revision: "3be6c66ee8dd0a8af36b94f30bf3890e23baee2a" +} -- cgit v1.2.3