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

Side by Side Diff: infra/bots/recipes/swarm_trigger.py

Issue 2360203004: Add swarming task for upload_dm_results (Closed)
Patch Set: Fix gzip Created 4 years, 2 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 | infra/bots/recipes/swarm_trigger.expected/Test-Android-Clang-AndroidOne-CPU-MT6582-arm-Debug-GN_Android.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 5
6 # Recipe module for Skia Swarming trigger. 6 # Recipe module for Skia Swarming trigger.
7 7
8 8
9 import os 9 import os
10 import json 10 import json
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 if 'Valgrind' in builder_cfg.get('extra_config', ''): 427 if 'Valgrind' in builder_cfg.get('extra_config', ''):
428 expiration = 2*24*60*60 428 expiration = 2*24*60*60
429 hard_timeout = 9*60*60 429 hard_timeout = 9*60*60
430 io_timeout = 60*60 430 io_timeout = 60*60
431 if builder_cfg.get('extra_config', '').startswith('CT_'): 431 if builder_cfg.get('extra_config', '').startswith('CT_'):
432 hard_timeout = 24*60*60 432 hard_timeout = 24*60*60
433 io_timeout = 60*60 433 io_timeout = 60*60
434 return expiration, hard_timeout, io_timeout 434 return expiration, hard_timeout, io_timeout
435 435
436 436
437 def gsutil_env(api, boto_file):
438 """Environment variables for gsutil."""
439 home_dir = os.path.expanduser('~')
440 if api.path._test_data.enabled:
441 home_dir = '[HOME]'
442
443 boto_path = None
444 if boto_file:
445 boto_path = api.path.join(home_dir, boto_file)
446 return {'AWS_CREDENTIAL_FILE': boto_path,
447 'BOTO_CONFIG': boto_path}
448
449
450 def get_issue_num(api):
451 if api.properties.get('patch_storage') == 'gerrit':
452 return str(api.properties['event.change.number'])
453 else:
454 return str(api.properties['issue'])
455
456
457 def perf_steps_trigger(api, builder_cfg, got_revision, infrabots_dir, 437 def perf_steps_trigger(api, builder_cfg, got_revision, infrabots_dir,
458 extra_hashes, cipd_packages): 438 extra_hashes, cipd_packages):
459 """Trigger perf tests via Swarming.""" 439 """Trigger perf tests via Swarming."""
460 440
461 expiration, hard_timeout, io_timeout = get_timeouts(builder_cfg) 441 expiration, hard_timeout, io_timeout = get_timeouts(builder_cfg)
462 return trigger_task( 442 return trigger_task(
463 api, 443 api,
464 'perf', 444 'perf',
465 api.properties['buildername'], 445 api.properties['buildername'],
466 api.properties['mastername'], 446 api.properties['mastername'],
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 api.properties['mastername'], 499 api.properties['mastername'],
520 api.properties['slavename'], 500 api.properties['slavename'],
521 api.properties['buildnumber'], 501 api.properties['buildnumber'],
522 builder_cfg, 502 builder_cfg,
523 got_revision, 503 got_revision,
524 infrabots_dir, 504 infrabots_dir,
525 extra_isolate_hashes=extra_hashes, 505 extra_isolate_hashes=extra_hashes,
526 expiration=expiration, 506 expiration=expiration,
527 hard_timeout=hard_timeout, 507 hard_timeout=hard_timeout,
528 io_timeout=io_timeout, 508 io_timeout=io_timeout,
529 cipd_packages=cipd_packages) 509 cipd_packages=cipd_packages,
510 store_output=False)
530 511
531 512
532 def test_steps_collect(api, task, got_revision, is_trybot, builder_cfg): 513 def test_steps_collect(api, task, builder_cfg, got_revision, infrabots_dir):
533 """Collect the test results from Swarming.""" 514 """Collect the test results from Swarming."""
534 # Wait for tests to finish, download the results. 515 # Wait for tests to finish, download the results.
535 api.run.rmtree(task.task_output_dir) 516 if not api.vars.upload_dm_results: # pragma: nocover
536 api.swarming.collect_swarming_task(task) 517 api.swarming.collect_swarming_task(task)
518 return
519
520 dm_hash = api.swarming.collect_swarming_task_isolate_hash(task)
537 521
538 # Upload the results. 522 # Upload the results.
539 if api.vars.upload_dm_results: 523 task = trigger_task(
540 dm_dir = api.path['slave_build'].join('dm') 524 api,
541 dm_src = task.task_output_dir.join('0', 'dm') 525 'upload_dm_results',
542 api.run.rmtree(dm_dir) 526 api.properties['buildername'],
543 api.file.copytree('dm_dir', dm_src, dm_dir, infra_step=True) 527 api.properties['mastername'],
528 api.properties['slavename'],
529 api.properties['buildnumber'],
530 builder_cfg,
531 got_revision,
532 infrabots_dir,
533 idempotent=True,
534 store_output=False,
535 cipd_packages=None,
536 extra_isolate_hashes=[dm_hash],
537 recipe_name='upload_dm_results',
538 isolate_file='upload_dm_results.isolate',
539 dimensions=UPLOAD_DIMENSIONS)
544 540
545 # Upload them to Google Storage. 541 return api.swarming.collect_swarming_task(task)
546 api.python(
547 'Upload DM Results',
548 script=api.core.resource('upload_dm_results.py'),
549 args=[
550 dm_dir,
551 got_revision,
552 api.properties['buildername'],
553 api.properties['buildnumber'],
554 get_issue_num(api) if is_trybot else '',
555 api.path['slave_build'].join('skia', 'common', 'py', 'utils'),
556 ],
557 cwd=api.path['checkout'],
558 env=gsutil_env(api, 'chromium-skia-gm.boto'),
559 infra_step=True)
560
561 if builder_cfg['configuration'] == 'Coverage':
562 upload_coverage_results(api, task, got_revision, is_trybot)
563
564
565 def upload_coverage_results(api, task, got_revision, is_trybot):
566 results_dir = task.task_output_dir.join('0')
567 git_timestamp = api.git.get_timestamp(test_data='1408633190',
568 infra_step=True)
569
570 # Upload raw coverage data.
571 cov_file_basename = '%s.cov' % got_revision
572 cov_file = results_dir.join(cov_file_basename)
573 now = api.time.utcnow()
574 gs_json_path = '/'.join((
575 str(now.year).zfill(4), str(now.month).zfill(2),
576 str(now.day).zfill(2), str(now.hour).zfill(2),
577 api.properties['buildername'],
578 str(api.properties['buildnumber'])))
579 if is_trybot:
580 gs_json_path = '/'.join(('trybot', gs_json_path, get_issue_num(api)))
581 api.gsutil.upload(
582 name='upload raw coverage data',
583 source=cov_file,
584 bucket='skia-infra',
585 dest='/'.join(('coverage-raw-v1', gs_json_path,
586 cov_file_basename)),
587 env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None},
588 )
589
590 # Transform the nanobench_${git_hash}.json file received from swarming bot
591 # into the nanobench_${git_hash}_${timestamp}.json file
592 # upload_bench_results.py expects.
593 src_nano_file = results_dir.join('nanobench_%s.json' % got_revision)
594 dst_nano_file = results_dir.join(
595 'nanobench_%s_%s.json' % (got_revision, git_timestamp))
596 api.file.copy('nanobench JSON', src_nano_file, dst_nano_file,
597 infra_step=True)
598 api.file.remove('old nanobench JSON', src_nano_file)
599
600 # Upload nanobench JSON data.
601 gsutil_path = api.depot_tools.gsutil_py_path
602 upload_args = [api.properties['buildername'], api.properties['buildnumber'],
603 results_dir, got_revision, gsutil_path]
604 if is_trybot:
605 upload_args.append(get_issue_num(api))
606 api.python(
607 'upload nanobench coverage results',
608 script=api.core.resource('upload_bench_results.py'),
609 args=upload_args,
610 cwd=api.path['checkout'],
611 env=gsutil_env(api, 'chromium-skia-gm.boto'),
612 infra_step=True)
613
614 # Transform the coverage_by_line_${git_hash}.json file received from
615 # swarming bot into a coverage_by_line_${git_hash}_${timestamp}.json file.
616 src_lbl_file = results_dir.join('coverage_by_line_%s.json' % got_revision)
617 dst_lbl_file_basename = 'coverage_by_line_%s_%s.json' % (
618 got_revision, git_timestamp)
619 dst_lbl_file = results_dir.join(dst_lbl_file_basename)
620 api.file.copy('Line-by-line coverage JSON', src_lbl_file, dst_lbl_file,
621 infra_step=True)
622 api.file.remove('old line-by-line coverage JSON', src_lbl_file)
623
624 # Upload line-by-line coverage data.
625 api.gsutil.upload(
626 name='upload line-by-line coverage data',
627 source=dst_lbl_file,
628 bucket='skia-infra',
629 dest='/'.join(('coverage-json-v1', gs_json_path,
630 dst_lbl_file_basename)),
631 env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None},
632 )
633 542
634 543
635 def cipd_pkg(api, infrabots_dir, asset_name): 544 def cipd_pkg(api, infrabots_dir, asset_name):
636 """Find and return the CIPD package info for the given asset.""" 545 """Find and return the CIPD package info for the given asset."""
637 version_file = infrabots_dir.join('assets', asset_name, 'VERSION') 546 version_file = infrabots_dir.join('assets', asset_name, 'VERSION')
638 version = api.run.readfile(version_file, 547 version = api.run.readfile(version_file,
639 name='read %s VERSION' % asset_name, 548 name='read %s VERSION' % asset_name,
640 test_data='0').rstrip() 549 test_data='0').rstrip()
641 version = 'version:%s' % version 550 version = 'version:%s' % version
642 return (asset_name, 'skia/bots/%s' % asset_name, version) 551 return (asset_name, 'skia/bots/%s' % asset_name, version)
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 640
732 # Trigger test and perf tasks. 641 # Trigger test and perf tasks.
733 test_task = None 642 test_task = None
734 perf_task = None 643 perf_task = None
735 if do_test_steps: 644 if do_test_steps:
736 test_task = test_steps_trigger(api, builder_cfg, got_revision, 645 test_task = test_steps_trigger(api, builder_cfg, got_revision,
737 infrabots_dir, extra_hashes, cipd_packages) 646 infrabots_dir, extra_hashes, cipd_packages)
738 if do_perf_steps: 647 if do_perf_steps:
739 perf_task = perf_steps_trigger(api, builder_cfg, got_revision, 648 perf_task = perf_steps_trigger(api, builder_cfg, got_revision,
740 infrabots_dir, extra_hashes, cipd_packages) 649 infrabots_dir, extra_hashes, cipd_packages)
741 is_trybot = builder_cfg['is_trybot']
742 650
743 # Wait for results, then upload them if necessary. 651 # Wait for results, then upload them if necessary.
744 652
745 if test_task: 653 if test_task:
746 test_steps_collect(api, test_task, 654 test_steps_collect(api, test_task, builder_cfg,
747 got_revision, is_trybot, builder_cfg) 655 got_revision, infrabots_dir)
748 656
749 if perf_task: 657 if perf_task:
750 perf_steps_collect(api, perf_task, builder_cfg, 658 perf_steps_collect(api, perf_task, builder_cfg,
751 got_revision, infrabots_dir) 659 got_revision, infrabots_dir)
752 660
753 661
754 def test_for_bot(api, builder, mastername, slavename, testname=None): 662 def test_for_bot(api, builder, mastername, slavename, testname=None):
755 """Generate a test for the given bot.""" 663 """Generate a test for the given bot."""
756 testname = testname or builder 664 testname = testname or builder
757 test = ( 665 test = (
(...skipping 13 matching lines...) Expand all
771 test += api.properties(issue=500, 679 test += api.properties(issue=500,
772 patchset=1, 680 patchset=1,
773 rietveld='https://codereview.chromium.org') 681 rietveld='https://codereview.chromium.org')
774 if 'Android' in builder: 682 if 'Android' in builder:
775 paths.append(api.path['slave_build'].join( 683 paths.append(api.path['slave_build'].join(
776 'skia', 'infra', 'bots', 'assets', 'android_sdk', 'VERSION')) 684 'skia', 'infra', 'bots', 'assets', 'android_sdk', 'VERSION'))
777 if 'Test' in builder and 'Coverage' not in builder: 685 if 'Test' in builder and 'Coverage' not in builder:
778 test += api.step_data( 686 test += api.step_data(
779 'upload new .isolated file for test_skia', 687 'upload new .isolated file for test_skia',
780 stdout=api.raw_io.output('def456 XYZ.isolated')) 688 stdout=api.raw_io.output('def456 XYZ.isolated'))
689 if not 'Valgrind' in builder and not 'MSAN' in builder:
690 test += api.step_data(
691 'upload new .isolated file for upload_dm_results_skia',
692 stdout=api.raw_io.output('def456 XYZ.isolated'))
781 if 'Perf' in builder and '-CT_' not in builder: 693 if 'Perf' in builder and '-CT_' not in builder:
782 test += api.step_data( 694 test += api.step_data(
783 'upload new .isolated file for perf_skia', 695 'upload new .isolated file for perf_skia',
784 stdout=api.raw_io.output('def456 XYZ.isolated')) 696 stdout=api.raw_io.output('def456 XYZ.isolated'))
785 test += api.step_data( 697 test += api.step_data(
786 'upload new .isolated file for upload_nano_results_skia', 698 'upload new .isolated file for upload_nano_results_skia',
787 stdout=api.raw_io.output('def456 XYZ.isolated')) 699 stdout=api.raw_io.output('def456 XYZ.isolated'))
788 if 'Housekeeper' in builder and 'RecreateSKPs' not in builder: 700 if 'Housekeeper' in builder and 'RecreateSKPs' not in builder:
789 test += api.step_data( 701 test += api.step_data(
790 'upload new .isolated file for housekeeper_skia', 702 'upload new .isolated file for housekeeper_skia',
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 api.properties( 735 api.properties(
824 buildername='Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-Trybot', 736 buildername='Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-Trybot',
825 mastername='client.skia', 737 mastername='client.skia',
826 slavename='skiabot-linux-swarm-000', 738 slavename='skiabot-linux-swarm-000',
827 buildnumber=5, 739 buildnumber=5,
828 path_config='kitchen', 740 path_config='kitchen',
829 revision='abc123', 741 revision='abc123',
830 **gerrit_kwargs) + 742 **gerrit_kwargs) +
831 api.step_data( 743 api.step_data(
832 'upload new .isolated file for test_skia', 744 'upload new .isolated file for test_skia',
745 stdout=api.raw_io.output('def456 XYZ.isolated')) +
746 api.step_data(
747 'upload new .isolated file for upload_dm_results_skia',
833 stdout=api.raw_io.output('def456 XYZ.isolated')) 748 stdout=api.raw_io.output('def456 XYZ.isolated'))
834 ) 749 )
OLDNEW
« no previous file with comments | « no previous file | infra/bots/recipes/swarm_trigger.expected/Test-Android-Clang-AndroidOne-CPU-MT6582-arm-Debug-GN_Android.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698