Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Unified Diff: infra/bots/gen_buildbot_specs.py

Issue 2215803002: Move builder_spec, [dm|nanobench]_flags, builder_name_schema to recipes (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add missing blacklist Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | infra/bots/infrabots.isolate » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: infra/bots/gen_buildbot_specs.py
diff --git a/infra/bots/gen_buildbot_specs.py b/infra/bots/gen_buildbot_specs.py
deleted file mode 100755
index 6a2a91a62399be63259937748c36d3cba0356349..0000000000000000000000000000000000000000
--- a/infra/bots/gen_buildbot_specs.py
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/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', 'core', '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()
« no previous file with comments | « no previous file | infra/bots/infrabots.isolate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698