[dart_ci] Install dart-sdk from fixed version and tag CIPD package as latest

Change-Id: Id242512b347f5b9852d26ef5b3a4ee0e8feae8ad
Reviewed-on: https://dart-review.googlesource.com/c/recipes/+/203880
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Karl Klose <karlklose@google.com>
diff --git a/recipes/dart/package_dart_ci.expected/basic-with-revision.json b/recipes/dart/package_dart_ci.expected/basic-with-revision.json
index 4df7c82..35a9ea5 100644
--- a/recipes/dart/package_dart_ci.expected/basic-with-revision.json
+++ b/recipes/dart/package_dart_ci.expected/basic-with-revision.json
@@ -86,49 +86,25 @@
     "name": "submodule update"
   },
   {
-    "cmd": [],
-    "name": "install dart/dart-sdk"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C"
-    ],
-    "infra_step": true,
-    "name": "install dart/dart-sdk.ensure package directory",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
     "cmd": [
       "cipd",
       "ensure",
       "-root",
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C",
+      "[CACHE]/cipd_packages",
       "-ensure-file",
-      "dart/dart-sdk/${platform} zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C",
+      "dart/dart-sdk/${platform} version:2.13.1",
       "-max-threads",
       "0",
       "-json-output",
       "/path/to/tmp/json"
     ],
-    "infra_step": true,
-    "name": "install dart/dart-sdk.ensure_installed",
+    "name": "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-zysAwdt80NCILRb5\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:2.13.1--\", @@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"dart/dart-sdk/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    ]@@@",
@@ -139,7 +115,7 @@
   },
   {
     "cmd": [
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C/dart-sdk/bin/dart",
+      "[CACHE]/cipd_packages/dart-sdk/bin/dart",
       "pub",
       "get"
     ],
@@ -151,7 +127,7 @@
   },
   {
     "cmd": [
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C/dart-sdk/bin/dart",
+      "[CACHE]/cipd_packages/dart-sdk/bin/dart",
       "compile",
       "exe",
       "[START_DIR]/dart_ci/builder/bin/update_results_database.dart",
@@ -172,6 +148,8 @@
       "{\"data\": [{\"file\": \"update_results_database\"}], \"install_mode\": \"copy\", \"package\": \"dart/ci/builder_scripts/${platform}\", \"root\": \"[CLEANUP]/tmp_tmp_1\"}",
       "-hash-algo",
       "sha256",
+      "-ref",
+      "latest",
       "-tag",
       "git_revision:deadbeef",
       "-json-output",
diff --git a/recipes/dart/package_dart_ci.expected/basic.json b/recipes/dart/package_dart_ci.expected/basic.json
index f8bf35e..a932d7d 100644
--- a/recipes/dart/package_dart_ci.expected/basic.json
+++ b/recipes/dart/package_dart_ci.expected/basic.json
@@ -85,49 +85,25 @@
     "name": "submodule update"
   },
   {
-    "cmd": [],
-    "name": "install dart/dart-sdk"
-  },
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "ensure-directory",
-      "--mode",
-      "0777",
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C"
-    ],
-    "infra_step": true,
-    "name": "install dart/dart-sdk.ensure package directory",
-    "~followup_annotations": [
-      "@@@STEP_NEST_LEVEL@1@@@"
-    ]
-  },
-  {
     "cmd": [
       "cipd",
       "ensure",
       "-root",
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C",
+      "[CACHE]/cipd_packages",
       "-ensure-file",
-      "dart/dart-sdk/${platform} zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C",
+      "dart/dart-sdk/${platform} version:2.13.1",
       "-max-threads",
       "0",
       "-json-output",
       "/path/to/tmp/json"
     ],
-    "infra_step": true,
-    "name": "install dart/dart-sdk.ensure_installed",
+    "name": "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-zysAwdt80NCILRb5\", @@@",
+      "@@@STEP_LOG_LINE@json.output@        \"instance_id\": \"resolved-instance_id-of-version:2.13.1--\", @@@",
       "@@@STEP_LOG_LINE@json.output@        \"package\": \"dart/dart-sdk/resolved-platform\"@@@",
       "@@@STEP_LOG_LINE@json.output@      }@@@",
       "@@@STEP_LOG_LINE@json.output@    ]@@@",
@@ -138,7 +114,7 @@
   },
   {
     "cmd": [
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C/dart-sdk/bin/dart",
+      "[CACHE]/cipd_packages/dart-sdk/bin/dart",
       "pub",
       "get"
     ],
@@ -150,7 +126,7 @@
   },
   {
     "cmd": [
-      "[CACHE]/cipd/dart/dart-sdk/zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C/dart-sdk/bin/dart",
+      "[CACHE]/cipd_packages/dart-sdk/bin/dart",
       "compile",
       "exe",
       "[START_DIR]/dart_ci/builder/bin/update_results_database.dart",
@@ -171,6 +147,8 @@
       "{\"data\": [{\"file\": \"update_results_database\"}], \"install_mode\": \"copy\", \"package\": \"dart/ci/builder_scripts/${platform}\", \"root\": \"[CLEANUP]/tmp_tmp_1\"}",
       "-hash-algo",
       "sha256",
+      "-ref",
+      "latest",
       "-tag",
       "git_revision:deadbeef",
       "-json-output",
diff --git a/recipes/dart/package_dart_ci.py b/recipes/dart/package_dart_ci.py
index 45e4f2a..165fbcc 100644
--- a/recipes/dart/package_dart_ci.py
+++ b/recipes/dart/package_dart_ci.py
@@ -26,9 +26,12 @@
       set_got_revision=True)
   source_path = api.path['start_dir'].join('dart_ci')
   # Get the Dart SDK to be used to compile the scripts.
-  dart = api.cipd.ensure_tool('dart/dart-sdk/${platform}',
-                              'zysAwdt80NCILRb51ynRCEMypab_UaPrqMsHaEQkpY4C',
-                              'dart-sdk/bin/dart')
+  packages_path = api.path['cache'].join('cipd_packages')
+  ensure_file = api.cipd.EnsureFile()
+  # Cannot use ensure_tool here because of dartbug.com/46364
+  ensure_file.add_package('dart/dart-sdk/${platform}', 'version:2.13.1')
+  api.cipd.ensure(packages_path, ensure_file)
+  dart = packages_path.join('dart-sdk', 'bin', 'dart')
   # Compile scripts.
   output_root = api.path.mkdtemp()
   output_file = output_root.join('update_results_database')
@@ -44,7 +47,8 @@
   package_name = 'dart/ci/builder_scripts/${platform}'
   pkg = api.cipd.PackageDefinition(package_name, output_root, 'copy')
   pkg.add_file(output_file)
-  api.cipd.create_from_pkg(pkg, tags={'git_revision': got_revision})
+  api.cipd.create_from_pkg(
+      pkg, tags={'git_revision': got_revision}, refs=['latest'])
 
 
 def GenTests(api):