| #!/usr/bin/env lucicfg |
| # Copyright 2020 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """ |
| Configurations for devicelab staging tests. |
| |
| The schedulers pull commits indirectly from GoB repo (https://chromium.googlesource.com/external/github.com/flutter/flutter) |
| which is mirrored from https://github.com/flutter/flutter. |
| """ |
| |
| load("//lib/common.star", "common") |
| load("//lib/repos.star", "repos") |
| load("//lib/timeout.star", "timeout") |
| |
| # Global OS variables |
| LINUX_OS = "Debian" |
| MAC_OS = "Mac-12.0.1" |
| WINDOWS_OS = "Windows-10" |
| XCODE_VERSION = "13a233" # xcode 13 |
| IOS_VERSION = "iOS-15.1" |
| |
| DEFAULT_BRANCH = "master" |
| |
| # Staging tasks that should upload metrics. |
| BENCHMARKS = [ |
| "flutter_gallery__transition_perf_e2e", |
| "flutter_gallery_sksl_warmup__transition_perf_e2e", |
| "flutter_gallery__transition_perf_e2e_ios", |
| "flutter_gallery_ios__transition_perf", |
| "flutter_gallery_ios_sksl_warmup__transition_perf", |
| "flutter_gallery__transition_perf_with_semantics", |
| "flutter_gallery__transition_perf", |
| "flutter_gallery__transition_perf_hybrid", |
| "flutter_gallery_sksl_warmup__transition_perf", |
| ] |
| |
| # Linux staging tasks that run on Samsung devices. |
| SAMSUNGTASKS = [ |
| "backdrop_filter_perf__timeline_summary", |
| "complex_layout_scroll_perf__timeline_summary", |
| "cubic_bezier_perf__timeline_summary", |
| "cull_opacity_perf__timeline_summary", |
| "imagefiltered_transform_animation_perf__timeline_summary", |
| "new_gallery__transition_perf", |
| "picture_cache_perf__timeline_summary", |
| "platform_views_scroll_perf__timeline_summary", |
| "textfield_perf__timeline_summary", |
| ] |
| |
| # Default caches for Linux builders |
| LINUX_DEFAULT_CACHES = [ |
| # Android SDK |
| swarming.cache(name = "android_sdk", path = "android"), |
| # Chrome |
| swarming.cache(name = "chrome_and_driver", path = "chrome"), |
| # OpenJDK |
| swarming.cache(name = "openjdk", path = "java"), |
| # PubCache |
| swarming.cache(name = "pub_cache", path = ".pub-cache"), |
| # Flutter SDK code |
| swarming.cache(name = "flutter_sdk", path = "flutter sdk"), |
| # Builder |
| swarming.cache(name = "builder_linux_devicelab_staging", path = "builder"), |
| ] |
| |
| # Default caches for Mac android builders |
| MAC_ANDROID_DEFAULT_CACHES = [ |
| # Android SDK |
| swarming.cache(name = "android_sdk", path = "android"), |
| # Chrome |
| swarming.cache(name = "chrome_and_driver", path = "chrome"), |
| # OpenJDK |
| swarming.cache(name = "openjdk", path = "java"), |
| # PubCache |
| swarming.cache(name = "pub_cache", path = ".pub-cache"), |
| # Flutter SDK code |
| swarming.cache(name = "flutter_sdk", path = "flutter sdk"), |
| # Builder |
| swarming.cache(name = "builder_mac_devicelab_staging", path = "builder"), |
| ] |
| |
| # Default caches for Mac builders |
| MAC_DEFAULT_CACHES = [ |
| # Pub cache |
| swarming.cache(name = "pub_cache", path = ".pub-cache"), |
| # Flutter SDK code |
| swarming.cache(name = "flutter_sdk", path = "flutter sdk"), |
| # Xcode |
| swarming.cache("xcode_binary"), |
| swarming.cache("osx_sdk"), |
| # Builder |
| swarming.cache(name = "builder_mac_devicelab_staging", path = "builder"), |
| ] |
| |
| # Windows caches |
| WIN_DEFAULT_CACHES = [ |
| # Android SDK |
| swarming.cache(name = "android_sdk", path = "android"), |
| # Chrome |
| swarming.cache(name = "chrome_and_driver", path = "chrome"), |
| # OpenJDK |
| swarming.cache(name = "openjdk", path = "java"), |
| # PubCache |
| swarming.cache(name = "pub_cache", path = ".pub-cache"), |
| # Flutter SDK code |
| swarming.cache(name = "flutter_sdk", path = "flutter sdk"), |
| # Gradle cache |
| swarming.cache(name = "gradle", path = "gradle"), |
| # Builder cache |
| swarming.cache(name = "builder_win_devicelab", path = "builder"), |
| ] |
| |
| def _setup(): |
| devicelab_staging_prod_config() |
| |
| def devicelab_staging_prod_config(): |
| """Staging configurations for the framework repository.""" |
| drone_recipe_name = "devicelab/devicelab_drone" |
| luci.recipe( |
| name = drone_recipe_name, |
| cipd_package = "flutter/recipe_bundles/flutter.googlesource.com/recipes", |
| cipd_version = "refs/heads/main", |
| use_bbagent = True, |
| ) |
| |
| benchmark_notifies = [ |
| luci.notifier( |
| name = "benchmark_notification", |
| on_occurrence = ["INFRA_FAILURE", "FAILURE"], |
| notify_emails = ["flutter-engine@grotations.appspotmail.com"], |
| ), |
| ] |
| |
| # Defines console views. |
| console_view_name = "devicelab_staging" |
| luci.console_view( |
| name = console_view_name, |
| repo = repos.FLUTTER, |
| refs = [r"refs/heads/master"], |
| ) |
| |
| # Defines console view for benchmark tests. |
| benchmark_console_view_name = "devicelab_benchmark" |
| luci.console_view( |
| name = benchmark_console_view_name, |
| repo = repos.FLUTTER, |
| refs = [r"refs/heads/master"], |
| ) |
| |
| # Defines schedulers for staging builders. |
| trigger_name = "master-gitiles-trigger-devicelab-staging" |
| luci.gitiles_poller( |
| name = trigger_name, |
| bucket = "staging", |
| repo = repos.FLUTTER, |
| refs = [r"refs/heads/master"], |
| ) |
| |
| # Defines triggering policy |
| triggering_policy = scheduler.greedy_batching( |
| max_batch_size = 20, |
| max_concurrent_invocations = 1, |
| ) |
| # Defines framework prod builders |
| |
| # Mac prod builders. |
| mac_ios_tasks = [ |
| "animation_with_microtasks_perf_ios__timeline_summary", |
| "backdrop_filter_perf_ios__timeline_summary", |
| "basic_material_app_ios__compile", |
| "channels_integration_test_ios", |
| "complex_layout_ios__compile", |
| "complex_layout_ios__start_up", |
| "complex_layout_scroll_perf_ios__timeline_summary", |
| "external_ui_integration_test_ios", |
| "flavors_test_ios", |
| "flutter_gallery__transition_perf_e2e_ios", |
| "flutter_gallery_ios__compile", |
| "flutter_gallery_ios__start_up", |
| "flutter_gallery_ios__transition_perf", |
| "flutter_gallery_ios_sksl_warmup__transition_perf", |
| "flutter_view_ios__start_up", |
| "hello_world_ios__compile", |
| "hot_mode_dev_cycle_macos_target__benchmark", |
| "integration_test_test_ios", |
| "integration_ui_ios_driver", |
| "integration_ui_ios_frame_number", |
| "integration_ui_ios_keyboard_resize", |
| "integration_ui_ios_screenshot", |
| "integration_ui_ios_textfield", |
| "ios_app_with_extensions_test", |
| "ios_content_validation_test", |
| "ios_defines_test", |
| "ios_platform_view_tests", |
| "large_image_changer_perf_ios", |
| "macos_chrome_dev_mode", |
| "microbenchmarks_ios", |
| "new_gallery_ios__transition_perf", |
| "platform_channel_sample_test_ios", |
| "platform_channel_sample_test_swift", |
| "platform_interaction_test_ios", |
| "platform_view_ios__start_up", |
| "platform_views_scroll_perf_ios__timeline_summary", |
| "post_backdrop_filter_perf_ios__timeline_summary", |
| "simple_animation_perf_ios", |
| "smoke_catalina_hot_mode_dev_cycle_ios__benchmark", |
| "tiles_scroll_perf_ios__timeline_summary", |
| ] |
| for task in mac_ios_tasks: |
| staging_suffix = "" if task in BENCHMARKS else "_staging" |
| common.mac_prod_builder( |
| name = "Mac_ios%s %s|%s" % (staging_suffix, task, common.short_name(task)), |
| recipe = drone_recipe_name, |
| console_view_name = benchmark_console_view_name if task in BENCHMARKS else console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| notifies = benchmark_notifies if task in BENCHMARKS else None, |
| properties = { |
| "$flutter/devicelab_osx_sdk": { |
| "sdk_version": XCODE_VERSION, |
| }, |
| "dependencies": [ |
| { |
| "dependency": "xcode", |
| }, |
| { |
| "dependency": "gems", |
| }, |
| { |
| "dependency": "ios_signing", |
| }, |
| ], |
| "task_name": task, |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| "upload_metrics": True if task in BENCHMARKS else False, |
| }, |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| os = MAC_OS, |
| category = "Mac_ios", |
| dimensions = {"device_os": IOS_VERSION}, |
| execution_timeout = timeout.LONG, |
| expiration_timeout = timeout.LONG_EXPIRATION, |
| caches = MAC_DEFAULT_CACHES, |
| ) |
| |
| mac_android_tasks = [ |
| "drive_perf_debug_warning", |
| "hello_world_android__compile", |
| "hot_mode_dev_cycle__benchmark", |
| "integration_test_test", |
| "integration_ui_frame_number", |
| "run_release_test", |
| ] |
| |
| for task in mac_android_tasks: |
| common.mac_prod_builder( |
| name = "Mac_android_staging %s|%s" % (task, common.short_name(task)), |
| recipe = drone_recipe_name, |
| console_view_name = console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| properties = { |
| "dependencies": [ |
| { |
| "dependency": "android_sdk", |
| "version": "version:29.0", |
| }, |
| { |
| "dependency": "chrome_and_driver", |
| }, |
| { |
| "dependency": "open_jdk", |
| }, |
| ], |
| "task_name": task, |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| }, |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| os = MAC_OS, |
| category = "Mac_android", |
| dimensions = {"device_os": "N"}, |
| expiration_timeout = timeout.LONG_EXPIRATION, |
| execution_timeout = timeout.SHORT, |
| caches = MAC_ANDROID_DEFAULT_CACHES, |
| ) |
| |
| common.mac_prod_builder( |
| name = "Mac_staging plugin_test_ios|pti", |
| recipe = drone_recipe_name, |
| console_view_name = console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| properties = { |
| "dependencies": [{"dependency": "xcode"}, {"dependency": "gems"}], |
| "task_name": "plugin_test_ios", |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| "$flutter/osx_sdk": { |
| "sdk_version": "12c33", |
| }, |
| }, |
| category = "Mac", |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| caches = MAC_DEFAULT_CACHES, |
| os = "Mac", |
| dimensions = {"device_os": "none"}, |
| ) |
| |
| # TODO(keyonghan): add "build_aar_module_test" when arm64 android sdk is ready in cipd, |
| # https://github.com/flutter/flutter/issues/98532#issuecomment-1040893602 |
| mac_arm64_tasks = [ |
| "hot_mode_dev_cycle_macos_target__benchmark", |
| "flutter_gallery_ios__compile", |
| "hello_world_ios__compile", |
| "native_ui_tests_macos", |
| "native_ui_tests_ios", |
| "module_test_ios", |
| "build_ios_framework_module_test", |
| "plugin_lint_mac", |
| "run_release_test", |
| "integration_test_test", |
| "hello_world_android__compile", |
| "ios_app_with_extensions_test", |
| "ios_content_validation_test", |
| "macos_chrome_dev_mode", |
| ] |
| |
| for task in mac_arm64_tasks: |
| common.mac_prod_builder( |
| name = "Mac_arm64_staging %s|%s" % (task, common.short_name(task)), |
| recipe = drone_recipe_name, |
| console_view_name = console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| properties = { |
| "dependencies": [{"dependency": "xcode"}, {"dependency": "gems"}], |
| "task_name": task, |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| "upload_metrics": True, |
| "$flutter/osx_sdk": { |
| "sdk_version": "12c33", |
| }, |
| }, |
| category = "Mac_arm64", |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| caches = MAC_DEFAULT_CACHES, |
| os = "Mac-11", |
| dimensions = {"device_os": "none", "mac_model": "Macmini9,1"}, |
| ) |
| |
| # Linux prod builders. |
| linux_tasks = [ |
| "android_obfuscate_test", |
| "backdrop_filter_perf__timeline_summary", |
| "complex_layout_scroll_perf__timeline_summary", |
| "cubic_bezier_perf__timeline_summary", |
| "cull_opacity_perf__timeline_summary", |
| "flutter_gallery__transition_perf", |
| "flutter_gallery__transition_perf_e2e", |
| "flutter_gallery__transition_perf_hybrid", |
| "flutter_gallery__transition_perf_with_semantics", |
| "flutter_gallery_sksl_warmup__transition_perf", |
| "flutter_gallery_sksl_warmup__transition_perf_e2e", |
| "imagefiltered_transform_animation_perf__timeline_summary", |
| "new_gallery__transition_perf", |
| "picture_cache_perf__timeline_summary", |
| "platform_views_scroll_perf__timeline_summary", |
| "textfield_perf__timeline_summary", |
| "microbenchmarks", |
| ] |
| |
| for task in linux_tasks: |
| staging_suffix = "" if task in BENCHMARKS else "_staging" |
| common.linux_prod_builder( |
| name = "Linux_android%s %s|%s" % (staging_suffix, task, common.short_name(task)), |
| recipe = drone_recipe_name, |
| console_view_name = benchmark_console_view_name if task in BENCHMARKS else console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| notifies = benchmark_notifies if task in BENCHMARKS else None, |
| properties = { |
| "dependencies": [ |
| { |
| "dependency": "android_sdk", |
| "version": "version:29.0", |
| }, |
| { |
| "dependency": "chrome_and_driver", |
| }, |
| { |
| "dependency": "open_jdk", |
| "version": "11", |
| }, |
| { |
| "dependency": "curl", |
| }, |
| ], |
| "task_name": task, |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| "upload_metrics": True if (task in BENCHMARKS or task in SAMSUNGTASKS) else False, |
| }, |
| category = "Linux_android", |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| os = LINUX_OS, |
| dimensions = {"device_os": "R" if task in SAMSUNGTASKS else "N"}, |
| expiration_timeout = timeout.LONG_EXPIRATION, |
| caches = LINUX_DEFAULT_CACHES, |
| ) |
| |
| # Temp workaround to run `flutter_gallery__transition_perf` in both Samsung and MotoG4. |
| # TODO(keyonghan): to be removed after validation https://github.com/flutter/flutter/issues/92612 |
| if task == "flutter_gallery__transition_perf": |
| common.linux_prod_builder( |
| name = "Linux_android_staging %s|%s" % (task, common.short_name(task)), |
| recipe = drone_recipe_name, |
| console_view_name = console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| notifies = None, |
| properties = { |
| "dependencies": [ |
| { |
| "dependency": "android_sdk", |
| "version": "version:29.0", |
| }, |
| { |
| "dependency": "chrome_and_driver", |
| }, |
| { |
| "dependency": "open_jdk", |
| "version": "11", |
| }, |
| { |
| "dependency": "curl", |
| }, |
| ], |
| "task_name": task, |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| "upload_metrics": True, |
| }, |
| category = "Linux_android", |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| os = LINUX_OS, |
| dimensions = {"device_os": "R"}, |
| expiration_timeout = timeout.LONG_EXPIRATION, |
| caches = LINUX_DEFAULT_CACHES, |
| ) |
| |
| # Windows staging builders. |
| common.windows_prod_builder( |
| name = "Windows_staging build_aar_module_test|aarm", |
| recipe = drone_recipe_name, |
| console_view_name = console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| properties = { |
| "dependencies": [ |
| {"dependency": "android_sdk", "version": "version:29.0"}, |
| {"dependency": "chrome_and_driver"}, |
| {"dependency": "open_jdk"}, |
| {"dependency": "certs"}, |
| ], |
| "task_name": "build_aar_module_test", |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| }, |
| category = "Windows", |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| caches = WIN_DEFAULT_CACHES, |
| os = WINDOWS_OS, |
| ) |
| |
| win_tasks = [ |
| "basic_material_app_win__compile", |
| "flutter_gallery_win__compile", |
| "windows_chrome_dev_mode", |
| "flavors_test_win", |
| "channels_integration_test_win", |
| "hot_mode_dev_cycle_win__benchmark", |
| ] |
| |
| for task in win_tasks: |
| common.windows_prod_builder( |
| name = "Windows_staging %s|%s" % (task, common.short_name(task)), |
| recipe = drone_recipe_name, |
| console_view_name = console_view_name, |
| triggered_by = [trigger_name], |
| triggering_policy = triggering_policy, |
| properties = { |
| "dependencies": [ |
| {"dependency": "android_sdk", "version": "version:29.0"}, |
| {"dependency": "chrome_and_driver"}, |
| {"dependency": "open_jdk"}, |
| ], |
| "task_name": task, |
| "git_branch": DEFAULT_BRANCH, |
| "use_cas": True, |
| }, |
| category = "Windows_android", |
| bucket = "staging", |
| pool = "luci.flutter.staging", |
| dimensions = {"device_os": "N"}, |
| os = WINDOWS_OS, |
| ) |
| |
| devicelab_staging_config = struct(setup = _setup) |