blob: 8984530bdcd818e7752280cca2d70cbbe4228c14 [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
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)