Fix problem passing a runner empty command.

This relands https://flutter-review.googlesource.com/c/recipes/+/9642
with minor updates to conditionally add the git-branch parameter only
when it is not empty.

Change-Id: I286f41f49e53b7935db5e5d58a74005454db25d1
Bug: https://github.com/flutter/flutter/issues/73446
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/9661
Reviewed-by: Casey Hillers <chillers@google.com>
Commit-Queue: Godofredo Contreras <godofredoc@google.com>
diff --git a/recipes/devicelab/devicelab_drone.expected/basic.json b/recipes/devicelab/devicelab_drone.expected/basic.json
index 8c678bc..e2a23d3 100644
--- a/recipes/devicelab/devicelab_drone.expected/basic.json
+++ b/recipes/devicelab/devicelab_drone.expected/basic.json
@@ -34,7 +34,6 @@
       "git",
       "fetch",
       "origin",
-      "master",
       "--recurse-submodules",
       "--progress",
       "--tags"
@@ -54,7 +53,7 @@
       "git",
       "checkout",
       "-f",
-      "FETCH_HEAD"
+      "2d72510e447ab60a9728aeea2362d8be2cbd7789"
     ],
     "cwd": "[CACHE]/flutter sdk",
     "infra_step": true,
@@ -202,7 +201,7 @@
       "--luci-builder",
       "Linux abc",
       "--git-branch",
-      ""
+      "master"
     ],
     "cwd": "[CACHE]/flutter sdk/dev/devicelab",
     "env": {
diff --git a/recipes/devicelab/devicelab_drone.expected/post-submit.json b/recipes/devicelab/devicelab_drone.expected/post-submit.json
index a48888f..3c7be72 100644
--- a/recipes/devicelab/devicelab_drone.expected/post-submit.json
+++ b/recipes/devicelab/devicelab_drone.expected/post-submit.json
@@ -200,9 +200,7 @@
       "--results-file",
       "[CLEANUP]/tmp_tmp_1",
       "--luci-builder",
-      "Linux abc",
-      "--git-branch",
-      ""
+      "Linux abc"
     ],
     "cwd": "[CACHE]/flutter sdk/dev/devicelab",
     "env": {
diff --git a/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json b/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json
index 1270756..5aec13b 100644
--- a/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json
+++ b/recipes/devicelab/devicelab_drone.expected/upload-metrics-mac.json
@@ -218,7 +218,33 @@
     "name": "Set execute permission"
   },
   {
-    "cmd": [],
+    "cmd": [
+      "RECIPE[flutter::devicelab/devicelab_drone].resources/runner.sh",
+      "-t",
+      "abc",
+      "--results-file",
+      "[CLEANUP]/tmp_tmp_1",
+      "--luci-builder",
+      "Mac abc"
+    ],
+    "cwd": "[CACHE]/flutter sdk/dev/devicelab",
+    "env": {
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "linux",
+      "PUB_CACHE": "[CACHE]/.pub-cache",
+      "SDK_CHECKOUT_PATH": "[CACHE]/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/flutter sdk/bin",
+        "[CACHE]/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CACHE]/flutter sdk/bin",
+        "[CACHE]/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
     "name": "run abc"
   },
   {
diff --git a/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json b/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json
index f9ab587..1db1ced 100644
--- a/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json
+++ b/recipes/devicelab/devicelab_drone.expected/xcode-chromium-mac.json
@@ -218,7 +218,33 @@
     "name": "Set execute permission"
   },
   {
-    "cmd": [],
+    "cmd": [
+      "RECIPE[flutter::devicelab/devicelab_drone].resources/runner.sh",
+      "-t",
+      "abc",
+      "--results-file",
+      "[CLEANUP]/tmp_tmp_1",
+      "--luci-builder",
+      "Mac abc"
+    ],
+    "cwd": "[CACHE]/flutter sdk/dev/devicelab",
+    "env": {
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "linux",
+      "PUB_CACHE": "[CACHE]/.pub-cache",
+      "SDK_CHECKOUT_PATH": "[CACHE]/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/flutter sdk/bin",
+        "[CACHE]/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CACHE]/flutter sdk/bin",
+        "[CACHE]/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
     "name": "run abc"
   },
   {
diff --git a/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json b/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json
index f9ab587..1db1ced 100644
--- a/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json
+++ b/recipes/devicelab/devicelab_drone.expected/xcode-devicelab.json
@@ -218,7 +218,33 @@
     "name": "Set execute permission"
   },
   {
-    "cmd": [],
+    "cmd": [
+      "RECIPE[flutter::devicelab/devicelab_drone].resources/runner.sh",
+      "-t",
+      "abc",
+      "--results-file",
+      "[CLEANUP]/tmp_tmp_1",
+      "--luci-builder",
+      "Mac abc"
+    ],
+    "cwd": "[CACHE]/flutter sdk/dev/devicelab",
+    "env": {
+      "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+      "LUCI_BRANCH": "",
+      "LUCI_CI": "True",
+      "LUCI_PR": "",
+      "OS": "linux",
+      "PUB_CACHE": "[CACHE]/.pub-cache",
+      "SDK_CHECKOUT_PATH": "[CACHE]/flutter sdk"
+    },
+    "env_prefixes": {
+      "PATH": [
+        "[CACHE]/flutter sdk/bin",
+        "[CACHE]/flutter sdk/bin/cache/dart-sdk/bin",
+        "[CACHE]/flutter sdk/bin",
+        "[CACHE]/flutter sdk/bin/cache/dart-sdk/bin"
+      ]
+    },
     "name": "run abc"
   },
   {
diff --git a/recipes/devicelab/devicelab_drone.py b/recipes/devicelab/devicelab_drone.py
index a35ac8e..1c742b2 100644
--- a/recipes/devicelab/devicelab_drone.py
+++ b/recipes/devicelab/devicelab_drone.py
@@ -45,17 +45,14 @@
   results_path = api.path.mkstemp()
   # Run test
   runner_params = [
-      '-t',
-      task_name,
-      '--results-file',
-      results_path,
-      '--luci-builder',
-      api.properties.get('buildername'),
-      # LUCI git checkouts end up in a detached HEAD state, so branch must
-      # be passed from gitiles -> test runner -> Cocoon.
-      '--git-branch',
-      git_branch
+      '-t', task_name, '--results-file', results_path, '--luci-builder',
+      api.properties.get('buildername')
   ]
+  # LUCI git checkouts end up in a detached HEAD state, so branch must
+  # be passed from gitiles -> test runner -> Cocoon.
+  if git_branch:
+    # git_branch is set only when the build was triggered by buildbucket.
+    runner_params.extend(['--git-branch', git_branch])
   with api.context(env=env, env_prefixes=env_prefixes, cwd=devicelab_path):
     api.step('flutter doctor', ['flutter', 'doctor', '--verbose'])
     api.step('flutter update-packages', ['flutter', 'update-packages'])
@@ -72,7 +69,9 @@
                          env_prefixes=env_prefixes), api.step.defer_results():
           resource_name = api.resource('runner.sh')
           api.step('Set execute permission', ['chmod', '755', resource_name])
-          api.step('run %s' % task_name, [resource_name].extend(runner_params))
+          test_runner_command = [resource_name]
+          test_runner_command.extend(runner_params)
+          api.step('run %s' % task_name, test_runner_command)
           # This is to clean up leaked processes.
           api.os_utils.kill_processes()
           # Collect memory/cpu/process after task execution.
@@ -119,9 +118,12 @@
       api.expect_exception('ValueError'),
   )
   yield api.test(
-      "basic",
-      api.properties(buildername='Linux abc', task_name='abc'),
+      "basic", api.properties(buildername='Linux abc', task_name='abc'),
       api.repo_util.flutter_environment_data(),
+      api.buildbucket.ci_build(
+          project='test',
+          git_repo='git.example.com/test/repo',
+      )
   )
   yield api.test(
       "xcode-devicelab",
diff --git a/recipes/devicelab/devicelab_drone.resources/runner.sh b/recipes/devicelab/devicelab_drone.resources/runner.sh
index d9b2763..d913d5e 100644
--- a/recipes/devicelab/devicelab_drone.resources/runner.sh
+++ b/recipes/devicelab/devicelab_drone.resources/runner.sh
@@ -4,7 +4,8 @@
 # as the test runner script.
 set -e
 
-if [ -f /usr/local/bin/unlock_login_keychain.sh ] then
+if [ -f /usr/local/bin/unlock_login_keychain.sh ]
+then
   /usr/local/bin/unlock_login_keychain.sh
 else
   echo "This bot does not support codesigning"