# Describes the targets run in continuous integration environment.
#
# Flutter infra uses this file to generate a checklist of tasks to be performed
# for every commit.
#
# More information at:
#  * https://github.com/flutter/cocoon/blob/main/CI_YAML.md
enabled_branches:
  - main

platform_properties:
  linux:
    properties:
      dependencies: >
        [
          {"dependency": "curl", "version": "version:7.64.0"}
        ]
      device_type: none
      os: Linux
  windows:
    properties:
      dependencies: >
        [
          {"dependency": "certs", "version": "version:9563bb"}
        ]
      device_type: none
      os: Windows
  mac_x64:
    properties:
      dependencies: >-
        [
          {"dependency": "xcode", "version": "14a5294e"},
          {"dependency": "gems", "version": "v3.3.14"}
        ]
      os: Mac-12
      device_type: none
      cpu: x86
      xcode: 14a5294e # xcode 14.0 beta 5
      

targets:
  ### iOS+macOS tasks ***
  # TODO(stuartmorgan): Move this to ARM once google_maps_flutter has ARM
  # support. `pod lint` makes a synthetic target that doesn't respect the
  # pod's arch exclusions, so fails to build.
  - name: Mac_x64 lint_podspecs
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      version_file: flutter_master.version
      target_file: mac_lint_podspecs.yaml

  ### macOS desktop tasks ###
  # macos-platform_tests builds all the plugins on M1, so this build is run
  # on Intel to give us build coverage of both host types.
  - name: Mac_x64 build_all_plugins master
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      version_file: flutter_master.version
      target_file: mac_build_all_plugins.yaml
      channel: master

  - name: Mac_x64 build_all_plugins stable
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      version_file: flutter_stable.version
      target_file: mac_build_all_plugins.yaml
      channel: stable

  ### iOS tasks ###
  # TODO(stuartmorgan): Swap this and ios-build_all_plugins once simulator
  # tests are reliable on the ARM infrastructure. See discussion at
  # https://github.com/flutter/plugins/pull/5693#issuecomment-1126011089
  - name: Mac_x64 ios_platform_tests_1_of_4 master
    recipe: plugins/plugins
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      add_recipes_cq: "true"
      version_file: flutter_master.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 0 --shardCount 4"

  - name: Mac_x64 ios_platform_tests_2_of_4 master
    recipe: plugins/plugins
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      add_recipes_cq: "true"
      version_file: flutter_master.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 1 --shardCount 4"

  - name: Mac_x64 ios_platform_tests_3_of_4 master
    recipe: plugins/plugins
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      add_recipes_cq: "true"
      version_file: flutter_master.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 2 --shardCount 4"

  - name: Mac_x64 ios_platform_tests_4_of_4 master
    recipe: plugins/plugins
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      add_recipes_cq: "true"
      version_file: flutter_master.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 3 --shardCount 4"

  # Don't run full platform tests on both channels in pre-submit.
  - name: Mac_x64 ios_platform_tests_1_of_4 stable
    recipe: plugins/plugins
    presubmit: false
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      channel: stable
      add_recipes_cq: "true"
      version_file: flutter_stable.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 0 --shardCount 4"

  - name: Mac_x64 ios_platform_tests_2_of_4 stable
    recipe: plugins/plugins
    presubmit: false
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      channel: stable
      add_recipes_cq: "true"
      version_file: flutter_stable.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 1 --shardCount 4"

  - name: Mac_x64 ios_platform_tests_3_of_4 stable
    recipe: plugins/plugins
    presubmit: false
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      channel: stable
      add_recipes_cq: "true"
      version_file: flutter_stable.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 2 --shardCount 4"

  - name: Mac_x64 ios_platform_tests_4_of_4 stable
    recipe: plugins/plugins
    presubmit: false
    bringup: true # New target: https://github.com/flutter/plugins/pull/6682
    timeout: 30
    properties:
      channel: stable
      add_recipes_cq: "true"
      version_file: flutter_stable.version
      target_file: mac_ios_platform_tests.yaml
      package_sharding: "--shardIndex 3 --shardCount 4"

  - name: Windows win32-platform_tests master
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      target_file: windows_build_and_platform_tests.yaml
      channel: master
      version_file: flutter_master.version
      dependencies: >
        [
          {"dependency": "vs_build", "version": "version:vs2019"}
        ]

  - name: Windows win32-platform_tests stable
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      target_file: windows_build_and_platform_tests.yaml
      channel: stable
      version_file: flutter_stable.version
      dependencies: >
        [
          {"dependency": "vs_build", "version": "version:vs2019"}
        ]

  - name: Windows windows-build_all_plugins master
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      target_file: build_all_plugins.yaml
      channel: master
      version_file: flutter_master.version
      dependencies: >
        [
          {"dependency": "vs_build", "version": "version:vs2019"}
        ]

  - name: Windows windows-build_all_plugins stable
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      target_file: build_all_plugins.yaml
      channel: stable
      version_file: flutter_stable.version
      dependencies: >
        [
          {"dependency": "vs_build", "version": "version:vs2019"}
        ]

  - name: Windows plugin_tools_tests
    recipe: plugins/plugins
    timeout: 30
    properties:
      add_recipes_cq: "true"
      target_file: plugin_tools_tests.yaml
      channel: master
      version_file: flutter_master.version

  - name: Linux ci_yaml plugins roller
    recipe: infra/ci_yaml
    timeout: 30
    runIf:
      - .ci.yaml
