| OLD | NEW | 
|---|
| 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 json | 9 import json | 
| 10 | 10 | 
| (...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 554   api.gsutil.upload( | 554   api.gsutil.upload( | 
| 555       name='upload line-by-line coverage data', | 555       name='upload line-by-line coverage data', | 
| 556       source=dst_lbl_file, | 556       source=dst_lbl_file, | 
| 557       bucket='skia-infra', | 557       bucket='skia-infra', | 
| 558       dest='/'.join(('coverage-json-v1', gs_json_path, | 558       dest='/'.join(('coverage-json-v1', gs_json_path, | 
| 559                      dst_lbl_file_basename)), | 559                      dst_lbl_file_basename)), | 
| 560       env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None}, | 560       env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None}, | 
| 561   ) | 561   ) | 
| 562 | 562 | 
| 563 | 563 | 
|  | 564 def cipd_pkg(api, infrabots_dir, asset_name): | 
|  | 565   """Find and return the CIPD package info for the given asset.""" | 
|  | 566   version_file = infrabots_dir.join('assets', asset_name, 'VERSION') | 
|  | 567   version = api.skia._readfile(version_file, | 
|  | 568                                name='read %s VERSION' % asset_name, | 
|  | 569                                test_data='0').rstrip() | 
|  | 570   version = 'version:%s' % version | 
|  | 571   return (asset_name, 'skia/bots/%s' % asset_name, version) | 
|  | 572 | 
|  | 573 | 
| 564 def RunSteps(api): | 574 def RunSteps(api): | 
| 565   got_revision = checkout_steps(api) | 575   got_revision = checkout_steps(api) | 
| 566   api.skia_swarming.setup( | 576   api.skia_swarming.setup( | 
| 567       api.path['checkout'].join('infra', 'bots', 'tools', 'luci-go'), | 577       api.path['checkout'].join('infra', 'bots', 'tools', 'luci-go'), | 
| 568       swarming_rev='') | 578       swarming_rev='') | 
| 569 | 579 | 
| 570   # Run gsutil.py to ensure that it's installed. | 580   # Run gsutil.py to ensure that it's installed. | 
| 571   api.gsutil(['help']) | 581   api.gsutil(['help']) | 
| 572 | 582 | 
| 573   recipes_hash = isolate_recipes(api) | 583   recipes_hash = isolate_recipes(api) | 
| 574   extra_hashes = [recipes_hash] | 584   extra_hashes = [recipes_hash] | 
| 575 | 585 | 
| 576   # Get ready to compile. | 586   # Get ready to compile. | 
| 577   compile_cipd_deps = [] | 587   compile_cipd_deps = [] | 
| 578   extra_compile_hashes = [recipes_hash] | 588   extra_compile_hashes = [recipes_hash] | 
| 579 | 589 | 
| 580   infrabots_dir = api.path['checkout'].join('infra', 'bots') | 590   infrabots_dir = api.path['checkout'].join('infra', 'bots') | 
| 581   if 'Infra' in api.properties['buildername']: | 591   if 'Infra' in api.properties['buildername']: | 
| 582     return infra_swarm(api, got_revision, infrabots_dir, extra_hashes) | 592     return infra_swarm(api, got_revision, infrabots_dir, extra_hashes) | 
| 583 | 593 | 
| 584   builder_spec = api.skia.get_builder_spec(api.path['checkout'], | 594   builder_spec = api.skia.get_builder_spec(api.path['checkout'], | 
| 585                                            api.properties['buildername']) | 595                                            api.properties['buildername']) | 
| 586   builder_cfg = builder_spec['builder_cfg'] | 596   builder_cfg = builder_spec['builder_cfg'] | 
| 587 | 597 | 
| 588   # Android bots require an SDK. | 598   # Android bots require an SDK. | 
| 589   if 'Android' in api.properties['buildername']: | 599   if 'Android' in api.properties['buildername']: | 
| 590     android_sdk_version_file = infrabots_dir.join( | 600     android_sdk_version_file = infrabots_dir.join( | 
| 591         'assets', 'android_sdk', 'VERSION') | 601         'assets', 'android_sdk', 'VERSION') | 
| 592     if api.path.exists(android_sdk_version_file): | 602     if api.path.exists(android_sdk_version_file): | 
| 593       android_sdk_version = api.skia._readfile(android_sdk_version_file, | 603       compile_cipd_deps.append(cipd_pkg(api, infrabots_dir, 'android_sdk')) | 
| 594                                                name='read android_sdk VERSION', |  | 
| 595                                                test_data='0').rstrip() |  | 
| 596       android_sdk_version = 'version:%s' % android_sdk_version |  | 
| 597       pkg = ('android_sdk', 'skia/bots/android_sdk', android_sdk_version) |  | 
| 598       compile_cipd_deps.append(pkg) |  | 
| 599     else: | 604     else: | 
| 600       # TODO(borenet): Remove this legacy method after 7/1/2016. | 605       # TODO(borenet): Remove this legacy method after 7/1/2016. | 
| 601       test_data = 'a27a70d73b85191b9e671ff2a44547c3f7cc15ee' | 606       test_data = 'a27a70d73b85191b9e671ff2a44547c3f7cc15ee' | 
| 602       hash_file = infrabots_dir.join('android_sdk_hash') | 607       hash_file = infrabots_dir.join('android_sdk_hash') | 
| 603       # try/except as a temporary measure to prevent breakages for backfills | 608       # try/except as a temporary measure to prevent breakages for backfills | 
| 604       # and branches. | 609       # and branches. | 
| 605       try: | 610       try: | 
| 606         h = api.skia._readfile(hash_file, | 611         h = api.skia._readfile(hash_file, | 
| 607                                name='Read android_sdk_hash', | 612                                name='Read android_sdk_hash', | 
| 608                                test_data=test_data).rstrip() | 613                                test_data=test_data).rstrip() | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 630   cipd_packages = [] | 635   cipd_packages = [] | 
| 631 | 636 | 
| 632   do_test_steps = builder_spec['do_test_steps'] | 637   do_test_steps = builder_spec['do_test_steps'] | 
| 633   do_perf_steps = builder_spec['do_perf_steps'] | 638   do_perf_steps = builder_spec['do_perf_steps'] | 
| 634 | 639 | 
| 635   if not (do_test_steps or do_perf_steps): | 640   if not (do_test_steps or do_perf_steps): | 
| 636     return | 641     return | 
| 637 | 642 | 
| 638   api.skia.download_skps(api.path['slave_build'].join('tmp'), | 643   api.skia.download_skps(api.path['slave_build'].join('tmp'), | 
| 639                          api.path['slave_build'].join('skps')) | 644                          api.path['slave_build'].join('skps')) | 
| 640   api.skia.download_images(api.path['slave_build'].join('tmp'), | 645   if api.path.exists(infrabots_dir.join('assets', 'skimage', 'VERSION')): | 
| 641                            api.path['slave_build'].join('images')) | 646     cipd_packages.append(cipd_pkg(api, infrabots_dir, 'skimage')) | 
|  | 647   else: | 
|  | 648     # TODO(borenet): Remove this once enough time has passed. | 
|  | 649     api.skia.download_images(api.path['slave_build'].join('tmp'), | 
|  | 650                              api.path['slave_build'].join('images')) | 
| 642 | 651 | 
| 643   test_task = None | 652   test_task = None | 
| 644   perf_task = None | 653   perf_task = None | 
| 645   if do_test_steps: | 654   if do_test_steps: | 
| 646     test_task = test_steps_trigger(api, builder_spec, got_revision, | 655     test_task = test_steps_trigger(api, builder_spec, got_revision, | 
| 647                                    infrabots_dir, extra_hashes, cipd_packages) | 656                                    infrabots_dir, extra_hashes, cipd_packages) | 
| 648   if do_perf_steps: | 657   if do_perf_steps: | 
| 649     perf_task = perf_steps_trigger(api, builder_spec, got_revision, | 658     perf_task = perf_steps_trigger(api, builder_spec, got_revision, | 
| 650                                    infrabots_dir, extra_hashes, cipd_packages) | 659                                    infrabots_dir, extra_hashes, cipd_packages) | 
| 651   is_trybot = builder_cfg['is_trybot'] | 660   is_trybot = builder_cfg['is_trybot'] | 
| 652   if test_task: | 661   if test_task: | 
| 653     test_steps_collect(api, test_task, builder_spec['upload_dm_results'], | 662     test_steps_collect(api, test_task, builder_spec['upload_dm_results'], | 
| 654                        got_revision, is_trybot, builder_cfg) | 663                        got_revision, is_trybot, builder_cfg) | 
| 655   if perf_task: | 664   if perf_task: | 
| 656     perf_steps_collect(api, perf_task, builder_spec['upload_perf_results'], | 665     perf_steps_collect(api, perf_task, builder_spec['upload_perf_results'], | 
| 657                        got_revision, is_trybot) | 666                        got_revision, is_trybot) | 
| 658 | 667 | 
| 659 | 668 | 
| 660 def test_for_bot(api, builder, mastername, slavename, testname=None, | 669 def test_for_bot(api, builder, mastername, slavename, testname=None, | 
| 661                  legacy_android_sdk=False, legacy_win_toolchain=False): | 670                  legacy_android_sdk=False, legacy_win_toolchain=False, | 
|  | 671                  legacy_skimage_version=False): | 
| 662   """Generate a test for the given bot.""" | 672   """Generate a test for the given bot.""" | 
| 663   testname = testname or builder | 673   testname = testname or builder | 
| 664   test = ( | 674   test = ( | 
| 665     api.test(testname) + | 675     api.test(testname) + | 
| 666     api.properties(buildername=builder, | 676     api.properties(buildername=builder, | 
| 667                    mastername=mastername, | 677                    mastername=mastername, | 
| 668                    slavename=slavename, | 678                    slavename=slavename, | 
| 669                    buildnumber=5, | 679                    buildnumber=5, | 
| 670                    revision='abc123') + | 680                    revision='abc123') | 
| 671     api.path.exists( |  | 
| 672         api.path['slave_build'].join('skia'), |  | 
| 673         api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') |  | 
| 674     ) |  | 
| 675   ) | 681   ) | 
|  | 682   paths = [ | 
|  | 683       api.path['slave_build'].join('skia'), | 
|  | 684       api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt'), | 
|  | 685   ] | 
| 676   if 'Trybot' in builder: | 686   if 'Trybot' in builder: | 
| 677     test += api.properties(issue=500, | 687     test += api.properties(issue=500, | 
| 678                            patchset=1, | 688                            patchset=1, | 
| 679                            rietveld='https://codereview.chromium.org') | 689                            rietveld='https://codereview.chromium.org') | 
| 680   if 'Android' in builder: | 690   if 'Android' in builder: | 
| 681     if not legacy_android_sdk: | 691     if not legacy_android_sdk: | 
| 682       test += api.path.exists(api.path['slave_build'].join( | 692       paths.append(api.path['slave_build'].join( | 
| 683           'skia', 'infra', 'bots', 'assets', 'android_sdk', 'VERSION')) | 693           'skia', 'infra', 'bots', 'assets', 'android_sdk', 'VERSION')) | 
| 684   if 'Coverage' not in builder and 'Infra' not in builder: | 694   if 'Coverage' not in builder and 'Infra' not in builder: | 
| 685     test += api.step_data( | 695     test += api.step_data( | 
| 686         'upload new .isolated file for compile_skia', | 696         'upload new .isolated file for compile_skia', | 
| 687         stdout=api.raw_io.output('def456 XYZ.isolated')) | 697         stdout=api.raw_io.output('def456 XYZ.isolated')) | 
| 688   if 'Test' in builder: | 698   if 'Test' in builder: | 
| 689     test += api.step_data( | 699     test += api.step_data( | 
| 690         'upload new .isolated file for test_skia', | 700         'upload new .isolated file for test_skia', | 
| 691         stdout=api.raw_io.output('def456 XYZ.isolated')) | 701         stdout=api.raw_io.output('def456 XYZ.isolated')) | 
| 692   if ('Test' in builder and 'Debug' in builder) or 'Perf' in builder or ( | 702   if ('Test' in builder and 'Debug' in builder) or 'Perf' in builder or ( | 
| 693       'Valgrind' in builder and 'Test' in builder): | 703       'Valgrind' in builder and 'Test' in builder): | 
| 694     test += api.step_data( | 704     test += api.step_data( | 
| 695         'upload new .isolated file for perf_skia', | 705         'upload new .isolated file for perf_skia', | 
| 696         stdout=api.raw_io.output('def456 XYZ.isolated')) | 706         stdout=api.raw_io.output('def456 XYZ.isolated')) | 
| 697   if 'Housekeeper' in builder: | 707   if 'Housekeeper' in builder: | 
| 698     test += api.step_data( | 708     test += api.step_data( | 
| 699         'upload new .isolated file for housekeeper_skia', | 709         'upload new .isolated file for housekeeper_skia', | 
| 700         stdout=api.raw_io.output('def456 XYZ.isolated')) | 710         stdout=api.raw_io.output('def456 XYZ.isolated')) | 
| 701   if 'Infra' in builder: | 711   if 'Infra' in builder: | 
| 702     test += api.step_data( | 712     test += api.step_data( | 
| 703         'upload new .isolated file for infra_skia', | 713         'upload new .isolated file for infra_skia', | 
| 704         stdout=api.raw_io.output('def456 XYZ.isolated')) | 714         stdout=api.raw_io.output('def456 XYZ.isolated')) | 
| 705   if 'Win' in builder: | 715   if 'Win' in builder: | 
| 706     if not legacy_win_toolchain: | 716     if not legacy_win_toolchain: | 
| 707       test += api.path.exists(api.path['slave_build'].join( | 717       paths.append(api.path['slave_build'].join( | 
| 708           'skia', 'infra', 'bots', 'assets', 'win_toolchain', 'VERSION')) | 718           'skia', 'infra', 'bots', 'assets', 'win_toolchain', 'VERSION')) | 
|  | 719   if not legacy_skimage_version: | 
|  | 720     paths.append(api.path['slave_build'].join( | 
|  | 721         'skia', 'infra', 'bots', 'assets', 'skimage', 'VERSION')) | 
|  | 722 | 
|  | 723   test += api.path.exists(*paths) | 
| 709 | 724 | 
| 710   return test | 725   return test | 
| 711 | 726 | 
| 712 | 727 | 
| 713 def GenTests(api): | 728 def GenTests(api): | 
| 714   for mastername, slaves in TEST_BUILDERS.iteritems(): | 729   for mastername, slaves in TEST_BUILDERS.iteritems(): | 
| 715     for slavename, builders_by_slave in slaves.iteritems(): | 730     for slavename, builders_by_slave in slaves.iteritems(): | 
| 716       for builder in builders_by_slave: | 731       for builder in builders_by_slave: | 
| 717         yield test_for_bot(api, builder, mastername, slavename) | 732         yield test_for_bot(api, builder, mastername, slavename) | 
| 718 | 733 | 
| 719   builder = 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug' | 734   builder = 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug' | 
| 720   master = 'client.skia' | 735   master = 'client.skia' | 
| 721   slave = 'skiabot-linux-test-000' | 736   slave = 'skiabot-linux-test-000' | 
| 722   test = test_for_bot(api, builder, master, slave, 'No_downloaded_SKP_VERSION') | 737   test = test_for_bot(api, builder, master, slave, 'No_downloaded_SKP_VERSION') | 
| 723   test += api.step_data('Get downloaded SKP_VERSION', retcode=1) | 738   test += api.step_data('Get downloaded SKP_VERSION', retcode=1) | 
| 724   test += api.path.exists( |  | 
| 725       api.path['slave_build'].join('skia'), |  | 
| 726       api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') |  | 
| 727   ) |  | 
| 728   yield test | 739   yield test | 
| 729 | 740 | 
| 730   test = test_for_bot(api, builder, master, slave, | 741   test = test_for_bot(api, builder, master, slave, | 
| 731                       'Wrong_downloaded_SKP_VERSION') | 742                       'Wrong_downloaded_SKP_VERSION') | 
| 732   test += api.properties(test_downloaded_skp_version='999') | 743   test += api.properties(test_downloaded_skp_version='999') | 
| 733   test += api.path.exists( |  | 
| 734       api.path['slave_build'].join('skia'), |  | 
| 735       api.path['slave_build'].join('tmp', 'uninteresting_hashes.txt') |  | 
| 736   ) |  | 
| 737   yield test | 744   yield test | 
| 738 | 745 | 
| 739   builder = 'Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan' | 746   builder = 'Build-Ubuntu-GCC-Arm7-Release-Android_Vulkan' | 
| 740   master = 'client.skia.compile' | 747   master = 'client.skia.compile' | 
| 741   slave = 'skiabot-linux-compile-000' | 748   slave = 'skiabot-linux-compile-000' | 
| 742   test = test_for_bot(api, builder, master, slave, 'legacy_android_sdk', | 749   test = test_for_bot(api, builder, master, slave, 'legacy_android_sdk', | 
| 743                       legacy_android_sdk=True) | 750                       legacy_android_sdk=True) | 
| 744   test += api.step_data('Read android_sdk_hash', | 751   test += api.step_data('Read android_sdk_hash', | 
| 745                         stdout=api.raw_io.output('<android_sdk_hash>')) | 752                         stdout=api.raw_io.output('<android_sdk_hash>')) | 
| 746   yield test | 753   yield test | 
| 747 | 754 | 
| 748   test = test_for_bot(api, builder, master, slave, 'Missing_android_sdk_hash', | 755   test = test_for_bot(api, builder, master, slave, 'Missing_android_sdk_hash', | 
| 749                       legacy_android_sdk=True) | 756                       legacy_android_sdk=True) | 
| 750   test += api.step_data('Read android_sdk_hash', retcode=1) | 757   test += api.step_data('Read android_sdk_hash', retcode=1) | 
| 751   yield test | 758   yield test | 
| 752 | 759 | 
| 753   builder = 'Build-Win-MSVC-x86_64-Release-Vulkan' | 760   builder = 'Build-Win-MSVC-x86_64-Release-Vulkan' | 
| 754   master = 'client.skia.compile' | 761   master = 'client.skia.compile' | 
| 755   test = test_for_bot(api, builder, master, slave, 'legacy_win_toolchain', | 762   test = test_for_bot(api, builder, master, slave, 'legacy_win_toolchain', | 
| 756                       legacy_win_toolchain=True) | 763                       legacy_win_toolchain=True) | 
| 757   yield test | 764   yield test | 
|  | 765 | 
|  | 766   builder = 'Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug' | 
|  | 767   master = 'client.skia' | 
|  | 768   test = test_for_bot(api, builder, master, slave, 'legacy_skimage_version', | 
|  | 769                       legacy_skimage_version=True) | 
|  | 770   test += api.step_data('Get downloaded SK_IMAGE_VERSION', retcode=1) | 
|  | 771   yield test | 
| OLD | NEW | 
|---|