Append drone dimensions to web engine framework

The drone_dimensions property needs to be injected to the shard_util_v2 explicitly, same as engine recipes. Otherwise, the subbuilds just fail to pick up those dimensions.

Change-Id: Id2fa72c24d20ce58731d24dd01173a5a7e000681
Bug: https://github.com/flutter/flutter/issues/117538
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/41040
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Keyong Han <keyonghan@google.com>
diff --git a/recipes/engine/web_engine_framework.expected/linux-pre-submit.json b/recipes/engine/web_engine_framework.expected/linux-pre-submit.json
index eb0a260..7388155 100644
--- a/recipes/engine/web_engine_framework.expected/linux-pre-submit.json
+++ b/recipes/engine/web_engine_framework.expected/linux-pre-submit.json
@@ -2665,7 +2665,7 @@
       }
     },
     "name": "launch builds.schedule",
-    "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"flutter\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"priority\": 25, \"properties\": {\"build\": {\"name\": \"web_tests-0\", \"properties\": {\"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"shard\": \"web_tests\", \"subshard\": \"0\", \"task_name\": \"web_tests-0\"}, \"recipe\": \"flutter/flutter_drone\"}, \"clobber\": true, \"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"gclient_variables\": {}, \"git_branch\": \"main\", \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"goma_jobs\": \"200\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"recipe\": \"flutter/flutter_drone\", \"shard\": \"web_tests\", \"subshard\": \"0\", \"subshards\": [\"0\", \"1_last\"], \"task_name\": \"web_tests-0\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"flutter\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"priority\": 25, \"properties\": {\"build\": {\"name\": \"web_tests-1_last\", \"properties\": {\"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"shard\": \"web_tests\", \"subshard\": \"1_last\", \"task_name\": \"web_tests-1_last\"}, \"recipe\": \"flutter/flutter_drone\"}, \"clobber\": true, \"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"gclient_variables\": {}, \"git_branch\": \"main\", \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"goma_jobs\": \"200\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"recipe\": \"flutter/flutter_drone\", \"shard\": \"web_tests\", \"subshard\": \"1_last\", \"subshards\": [\"0\", \"1_last\"], \"task_name\": \"web_tests-1_last\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
+    "stdin": "{\"requests\": [{\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"flutter\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"priority\": 25, \"properties\": {\"build\": {\"drone_dimensions\": [], \"name\": \"web_tests-0\", \"properties\": {\"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"shard\": \"web_tests\", \"subshard\": \"0\", \"task_name\": \"web_tests-0\"}, \"recipe\": \"flutter/flutter_drone\"}, \"clobber\": true, \"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"gclient_variables\": {}, \"git_branch\": \"main\", \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"goma_jobs\": \"200\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"recipe\": \"flutter/flutter_drone\", \"shard\": \"web_tests\", \"subshard\": \"0\", \"subshards\": [\"0\", \"1_last\"], \"task_name\": \"web_tests-0\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-000000001337\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}, {\"scheduleBuild\": {\"builder\": {\"bucket\": \"try\", \"builder\": \"Linux Engine Drone\", \"project\": \"flutter\"}, \"exe\": {\"cipdVersion\": \"refs/heads/main\"}, \"experimental\": \"NO\", \"experiments\": {\"luci.buildbucket.parent_tracking\": false}, \"fields\": \"builder,createTime,createdBy,critical,endTime,id,infra,input,number,output,startTime,status,updateTime\", \"gerritChanges\": [{\"change\": \"123456\", \"host\": \"flutter-review.googlesource.com\", \"patchset\": \"7\", \"project\": \"mirrors/engine\"}], \"priority\": 25, \"properties\": {\"build\": {\"drone_dimensions\": [], \"name\": \"web_tests-1_last\", \"properties\": {\"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"shard\": \"web_tests\", \"subshard\": \"1_last\", \"task_name\": \"web_tests-1_last\"}, \"recipe\": \"flutter/flutter_drone\"}, \"clobber\": true, \"dependencies\": [{\"dependency\": \"chrome_and_driver\", \"version\": \"version:96.2\"}], \"gclient_variables\": {}, \"git_branch\": \"main\", \"git_ref\": \"b6efc758213fdfffee1234465\", \"git_url\": \"https://github.com/flutter/flutter\", \"goma_jobs\": \"200\", \"local_web_sdk_cas_hash\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/0\", \"recipe\": \"flutter/flutter_drone\", \"shard\": \"web_tests\", \"subshard\": \"1_last\", \"subshards\": [\"0\", \"1_last\"], \"task_name\": \"web_tests-1_last\"}, \"requestId\": \"8945511751514863184-00000000-0000-0000-0000-00000000133a\", \"swarming\": {\"parentRunId\": \"fake-task-id\"}, \"tags\": [{\"key\": \"cq_experimental\", \"value\": \"false\"}, {\"key\": \"parent_buildbucket_id\", \"value\": \"8945511751514863184\"}, {\"key\": \"user_agent\", \"value\": \"recipe\"}]}}]}",
     "~followup_annotations": [
       "@@@STEP_NEST_LEVEL@1@@@",
       "@@@STEP_LOG_LINE@json.output@{@@@",
@@ -2721,6 +2721,7 @@
       "@@@STEP_LOG_LINE@request@        \"priority\": 25, @@@",
       "@@@STEP_LOG_LINE@request@        \"properties\": {@@@",
       "@@@STEP_LOG_LINE@request@          \"build\": {@@@",
+      "@@@STEP_LOG_LINE@request@            \"drone_dimensions\": [], @@@",
       "@@@STEP_LOG_LINE@request@            \"name\": \"web_tests-0\", @@@",
       "@@@STEP_LOG_LINE@request@            \"properties\": {@@@",
       "@@@STEP_LOG_LINE@request@              \"dependencies\": [@@@",
@@ -2806,6 +2807,7 @@
       "@@@STEP_LOG_LINE@request@        \"priority\": 25, @@@",
       "@@@STEP_LOG_LINE@request@        \"properties\": {@@@",
       "@@@STEP_LOG_LINE@request@          \"build\": {@@@",
+      "@@@STEP_LOG_LINE@request@            \"drone_dimensions\": [], @@@",
       "@@@STEP_LOG_LINE@request@            \"name\": \"web_tests-1_last\", @@@",
       "@@@STEP_LOG_LINE@request@            \"properties\": {@@@",
       "@@@STEP_LOG_LINE@request@              \"dependencies\": [@@@",
diff --git a/recipes/engine/web_engine_framework.py b/recipes/engine/web_engine_framework.py
index 17912c1..7bf628e 100644
--- a/recipes/engine/web_engine_framework.py
+++ b/recipes/engine/web_engine_framework.py
@@ -151,7 +151,8 @@
         {
             'name': task_name,
             'properties': drone_props,
-            'recipe': 'flutter/flutter_drone'
+            'recipe': 'flutter/flutter_drone',
+            'drone_dimensions': api.properties.get('drone_dimensions', []),
         }
     )
   return targets