fork more recipes for version 1.22.x
Bug: https://github.com/flutter/flutter/issues/66686
Change-Id: I8763ad084a4aca39860e7b026375f49eadb910ce
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/6820
Reviewed-by: Godofredo Contreras <godofredoc@google.com>
Commit-Queue: Christopher Fujino <fujino@google.com>
diff --git a/recipes/flutter/flutter_1_22_0.expected/shards.json b/recipes/flutter/flutter_1_22_0.expected/shards.json
new file mode 100644
index 0000000..f8366b6
--- /dev/null
+++ b/recipes/flutter/flutter_1_22_0.expected/shards.json
@@ -0,0 +1,170 @@
+[
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "name": "buildbucket.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"builder\": \"Linux SDK Drone\"}, \"experimental\": \"NO\", \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", \"priority\": 25, \"properties\": {\"android_sdk_license\": \"\", \"android_sdk_preview_license\": \"\", \"dependencies\": [], \"shard\": \"framework_tests\", \"subshard\": \"0\", \"task_name\": \"framework_tests-0\"}, \"requestId\": \"0-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"builder\": \"Linux SDK Drone\"}, \"experimental\": \"NO\", \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", \"priority\": 25, \"properties\": {\"android_sdk_license\": \"\", \"android_sdk_preview_license\": \"\", \"dependencies\": [], \"shard\": \"framework_tests\", \"subshard\": \"1_last\", \"task_name\": \"framework_tests-1_last\"}, \"requestId\": \"0-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"builder\": {}, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"input\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"task_name\": \"abc\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"Linux SDK Drone\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"priority\": 25, @@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_preview_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"dependencies\": [], @@@",
+ "@@@STEP_LOG_LINE@request@ \"shard\": \"framework_tests\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"subshard\": \"0\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"task_name\": \"framework_tests-0\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"0-00000000-0000-0000-0000-000000001337\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"Linux SDK Drone\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"priority\": 25, @@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_preview_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"dependencies\": [], @@@",
+ "@@@STEP_LOG_LINE@request@ \"shard\": \"framework_tests\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"subshard\": \"1_last\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"task_name\": \"framework_tests-1_last\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"0-00000000-0000-0000-0000-00000000133a\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@0@https://cr-buildbucket.appspot.com/build/0@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Task Shards",
+ "~followup_annotations": [
+ "@@@STEP_LINK@abc@https://cr-buildbucket.appspot.com/build/0@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "buildbucket.collect"
+ },
+ {
+ "cmd": [
+ "bb",
+ "collect",
+ "-host",
+ "cr-buildbucket.appspot.com",
+ "-interval",
+ "60s",
+ "0"
+ ],
+ "infra_step": true,
+ "name": "buildbucket.collect.wait",
+ "timeout": 10800,
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "name": "buildbucket.collect.get",
+ "stdin": "{\"requests\": [{\"getBuild\": {\"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\"}}]}",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"status\": \"SUCCESS\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"getBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@",
+ "@@@STEP_LINK@0@https://cr-buildbucket.appspot.com/build/0@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "display builds"
+ },
+ {
+ "cmd": [],
+ "name": "display builds.",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LINK@0@https://cr-buildbucket.appspot.com/build/0@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/flutter/flutter_1_22_0.expected/shards_fail.json b/recipes/flutter/flutter_1_22_0.expected/shards_fail.json
new file mode 100644
index 0000000..e7e9e9d
--- /dev/null
+++ b/recipes/flutter/flutter_1_22_0.expected/shards_fail.json
@@ -0,0 +1,94 @@
+[
+ {
+ "cmd": [
+ "bb",
+ "batch",
+ "-host",
+ "cr-buildbucket.appspot.com"
+ ],
+ "infra_step": true,
+ "name": "buildbucket.schedule",
+ "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"builder\": \"Linux SDK Drone\"}, \"experimental\": \"NO\", \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", \"priority\": 25, \"properties\": {\"android_sdk_license\": \"\", \"android_sdk_preview_license\": \"\", \"dependencies\": [], \"shard\": \"framework_tests\", \"subshard\": \"0\", \"task_name\": \"framework_tests-0\"}, \"requestId\": \"0-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"builder\": \"Linux SDK Drone\"}, \"experimental\": \"NO\", \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", \"priority\": 25, \"properties\": {\"android_sdk_license\": \"\", \"android_sdk_preview_license\": \"\", \"dependencies\": [], \"shard\": \"framework_tests\", \"subshard\": \"1_last\", \"task_name\": \"framework_tests-1_last\"}, \"requestId\": \"0-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@Request #0<br>Status code: 1<br>Message: bad<br>@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"responses\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"error\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"code\": 1, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"message\": \"bad\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@STEP_LOG_LINE@request@{@@@",
+ "@@@STEP_LOG_LINE@request@ \"requests\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"Linux SDK Drone\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"priority\": 25, @@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_preview_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"dependencies\": [], @@@",
+ "@@@STEP_LOG_LINE@request@ \"shard\": \"framework_tests\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"subshard\": \"0\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"task_name\": \"framework_tests-0\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"0-00000000-0000-0000-0000-000000001337\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"scheduleBuild\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"builder\": \"Linux SDK Drone\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"experimental\": \"NO\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"fields\": \"builder,createTime,createdBy,critical,endTime,id,input,number,output,startTime,status,updateTime\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"priority\": 25, @@@",
+ "@@@STEP_LOG_LINE@request@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"android_sdk_preview_license\": \"\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"dependencies\": [], @@@",
+ "@@@STEP_LOG_LINE@request@ \"shard\": \"framework_tests\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"subshard\": \"1_last\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"task_name\": \"framework_tests-1_last\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"requestId\": \"0-00000000-0000-0000-0000-00000000133a\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"swarming\": {@@@",
+ "@@@STEP_LOG_LINE@request@ \"parentRunId\": \"fake-task-id\"@@@",
+ "@@@STEP_LOG_LINE@request@ }, @@@",
+ "@@@STEP_LOG_LINE@request@ \"tags\": [@@@",
+ "@@@STEP_LOG_LINE@request@ {@@@",
+ "@@@STEP_LOG_LINE@request@ \"key\": \"user_agent\", @@@",
+ "@@@STEP_LOG_LINE@request@ \"value\": \"recipe\"@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ }@@@",
+ "@@@STEP_LOG_LINE@request@ ]@@@",
+ "@@@STEP_LOG_LINE@request@}@@@",
+ "@@@STEP_LOG_END@request@@@"
+ ]
+ },
+ {
+ "failure": {
+ "humanReason": "Build creation failed"
+ },
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/flutter/flutter_1_22_0.expected/validators.json b/recipes/flutter/flutter_1_22_0.expected/validators.json
new file mode 100644
index 0000000..18d28c6
--- /dev/null
+++ b/recipes/flutter/flutter_1_22_0.expected/validators.json
@@ -0,0 +1,222 @@
+[
+ {
+ "cmd": [],
+ "name": "checkout source code"
+ },
+ {
+ "cmd": [],
+ "name": "checkout source code.Checkout flutter/flutter",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[START_DIR]/flutter",
+ "--url",
+ "https://chromium.googlesource.com/external/github.com/flutter/flutter"
+ ],
+ "name": "checkout source code.Checkout flutter/flutter.git setup",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "master",
+ "--recurse-submodules",
+ "--progress",
+ "--tags"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "checkout source code.Checkout flutter/flutter.git fetch",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "checkout source code.Checkout flutter/flutter.git checkout",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "checkout source code.Checkout flutter/flutter.read revision",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@",
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "checkout source code.Checkout flutter/flutter.git clean",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "checkout source code.Checkout flutter/flutter.submodule sync",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "checkout source code.Checkout flutter/flutter.submodule update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "validate luci builder json schemas"
+ },
+ {
+ "cmd": [],
+ "name": "prepare environment"
+ },
+ {
+ "cmd": [
+ "flutter",
+ "doctor"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "prepare environment.flutter doctor",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "flutter",
+ "update-packages"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "prepare environment.download dependencies",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "prepare environment.dart analyze",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "chmod",
+ "755",
+ "RECIPE_MODULE[flutter::adhoc_validation]/resources/analyze.sh"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "prepare environment.dart analyze.Set execute permission",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "RECIPE_MODULE[flutter::adhoc_validation]/resources/analyze.sh"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "prepare environment.dart analyze.analyze",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@2@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/flutter/flutter_1_22_0.py b/recipes/flutter/flutter_1_22_0.py
new file mode 100644
index 0000000..d3f440f
--- /dev/null
+++ b/recipes/flutter/flutter_1_22_0.py
@@ -0,0 +1,115 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from contextlib import contextmanager
+import re
+
+from PB.go.chromium.org.luci.buildbucket.proto import build as build_pb2
+from PB.go.chromium.org.luci.buildbucket.proto import common as common_pb2
+from PB.go.chromium.org.luci.buildbucket.proto \
+ import builds_service as builds_service_pb2
+from google.protobuf import struct_pb2
+
+DEPS = [
+ 'flutter/android_sdk',
+ 'flutter/adhoc_validation',
+ 'flutter/json_util',
+ 'flutter/repo_util',
+ 'flutter/shard_util',
+ 'flutter/flutter_deps',
+ 'flutter/display_util',
+ 'recipe_engine/buildbucket',
+ 'recipe_engine/context',
+ 'recipe_engine/path',
+ 'recipe_engine/platform',
+ 'recipe_engine/properties',
+ 'recipe_engine/step',
+]
+
+
+def RunSteps(api):
+ """Recipe to run flutter sdk tests."""
+ # Trigger sharded tests.
+ if not api.properties.get('validation'):
+ builds = api.shard_util.schedule_builds()
+ builds = api.shard_util.collect_builds(builds)
+ api.display_util.display_builds(
+ step_name='display builds',
+ builds=builds,
+ raise_on_failure=True,
+ )
+ return
+
+ # Trigger validation tests. This is to optimize resources usage
+ # when don't need to run in shards.
+ checkout_path = api.path['start_dir'].join('flutter')
+ with api.step.nest('checkout source code'):
+ api.repo_util.checkout(
+ 'flutter',
+ checkout_path=checkout_path,
+ url=api.properties.get('git_url'),
+ ref=api.properties.get('git_ref')
+ )
+
+ if api.platform.is_linux:
+ # Validates flutter builders json format.
+ api.json_util.validate_json(checkout_path)
+
+ env, env_prefixes = api.repo_util.flutter_environment(checkout_path)
+ api.flutter_deps.required_deps(
+ env, env_prefixes, api.properties.get('dependencies', [])
+ )
+ with api.context(env=env, env_prefixes=env_prefixes, cwd=checkout_path):
+ with api.step.nest('prepare environment'):
+ api.step('flutter doctor', ['flutter', 'doctor'])
+ api.step('download dependencies', ['flutter', 'update-packages'])
+ api.adhoc_validation.run(
+ api.properties.get('validation_name'),
+ api.properties.get('validation'), api.properties.get('secrets', {})
+ )
+
+
+def GenTests(api):
+ yield api.test(
+ 'validators',
+ api.properties(
+ validation='analyze',
+ validation_name='dart analyze',
+ android_sdk_license='android_license',
+ android_sdk_preview_license='android_preview_license'
+ ), api.repo_util.flutter_environment_data()
+ )
+ props = struct_pb2.Struct()
+ props['task_name'] = 'abc'
+ build = build_pb2.Build(input=build_pb2.Build.Input(properties=props))
+ passed_batch_res = builds_service_pb2.BatchResponse(
+ responses=[
+ dict(
+ schedule_build=dict(
+ id=build.id, builder=build.builder, input=build.input
+ )
+ )
+ ]
+ )
+ yield api.test(
+ 'shards',
+ api.properties(shard='framework_tests', subshards=['0', '1_last']),
+ api.repo_util.flutter_environment_data(),
+ api.buildbucket.simulated_schedule_output(passed_batch_res)
+ )
+
+ err_batch_res = builds_service_pb2.BatchResponse(
+ responses=[
+ dict(error=dict(
+ code=1,
+ message='bad',
+ ),),
+ ],
+ )
+ yield api.test(
+ 'shards_fail',
+ api.properties(shard='framework_tests', subshards=['0', '1_last']),
+ api.repo_util.flutter_environment_data(),
+ api.buildbucket.simulated_schedule_output(err_batch_res)
+ )
diff --git a/recipes/flutter/flutter_drone_1_22_0.expected/android_sdk.json b/recipes/flutter/flutter_drone_1_22_0.expected/android_sdk.json
new file mode 100644
index 0000000..a719a53
--- /dev/null
+++ b/recipes/flutter/flutter_drone_1_22_0.expected/android_sdk.json
@@ -0,0 +1,379 @@
+[
+ {
+ "cmd": [],
+ "name": "Checkout flutter/flutter"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[START_DIR]/flutter",
+ "--url",
+ "https://chromium.googlesource.com/external/github.com/flutter/flutter"
+ ],
+ "name": "Checkout flutter/flutter.git setup",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "master",
+ "--recurse-submodules",
+ "--progress",
+ "--tags"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git fetch",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git checkout",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.read revision",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git clean",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.submodule sync",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.submodule update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "validate luci builder json schemas"
+ },
+ {
+ "cmd": [],
+ "name": "download Android SDK components"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android/tools",
+ "-ensure-file",
+ "flutter/android/sdk/tools/${platform} version:26.1.1",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "download Android SDK components.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:26.1.1--\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/android/sdk/tools/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android/platform-tools",
+ "-ensure-file",
+ "flutter/android/sdk/platform-tools/${platform} version:29.0.2",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "download Android SDK components.ensure_installed (2)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:29.0.2--\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/android/sdk/platform-tools/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android/platforms",
+ "-ensure-file",
+ "flutter/android/sdk/platforms version:29r1",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "download Android SDK components.ensure_installed (3)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:29r1----\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/android/sdk/platforms\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android/build-tools",
+ "-ensure-file",
+ "flutter/android/sdk/build-tools/${platform} version:29.0.1",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "download Android SDK components.ensure_installed (4)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:29.0.1--\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/android/sdk/build-tools/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android/ndk-bundle",
+ "-ensure-file",
+ "flutter/android/ndk/${platform} version:21.3.6528147",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "download Android SDK components.ensure_installed (5)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-version:21.3.652\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/android/ndk/resolved-platform\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android/licenses",
+ "-ensure-file",
+ "flutter_internal/android/sdk/licenses latest",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "download Android SDK components.ensure_installed (6)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter_internal/android/sdk/licenses\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "flutter",
+ "doctor",
+ "-v"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/android",
+ "ANDROID_SDK_ROOT": "[CACHE]/android",
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin",
+ "[CACHE]/android/platform-tools",
+ "[CACHE]/android/tools"
+ ]
+ },
+ "name": "flutter doctor"
+ },
+ {
+ "cmd": [
+ "flutter",
+ "update-packages"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/android",
+ "ANDROID_SDK_ROOT": "[CACHE]/android",
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin",
+ "[CACHE]/android/platform-tools",
+ "[CACHE]/android/tools"
+ ]
+ },
+ "name": "download dependencies"
+ },
+ {
+ "cmd": [
+ "dart",
+ "--enable-asserts",
+ "[START_DIR]/flutter/dev/bots/test.dart"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/android",
+ "ANDROID_SDK_ROOT": "[CACHE]/android",
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin",
+ "[CACHE]/android/platform-tools",
+ "[CACHE]/android/tools",
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin",
+ "[CACHE]/android/platform-tools",
+ "[CACHE]/android/tools"
+ ]
+ },
+ "name": "run test.dart for None shard and subshard None"
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/flutter/flutter_drone_1_22_0.expected/no_requirements.json b/recipes/flutter/flutter_drone_1_22_0.expected/no_requirements.json
new file mode 100644
index 0000000..a7c23e2
--- /dev/null
+++ b/recipes/flutter/flutter_drone_1_22_0.expected/no_requirements.json
@@ -0,0 +1,184 @@
+[
+ {
+ "cmd": [],
+ "name": "Checkout flutter/flutter"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[START_DIR]/flutter",
+ "--url",
+ "https://chromium.googlesource.com/external/github.com/flutter/flutter"
+ ],
+ "name": "Checkout flutter/flutter.git setup",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "master",
+ "--recurse-submodules",
+ "--progress",
+ "--tags"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git fetch",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git checkout",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.read revision",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git clean",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.submodule sync",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.submodule update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "validate luci builder json schemas"
+ },
+ {
+ "cmd": [
+ "flutter",
+ "doctor",
+ "-v"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "flutter doctor"
+ },
+ {
+ "cmd": [
+ "flutter",
+ "update-packages"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "download dependencies"
+ },
+ {
+ "cmd": [
+ "dart",
+ "--enable-asserts",
+ "[START_DIR]/flutter/dev/bots/test.dart"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin",
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "run test.dart for None shard and subshard None"
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/flutter/flutter_drone_1_22_0.expected/xcode.json b/recipes/flutter/flutter_drone_1_22_0.expected/xcode.json
new file mode 100644
index 0000000..a7c23e2
--- /dev/null
+++ b/recipes/flutter/flutter_drone_1_22_0.expected/xcode.json
@@ -0,0 +1,184 @@
+[
+ {
+ "cmd": [],
+ "name": "Checkout flutter/flutter"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[START_DIR]/flutter",
+ "--url",
+ "https://chromium.googlesource.com/external/github.com/flutter/flutter"
+ ],
+ "name": "Checkout flutter/flutter.git setup",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "master",
+ "--recurse-submodules",
+ "--progress",
+ "--tags"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git fetch",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git checkout",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.read revision",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.git clean",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.submodule sync",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "infra_step": true,
+ "name": "Checkout flutter/flutter.submodule update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "validate luci builder json schemas"
+ },
+ {
+ "cmd": [
+ "flutter",
+ "doctor",
+ "-v"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "flutter doctor"
+ },
+ {
+ "cmd": [
+ "flutter",
+ "update-packages"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "download dependencies"
+ },
+ {
+ "cmd": [
+ "dart",
+ "--enable-asserts",
+ "[START_DIR]/flutter/dev/bots/test.dart"
+ ],
+ "cwd": "[START_DIR]/flutter",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "PUB_CACHE": "[CACHE]/.pub-cache",
+ "SHARD": null,
+ "SUBSHARD": null
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin",
+ "[START_DIR]/flutter/bin",
+ "[START_DIR]/flutter/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "run test.dart for None shard and subshard None"
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/flutter/flutter_drone_1_22_0.py b/recipes/flutter/flutter_drone_1_22_0.py
new file mode 100644
index 0000000..9f75b94
--- /dev/null
+++ b/recipes/flutter/flutter_drone_1_22_0.py
@@ -0,0 +1,85 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Recipe to run shard + subshard tests for the Flutter SDK repository.
+# This recipe will run a single shard and will be used by flutter/flutter.py.
+
+from contextlib import contextmanager
+import re
+
+DEPS = [
+ 'depot_tools/osx_sdk',
+ 'flutter/android_sdk',
+ 'flutter/json_util',
+ 'flutter/repo_util',
+ 'flutter/flutter_deps',
+ 'flutter/os_utils',
+ 'recipe_engine/context',
+ 'recipe_engine/isolated',
+ 'recipe_engine/path',
+ 'recipe_engine/platform',
+ 'recipe_engine/properties',
+ 'recipe_engine/step',
+]
+
+
+def RunShard(api, env, env_prefixes, checkout_path):
+ with api.context(env=env, env_prefixes=env_prefixes, cwd=checkout_path):
+ api.step(
+ 'run test.dart for %s shard and subshard %s' %
+ (api.properties.get('shard'), api.properties.get('subshard')), [
+ 'dart', '--enable-asserts',
+ checkout_path.join('dev', 'bots', 'test.dart')
+ ]
+ )
+
+
+def RunSteps(api):
+ checkout_path = api.path['start_dir'].join('flutter')
+ api.repo_util.checkout(
+ 'flutter',
+ checkout_path=checkout_path,
+ url=api.properties.get('git_url'),
+ ref=api.properties.get('git_ref')
+ )
+
+ if api.platform.is_linux:
+ # Validates flutter builders json format.
+ api.json_util.validate_json(checkout_path)
+
+ env, env_prefixes = api.repo_util.flutter_environment(checkout_path)
+ deps = api.properties.get('dependencies', [])
+ api.flutter_deps.required_deps(env, env_prefixes, deps)
+ # Add shard and subshard.
+ env['SHARD'] = api.properties.get('shard')
+ env['SUBSHARD'] = api.properties.get('subshard')
+ with api.context(env=env, env_prefixes=env_prefixes, cwd=checkout_path):
+ api.step('flutter doctor', ['flutter', 'doctor', '-v'])
+ api.step('download dependencies', ['flutter', 'update-packages'])
+ dep_list = [d['dependency'] for d in deps]
+ if 'xcode' in dep_list:
+ with api.osx_sdk('ios'):
+ RunShard(api, env, env_prefixes, checkout_path)
+ else:
+ RunShard(api, env, env_prefixes, checkout_path)
+
+ # This is a noop for non windows tasks.
+ api.os_utils.kill_win_processes()
+
+
+def GenTests(api):
+ yield api.test('no_requirements', api.repo_util.flutter_environment_data())
+ yield api.test(
+ 'android_sdk', api.repo_util.flutter_environment_data(),
+ api.properties(
+ dependencies=[{'dependency': 'android_sdk'}],
+ android_sdk=True,
+ android_sdk_preview_license='abc',
+ android_sdk_license='cde'
+ )
+ )
+ yield api.test(
+ 'xcode', api.repo_util.flutter_environment_data(),
+ api.properties(dependencies=[{'dependency': 'xcode'}],)
+ )