Add arm64 ruby dep support for arm64 builders.
The arm64 ruby is not needed for all arm64 builders. It depends on depenency property defined in builder configs.
Led run: https://ci.chromium.org/raw/build/logs.chromium.org/flutter/led/keyonghan_google.com/8116eac3e4eade11b54d1c8b3daad1bfae386338b6c4e4a9e730770dae98f561/+/build.proto?server=chromium-swarm.appspot.com
Change-Id: I500f29ab000184f9f196241175deaeb0a25c9954
Bug: https://github.com/flutter/flutter/issues/100638
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/30040
Reviewed-by: Godofredo Contreras <godofredoc@google.com>
Commit-Queue: Keyong Han <keyonghan@google.com>
diff --git a/recipe_modules/flutter_deps/api.py b/recipe_modules/flutter_deps/api.py
index 356a6b5..ee0d3ba 100644
--- a/recipe_modules/flutter_deps/api.py
+++ b/recipe_modules/flutter_deps/api.py
@@ -85,7 +85,7 @@
'''.format(dependency)
raise ValueError(msg)
parsed_deps.append(dependency)
- if dependency in ['xcode', 'gems', 'swift']:
+ if dependency in ['xcode', 'gems', 'swift', 'arm64ruby']:
continue
dep_funct = available_deps.get(dependency)
if not dep_funct:
@@ -259,6 +259,24 @@
# 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):
+ """Installs arm64 Ruby.
+
+ Context of arm64ruby:
+ go/benchmarks-on-platforms
+ https://github.com/flutter/flutter/issues/87508
+ """
+ version = 'version:311_3'
+ with self.m.step.nest('Install arm64ruby'):
+ ruby_path = self.m.path['cache'].join('ruby')
+ ruby = self.m.cipd.EnsureFile()
+ ruby.add_package('flutter/ruby/mac-arm64', version)
+ 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')
+
def gems(self, env, env_prefixes, gemfile_dir):
"""Installs mac gems.
@@ -267,11 +285,14 @@
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')
with self.m.step.nest('Install gems'):
@@ -297,8 +318,12 @@
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)
- env['GEM_HOME'] = gem_dir.join('ruby', '2.6.0')
- paths.append(gem_dir.join('ruby', '2.6.0', 'bin'))
+ 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:
+ env['GEM_HOME'] = gem_dir.join('ruby', '2.6.0')
+ paths.append(gem_dir.join('ruby', '2.6.0', 'bin'))
env_prefixes['PATH'] = paths
def firebase(self, env, env_prefixes, version='latest'):
diff --git a/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json b/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
new file mode 100644
index 0000000..95e96a4
--- /dev/null
+++ b/recipe_modules/flutter_deps/examples/full.expected/with-arm64ruby.json
@@ -0,0 +1,903 @@
+[
+ {
+ "cmd": [],
+ "name": "OpenJDK dependency"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/java",
+ "-ensure-file",
+ "flutter_internal/java/openjdk/${platform} v1",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "OpenJDK dependency.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-v1--------------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter_internal/java/openjdk/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": [],
+ "name": "Download goldctl"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/gold",
+ "-ensure-file",
+ "skia/tools/goldctl/${platform} v2",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "Download goldctl.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-v2--------------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"skia/tools/goldctl/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": [],
+ "name": "Chrome and driver dependency"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/chrome/chrome",
+ "-ensure-file",
+ "flutter_internal/browsers/chrome/${platform} v3",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "Chrome and driver dependency.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-v3--------------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter_internal/browsers/chrome/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": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/chrome/drivers",
+ "-ensure-file",
+ "flutter_internal/browser-drivers/chrome/${platform} v3",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "Chrome and driver dependency.ensure_installed (2)",
+ "~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-v3--------------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter_internal/browser-drivers/chrome/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": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/go",
+ "-ensure-file",
+ "infra/go/${platform} v4",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "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-v4--------------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/go/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": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CLEANUP]/go_path"
+ ],
+ "infra_step": true,
+ "name": "Ensure go path"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/go",
+ "-ensure-file",
+ "infra/go/${platform} latest",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "ensure_installed (2)",
+ "~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-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/go/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": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CLEANUP]/go_path"
+ ],
+ "infra_step": true,
+ "name": "Ensure go path (2)"
+ },
+ {
+ "cmd": [
+ "go",
+ "get",
+ "-u",
+ "github.com/technosophos/dashing"
+ ],
+ "env": {
+ "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+ "CHROME_NO_SANDBOX": "true",
+ "GOPATH": "[CLEANUP]/go_path"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/chrome/chrome",
+ "[CACHE]/chrome/drivers",
+ "[CACHE]/go/bin",
+ "[CLEANUP]/go_path/bin",
+ "[CACHE]/go/bin",
+ "[CLEANUP]/go_path/bin"
+ ]
+ },
+ "infra_step": true,
+ "name": "Install dashing"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CLEANUP]/tmp_tmp_1/vpython",
+ "-ensure-file",
+ "infra/tools/luci/vpython/${platform} v6",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "ensure_installed (3)",
+ "~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-v6--------------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/luci/vpython/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": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android",
+ "-ensure-file",
+ "flutter/android/sdk/all/${platform} latest",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "ensure_installed (4)",
+ "~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-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/android/sdk/all/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": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/android",
+ "-ensure-file",
+ "flutter/android/sdk/all/${platform} version:29.0",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "ensure_installed (5)",
+ "~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-version:29.0----\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/android/sdk/all/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": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[START_DIR]/firebase"
+ ],
+ "infra_step": true,
+ "name": "ensure directory"
+ },
+ {
+ "cmd": [],
+ "name": "Install firebase"
+ },
+ {
+ "cmd": [
+ "curl",
+ "-Lo",
+ "[START_DIR]/firebase/firebase",
+ "https://firebase.tools/bin/linux/latest"
+ ],
+ "infra_step": true,
+ "name": "Install firebase.Install firebase bin",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "chmod",
+ "755",
+ "[START_DIR]/firebase/firebase"
+ ],
+ "infra_step": true,
+ "name": "Install firebase.Set execute permission",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Install cmake"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/cmake",
+ "-ensure-file",
+ "infra/cmake/${platform} version:3.16.1",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "Install cmake.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-version:3.16.1--\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/cmake/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": [],
+ "name": "Install ninja"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/ninja",
+ "-ensure-file",
+ "infra/ninja/${platform} version:1.9.0",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "Install ninja.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-version:1.9.0---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/ninja/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": [],
+ "name": "Install clang"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/clang",
+ "-ensure-file",
+ "fuchsia/third_party/clang/${platform} git_revision:7e9747b50bcb1be28d4a3236571e8050835497a6",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "Install clang.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-git_revision:7e9\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/third_party/clang/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": [],
+ "name": "Prepare code signing"
+ },
+ {
+ "cmd": [
+ "unlock_login_keychain.sh"
+ ],
+ "infra_step": true,
+ "name": "Prepare code signing.unlock login keychain",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CLEANUP]/tmp_tmp_2/curl",
+ "-ensure-file",
+ "flutter_internal/tools/curl/${platform} latest",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "ensure_installed (6)",
+ "~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-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter_internal/tools/curl/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": [],
+ "name": "Install dart sdk"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/dart_sdk",
+ "-ensure-file",
+ "dart/dart-sdk/${platform} stable",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "name": "Install dart sdk.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-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": [],
+ "name": "Install jazzy"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[START_DIR]/gems"
+ ],
+ "infra_step": true,
+ "name": "Install jazzy.mkdir gems",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "gem",
+ "install",
+ "jazzy:0.9.5",
+ "--install-dir",
+ "."
+ ],
+ "cwd": "[START_DIR]/gems",
+ "name": "Install jazzy.install jazzy",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "download avd package"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/avd"
+ ],
+ "infra_step": true,
+ "name": "download avd package.Ensure avd cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/avd",
+ "-ensure-file",
+ "chromium/tools/android/avd/linux-amd64 p-1EgH-og45NbJT5ld4bBmvhayUxyb5Wm0oedSBwXOsC",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/avd",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/android",
+ "ANDROID_NDK_PATH": "[CACHE]/android/ndk-bundle",
+ "ANDROID_SDK_ROOT": "[CACHE]/android",
+ "CHROME_EXECUTABLE": "[CACHE]/chrome/chrome/chrome",
+ "CHROME_NO_SANDBOX": "true",
+ "FLUTTER_XCODE_CODE_SIGN_STYLE": "Manual",
+ "FLUTTER_XCODE_DEVELOPMENT_TEAM": "S8QB4VV633",
+ "FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER": "match Development *",
+ "GEM_HOME": "[START_DIR]/gems",
+ "GOPATH": "[CLEANUP]/go_path",
+ "GRADLE_OPTS": "-Dorg.gradle.daemon=false",
+ "GRADLE_USER_HOME": "[CACHE]/gradle"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/dart_sdk",
+ "[CACHE]/chrome/chrome",
+ "[CACHE]/chrome/drivers",
+ "[CACHE]/go/bin",
+ "[CLEANUP]/go_path/bin",
+ "[CACHE]/go/bin",
+ "[CLEANUP]/go_path/bin",
+ "[CLEANUP]/tmp_tmp_1/vpython",
+ "[START_DIR]/firebase",
+ "[CACHE]/cmake/bin",
+ "[CACHE]/ninja",
+ "[CACHE]/clang/bin",
+ "[CLEANUP]/tmp_tmp_2/curl",
+ "[START_DIR]/gems/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "download avd package.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-p-1EgH-og45NbJT5\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"chromium/tools/android/avd/linux-amd64\"@@@",
+ "@@@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": [],
+ "name": "Install arm64ruby"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/ruby",
+ "-ensure-file",
+ "flutter/ruby/mac-arm64 version:311_3",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GIT_BRANCH": "",
+ "LUCI_BRANCH": "",
+ "LUCI_CI": "True",
+ "LUCI_PR": "",
+ "OS": "linux",
+ "PUB_CACHE": "[START_DIR]/.pub-cache",
+ "REVISION": "",
+ "SDK_CHECKOUT_PATH": "[START_DIR]/flutter\\ sdk"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "name": "Install arm64ruby.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-version:311_3---\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter/ruby/mac-arm64\"@@@",
+ "@@@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": [],
+ "name": "Install gems"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[START_DIR]/gems"
+ ],
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GIT_BRANCH": "",
+ "LUCI_BRANCH": "",
+ "LUCI_CI": "True",
+ "LUCI_PR": "",
+ "OS": "linux",
+ "PUB_CACHE": "[START_DIR]/.pub-cache",
+ "REVISION": "",
+ "SDK_CHECKOUT_PATH": "[START_DIR]/flutter\\ sdk"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "infra_step": true,
+ "name": "Install gems.mkdir gems",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "gem",
+ "install",
+ "bundler",
+ "--install-dir",
+ "."
+ ],
+ "cwd": "[START_DIR]/gems",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GIT_BRANCH": "",
+ "LUCI_BRANCH": "",
+ "LUCI_CI": "True",
+ "LUCI_PR": "",
+ "OS": "linux",
+ "PUB_CACHE": "[START_DIR]/.pub-cache",
+ "REVISION": "",
+ "SDK_CHECKOUT_PATH": "[START_DIR]/flutter\\ sdk"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "infra_step": true,
+ "name": "Install gems.install bundler",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bundle",
+ "config",
+ "set",
+ "path",
+ "[START_DIR]/gems"
+ ],
+ "cwd": "[START_DIR]/dev/ci/mac",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GEM_HOME": "[START_DIR]/gems",
+ "GIT_BRANCH": "",
+ "LUCI_BRANCH": "",
+ "LUCI_CI": "True",
+ "LUCI_PR": "",
+ "OS": "linux",
+ "PUB_CACHE": "[START_DIR]/.pub-cache",
+ "REVISION": "",
+ "RUBY_HOME": "[CACHE]/ruby/bin",
+ "SDK_CHECKOUT_PATH": "[START_DIR]/flutter\\ sdk"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/ruby/bin",
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin",
+ "[START_DIR]/gems/bin",
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "infra_step": true,
+ "name": "Install gems.set gems path",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "bundler",
+ "install"
+ ],
+ "cwd": "[START_DIR]/dev/ci/mac",
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GEM_HOME": "[START_DIR]/gems",
+ "GIT_BRANCH": "",
+ "LUCI_BRANCH": "",
+ "LUCI_CI": "True",
+ "LUCI_PR": "",
+ "OS": "linux",
+ "PUB_CACHE": "[START_DIR]/.pub-cache",
+ "REVISION": "",
+ "RUBY_HOME": "[CACHE]/ruby/bin",
+ "SDK_CHECKOUT_PATH": "[START_DIR]/flutter\\ sdk"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/ruby/bin",
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin",
+ "[START_DIR]/gems/bin",
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "infra_step": true,
+ "name": "Install gems.install gems",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "listdir",
+ "[START_DIR]/gems",
+ "--recursive"
+ ],
+ "env": {
+ "DEPOT_TOOLS": "RECIPE_REPO[depot_tools]",
+ "GIT_BRANCH": "",
+ "LUCI_BRANCH": "",
+ "LUCI_CI": "True",
+ "LUCI_PR": "",
+ "OS": "linux",
+ "PUB_CACHE": "[START_DIR]/.pub-cache",
+ "REVISION": "",
+ "SDK_CHECKOUT_PATH": "[START_DIR]/flutter\\ sdk"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[START_DIR]/flutter\\ sdk/bin",
+ "[START_DIR]/flutter\\ sdk/bin/cache/dart-sdk/bin"
+ ]
+ },
+ "infra_step": true,
+ "name": "Install gems.list bundle",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@listdir@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipe_modules/flutter_deps/examples/full.py b/recipe_modules/flutter_deps/examples/full.py
index f5a066c..4ff2418 100644
--- a/recipe_modules/flutter_deps/examples/full.py
+++ b/recipe_modules/flutter_deps/examples/full.py
@@ -91,6 +91,11 @@
)
yield api.test(
+ 'with-arm64ruby', api.properties(dependencies=[{"dependency": "gems"}, {"dependency": "arm64ruby"}]),
+ api.repo_util.flutter_environment_data(checkout_path),
+ )
+
+ yield api.test(
'mac',
api.platform('mac', 64),
api.properties(