Install arm64ruby based on cpu

Instead of relying on a property, this CL changes to depend on bot cpu. This way a builder (which can run on either arm64 or x64) can install arm64ruby only for arm64 bots.

Existing `Mac_arm64_ios` builders all pass with the arm64ruby.
https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/bb99b69dfb852d43e87c55b09eed2437b29304cb10fa3afe8ff73225411a9199/+/build.proto?server=chromium-swarm.appspot.com
https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/429b18a9c9746a78b51280513c9c22444fdd7d96e1743415d198d2c4c548e2f4/+/build.proto?server=chromium-swarm.appspot.com
https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/69eaafb4c69499ab0be0293da96a24b6e433ca6e0d6b020d6715dfd95aee5d54/+/build.proto?server=chromium-swarm.appspot.com
https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/4e2d76fc19e60e1df5b88f8257a23799d06c3ecace473a8294b2b24e00f125c7/+/build.proto?server=chromium-swarm.appspot.com
https://luci-milo.appspot.com/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/e7a53eed7e0d00c13952d2fb55f59029bef077e7a2db561f01337f4c978390d9/+/build.proto
https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/7c24d1dff932c444812c6e4c9f6ca1be0d1e9dddd7b8c3ad4c218eee5af2d760/+/build.proto?server=chromium-swarm.appspot.com
https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/f72c5585987850abb526e62b949ef0717fa3fa1e70faa1ab92ce51bacd155945/+/build.proto?server=chromium-swarm.appspot.com
https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/032f067a81e7c7f55a70bf9279693d468079fa376a108adfe1ba684c109fc04e/+/build.proto?server=chromium-swarm.appspot.com
https://luci-milo.appspot.com/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/2d9ddab7db2c47bd1b80825f8fe4a6370d4ed0d0462f66212a3a8316c15623cf/+/build.proto
https://luci-milo.appspot.com/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/70d3a200c8749b86178a5e2998e5b69ef4cc6ee678e15555ce6ac4c016f5a624/+/build.proto

Change-Id: Ie750dafb34b067e1b831508bda24176ed0b4e3de
Bug: https://github.com/flutter/flutter/issues/110561
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/33541
Commit-Queue: Keyong Han <keyonghan@google.com>
Reviewed-by: Jenn Magder <magder@google.com>
Reviewed-by: Godofredo Contreras <godofredoc@google.com>
diff --git a/recipe_modules/flutter_deps/api.py b/recipe_modules/flutter_deps/api.py
index bca5988..23d8c0e 100644
--- a/recipe_modules/flutter_deps/api.py
+++ b/recipe_modules/flutter_deps/api.py
@@ -262,7 +262,7 @@
     # For more, see CI section on https://docs.gradle.org/current/userguide/gradle_daemon.html#sec:disabling_the_daemon
     env['GRADLE_OPTS'] = '-Dorg.gradle.daemon=false'
 
-  def arm64ruby(self, env, env_prefixes):
+  def arm64ruby(self, env, env_prefixes, gem_dir):
     """Installs arm64 Ruby.
 
     Context of arm64ruby:
@@ -277,8 +277,10 @@
       self.m.cipd.ensure(ruby_path, ruby)
       paths = env_prefixes.get('PATH', [])
       paths.insert(0, ruby_path.join('bin'))
-      env_prefixes['PATH'] = paths
       env['RUBY_HOME'] = ruby_path.join('bin')
+      env['GEM_HOME'] = gem_dir.join('ruby', '3.1.0')
+      paths.append(gem_dir.join('ruby', '3.1.0', 'bin'))
+      env_prefixes['PATH'] = paths
 
   def gems(self, env, env_prefixes, gemfile_dir):
     """Installs mac gems.
@@ -288,16 +290,16 @@
       env_prefixes(dict):  Current environment prefixes variables.
       gemfile_dir(Path): The path to the location of the repository gemfile.
     """
-    arm64_ruby = 'arm64ruby'
     deps_list = self.m.properties.get('dependencies', [])
     deps = [d['dependency'] for d in deps_list]
     if 'gems' not in deps:
       # Noop if gems property is not set.
       return
-    if arm64_ruby in deps:
-      self.arm64ruby(env, env_prefixes)
     gem_file = self.m.repo_util.sdk_checkout_path().join('flutter')
     gem_dir = self.m.path['start_dir'].join('gems')
+    env['GEM_HOME'] = gem_dir
+    if self.m.platform.arch == 'arm':
+      self.arm64ruby(env, env_prefixes, gem_dir)
     with self.m.step.nest('Install gems'):
       self.m.file.ensure_directory('mkdir gems', gem_dir)
       # Temporarily install bundler
@@ -307,7 +309,6 @@
             ['gem', 'install', 'bundler', '--install-dir', '.'],
             infra_step=True,
         )
-      env['GEM_HOME'] = gem_dir
       paths = env_prefixes.get('PATH', [])
       temp_paths = copy.deepcopy(paths)
       temp_paths.append(gem_dir.join('bin'))
@@ -321,10 +322,7 @@
         self.m.step('install gems', ['bundler', 'install'], infra_step=True)
       # Update envs to the final destination.
       self.m.file.listdir('list bundle', gem_dir, recursive=True)
-      if arm64_ruby in deps:
-        env['GEM_HOME'] = gem_dir.join('ruby', '3.1.0')
-        paths.append(gem_dir.join('ruby', '3.1.0', 'bin'))
-      else:
+      if self.m.platform.arch != 'arm':
         env['GEM_HOME'] = gem_dir.join('ruby', '2.6.0')
         paths.append(gem_dir.join('ruby', '2.6.0', 'bin'))
       env_prefixes['PATH'] = paths
diff --git a/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json b/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
index f351e94..be86c9e 100644
--- a/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
+++ b/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
@@ -898,7 +898,7 @@
     "cwd": "[START_DIR]/dev/ci/mac",
     "env": {
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "GEM_HOME": "[START_DIR]/gems",
+      "GEM_HOME": "[START_DIR]/gems/ruby/3.1.0",
       "GIT_BRANCH": "",
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
@@ -914,6 +914,7 @@
         "[CACHE]/ruby/bin",
         "[START_DIR]/flutter\\ sdk/bin",
         "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin",
+        "[START_DIR]/gems/ruby/3.1.0/bin",
         "[START_DIR]/gems/bin",
         "[START_DIR]/flutter\\ sdk/bin",
         "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
@@ -933,7 +934,7 @@
     "cwd": "[START_DIR]/dev/ci/mac",
     "env": {
       "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
-      "GEM_HOME": "[START_DIR]/gems",
+      "GEM_HOME": "[START_DIR]/gems/ruby/3.1.0",
       "GIT_BRANCH": "",
       "LUCI_BRANCH": "",
       "LUCI_CI": "True",
@@ -949,6 +950,7 @@
         "[CACHE]/ruby/bin",
         "[START_DIR]/flutter\\ sdk/bin",
         "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin",
+        "[START_DIR]/gems/ruby/3.1.0/bin",
         "[START_DIR]/gems/bin",
         "[START_DIR]/flutter\\ sdk/bin",
         "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
diff --git a/recipe_modules/flutter_deps/examples/full.py b/recipe_modules/flutter_deps/examples/full.py
index 9bd51e2..ca9a7af 100644
--- a/recipe_modules/flutter_deps/examples/full.py
+++ b/recipe_modules/flutter_deps/examples/full.py
@@ -93,8 +93,9 @@
   )
 
   yield api.test(
-      'with-arm64ruby', api.properties(dependencies=[{"dependency": "gems"}, {"dependency": "arm64ruby"}]),
+      'with-arm64ruby', api.properties(dependencies=[{"dependency": "gems"}]),
       api.repo_util.flutter_environment_data(checkout_path),
+      api.platform.arch('arm'),
   )
 
   yield api.test(