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

Side by Side Diff: chrome/test/chromedriver/run_buildbot_steps.py

Issue 474013006: [chromedriver] Update run_buildbot_steps.py to work with git hashes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 3 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 | « no previous file | no next file » | 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 (c) 2013 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2013 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 """Runs all the buildbot steps for ChromeDriver except for update/compile.""" 6 """Runs all the buildbot steps for ChromeDriver except for update/compile."""
7 7
8 import bisect 8 import bisect
9 import csv 9 import csv
10 import datetime 10 import datetime
(...skipping 13 matching lines...) Expand all
24 _THIS_DIR = os.path.abspath(os.path.dirname(__file__)) 24 _THIS_DIR = os.path.abspath(os.path.dirname(__file__))
25 GS_CHROMEDRIVER_BUCKET = 'gs://chromedriver' 25 GS_CHROMEDRIVER_BUCKET = 'gs://chromedriver'
26 GS_CHROMEDRIVER_DATA_BUCKET = 'gs://chromedriver-data' 26 GS_CHROMEDRIVER_DATA_BUCKET = 'gs://chromedriver-data'
27 GS_CHROMEDRIVER_RELEASE_URL = 'http://chromedriver.storage.googleapis.com' 27 GS_CHROMEDRIVER_RELEASE_URL = 'http://chromedriver.storage.googleapis.com'
28 GS_CONTINUOUS_URL = GS_CHROMEDRIVER_DATA_BUCKET + '/continuous' 28 GS_CONTINUOUS_URL = GS_CHROMEDRIVER_DATA_BUCKET + '/continuous'
29 GS_PREBUILTS_URL = GS_CHROMEDRIVER_DATA_BUCKET + '/prebuilts' 29 GS_PREBUILTS_URL = GS_CHROMEDRIVER_DATA_BUCKET + '/prebuilts'
30 GS_SERVER_LOGS_URL = GS_CHROMEDRIVER_DATA_BUCKET + '/server_logs' 30 GS_SERVER_LOGS_URL = GS_CHROMEDRIVER_DATA_BUCKET + '/server_logs'
31 SERVER_LOGS_LINK = ( 31 SERVER_LOGS_LINK = (
32 'http://chromedriver-data.storage.googleapis.com/server_logs') 32 'http://chromedriver-data.storage.googleapis.com/server_logs')
33 TEST_LOG_FORMAT = '%s_log.json' 33 TEST_LOG_FORMAT = '%s_log.json'
34 GS_GITHASH_TO_SVN_URL = ( 34 GS_GIT_LOG_URL = (
35 'https://chromium.googlesource.com/chromium/src/+/%s?format=json') 35 'https://chromium.googlesource.com/chromium/src/+/%s?format=json')
36 GS_SEARCH_PATTERN = ( 36 GS_SEARCH_PATTERN = (
37 r'.*git-svn-id: svn://svn.chromium.org/chrome/trunk/src@(\d+) ') 37 r'Cr-Commit-Position: refs/heads/master@{#(\d+)}')
38 CR_REV_URL = 'https://cr-rev.appspot.com/_ah/api/crrev/v1/redirect/%s'
38 39
39 SCRIPT_DIR = os.path.join(_THIS_DIR, os.pardir, os.pardir, os.pardir, os.pardir, 40 SCRIPT_DIR = os.path.join(_THIS_DIR, os.pardir, os.pardir, os.pardir, os.pardir,
40 os.pardir, os.pardir, os.pardir, 'scripts') 41 os.pardir, os.pardir, os.pardir, 'scripts')
41 SITE_CONFIG_DIR = os.path.join(_THIS_DIR, os.pardir, os.pardir, os.pardir, 42 SITE_CONFIG_DIR = os.path.join(_THIS_DIR, os.pardir, os.pardir, os.pardir,
42 os.pardir, os.pardir, os.pardir, os.pardir, 43 os.pardir, os.pardir, os.pardir, os.pardir,
43 'site_config') 44 'site_config')
44 sys.path.append(SCRIPT_DIR) 45 sys.path.append(SCRIPT_DIR)
45 sys.path.append(SITE_CONFIG_DIR) 46 sys.path.append(SITE_CONFIG_DIR)
46 47
47 import archive 48 import archive
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 for file_name in os.listdir(tmp_dir): 378 for file_name in os.listdir(tmp_dir):
378 file_path = os.path.join(tmp_dir, file_name) 379 file_path = os.path.join(tmp_dir, file_name)
379 if os.path.isdir(file_path): 380 if os.path.isdir(file_path):
380 print 'deleting sub-directory', file_path 381 print 'deleting sub-directory', file_path
381 shutil.rmtree(file_path, True) 382 shutil.rmtree(file_path, True)
382 if file_name.startswith('chromedriver_'): 383 if file_name.startswith('chromedriver_'):
383 print 'deleting file', file_path 384 print 'deleting file', file_path
384 os.remove(file_path) 385 os.remove(file_path)
385 386
386 387
387 def _GetSVNRevisionFromGitHash(snapshot_hashcode): 388 def _GetCommitPositionFromGitHash(snapshot_hashcode):
388 json_url = GS_GITHASH_TO_SVN_URL % snapshot_hashcode 389 json_url = GS_GIT_LOG_URL % snapshot_hashcode
389 try: 390 try:
390 response = urllib2.urlopen(json_url) 391 response = urllib2.urlopen(json_url)
391 except urllib2.HTTPError as error: 392 except urllib2.HTTPError as error:
392 util.PrintAndFlush('HTTP Error %d' % error.getcode()) 393 util.PrintAndFlush('HTTP Error %d' % error.getcode())
394 return None
393 except urllib2.URLError as error: 395 except urllib2.URLError as error:
394 util.PrintAndFlush('URL Error %s' % error.message) 396 util.PrintAndFlush('URL Error %s' % error.message)
395 return None 397 return None
396 data = json.loads(response.read()[4:]) 398 data = json.loads(response.read()[4:])
397 if 'message' in data: 399 if 'message' in data:
398 message = data['message'].split('\n') 400 message = data['message'].split('\n')
399 message = [line for line in message if line.strip()] 401 message = [line for line in message if line.strip()]
400 search_pattern = re.compile(GS_SEARCH_PATTERN) 402 search_pattern = re.compile(GS_SEARCH_PATTERN)
401 result = search_pattern.search(message[len(message)-1]) 403 result = search_pattern.search(message[len(message)-1])
402 if result: 404 if result:
403 return result.group(1) 405 return result.group(1)
404 util.PrintAndFlush('Failed to get svn revision number for %s' % 406 util.PrintAndFlush('Failed to get svn revision number for %s' %
405 snapshot_hashcode) 407 snapshot_hashcode)
406 return None 408 return None
407 409
408 410
411 def _GetGitHashFromCommitPosition(commit_position):
412 json_url = CR_REV_URL % commit_position
413 try:
414 response = urllib2.urlopen(json_url)
415 except urllib2.HTTPError as error:
416 util.PrintAndFlush('HTTP Error %d' % error.getcode())
417 return None
418 except urllib2.URLError as error:
419 util.PrintAndFlush('URL Error %s' % error.message)
420 return None
421 data = json.loads(response.read())
422 if 'git_sha' in data:
423 return data['git_sha']
424 util.PrintAndFlush('Failed to get git hash for %s' % commit_position)
425 return None
426
427
409 def _WaitForLatestSnapshot(revision): 428 def _WaitForLatestSnapshot(revision):
410 util.MarkBuildStepStart('wait_for_snapshot') 429 util.MarkBuildStepStart('wait_for_snapshot')
411 def _IsRevisionNumber(revision): 430 def _IsRevisionNumber(revision):
412 if isinstance(revision, int): 431 if isinstance(revision, int):
413 return True 432 return True
414 else: 433 else:
415 return revision.isdigit() 434 return revision.isdigit()
416 while True: 435 while True:
417 snapshot_revision = archive.GetLatestSnapshotVersion() 436 snapshot_revision = archive.GetLatestSnapshotVersion()
418 if not _IsRevisionNumber(revision):
419 revision = _GetSVNRevisionFromGitHash(revision)
420 if not _IsRevisionNumber(snapshot_revision): 437 if not _IsRevisionNumber(snapshot_revision):
421 snapshot_revision = _GetSVNRevisionFromGitHash(snapshot_revision) 438 snapshot_revision = _GetCommitPositionFromGitHash(snapshot_revision)
422 if revision is not None and snapshot_revision is not None: 439 if revision is not None and snapshot_revision is not None:
423 if int(snapshot_revision) >= int(revision): 440 if int(snapshot_revision) >= int(revision):
424 break 441 break
425 util.PrintAndFlush('Waiting for snapshot >= %s, found %s' % 442 util.PrintAndFlush('Waiting for snapshot >= %s, found %s' %
426 (revision, snapshot_revision)) 443 (revision, snapshot_revision))
427 time.sleep(60) 444 time.sleep(60)
428 util.PrintAndFlush('Got snapshot revision %s' % snapshot_revision) 445 util.PrintAndFlush('Got snapshot revision %s' % snapshot_revision)
429 446
430 447
431 def _AddToolsToPath(platform_name): 448 def _AddToolsToPath(platform_name):
(...skipping 25 matching lines...) Expand all
457 os.environ['PATH'] += os.pathsep + os.pathsep.join(paths) 474 os.environ['PATH'] += os.pathsep + os.pathsep.join(paths)
458 475
459 476
460 def main(): 477 def main():
461 parser = optparse.OptionParser() 478 parser = optparse.OptionParser()
462 parser.add_option( 479 parser.add_option(
463 '', '--android-packages', 480 '', '--android-packages',
464 help=('Comma separated list of application package names, ' 481 help=('Comma separated list of application package names, '
465 'if running tests on Android.')) 482 'if running tests on Android.'))
466 parser.add_option( 483 parser.add_option(
467 '-r', '--revision', type='int', help='Chromium revision') 484 '-r', '--revision', help='Chromium revision')
468 parser.add_option( 485 parser.add_option(
469 '', '--update-log', action='store_true', 486 '', '--update-log', action='store_true',
470 help='Update the test results log (only applicable to Android)') 487 help='Update the test results log (only applicable to Android)')
471 options, _ = parser.parse_args() 488 options, _ = parser.parse_args()
472 489
473 bitness = '32' 490 bitness = '32'
474 if util.IsLinux() and platform_module.architecture()[0] == '64bit': 491 if util.IsLinux() and platform_module.architecture()[0] == '64bit':
475 bitness = '64' 492 bitness = '64'
476 platform = '%s%s' % (util.GetPlatformName(), bitness) 493 platform = '%s%s' % (util.GetPlatformName(), bitness)
477 if options.android_packages: 494 if options.android_packages:
478 platform = 'android' 495 platform = 'android'
479 496
480 _CleanTmpDir() 497 _CleanTmpDir()
481 498
499 if not options.revision:
500 commit_position = None
501 elif options.revision.isdigit():
502 commit_position = options.revision
503 else:
504 commit_position = _GetCommitPositionFromGitHash(options.revision)
505
482 if platform == 'android': 506 if platform == 'android':
483 if not options.revision and options.update_log: 507 if not options.revision and options.update_log:
484 parser.error('Must supply a --revision with --update-log') 508 parser.error('Must supply a --revision with --update-log')
485 _DownloadPrebuilts() 509 _DownloadPrebuilts()
486 else: 510 else:
487 if not options.revision: 511 if not options.revision:
488 parser.error('Must supply a --revision') 512 parser.error('Must supply a --revision')
489 if platform == 'linux64': 513 if platform == 'linux64':
490 _ArchivePrebuilts(options.revision) 514 _ArchivePrebuilts(commit_position)
491 _WaitForLatestSnapshot(options.revision) 515 _WaitForLatestSnapshot(commit_position)
492 516
493 _AddToolsToPath(platform) 517 _AddToolsToPath(platform)
494 518
495 cmd = [ 519 cmd = [
496 sys.executable, 520 sys.executable,
497 os.path.join(_THIS_DIR, 'test', 'run_all_tests.py'), 521 os.path.join(_THIS_DIR, 'test', 'run_all_tests.py'),
498 ] 522 ]
499 if platform == 'android': 523 if platform == 'android':
500 cmd.append('--android-packages=' + options.android_packages) 524 cmd.append('--android-packages=' + options.android_packages)
501 525
502 passed = (util.RunCommand(cmd) == 0) 526 passed = (util.RunCommand(cmd) == 0)
503 527
504 _ArchiveServerLogs() 528 _ArchiveServerLogs()
505 529
506 if platform == 'android': 530 if platform == 'android':
507 if options.update_log: 531 if options.update_log:
508 util.MarkBuildStepStart('update test result log') 532 util.MarkBuildStepStart('update test result log')
509 _UpdateTestResultsLog(platform, options.revision, passed) 533 _UpdateTestResultsLog(platform, commit_position, passed)
510 elif passed: 534 elif passed:
511 _ArchiveGoodBuild(platform, options.revision) 535 _ArchiveGoodBuild(platform, commit_position)
512 _MaybeRelease(platform) 536 _MaybeRelease(platform)
513 537
514 if not passed: 538 if not passed:
515 # Make sure the build is red if there is some uncaught exception during 539 # Make sure the build is red if there is some uncaught exception during
516 # running run_all_tests.py. 540 # running run_all_tests.py.
517 util.MarkBuildStepStart('run_all_tests.py') 541 util.MarkBuildStepStart('run_all_tests.py')
518 util.MarkBuildStepError() 542 util.MarkBuildStepError()
519 543
520 # Add a "cleanup" step so that errors from runtest.py or bb_device_steps.py 544 # Add a "cleanup" step so that errors from runtest.py or bb_device_steps.py
521 # (which invoke this script) are kept in thier own build step. 545 # (which invoke this script) are kept in thier own build step.
522 util.MarkBuildStepStart('cleanup') 546 util.MarkBuildStepStart('cleanup')
523 547
524 548
525 if __name__ == '__main__': 549 if __name__ == '__main__':
526 main() 550 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698