blob: 992f0e35ccffcd6c8aa595dbf3c53a268ace4ca1 [file] [log] [blame]
#!/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
MAC_OS = "Mac"
WINDOWS_OS = "Windows-10"
XCODE_VERSION = "12c33" # 12.3
# 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",
]
# 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/master",
use_bbagent = True,
)
# 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,
properties = {
"$flutter/devicelab_osx_sdk": {
"sdk_version": XCODE_VERSION,
},
"dependencies": [
{
"dependency": "xcode",
},
{
"dependency": "gems",
},
{
"dependency": "ios_signing",
},
],
"task_name": task,
"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-14.4.2"},
execution_timeout = timeout.LONG,
expiration_timeout = timeout.LONG_EXPIRATION,
caches = MAC_DEFAULT_CACHES,
)
mac_android_tasks = [
"android_semantics_integration_test",
"backdrop_filter_perf__timeline_summary",
"channels_integration_test",
"color_filter_and_fade_perf__timeline_summary",
"complex_layout_scroll_perf__memory",
"complex_layout_scroll_perf__timeline_summary",
"complex_layout__start_up",
"cubic_bezier_perf_sksl_warmup__timeline_summary",
"cubic_bezier_perf__timeline_summary",
"cull_opacity_perf__timeline_summary",
"drive_perf_debug_warning",
"embedded_android_views_integration_test",
"external_ui_integration_test",
"fading_child_animation_perf__timeline_summary",
"fast_scroll_large_images__memory",
"flavors_test",
"flutter_view__start_up",
"fullscreen_textfield_perf__timeline_summary",
"hello_world_android__compile",
"hello_world__memory",
"home_scroll_perf__timeline_summary",
"hot_mode_dev_cycle__benchmark",
"hybrid_android_views_integration_test",
"imagefiltered_transform_animation_perf__timeline_summary",
"integration_test_test",
"integration_ui_driver",
"integration_ui_frame_number",
"integration_ui_keyboard_resize",
"integration_ui_screenshot",
"integration_ui_textfield",
"microbenchmarks",
"new_gallery__transition_perf",
"picture_cache_perf__timeline_summary",
"platform_channel_sample_test",
"platform_interaction_test",
"platform_view__start_up",
"run_release_test",
"service_extensions_test",
"textfield_perf__timeline_summary",
"tiles_scroll_perf__timeline_summary",
]
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",
},
{
"dependency": "chrome_and_driver",
},
{
"dependency": "open_jdk",
},
],
"task_name": task,
"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": "android_sdk"}, {"dependency": "xcode"}, {"dependency": "open_jdk"}, {"dependency": "gems"}],
"task_name": "plugin_test_ios",
"use_cas": True,
"$flutter/osx_sdk": {
"sdk_version": XCODE_VERSION,
},
},
category = "Mac",
bucket = "staging",
pool = "luci.flutter.staging",
caches = MAC_DEFAULT_CACHES,
os = MAC_OS,
)
# Linux prod builders.
linux_tasks = [
"analyzer_benchmark",
"android_defines_test",
"android_obfuscate_test",
"android_view_scroll_perf__timeline_summary",
"animated_placeholder_perf__e2e_summary",
"fullscreen_textfield_perf",
"fullscreen_textfield_perf__e2e_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",
]
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,
properties = {
"dependencies": [
{
"dependency": "android_sdk",
},
{
"dependency": "chrome_and_driver",
},
{
"dependency": "open_jdk",
},
{
"dependency": "curl",
},
],
"task_name": task,
"use_cas": True,
"upload_metrics": True if task in BENCHMARKS else False,
},
category = "Linux_android",
bucket = "staging",
pool = "luci.flutter.staging",
os = "Android",
dimensions = {"device_os": "N"},
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"}, {"dependency": "chrome_and_driver"}, {"dependency": "open_jdk"}, {"dependency": "certs"}],
"task_name": "build_aar_module_test",
"use_cas": True,
},
category = "Windows",
bucket = "staging",
pool = "luci.flutter.staging",
caches = WIN_DEFAULT_CACHES,
os = WINDOWS_OS,
)
win_tasks = [
"complex_layout_win__compile",
"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"},
{"dependency": "chrome_and_driver"},
{"dependency": "open_jdk"},
],
"task_name": task,
"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)