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

Side by Side Diff: recipes.py

Issue 1997023002: recipe engine: add remote_run command (Closed) Base URL: https://github.com/luci/recipes-py.git@master
Patch Set: trybots Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « recipe_engine/unittests/fetch_test.py ('k') | unittests/remote_run_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2015 The Chromium Authors. All rights reserved. 2 # Copyright 2015 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Tool to interact with recipe repositories. 6 """Tool to interact with recipe repositories.
7 7
8 This tool operates on the nearest ancestor directory containing an 8 This tool operates on the nearest ancestor directory containing an
9 infra/config/recipes.cfg. 9 infra/config/recipes.cfg.
10 """ 10 """
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 properties, stream_engine, 140 properties, stream_engine,
141 step_runner.SubprocessStepRunner(stream_engine), 141 step_runner.SubprocessStepRunner(stream_engine),
142 universe=universe) 142 universe=universe)
143 143
144 finally: 144 finally:
145 os.chdir(old_cwd) 145 os.chdir(old_cwd)
146 146
147 return handle_recipe_return(ret, args.output_result_json, stream_engine) 147 return handle_recipe_return(ret, args.output_result_json, stream_engine)
148 148
149 149
150 def remote_run(args):
151 from recipe_engine import remote_run
152
153 return remote_run.main(args)
154
155
150 def autoroll(args): 156 def autoroll(args):
151 from recipe_engine import autoroll 157 from recipe_engine import autoroll
152 158
153 repo_root, config_file = get_package_config(args) 159 repo_root, config_file = get_package_config(args)
154 160
155 return autoroll.main(args, repo_root, config_file) 161 return autoroll.main(args, repo_root, config_file)
156 162
157 163
158 class ProjectOverrideAction(argparse.Action): 164 class ProjectOverrideAction(argparse.Action):
159 def __call__(self, parser, namespace, values, option_string=None): 165 def __call__(self, parser, namespace, values, option_string=None):
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 help='The file to write the JSON serialized returned value \ 286 help='The file to write the JSON serialized returned value \
281 of the recipe to') 287 of the recipe to')
282 run_p.add_argument( 288 run_p.add_argument(
283 'recipe', 289 'recipe',
284 help='The recipe to execute') 290 help='The recipe to execute')
285 run_p.add_argument( 291 run_p.add_argument(
286 'props', nargs=argparse.REMAINDER, 292 'props', nargs=argparse.REMAINDER,
287 help='A list of property pairs; e.g. mastername=chromium.linux ' 293 help='A list of property pairs; e.g. mastername=chromium.linux '
288 'issue=12345') 294 'issue=12345')
289 295
296 remote_run_p = subp.add_parser(
297 'remote_run',
298 description='Run a recipe from specified repo and revision')
299 remote_run_p.set_defaults(command='remote_run')
300 remote_run_p.add_argument(
301 '--repository', required=True,
302 help='URL of a git repository to fetch')
303 remote_run_p.add_argument(
304 '--revision', default='FETCH_HEAD',
305 help='Git commit hash to check out')
306 remote_run_p.add_argument(
307 '--workdir',
308 help='The working directory of repo checkout')
309 remote_run_p.add_argument(
310 'run_args', nargs='*',
311 help='Arguments to pass to fetched repo\'s recipes.py run')
312
290 autoroll_p = subp.add_parser( 313 autoroll_p = subp.add_parser(
291 'autoroll', 314 'autoroll',
292 help='Roll dependencies of a recipe package forward (implies fetch)') 315 help='Roll dependencies of a recipe package forward (implies fetch)')
293 autoroll_p.set_defaults(command='autoroll') 316 autoroll_p.set_defaults(command='autoroll')
294 autoroll_p.add_argument( 317 autoroll_p.add_argument(
295 '--output-json', 318 '--output-json',
296 help='A json file to output information about the roll to.') 319 help='A json file to output information about the roll to.')
297 320
298 depgraph_p = subp.add_parser( 321 depgraph_p = subp.add_parser(
299 'depgraph', 322 'depgraph',
(...skipping 28 matching lines...) Expand all
328 info_p.set_defaults(command='info') 351 info_p.set_defaults(command='info')
329 info_p.add_argument( 352 info_p.add_argument(
330 '--recipes-dir', action='store_true', 353 '--recipes-dir', action='store_true',
331 help='Get the subpath where the recipes live relative to repository root') 354 help='Get the subpath where the recipes live relative to repository root')
332 355
333 args = parser.parse_args() 356 args = parser.parse_args()
334 357
335 if args.verbose: 358 if args.verbose:
336 logging.getLogger().setLevel(logging.INFO) 359 logging.getLogger().setLevel(logging.INFO)
337 360
361 # Commands which do not require config_file, package_deps, and other objects
362 # initialized later.
363 if args.command == 'remote_run':
364 return remote_run(args)
365
338 repo_root, config_file = get_package_config(args) 366 repo_root, config_file = get_package_config(args)
339 367
340 try: 368 try:
341 # TODO(phajdan.jr): gracefully handle inconsistent deps when rolling. 369 # TODO(phajdan.jr): gracefully handle inconsistent deps when rolling.
342 # This fails if the starting point does not have consistent dependency 370 # This fails if the starting point does not have consistent dependency
343 # graph. When performing an automated roll, it'd make sense to attempt 371 # graph. When performing an automated roll, it'd make sense to attempt
344 # to automatically find a consistent state, rather than bailing out. 372 # to automatically find a consistent state, rather than bailing out.
345 # Especially that only some subcommands refer to package_deps. 373 # Especially that only some subcommands refer to package_deps.
346 package_deps = package.PackageDeps.create( 374 package_deps = package.PackageDeps.create(
347 repo_root, config_file, allow_fetch=not args.no_fetch, 375 repo_root, config_file, allow_fetch=not args.no_fetch,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 ret = main() 422 ret = main()
395 if not isinstance(ret, int): 423 if not isinstance(ret, int):
396 if ret is None: 424 if ret is None:
397 ret = 0 425 ret = 0
398 else: 426 else:
399 print >> sys.stderr, ret 427 print >> sys.stderr, ret
400 ret = 1 428 ret = 1
401 sys.stdout.flush() 429 sys.stdout.flush()
402 sys.stderr.flush() 430 sys.stderr.flush()
403 os._exit(ret) 431 os._exit(ret)
OLDNEW
« no previous file with comments | « recipe_engine/unittests/fetch_test.py ('k') | unittests/remote_run_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698