# 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
    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
    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
    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
    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
    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
    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
    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
    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
