[beta] Make the docker recipe channel agnostic

* Use the latest stable Dart SDK CIPD package to run Dart scripts.
* Remove the build.git dependency.

https://github.com/dart-lang/sdk/issues/40991

Change-Id: I3261a6a30d83d476f3ecb3d7a184835a8e62a42d
Reviewed-on: https://dart-review.googlesource.com/c/recipes/+/142001
Reviewed-by: William Hesse <whesse@google.com>
diff --git a/README.recipes.md b/README.recipes.md
index 2f1b46e..c151a89 100644
--- a/README.recipes.md
+++ b/README.recipes.md
@@ -107,9 +107,9 @@
 &mdash; **def [RunSteps](/recipes/dart/chocolatey.py#25)(api):**
 ### *recipes* / [dart/docker](/recipes/dart/docker.py)
 
-[DEPS](/recipes/dart/docker.py#7): [build/zip][build/recipe_modules/zip], [dart](#recipe_modules-dart), [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step]
+[DEPS](/recipes/dart/docker.py#7): [dart](#recipe_modules-dart), [depot\_tools/git][depot_tools/recipe_modules/git], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step]
 
-&mdash; **def [RunSteps](/recipes/dart/docker.py#20)(api):**
+&mdash; **def [RunSteps](/recipes/dart/docker.py#17)(api):**
 ### *recipes* / [dart/external](/recipes/dart/external.py)
 
 [DEPS](/recipes/dart/external.py#7): [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step]
@@ -188,7 +188,6 @@
 
 [build/recipe_modules/goma]: https://chromium.googlesource.com/chromium/tools/build.git/+/8827cc89dad01326ba2f94fd47262f156ba852a2/scripts/slave/README.recipes.md#recipe_modules-goma
 [build/recipe_modules/swarming_client]: https://chromium.googlesource.com/chromium/tools/build.git/+/8827cc89dad01326ba2f94fd47262f156ba852a2/scripts/slave/README.recipes.md#recipe_modules-swarming_client
-[build/recipe_modules/zip]: https://chromium.googlesource.com/chromium/tools/build.git/+/8827cc89dad01326ba2f94fd47262f156ba852a2/scripts/slave/README.recipes.md#recipe_modules-zip
 [depot_tools/recipe_modules/bot_update]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/06101933267d1eadc3daa6b5d2ea736a9f7181a6/recipes/README.recipes.md#recipe_modules-bot_update
 [depot_tools/recipe_modules/depot_tools]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/06101933267d1eadc3daa6b5d2ea736a9f7181a6/recipes/README.recipes.md#recipe_modules-depot_tools
 [depot_tools/recipe_modules/gclient]: https://chromium.googlesource.com/chromium/tools/depot_tools.git/+/06101933267d1eadc3daa6b5d2ea736a9f7181a6/recipes/README.recipes.md#recipe_modules-gclient
diff --git a/recipes/dart/docker.expected/dev.json b/recipes/dart/docker.expected/dev.json
deleted file mode 100644
index c1eb6d7..0000000
--- a/recipes/dart/docker.expected/dev.json
+++ /dev/null
@@ -1,21 +0,0 @@
-[
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
-      "--",
-      "RECIPE_REPO[depot_tools]/gsutil.py",
-      "----",
-      "cp",
-      "gs://dart-archive/channels/dev/release/2.0.0-dev.51.0/sdk/dartsdk-linux-x64-release.zip",
-      "[CLEANUP]/dartsdk-linux-x64-release.zip"
-    ],
-    "cwd": "[CLEANUP]",
-    "env": {
-      "DOCKER_CONFIG": "[CLEANUP]/.docker"
-    },
-    "infra_step": true,
-    "name": "gsutil download dart sdk"
-  }
-]
\ No newline at end of file
diff --git a/recipes/dart/docker.expected/release.json b/recipes/dart/docker.expected/release.json
index ab98eac..f912d7a 100644
--- a/recipes/dart/docker.expected/release.json
+++ b/recipes/dart/docker.expected/release.json
@@ -86,35 +86,29 @@
   },
   {
     "cmd": [
-      "python",
-      "-u",
-      "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
-      "--",
-      "RECIPE_REPO[depot_tools]/gsutil.py",
-      "----",
-      "cp",
-      "gs://dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-linux-x64-release.zip",
-      "[CLEANUP]/dartsdk-linux-x64-release.zip"
+      "cipd",
+      "ensure",
+      "-root",
+      "[CLEANUP]/sdk",
+      "-ensure-file",
+      "dart/dart-sdk/${platform} stable",
+      "-json-output",
+      "/path/to/tmp/json"
     ],
-    "cwd": "[CLEANUP]",
-    "env": {
-      "DOCKER_CONFIG": "[CLEANUP]/.docker"
-    },
-    "infra_step": true,
-    "name": "gsutil download dart sdk"
-  },
-  {
-    "cmd": [
-      "python",
-      "-u",
-      "RECIPE_MODULE[build::zip]/resources/unzip.py"
-    ],
-    "cwd": "[CLEANUP]",
-    "env": {
-      "DOCKER_CONFIG": "[CLEANUP]/.docker"
-    },
-    "name": "unzip sdk",
-    "stdin": "{\"output\": \"[CLEANUP]/sdk\", \"quiet\": false, \"zip_file\": \"[CLEANUP]/dartsdk-linux-x64-release.zip\"}"
+    "name": "ensure_installed",
+    "~followup_annotations": [
+      "@@@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-stable----------\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"package\": \"dart/dart-sdk/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": [
@@ -131,7 +125,7 @@
     "env": {
       "DOCKER_CONFIG": "[CLEANUP]/.docker"
     },
-    "name": "ensure_installed",
+    "name": "ensure_installed (2)",
     "~followup_annotations": [
       "@@@STEP_LOG_LINE@json.output@{@@@",
       "@@@STEP_LOG_LINE@json.output@  \"result\": {@@@",
diff --git a/recipes/dart/docker.py b/recipes/dart/docker.py
index 26e106e..ba779ae 100644
--- a/recipes/dart/docker.py
+++ b/recipes/dart/docker.py
@@ -5,34 +5,26 @@
 from recipe_engine.post_process import Filter
 
 DEPS = [
-  'dart',
-  'depot_tools/git',
-  'depot_tools/gsutil',
-  'recipe_engine/context',
-  'recipe_engine/file',
-  'recipe_engine/path',
-  'recipe_engine/properties',
-  'recipe_engine/raw_io',
-  'recipe_engine/step',
-  'build/zip',
+    'dart',
+    'depot_tools/git',
+    'recipe_engine/cipd',
+    'recipe_engine/context',
+    'recipe_engine/path',
+    'recipe_engine/properties',
+    'recipe_engine/step',
 ]
 
 def RunSteps(api):
   version = api.properties.get('version')
-  channel = 'dev' if '-dev' in version else 'stable'
-
   api.git.checkout(url='https://github.com/dart-lang/dart_docker.git')
+  cipd_ensure_file = api.cipd.EnsureFile()
+  cipd_ensure_file.add_package('dart/dart-sdk/${platform}', 'stable')
+  api.cipd.ensure(api.path['cleanup'].join('sdk'), cipd_ensure_file)
 
   env = {
     'DOCKER_CONFIG': api.path['cleanup'].join('.docker'),
   }
   with api.context(cwd=api.path['cleanup'], env=env):
-    sdk = 'channels/%s/release/%s/sdk/dartsdk-linux-x64-release.zip' % (
-        channel, version)
-    sdk_zip = api.path['cleanup'].join('dartsdk-linux-x64-release.zip')
-    api.gsutil.download('dart-archive', sdk, sdk_zip, name='download dart sdk')
-    api.zip.unzip('unzip sdk', sdk_zip, api.path['cleanup'].join('sdk'))
-
     dockerhub_key = api.dart.get_secret('dockerhub')
     login = [
       '/bin/bash',
@@ -55,8 +47,3 @@
       'release',
       api.properties.generic(version='1.24.3'),
   )
-  yield api.test(
-      'dev',
-      api.properties.generic(version='2.0.0-dev.51.0'),
-      api.post_process(Filter('gsutil download dart sdk')),
-  )