# Describes the tasks we run in the continuous integration (CI) environment.
#
# Cocoon[1] uses this file to generate a checklist of tasks to be performed for
# every master commit.
#
# [1] github.com/flutter/cocoon

# CI tasks.
#
# Each key in this dictionary is the unique name of a task, which also
# corresponds to a file in the "bin/" directory that the task runner will run.
#
# Required properties:
#
# * description: free form string
#       describes what the task is about
# * stage: one of "devicelab", "devicelab_ios", "devicelab_win"
#       tasks are grouped by stage so they appear next to each on the dashboard and have a distinct
#       icon attached to them. Stages can be used to create dependencies, e.g. we may decide to not
#       run device tests on red Travis.
# * required_agent_capabilities: a list of strings
#       list of capabilities a devicelab agent must have to be able to run this task.
#
# Optional properties:
#
# * flaky: boolean true or false
#       whether the task is considered flaky; the result of running a flaky task does not affect
#       the overall build status.
# * timeout_in_minutes: integer
#       a custom task timeout, specified in minutes.

tasks:
  # Deviceless tests

  # TODO: make these not require "has-android-device"; it is only there to
  #       ensure we have the Android SDK.

  flutter_gallery__build:
    description: >
      Collects various performance metrics from AOT builds of the Flutter
      Gallery.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  complex_layout__build:
    description: >
      Collects various performance metrics from AOT builds of the Complex
      Layout sample app.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  basic_material_app__size:
    description: >
      Measures the APK size of a basic material app.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  analyzer_cli__analysis_time:
    description: >
      Measures the speed of analyzing Flutter itself in batch mode.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  analyzer_server__analysis_time:
    description: >
      Measures the speed of analyzing Flutter itself in server mode.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  technical_debt__cost:
    description: >
      Estimates our technical debt (TODOs, analyzer ignores, etc).
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  # Android on-device tests

  complex_layout_scroll_perf__timeline_summary:
    description: >
      Measures the runtime performance of the Complex Layout sample app on
      Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]
    flaky: true

  channels_integration_test:
    description: >
      Checks that platform channels work on Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  platform_channel_sample_test:
    description: >
     Runs a driver test on the Platform Channel sample app on Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__start_up:
    description: >
      Measures the startup time of the Flutter Gallery app on Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  complex_layout__start_up:
    description: >
      Measures the startup time of the Complex Layout sample app on Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__transition_perf:
    description: >
      Measures the performance of screen transitions in Flutter Gallery on
      Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]
    flaky: true

  hot_mode_dev_cycle__benchmark:
    description: >
      Measures the performance of Dart VM hot patching feature.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  complex_layout_scroll_perf__memory:
    description: >
      Measures memory usage of the scroll performance test.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  hello_world__memory:
    description: >
      Measures starting memory usage of the simplest Flutter app.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__memory_nav:
    description: >
      Measures memory usage after repeated navigation in Gallery.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__back_button_memory:
    description: >
      Measures memory usage after Android app suspend and resume.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  microbenchmarks:
    description: >
      Runs benchmarks from dev/benchmarks/microbenchmarks.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]
    timeout_in_minutes: 30

  flutter_view__start_up:
    description: >
      Verifies that Flutter View can be used from an Android project.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  # iOS on-device tests

  channels_integration_test_ios:
    description: >
      Checks that platform channels work on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]
    flaky: true

  platform_channel_sample_test_ios:
    description: >
      Runs a driver test on the Platform Channel sample app on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  complex_layout_scroll_perf_ios__timeline_summary:
    description: >
      Measures the runtime performance of the Complex Layout sample app on
      iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  flutter_gallery_ios__start_up:
    description: >
      Measures the startup time of the Flutter Gallery app on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  complex_layout_ios__start_up:
    description: >
      Measures the startup time of the Complex Layout sample app on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  flutter_gallery_ios__transition_perf:
    description: >
      Measures the performance of screen transitions in Flutter Gallery on
      iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  basic_material_app_ios__size:
    description: >
      Measures the IPA size of a basic material app.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  microbenchmarks_ios:
    description: >
      Runs benchmarks from dev/benchmarks/microbenchmarks on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]
    timeout_in_minutes: 30
    flaky: true

  flutter_view_ios__start_up:
    description: >
      Verifies that Flutter View can be used from an iOS project.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  # Tests running on Windows host

  channels_integration_test_win:
    description: >
      Checks that platform channels work when app is launched from Windows.
    stage: devicelab_win
    required_agent_capabilities: ["windows"]
    flaky: true

  flutter_gallery_win__build:
    description: >
      Collects various performance metrics from AOT builds of the Flutter
      Gallery on Windows.
    stage: devicelab_win
    required_agent_capabilities: ["windows"]
    flaky: true

  hot_mode_dev_cycle_win__benchmark:
    description: >
      Measures the performance of Dart VM hot patching feature on Windows.
    stage: devicelab_win
    required_agent_capabilities: ["windows"]
    flaky: true
