| gcp_credentials: ENCRYPTED[!9c8e92e8da192ce2a51b7d4ed9948c4250d0bae3660193d9b901196c9692abbebe784d4a32e9f38b328571d65f6e7aed!] |
| |
| # Run on PRs and main branch post submit only. Don't run tests when tagging. |
| only_if: $CIRRUS_TAG == '' && ($CIRRUS_PR != '' || $CIRRUS_BRANCH == 'main') |
| env: |
| CHANNEL: "master" # Default to master when not explicitly set by a task. |
| PLUGIN_TOOL_COMMAND: "dart ./script/tool/bin/flutter_plugin_tools.dart" |
| |
| setup_template: &SETUP_TEMPLATE |
| upgrade_flutter_script: |
| # Channels that are part of our normal test matrix use a pinned, |
| # auto-rolled version to prevent out-of-band CI failures due to changes in |
| # Flutter. |
| - TARGET_TREEISH=$CHANNEL |
| - if [[ "$CHANNEL" == "master" || "$CHANNEL" == "stable" ]]; then |
| - TARGET_TREEISH=$(< .ci/flutter_$CHANNEL.version) |
| - fi |
| # Ensure that the repository has all the branches. |
| - cd $FLUTTER_HOME |
| - git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" |
| - git fetch origin |
| # Switch to the requested channel. |
| - git checkout $TARGET_TREEISH |
| # When using a branch rather than a hash or version tag, reset to the |
| # upstream branch rather than using pull, since the base image can sometimes |
| # be in a state where it has diverged from upstream (!). |
| - if [[ "$TARGET_TREEISH" == "$CHANNEL" ]] && [[ "$CHANNEL" != *"."* ]]; then |
| - git reset --hard @{u} |
| - fi |
| # Run doctor to allow auditing of what version of Flutter the run is using. |
| - flutter doctor -v |
| tool_setup_script: |
| - .ci/scripts/prepare_tool.sh |
| |
| # Light-workload Linux tasks. |
| # These use default machines, with fewer CPUs, to reduce pressure on the |
| # concurrency limits. |
| task: |
| << : *SETUP_TEMPLATE |
| gke_container: |
| dockerfile: .ci/Dockerfile |
| builder_image_name: docker-builder-linux # gce vm image |
| builder_image_project: flutter-cirrus |
| cluster_name: test-cluster |
| zone: us-central1-a |
| namespace: default |
| matrix: |
| # Repository rules and best-practice enforcement. |
| # Only channel-agnostic tests should go here since it is only run once |
| # (on Flutter master). |
| - name: repo_checks |
| always: |
| version_script: |
| # For pre-submit, pass the PR labels to the script to allow for |
| # check overrides. |
| # For post-submit, ignore platform version breaking version changes |
| # and missing version/CHANGELOG detection since the labels aren't |
| # available outside of the context of the PR. |
| - if [[ $CIRRUS_PR == "" ]]; then |
| - ./script/tool_runner.sh version-check --ignore-platform-interface-breaks |
| - else |
| - ./script/tool_runner.sh version-check --check-for-missing-changes --pr-labels="$CIRRUS_PR_LABELS" |
| - fi |
| federated_safety_script: |
| # This check is only meaningful for PRs, as it validates changes |
| # rather than state. |
| - if [[ $CIRRUS_PR == "" ]]; then |
| - echo "Only run in presubmit" |
| - else |
| - ./script/tool_runner.sh federation-safety-check |
| - fi |
| - name: readme_excerpts |
| env: |
| CIRRUS_CLONE_SUBMODULES: true |
| script: ./script/tool_runner.sh update-excerpts --fail-on-change |
| ### Linux desktop tasks ### |
| - name: linux-platform_tests |
| # Don't run full platform tests on both channels in pre-submit. |
| skip: $CIRRUS_PR != '' && $CHANNEL == 'stable' |
| env: |
| matrix: |
| CHANNEL: "master" |
| CHANNEL: "stable" |
| build_script: |
| - ./script/tool_runner.sh build-examples --linux |
| native_test_script: |
| - xvfb-run ./script/tool_runner.sh native-test --linux --no-integration |
| drive_script: |
| - xvfb-run ./script/tool_runner.sh drive-examples --linux --exclude=script/configs/exclude_integration_linux.yaml |
| |
| # Heavy-workload Linux tasks. |
| # These use machines with more CPUs and memory, so will reduce parallelization |
| # for non-credit runs. |
| task: |
| << : *SETUP_TEMPLATE |
| gke_container: |
| dockerfile: .ci/Dockerfile |
| builder_image_name: docker-builder-linux # gce vm image |
| builder_image_project: flutter-cirrus |
| cluster_name: test-cluster |
| zone: us-central1-a |
| namespace: default |
| cpu: 4 |
| memory: 16G |
| matrix: |
| ### Android tasks ### |
| - name: android-platform_tests |
| # Don't run full platform tests on both channels in pre-submit. |
| skip: $CIRRUS_PR != '' && $CHANNEL == 'stable' |
| env: |
| matrix: |
| PACKAGE_SHARDING: "--shardIndex 0 --shardCount 6" |
| PACKAGE_SHARDING: "--shardIndex 1 --shardCount 6" |
| PACKAGE_SHARDING: "--shardIndex 2 --shardCount 6" |
| PACKAGE_SHARDING: "--shardIndex 3 --shardCount 6" |
| PACKAGE_SHARDING: "--shardIndex 4 --shardCount 6" |
| PACKAGE_SHARDING: "--shardIndex 5 --shardCount 6" |
| matrix: |
| CHANNEL: "master" |
| CHANNEL: "stable" |
| MAPS_API_KEY: ENCRYPTED[d6583b08f79f91ea4844c77460f04539965e46ad2fd97fb7c062b4dfe88016228b86ebe8c220ab4187e0c4bd773dc1e7] |
| GCLOUD_FIREBASE_TESTLAB_KEY: ENCRYPTED[1a2eebf9367197bbe812d9a0ea83a53a05aeba4bb5e4964fe6a69727883cd87e51238d39237b1f80b0894c48419ac268] |
| native_unit_test_script: |
| # Native integration tests are handled by Firebase Test Lab below, so |
| # only run unit tests. |
| - ./script/tool_runner.sh native-test --android --no-integration --exclude script/configs/exclude_native_unit_android.yaml |
| firebase_test_lab_script: |
| - if [[ -n "$GCLOUD_FIREBASE_TESTLAB_KEY" ]]; then |
| - echo $GCLOUD_FIREBASE_TESTLAB_KEY > ${HOME}/gcloud-service-key.json |
| - ./script/tool_runner.sh firebase-test-lab --device model=redfin,version=30 --exclude=script/configs/exclude_integration_android.yaml |
| - else |
| - echo "This user does not have permission to run Firebase Test Lab tests." |
| - fi |