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

Side by Side Diff: bin/cbuildbot.py

Issue 5344002: Update cbuildbot.py and prebuilt.py to deduplicate preflight prebuilts. (Closed) Base URL: None@preflight_upload
Patch Set: Reset against cros/master Created 10 years 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 | « no previous file | bin/cbuildbot_unittest.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/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """CBuildbot is wrapper around the build process used by the pre-flight queue""" 7 """CBuildbot is wrapper around the build process used by the pre-flight queue"""
8 8
9 import errno 9 import errno
10 import heapq 10 import heapq
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 """Wrapper around make_chroot.""" 310 """Wrapper around make_chroot."""
311 cwd = os.path.join(buildroot, 'src', 'scripts') 311 cwd = os.path.join(buildroot, 'src', 'scripts')
312 RunCommand(['./make_chroot', '--fast'], cwd=cwd) 312 RunCommand(['./make_chroot', '--fast'], cwd=cwd)
313 313
314 314
315 def _GetPortageEnvVar(buildroot, board, envvar): 315 def _GetPortageEnvVar(buildroot, board, envvar):
316 """Get a portage environment variable for the specified board, if any. 316 """Get a portage environment variable for the specified board, if any.
317 317
318 buildroot: The root directory where the build occurs. Must be an absolute 318 buildroot: The root directory where the build occurs. Must be an absolute
319 path. 319 path.
320 board: Board type that was built on this machine. E.g. x86-generic. 320 board: Board type that was built on this machine. E.g. x86-generic. If this
321 envvar: The environment variable to get. E.g. "PORTAGE_BINHOST". 321 is None, get the env var from the host.
322 envvar: The environment variable to get. E.g. 'PORTAGE_BINHOST'.
322 323
323 Returns: 324 Returns:
324 The value of the environment variable, as a string. If no such variable 325 The value of the environment variable, as a string. If no such variable
325 can be found, return the empty string. 326 can be found, return the empty string.
326 """ 327 """
327 cwd = os.path.join(buildroot, 'src', 'scripts') 328 cwd = os.path.join(buildroot, 'src', 'scripts')
328 binhost = RunCommand(['portageq-%s' % board, 'envvar', envvar], 329 portageq = 'portageq'
329 cwd=cwd, redirect_stdout=True, enter_chroot=True, 330 if board:
330 error_ok=True) 331 portageq += '-%s' % board
332 binhost = RunCommand([portageq, 'envvar', envvar], cwd=cwd,
333 redirect_stdout=True, enter_chroot=True, error_ok=True)
331 return binhost.rstrip('\n') 334 return binhost.rstrip('\n')
332 335
333 336
334 def _SetupBoard(buildroot, board='x86-generic'): 337 def _SetupBoard(buildroot, board='x86-generic'):
335 """Wrapper around setup_board.""" 338 """Wrapper around setup_board."""
336 cwd = os.path.join(buildroot, 'src', 'scripts') 339 cwd = os.path.join(buildroot, 'src', 'scripts')
337 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board], 340 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board],
338 cwd=cwd, enter_chroot=True) 341 cwd=cwd, enter_chroot=True)
339 342
340 343
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 paths = [private_overlay] 529 paths = [private_overlay]
527 elif overlays == 'public': 530 elif overlays == 'public':
528 paths = [public_overlay] 531 paths = [public_overlay]
529 elif overlays == 'both': 532 elif overlays == 'both':
530 paths = [public_overlay, private_overlay] 533 paths = [public_overlay, private_overlay]
531 else: 534 else:
532 Die('Incorrect overlay configuration: %s' % overlays) 535 Die('Incorrect overlay configuration: %s' % overlays)
533 return paths 536 return paths
534 537
535 538
536 def _UploadPrebuilts(buildroot, board, overlay_config): 539 def _UploadPrebuilts(buildroot, board, overlay_config, binhosts):
537 """Upload prebuilts. 540 """Upload prebuilts.
538 541
539 Args: 542 Args:
540 buildroot: The root directory where the build occurs. 543 buildroot: The root directory where the build occurs.
541 board: Board type that was built on this machine 544 board: Board type that was built on this machine
542 overlay_config: A string describing which overlays you want. 545 overlay_config: A string describing which overlays you want.
543 'private': Just the private overlay. 546 'private': Just the private overlay.
544 'public': Just the public overlay. 547 'public': Just the public overlay.
545 'both': Both the public and private overlays. 548 'both': Both the public and private overlays.
549 binhosts: The URLs of the current binhosts. Binaries that are already
550 present will not be uploaded twice. Empty URLs will be ignored.
546 """ 551 """
547 552
548 cwd = os.path.join(buildroot, 'src', 'scripts') 553 cwd = os.path.join(buildroot, 'src', 'scripts')
549 cmd = [os.path.join(cwd, 'prebuilt.py'), 554 cmd = [os.path.join(cwd, 'prebuilt.py'),
550 '--sync-binhost-conf', 555 '--sync-binhost-conf',
551 '--build-path', buildroot, 556 '--build-path', buildroot,
552 '--board', board, 557 '--board', board,
553 '--prepend-version', 'preflight', 558 '--prepend-version', 'preflight',
554 '--key', _PREFLIGHT_BINHOST] 559 '--key', _PREFLIGHT_BINHOST]
560 for binhost in binhosts:
561 if binhost:
562 cmd.extend(['--previous-binhost-url', binhost])
555 if overlay_config == 'public': 563 if overlay_config == 'public':
556 cmd.extend(['--upload', 'gs://chromeos-prebuilt']) 564 cmd.extend(['--upload', 'gs://chromeos-prebuilt'])
557 else: 565 else:
558 assert overlay_config in ('private', 'both') 566 assert overlay_config in ('private', 'both')
559 cmd.extend(['--upload', 'chromeos-images:/var/www/prebuilt/', 567 cmd.extend(['--upload', 'chromeos-images:/var/www/prebuilt/',
560 '--binhost-base-url', 'http://chromeos-prebuilt']) 568 '--binhost-base-url', 'http://chromeos-prebuilt'])
561 569
562 RunCommand(cmd, cwd=cwd) 570 RunCommand(cmd, cwd=cwd)
563 571
564 572
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 buildconfig = _GetConfig(args[-1]) 618 buildconfig = _GetConfig(args[-1])
611 else: 619 else:
612 Warning('Missing configuration description') 620 Warning('Missing configuration description')
613 parser.print_usage() 621 parser.print_usage()
614 sys.exit(1) 622 sys.exit(1)
615 623
616 try: 624 try:
617 # Calculate list of overlay directories. 625 # Calculate list of overlay directories.
618 overlays = _ResolveOverlays(buildroot, buildconfig['overlays']) 626 overlays = _ResolveOverlays(buildroot, buildconfig['overlays'])
619 board = buildconfig['board'] 627 board = buildconfig['board']
628 old_binhost = None
620 629
621 _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, overlays) 630 _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, overlays)
622 chroot_path = os.path.join(buildroot, 'chroot') 631 chroot_path = os.path.join(buildroot, 'chroot')
623 boardpath = os.path.join(chroot_path, 'build', board) 632 boardpath = os.path.join(chroot_path, 'build', board)
624 if options.sync: 633 if options.sync:
625 if options.clobber or not os.path.isdir(buildroot): 634 if options.clobber or not os.path.isdir(buildroot):
626 _FullCheckout(buildroot, tracking_branch, url=options.url) 635 _FullCheckout(buildroot, tracking_branch, url=options.url)
627 else: 636 else:
628 old_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) 637 old_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST)
629 _IncrementalCheckout(buildroot) 638 _IncrementalCheckout(buildroot)
630 new_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) 639
631 if old_binhost != new_binhost: 640 new_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST)
632 RunCommand(['sudo', 'rm', '-rf', boardpath]) 641 if old_binhost and old_binhost != new_binhost:
642 RunCommand(['sudo', 'rm', '-rf', boardpath])
633 643
634 # Check that all overlays can be found. 644 # Check that all overlays can be found.
635 for path in overlays: 645 for path in overlays:
636 assert ':' not in path, 'Overlay must not contain colons: %s' % path 646 assert ':' not in path, 'Overlay must not contain colons: %s' % path
637 if not os.path.isdir(path): 647 if not os.path.isdir(path):
638 Die('Missing overlay: %s' % path) 648 Die('Missing overlay: %s' % path)
639 649
640 if not os.path.isdir(chroot_path): 650 if not os.path.isdir(chroot_path):
641 _MakeChroot(buildroot) 651 _MakeChroot(buildroot)
642 652
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 test_results_dir=test_results_dir, 687 test_results_dir=test_results_dir,
678 gsutil=options.gsutil, 688 gsutil=options.gsutil,
679 archive_dir=archive_full_path, 689 archive_dir=archive_full_path,
680 acl=options.acl) 690 acl=options.acl)
681 691
682 if buildconfig['uprev']: 692 if buildconfig['uprev']:
683 # Don't push changes for developers. 693 # Don't push changes for developers.
684 if buildconfig['master']: 694 if buildconfig['master']:
685 # Master bot needs to check if the other slaves completed. 695 # Master bot needs to check if the other slaves completed.
686 if cbuildbot_comm.HaveSlavesCompleted(config): 696 if cbuildbot_comm.HaveSlavesCompleted(config):
687 _UploadPrebuilts(buildroot, board, buildconfig['overlays']) 697 _UploadPrebuilts(buildroot, board, buildconfig['overlays'],
698 [new_binhost])
688 _UprevPush(buildroot, tracking_branch, buildconfig['board'], 699 _UprevPush(buildroot, tracking_branch, buildconfig['board'],
689 overlays, options.debug) 700 overlays, options.debug)
690 else: 701 else:
691 Die('CBUILDBOT - One of the slaves has failed!!!') 702 Die('CBUILDBOT - One of the slaves has failed!!!')
692 703
693 else: 704 else:
694 # Publish my status to the master if its expecting it. 705 # Publish my status to the master if its expecting it.
695 if buildconfig['important'] and not options.debug: 706 if buildconfig['important'] and not options.debug:
696 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE) 707 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE)
697 708
698 except: 709 except:
699 # Send failure to master bot. 710 # Send failure to master bot.
700 if not buildconfig['master'] and buildconfig['important']: 711 if not buildconfig['master'] and buildconfig['important']:
701 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED) 712 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED)
702 713
703 raise 714 raise
704 715
705 716
706 if __name__ == '__main__': 717 if __name__ == '__main__':
707 main() 718 main()
OLDNEW
« no previous file with comments | « no previous file | bin/cbuildbot_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698