I added a new recipe for sharding web engine tests.
The design doc is here: go/web-engine-recipe-drones
In this step I'll add a web drone, later I'll add builders for it (to flutter/infra). In the last step I'll change web_engine_recipe to call these shards with built web engine.
These changes should solved the infra failures (timeouts) happening quite often on Web builders.
Example shard runs:
Felt licences: https://luci-milo.appspot.com/raw/build/logs.chromium.org/flutter/led/nurhan_google.com/4d3a9e5cdf82bb21bc52eecffbe3c3cd8259ca71a2589f7f787c020890ae6dcd/+/annotations
Felt chrome unit tests windows: https://luci-milo.appspot.com/raw/build/logs.chromium.org/flutter/led/nurhan_google.com/22daa09760618243b78a9804cc04f0060628eb63a6750969968c6aeffdaff2d6/+/annotations
Felt chrome integration tests linux: https://luci-milo.appspot.com/raw/build/logs.chromium.org/flutter/led/nurhan_google.com/a87012516c186086e5fa53cac3be1f0772c11e208004ec0f3a82e528e5d9a6af/+/annotations
Change-Id: I6ee053e02a40207f47bcdabef120163765262ccb
Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/8980
Commit-Queue: Nurhan Turgut <nurhan@google.com>
Reviewed-by: Christopher Fujino <fujino@google.com>
diff --git a/recipe_modules/web_util/__init__.py b/recipe_modules/web_util/__init__.py
new file mode 100644
index 0000000..93ceba8
--- /dev/null
+++ b/recipe_modules/web_util/__init__.py
@@ -0,0 +1,17 @@
+DEPS = [
+ 'depot_tools/gsutil',
+ 'depot_tools/git',
+ 'flutter/repo_util',
+ 'flutter/yaml',
+ 'recipe_engine/buildbucket',
+ 'recipe_engine/cipd',
+ 'recipe_engine/context',
+ 'recipe_engine/file',
+ 'recipe_engine/isolated',
+ 'recipe_engine/json',
+ 'recipe_engine/path',
+ 'recipe_engine/platform',
+ 'recipe_engine/properties',
+ 'recipe_engine/runtime',
+ 'recipe_engine/step',
+]
diff --git a/recipe_modules/web_util/api.py b/recipe_modules/web_util/api.py
new file mode 100644
index 0000000..e0d4818
--- /dev/null
+++ b/recipe_modules/web_util/api.py
@@ -0,0 +1,173 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import copy
+from recipe_engine import recipe_api
+
+
+class WebUtilsApi(recipe_api.RecipeApi):
+ """Utilities to use when running flutter web engine tests."""
+
+ def firefox_driver(self, checkout):
+ """Downloads the latest version of the Firefox web driver from CIPD."""
+ # Download the driver for Firefox.
+ firefox_driver_path = checkout.join('flutter', 'lib', 'web_ui',
+ '.dart_tool', 'drivers', 'firefox')
+ pkgdriver = self.m.cipd.EnsureFile()
+ pkgdriver.add_package(
+ 'flutter_internal/browser-drivers/firefoxdriver-linux', 'latest')
+ self.m.cipd.ensure(firefox_driver_path, pkgdriver)
+
+ def chrome(self, checkout):
+ """Downloads Chrome from CIPD.
+
+ The chrome version to be used will be read from a file on the repo side.
+ """
+ browser_lock_yaml_file = checkout.join('flutter', 'lib', 'web_ui', 'dev',
+ 'browser_lock.yaml')
+ with self.m.context(cwd=checkout):
+ result = self.m.yaml.read(
+ 'read browser lock yaml',
+ browser_lock_yaml_file,
+ self.m.json.output(),
+ )
+ browser_lock_content = result.json.output
+ platform = self.m.platform.name.capitalize()
+ binary = browser_lock_content['chrome'][platform]
+ chrome_path = checkout.join('flutter', 'lib', 'web_ui', '.dart_tool',
+ 'chrome', '%s' % binary)
+ # Using the binary number since the repos side file uses binary names.
+ # See: flutter/engine/blob/master/lib/web_ui/dev/browser_lock.yaml
+ # Chrome also uses these binary numbers for archiving different versions.
+ chrome_pkg = self.m.cipd.EnsureFile()
+ chrome_pkg.add_package('flutter_internal/browsers/chrome/${platform}',
+ binary)
+ self.m.cipd.ensure(chrome_path, chrome_pkg)
+
+ def chrome_driver(self, checkout):
+ """Downloads Chrome web driver from CIPD.
+
+ The driver version to be used will be read from a file on the repo side.
+ """
+ # Get driver version from the engine repo.
+ # See: flutter/engine/blob/master/lib/web_ui/dev/browser_lock.yaml
+ browser_lock_yaml_file = checkout.join('flutter', 'lib', 'web_ui', 'dev',
+ 'browser_lock.yaml')
+ with self.m.context(cwd=checkout):
+ result = self.m.yaml.read(
+ 'read browser lock yaml',
+ browser_lock_yaml_file,
+ self.m.json.output(),
+ )
+ browser_lock_content = result.json.output
+ version = browser_lock_content['required_driver_version']['chrome']
+ chrome_driver_path = checkout.join('flutter', 'lib', 'web_ui', '.dart_tool',
+ 'drivers', 'chrome', '%s' % version)
+ chrome_pkgdriver = self.m.cipd.EnsureFile()
+ chrome_pkgdriver.add_package(
+ 'flutter_internal/browser-drivers/chrome/${platform}',
+ 'latest-%s' % version)
+ self.m.cipd.ensure(chrome_driver_path, chrome_pkgdriver)
+
+ def clone_goldens_repo(self, checkout):
+ """Clone the repository that keeps golden files.
+
+ The repository name and the reference SHA will be read from a file on the
+ repo side.
+ """
+ builder_root = self.m.path['cache'].join('builder')
+ goldens = builder_root.join('goldens')
+ self.m.file.ensure_directory('mkdir goldens', goldens)
+ golden_yaml_file = checkout.join('flutter', 'lib', 'web_ui', 'dev',
+ 'goldens_lock.yaml')
+ with self.m.context(cwd=builder_root):
+ # Use golden_lock.yaml file to read url of the goldens repository and
+ # the revision number to checkout.
+ # https://github.com/flutter/engine/blob/master/lib/web_ui/dev/goldens_lock.yaml
+ # This file is used by web engine developers. The engine developers update
+ # the flutter/goldens.git repo when they need changes. Later change the
+ # revision number on this file.
+ result = self.m.yaml.read(
+ 'read yaml',
+ golden_yaml_file,
+ self.m.json.output(),
+ )
+ # The content of the file is expected to be:
+ #
+ # repository: https://github.com/flutter/goldens.git
+ # revision: b6efc75885c23f0b5c485d8bd659ed339feec9ec
+ golden_lock_content = result.json.output
+ repo = golden_lock_content['repository']
+ revision_number = golden_lock_content['revision']
+ with self.m.context(cwd=goldens):
+ self.m.git.checkout(
+ repo,
+ dir_path=goldens,
+ ref=revision_number,
+ recursive=True,
+ set_got_revision=True)
+ golden_files = checkout.join('flutter', 'lib', 'web_ui', '.dart_tool',
+ 'goldens')
+ self.m.file.copytree('copy goldens', goldens, golden_files)
+
+ def upload_failing_goldens(self, checkout, browser):
+ """Upload the failed goldens files to a gcs bucket.
+
+ Parse the logs to determine which golden tests are failed. Upload expected
+ and actual golden files to a gcs bucket. Display links to html pages where
+ developer can compare actual vs expected images.
+ """
+ logs_path = checkout.join('flutter', 'lib', 'web_ui', '.dart_tool',
+ 'test_results')
+ tests_info_file_path = logs_path.join('info.txt')
+ self.m.file.write_text(
+ 'write info file',
+ tests_info_file_path,
+ 'tests for %s' % self.m.platform.name,
+ 'tests for windows',
+ )
+
+ if not self.m.properties.get(
+ 'gcs_goldens_bucket') or self.m.runtime.is_experimental:
+ # This is to avoid trying to upload files when 'gcs_goldens_bucket' is
+ # missing or when running from led.
+ return
+
+ bucket_id = self.m.buildbucket.build.id
+ self.m.gsutil.upload(
+ bucket=self.m.properties['gcs_goldens_bucket'],
+ source=logs_path,
+ dest='%s/%s/%s' % ('web_engine', bucket_id, browser),
+ link_name='archive goldens',
+ args=['-r'],
+ multithreaded=True,
+ name='upload goldens %s' % bucket_id,
+ unauthenticated_url=True)
+ html_files = self.m.file.glob_paths(
+ 'html goldens',
+ source=logs_path,
+ pattern='*.html',
+ test_data=['a.html'])
+ with self.m.step.nest('Failed golden links') as presentation:
+ for html_file in html_files:
+ base_name = self.m.path.basename(html_file)
+ url = 'https://storage.googleapis.com/%s/web_engine/%s/%s/%s' % (
+ self.m.properties['gcs_goldens_bucket'], bucket_id, browser,
+ base_name)
+ presentation.links[base_name] = url
+
+ def prepare_dependencies(self, checkout):
+ """Install all the required dependencies for a given felt test."""
+ deps = self.m.properties.get('dependencies', [])
+ available_deps = {
+ 'chrome': self.chrome,
+ 'chrome_driver': self.chrome_driver,
+ 'firefox_driver': self.firefox_driver,
+ 'goldens_repo': self.clone_goldens_repo,
+ }
+ for dep in deps:
+ dep_funct = available_deps.get(dep)
+ if not dep_funct:
+ raise ValueError('Dependency %s not available.' % dep)
+ dep_funct(checkout)
diff --git a/recipe_modules/web_util/examples/full.expected/chrome driver.json b/recipe_modules/web_util/examples/full.expected/chrome driver.json
new file mode 100644
index 0000000..02162a5
--- /dev/null
+++ b/recipe_modules/web_util/examples/full.expected/chrome driver.json
@@ -0,0 +1,105 @@
+[
+ {
+ "cmd": [],
+ "name": "read browser lock yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "infra_step": true,
+ "name": "read browser lock yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@browser_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "name": "read browser lock yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Linux\": \"768968\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Mac\": \"768985\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Win\": \"768975\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"required_driver_version\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": 84@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/drivers/chrome/84",
+ "-ensure-file",
+ "flutter_internal/browser-drivers/chrome/${platform} latest-84",
+ "-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-latest-84-------\", @@@",
+ "@@@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": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for linux",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for linux@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/chrome.json b/recipe_modules/web_util/examples/full.expected/chrome.json
new file mode 100644
index 0000000..ca9231b
--- /dev/null
+++ b/recipe_modules/web_util/examples/full.expected/chrome.json
@@ -0,0 +1,105 @@
+[
+ {
+ "cmd": [],
+ "name": "read browser lock yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "infra_step": true,
+ "name": "read browser lock yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@browser_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "name": "read browser lock yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Linux\": \"768968\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Mac\": \"768985\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Win\": \"768975\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"required_driver_version\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": 84@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/chrome/768968",
+ "-ensure-file",
+ "flutter_internal/browsers/chrome/${platform} 768968",
+ "-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-768968----------\", @@@",
+ "@@@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": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for linux",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for linux@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/clone repo.json b/recipe_modules/web_util/examples/full.expected/clone repo.json
new file mode 100644
index 0000000..7eb4fcb
--- /dev/null
+++ b/recipe_modules/web_util/examples/full.expected/clone repo.json
@@ -0,0 +1,233 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder/goldens"
+ ],
+ "infra_step": true,
+ "name": "mkdir goldens"
+ },
+ {
+ "cmd": [],
+ "name": "read yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder",
+ "infra_step": true,
+ "name": "read yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@goldens_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder",
+ "name": "read yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"b6efc758\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[CACHE]/builder/goldens",
+ "--url",
+ "repo"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "name": "git setup"
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "b6efc758",
+ "--recurse-submodules",
+ "--progress"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "git fetch"
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git checkout"
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "read revision",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git clean"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule sync"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule update"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copytree",
+ "[CACHE]/builder/goldens",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/goldens"
+ ],
+ "infra_step": true,
+ "name": "copy goldens"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for linux",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for linux@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+ "--",
+ "RECIPE_REPO[depot_tools]/gsutil.py",
+ "-m",
+ "----",
+ "cp",
+ "-r",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "gs://mybucket/web_engine/0/chrome"
+ ],
+ "infra_step": true,
+ "name": "gsutil upload goldens 0",
+ "~followup_annotations": [
+ "@@@STEP_LINK@archive goldens@https://console.cloud.google.com/storage/browser/mybucket/web_engine/0/chrome@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "glob",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "*.html"
+ ],
+ "infra_step": true,
+ "name": "html goldens",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@glob@[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/a.html@@@",
+ "@@@STEP_LOG_END@glob@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Failed golden links",
+ "~followup_annotations": [
+ "@@@STEP_LINK@a.html@https://storage.googleapis.com/mybucket/web_engine/0/chrome/a.html@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/fail case.json b/recipe_modules/web_util/examples/full.expected/fail case.json
new file mode 100644
index 0000000..eede892
--- /dev/null
+++ b/recipe_modules/web_util/examples/full.expected/fail case.json
@@ -0,0 +1,23 @@
+[
+ {
+ "cmd": [],
+ "name": "RECIPE CRASH (Uncaught exception)",
+ "~followup_annotations": [
+ "@@@STEP_EXCEPTION@@@",
+ "The recipe has crashed at point 'Uncaught exception'!",
+ "",
+ "Traceback (most recent call last):",
+ " File \"RECIPE_REPO[flutter]/recipe_modules/web_util/examples/full.py\", line 23, in RunSteps",
+ " api.web_util.prepare_dependencies(engine_checkout_path)",
+ " File \"RECIPE_REPO[flutter]/recipe_modules/web_util/api.py\", line 172, in prepare_dependencies",
+ " raise ValueError('Dependency %s not available.' % dep)",
+ "ValueError: Dependency invalid_dependency not available."
+ ]
+ },
+ {
+ "failure": {
+ "humanReason": "Uncaught Exception: ValueError('Dependency invalid_dependency not available.',)"
+ },
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/firefox driver.json b/recipe_modules/web_util/examples/full.expected/firefox driver.json
new file mode 100644
index 0000000..f214d56
--- /dev/null
+++ b/recipe_modules/web_util/examples/full.expected/firefox driver.json
@@ -0,0 +1,51 @@
+[
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/drivers/firefox",
+ "-ensure-file",
+ "flutter_internal/browser-drivers/firefoxdriver-linux latest",
+ "-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-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter_internal/browser-drivers/firefoxdriver-linux\"@@@",
+ "@@@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",
+ "copy",
+ "tests for linux",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for linux@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.expected/mac-post-submit.json b/recipe_modules/web_util/examples/full.expected/mac-post-submit.json
new file mode 100644
index 0000000..edcc8ba
--- /dev/null
+++ b/recipe_modules/web_util/examples/full.expected/mac-post-submit.json
@@ -0,0 +1,233 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder/goldens"
+ ],
+ "infra_step": true,
+ "name": "mkdir goldens"
+ },
+ {
+ "cmd": [],
+ "name": "read yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder",
+ "infra_step": true,
+ "name": "read yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@goldens_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder",
+ "name": "read yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"b6efc758\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[CACHE]/builder/goldens",
+ "--url",
+ "repo"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "name": "git setup"
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "b6efc758",
+ "--recurse-submodules",
+ "--progress"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "git fetch"
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git checkout"
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "read revision",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git clean"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule sync"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule update"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copytree",
+ "[CACHE]/builder/goldens",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/goldens"
+ ],
+ "infra_step": true,
+ "name": "copy goldens"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for mac",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for mac@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+ "--",
+ "RECIPE_REPO[depot_tools]/gsutil.py",
+ "-m",
+ "----",
+ "cp",
+ "-r",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "gs://mybucket/web_engine/0/chrome"
+ ],
+ "infra_step": true,
+ "name": "gsutil upload goldens 0",
+ "~followup_annotations": [
+ "@@@STEP_LINK@archive goldens@https://console.cloud.google.com/storage/browser/mybucket/web_engine/0/chrome@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "glob",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "*.html"
+ ],
+ "infra_step": true,
+ "name": "html goldens",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@glob@[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/a.html@@@",
+ "@@@STEP_LOG_END@glob@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Failed golden links",
+ "~followup_annotations": [
+ "@@@STEP_LINK@a.html@https://storage.googleapis.com/mybucket/web_engine/0/chrome/a.html@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipe_modules/web_util/examples/full.py b/recipe_modules/web_util/examples/full.py
new file mode 100644
index 0000000..6507dc4
--- /dev/null
+++ b/recipe_modules/web_util/examples/full.py
@@ -0,0 +1,79 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from recipe_engine.post_process import DoesNotRun, Filter, StatusFailure
+
+DEPS = [
+ 'depot_tools/gsutil',
+ 'flutter/web_util',
+ 'recipe_engine/context',
+ 'recipe_engine/file',
+ 'recipe_engine/json',
+ 'recipe_engine/path',
+ 'recipe_engine/platform',
+ 'recipe_engine/properties',
+ 'recipe_engine/runtime',
+ 'recipe_engine/step',
+]
+
+
+def RunSteps(api):
+ engine_checkout_path = api.path['cache'].join('builder', 'src')
+ api.web_util.prepare_dependencies(engine_checkout_path)
+ api.web_util.upload_failing_goldens(engine_checkout_path, 'chrome')
+
+def GenTests(api):
+ golden_yaml_file = {'repository': 'repo', 'revision': 'b6efc758'}
+ browser_yaml_file = {
+ 'required_driver_version': {
+ 'chrome': 84
+ },
+ 'chrome': {
+ 'Linux': '768968',
+ 'Mac': '768985',
+ 'Win': '768975'
+ }
+ }
+ yield api.test(
+ 'fail case',
+ api.expect_exception('ValueError'),
+ api.properties(
+ dependencies=['invalid_dependency'],), api.platform(
+ 'linux', 64)) + api.platform.name('linux')
+ yield api.test(
+ 'clone repo',
+ api.step_data('read yaml.parse', api.json.output(golden_yaml_file)),
+ api.properties(
+ gcs_goldens_bucket='mybucket',
+ dependencies=['goldens_repo'],), api.platform(
+ 'linux', 64)) + api.platform.name('linux') + api.runtime(is_experimental=False)
+ yield api.test(
+ 'chrome driver',
+ api.step_data('read browser lock yaml.parse',
+ api.json.output(browser_yaml_file)),
+ api.properties(
+ dependencies=['chrome_driver'],), api.platform(
+ 'linux', 64)) + api.platform.name('linux')
+ yield api.test(
+ 'firefox driver',
+ api.properties(
+ dependencies=['firefox_driver'],), api.platform(
+ 'linux', 64)) + api.platform.name('linux')
+ yield api.test(
+ 'chrome',
+ api.step_data('read browser lock yaml.parse',
+ api.json.output(browser_yaml_file)),
+ api.properties(
+ dependencies=['chrome'],), api.platform(
+ 'linux', 64)) + api.platform.name('linux')
+ yield api.test(
+ 'mac-post-submit',
+ api.step_data('read yaml.parse', api.json.output(golden_yaml_file)),
+ api.properties(
+ goma_jobs='200',
+ gcs_goldens_bucket='mybucket',
+ dependencies=['goldens_repo'],
+ command_args=['test', '--browser=ios-safari', '--unit-tests-only'],
+ command_name='ios-safari-unit-tests'), api.platform(
+ 'mac', 64)) + api.runtime(is_experimental=False)
diff --git a/recipes/engine/web_engine_drone.expected/linux-error.json b/recipes/engine/web_engine_drone.expected/linux-error.json
new file mode 100644
index 0000000..1ef3bf5
--- /dev/null
+++ b/recipes/engine/web_engine_drone.expected/linux-error.json
@@ -0,0 +1,234 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Clobber cache"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder/src/out"
+ ],
+ "infra_step": true,
+ "name": "Clobber build output: Linux"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Ensure checkout cache"
+ },
+ {
+ "cmd": [],
+ "name": "ensure goma"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/goma/client",
+ "-ensure-file",
+ "fuchsia/third_party/goma/client/${platform} release",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure goma.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-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/third_party/goma/client/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": "Checkout source code"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Clobber cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Ensure checkout cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+ "--spec-path",
+ "cache_dir = '[CACHE]/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://mygitrepo'}]",
+ "--revision_mapping_file",
+ "{\"got_engine_revision\": \"src/flutter\"}",
+ "--git-cache-dir",
+ "[CACHE]/git",
+ "--cleanup-dir",
+ "[CLEANUP]/bot_update",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@refs/pull/1/head",
+ "--refs",
+ "refs/pull/1/head"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env": {
+ "GIT_HTTP_LOW_SPEED_LIMIT": "102400",
+ "GIT_HTTP_LOW_SPEED_TIME": "300"
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "Checkout source code.bot_update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"refs/pull/1/head\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"a63681edc0f69a72604596b16c7986513e809995\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision\": \"a63681edc0f69a72604596b16c7986513e809995\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision_cp\": \"refs/heads/master@{#84512}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"a63681edc0f69a72604596b16c7986513e809995\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision@\"a63681edc0f69a72604596b16c7986513e809995\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision_cp@\"refs/heads/master@{#84512}\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_REPO[depot_tools]/gclient.py",
+ "runhooks"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Checkout source code.gclient runhooks",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "RECIPE CRASH (Uncaught exception)",
+ "~followup_annotations": [
+ "@@@STEP_EXCEPTION@@@",
+ "The recipe has crashed at point 'Uncaught exception'!",
+ "",
+ "Traceback (most recent call last):",
+ " File \"RECIPE_REPO[flutter]/recipes/engine/web_engine_drone.py\", line 75, in RunSteps",
+ " api.web_util.prepare_dependencies(checkout)",
+ " File \"RECIPE_REPO[flutter]/recipe_modules/web_util/api.py\", line 172, in prepare_dependencies",
+ " raise ValueError('Dependency %s not available.' % dep)",
+ "ValueError: Dependency invalid_dependency not available."
+ ]
+ },
+ {
+ "failure": {
+ "humanReason": "Uncaught Exception: ValueError('Dependency invalid_dependency not available.',)"
+ },
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/engine/web_engine_drone.expected/linux-experimental.json b/recipes/engine/web_engine_drone.expected/linux-experimental.json
new file mode 100644
index 0000000..2569944
--- /dev/null
+++ b/recipes/engine/web_engine_drone.expected/linux-experimental.json
@@ -0,0 +1,706 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Clobber cache"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder/src/out"
+ ],
+ "infra_step": true,
+ "name": "Clobber build output: Linux"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Ensure checkout cache"
+ },
+ {
+ "cmd": [],
+ "name": "ensure goma"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/goma/client",
+ "-ensure-file",
+ "fuchsia/third_party/goma/client/${platform} release",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure goma.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-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/third_party/goma/client/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": "Checkout source code"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Clobber cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Ensure checkout cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+ "--spec-path",
+ "cache_dir = '[CACHE]/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://mygitrepo'}]",
+ "--revision_mapping_file",
+ "{\"got_engine_revision\": \"src/flutter\"}",
+ "--git-cache-dir",
+ "[CACHE]/git",
+ "--cleanup-dir",
+ "[CLEANUP]/bot_update",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@refs/pull/1/head",
+ "--refs",
+ "refs/pull/1/head"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env": {
+ "GIT_HTTP_LOW_SPEED_LIMIT": "102400",
+ "GIT_HTTP_LOW_SPEED_TIME": "300"
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "Checkout source code.bot_update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"refs/pull/1/head\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"a63681edc0f69a72604596b16c7986513e809995\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision\": \"a63681edc0f69a72604596b16c7986513e809995\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision_cp\": \"refs/heads/master@{#84512}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"a63681edc0f69a72604596b16c7986513e809995\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision@\"a63681edc0f69a72604596b16c7986513e809995\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision_cp@\"refs/heads/master@{#84512}\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_REPO[depot_tools]/gclient.py",
+ "runhooks"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Checkout source code.gclient runhooks",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder/goldens"
+ ],
+ "infra_step": true,
+ "name": "mkdir goldens"
+ },
+ {
+ "cmd": [],
+ "name": "read yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder",
+ "infra_step": true,
+ "name": "read yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@goldens_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder",
+ "name": "read yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"b6efc758\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[CACHE]/builder/goldens",
+ "--url",
+ "repo"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "name": "git setup"
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "b6efc758",
+ "--recurse-submodules",
+ "--progress"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "git fetch"
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git checkout"
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "read revision",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git clean"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule sync"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule update"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copytree",
+ "[CACHE]/builder/goldens",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/goldens"
+ ],
+ "infra_step": true,
+ "name": "copy goldens"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/web_sdk/web_engine_tester",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_engine_tester"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_ui"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/dart",
+ "dev/felt.dart",
+ "test"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "felt test: test"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for linux",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for linux@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Killing Processes"
+ },
+ {
+ "cmd": [
+ "pkill",
+ "chrome"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill chrome",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "dart"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill dart",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "flutter"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill flutter",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "java"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill java",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "adb"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill adb",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "top",
+ "-b",
+ "-n",
+ "3",
+ "-o",
+ "%MEM"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "OS info"
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/engine/web_engine_drone.expected/linux-firefox-integration.json b/recipes/engine/web_engine_drone.expected/linux-firefox-integration.json
new file mode 100644
index 0000000..e4e7d16
--- /dev/null
+++ b/recipes/engine/web_engine_drone.expected/linux-firefox-integration.json
@@ -0,0 +1,810 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder/src/out"
+ ],
+ "infra_step": true,
+ "name": "Clobber build output: Linux"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Ensure checkout cache"
+ },
+ {
+ "cmd": [],
+ "name": "ensure goma"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/goma/client",
+ "-ensure-file",
+ "fuchsia/third_party/goma/client/${platform} release",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure goma.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-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/third_party/goma/client/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": "Checkout source code"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Clobber cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Ensure checkout cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+ "--spec-path",
+ "cache_dir = '[CACHE]/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://chromium.googlesource.com/external/github.com/flutter/engine'}]",
+ "--revision_mapping_file",
+ "{\"got_engine_revision\": \"src/flutter\"}",
+ "--git-cache-dir",
+ "[CACHE]/git",
+ "--cleanup-dir",
+ "[CLEANUP]/bot_update",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@HEAD"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env": {
+ "GIT_HTTP_LOW_SPEED_LIMIT": "102400",
+ "GIT_HTTP_LOW_SPEED_TIME": "300"
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "Checkout source code.bot_update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"HEAD\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision\": \"9221bca00ddbd888260084def81f09543281b952\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision_cp\": \"refs/heads/master@{#84512}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision@\"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision_cp@\"refs/heads/master@{#84512}\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_REPO[depot_tools]/gclient.py",
+ "runhooks"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Checkout source code.gclient runhooks",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/drivers/firefox",
+ "-ensure-file",
+ "flutter_internal/browser-drivers/firefoxdriver-linux latest",
+ "-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-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"flutter_internal/browser-drivers/firefoxdriver-linux\"@@@",
+ "@@@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",
+ "[CACHE]/builder/goldens"
+ ],
+ "infra_step": true,
+ "name": "mkdir goldens"
+ },
+ {
+ "cmd": [],
+ "name": "read yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder",
+ "infra_step": true,
+ "name": "read yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@goldens_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder",
+ "name": "read yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"b6efc758\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[CACHE]/builder/goldens",
+ "--url",
+ "repo"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "name": "git setup"
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "b6efc758",
+ "--recurse-submodules",
+ "--progress"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "git fetch"
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git checkout"
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "read revision",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git clean"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule sync"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule update"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copytree",
+ "[CACHE]/builder/goldens",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/goldens"
+ ],
+ "infra_step": true,
+ "name": "copy goldens"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/web_sdk/web_engine_tester",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_engine_tester"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_ui"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/dart",
+ "dev/felt.dart",
+ "test",
+ "--browser=firefox",
+ "--integration-tests-only"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "felt test: firefox-integration-tests"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for linux",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for linux@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+ "--",
+ "RECIPE_REPO[depot_tools]/gsutil.py",
+ "-m",
+ "----",
+ "cp",
+ "-r",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "gs://mybucket/web_engine/0/chrome"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "gsutil upload goldens 0",
+ "~followup_annotations": [
+ "@@@STEP_LINK@archive goldens@https://console.cloud.google.com/storage/browser/mybucket/web_engine/0/chrome@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "glob",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "*.html"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "html goldens",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@glob@[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/a.html@@@",
+ "@@@STEP_LOG_END@glob@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Failed golden links",
+ "~followup_annotations": [
+ "@@@STEP_LINK@a.html@https://storage.googleapis.com/mybucket/web_engine/0/chrome/a.html@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Killing Processes"
+ },
+ {
+ "cmd": [
+ "pkill",
+ "chrome"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill chrome",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "dart"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill dart",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "flutter"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill flutter",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "java"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill java",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "adb"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill adb",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "top",
+ "-b",
+ "-n",
+ "3",
+ "-o",
+ "%MEM"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "OS info"
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/engine/web_engine_drone.expected/linux-post-submit.json b/recipes/engine/web_engine_drone.expected/linux-post-submit.json
new file mode 100644
index 0000000..5af915d
--- /dev/null
+++ b/recipes/engine/web_engine_drone.expected/linux-post-submit.json
@@ -0,0 +1,946 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder/src/out"
+ ],
+ "infra_step": true,
+ "name": "Clobber build output: Linux"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Ensure checkout cache"
+ },
+ {
+ "cmd": [],
+ "name": "ensure goma"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/goma/client",
+ "-ensure-file",
+ "fuchsia/third_party/goma/client/${platform} release",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure goma.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-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/third_party/goma/client/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": "Checkout source code"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Clobber cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Ensure checkout cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+ "--spec-path",
+ "cache_dir = '[CACHE]/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://chromium.googlesource.com/external/github.com/flutter/engine'}]",
+ "--revision_mapping_file",
+ "{\"got_engine_revision\": \"src/flutter\"}",
+ "--git-cache-dir",
+ "[CACHE]/git",
+ "--cleanup-dir",
+ "[CLEANUP]/bot_update",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@HEAD"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env": {
+ "GIT_HTTP_LOW_SPEED_LIMIT": "102400",
+ "GIT_HTTP_LOW_SPEED_TIME": "300"
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "Checkout source code.bot_update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"HEAD\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision\": \"9221bca00ddbd888260084def81f09543281b952\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision_cp\": \"refs/heads/master@{#84512}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision@\"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision_cp@\"refs/heads/master@{#84512}\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_REPO[depot_tools]/gclient.py",
+ "runhooks"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Checkout source code.gclient runhooks",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "read browser lock yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "infra_step": true,
+ "name": "read browser lock yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@browser_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "name": "read browser lock yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Linux\": \"768968\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Mac\": \"768985\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Win\": \"768975\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"required_driver_version\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": 84@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/drivers/chrome/84",
+ "-ensure-file",
+ "flutter_internal/browser-drivers/chrome/${platform} latest-84",
+ "-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-latest-84-------\", @@@",
+ "@@@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": [],
+ "name": "read browser lock yaml (2)",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "infra_step": true,
+ "name": "read browser lock yaml (2).read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@browser_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/browser_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder/src",
+ "name": "read browser lock yaml (2).parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Linux\": \"768968\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Mac\": \"768985\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"Win\": \"768975\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"required_driver_version\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"chrome\": 84@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/chrome/768968",
+ "-ensure-file",
+ "flutter_internal/browsers/chrome/${platform} 768968",
+ "-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-768968----------\", @@@",
+ "@@@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": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder/goldens"
+ ],
+ "infra_step": true,
+ "name": "mkdir goldens"
+ },
+ {
+ "cmd": [],
+ "name": "read yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder",
+ "infra_step": true,
+ "name": "read yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@goldens_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder",
+ "name": "read yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"b6efc758\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[CACHE]/builder/goldens",
+ "--url",
+ "repo"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "name": "git setup"
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "b6efc758",
+ "--recurse-submodules",
+ "--progress"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "git fetch"
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git checkout"
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "read revision",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git clean"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule sync"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule update"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copytree",
+ "[CACHE]/builder/goldens",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/goldens"
+ ],
+ "infra_step": true,
+ "name": "copy goldens"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/web_sdk/web_engine_tester",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_engine_tester"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_ui"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/dart",
+ "dev/felt.dart",
+ "test",
+ "--browser=chrome",
+ "--integration-tests-only"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "felt test: chrome-integration-tests"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for linux",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for linux@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+ "--",
+ "RECIPE_REPO[depot_tools]/gsutil.py",
+ "-m",
+ "----",
+ "cp",
+ "-r",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "gs://mybucket/web_engine/0/chrome"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "gsutil upload goldens 0",
+ "~followup_annotations": [
+ "@@@STEP_LINK@archive goldens@https://console.cloud.google.com/storage/browser/mybucket/web_engine/0/chrome@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "glob",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "*.html"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "html goldens",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@glob@[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/a.html@@@",
+ "@@@STEP_LOG_END@glob@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Failed golden links",
+ "~followup_annotations": [
+ "@@@STEP_LINK@a.html@https://storage.googleapis.com/mybucket/web_engine/0/chrome/a.html@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Killing Processes"
+ },
+ {
+ "cmd": [
+ "pkill",
+ "chrome"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill chrome",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "dart"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill dart",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "flutter"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill flutter",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "java"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill java",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "pkill",
+ "adb"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill adb",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "top",
+ "-b",
+ "-n",
+ "3",
+ "-o",
+ "%MEM"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "OS info"
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/engine/web_engine_drone.expected/mac-post-submit.json b/recipes/engine/web_engine_drone.expected/mac-post-submit.json
new file mode 100644
index 0000000..05468f6
--- /dev/null
+++ b/recipes/engine/web_engine_drone.expected/mac-post-submit.json
@@ -0,0 +1,969 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder/src/out"
+ ],
+ "infra_step": true,
+ "name": "Clobber build output: Mac"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Ensure checkout cache"
+ },
+ {
+ "cmd": [],
+ "name": "ensure goma"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/goma/client",
+ "-ensure-file",
+ "fuchsia/third_party/goma/client/${platform} release",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure goma.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-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/third_party/goma/client/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": "Checkout source code"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Clobber cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Ensure checkout cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]/resources/bot_update.py",
+ "--spec-path",
+ "cache_dir = '[CACHE]/git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://chromium.googlesource.com/external/github.com/flutter/engine'}]",
+ "--revision_mapping_file",
+ "{\"got_engine_revision\": \"src/flutter\"}",
+ "--git-cache-dir",
+ "[CACHE]/git",
+ "--cleanup-dir",
+ "[CLEANUP]/bot_update",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@HEAD"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env": {
+ "GIT_HTTP_LOW_SPEED_LIMIT": "102400",
+ "GIT_HTTP_LOW_SPEED_TIME": "300"
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "Checkout source code.bot_update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"HEAD\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision\": \"9221bca00ddbd888260084def81f09543281b952\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision_cp\": \"refs/heads/master@{#84512}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision@\"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision_cp@\"refs/heads/master@{#84512}\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_REPO[depot_tools]/gclient.py",
+ "runhooks"
+ ],
+ "cwd": "[CACHE]/builder",
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Checkout source code.gclient runhooks",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]/builder/goldens"
+ ],
+ "infra_step": true,
+ "name": "mkdir goldens"
+ },
+ {
+ "cmd": [],
+ "name": "read yaml",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@yaml@@@@",
+ "@@@STEP_LOG_END@yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "/path/to/tmp/"
+ ],
+ "cwd": "[CACHE]/builder",
+ "infra_step": true,
+ "name": "read yaml.read",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_END@goldens_lock.yaml@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[flutter::yaml]/resources/parse_yaml.py",
+ "--yaml_file",
+ "[CACHE]/builder/src/flutter/lib/web_ui/dev/goldens_lock.yaml",
+ "--json_file",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder",
+ "name": "read yaml.parse",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"b6efc758\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py",
+ "--path",
+ "[CACHE]/builder/goldens",
+ "--url",
+ "repo"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "name": "git setup"
+ },
+ {
+ "cmd": [
+ "git",
+ "fetch",
+ "origin",
+ "b6efc758",
+ "--recurse-submodules",
+ "--progress"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "env": {
+ "PATH": "RECIPE_REPO[depot_tools]:<PATH>"
+ },
+ "infra_step": true,
+ "name": "git fetch"
+ },
+ {
+ "cmd": [
+ "git",
+ "checkout",
+ "-f",
+ "FETCH_HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git checkout"
+ },
+ {
+ "cmd": [
+ "git",
+ "rev-parse",
+ "HEAD"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "read revision",
+ "~followup_annotations": [
+ "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "git",
+ "clean",
+ "-f",
+ "-d",
+ "-x"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "git clean"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "sync"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule sync"
+ },
+ {
+ "cmd": [
+ "git",
+ "submodule",
+ "update",
+ "--init",
+ "--recursive"
+ ],
+ "cwd": "[CACHE]/builder/goldens",
+ "infra_step": true,
+ "name": "submodule update"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copytree",
+ "[CACHE]/builder/goldens",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/goldens"
+ ],
+ "infra_step": true,
+ "name": "copy goldens"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/web_sdk/web_engine_tester",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_engine_tester"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/pub",
+ "get"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_ui"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[CACHE]/osx_sdk",
+ "-ensure-file",
+ "infra/tools/mac_toolchain/${platform} git_revision:9a1adc55bf4a1173784da3ba2f8cb06421606748",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "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-git_revision:9a1\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/mac_toolchain/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": [
+ "[CACHE]/osx_sdk/mac_toolchain",
+ "install",
+ "-kind",
+ "ios",
+ "-xcode-version",
+ "9f2000",
+ "-output-dir",
+ "[CACHE]/osx_sdk/XCode.app"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "install xcode"
+ },
+ {
+ "cmd": [
+ "sudo",
+ "xcode-select",
+ "--switch",
+ "[CACHE]/osx_sdk/XCode.app"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "select XCode"
+ },
+ {
+ "cmd": [
+ "[CACHE]/builder/src/out/host_debug_unopt/dart-sdk/bin/dart",
+ "dev/felt.dart",
+ "test",
+ "--browser=ios-safari",
+ "--unit-tests-only"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "felt test: ios-safari-unit-tests"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "tests for mac",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/info.txt"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "write info file",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@info.txt@tests for mac@@@",
+ "@@@STEP_LOG_END@info.txt@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::gsutil]/resources/gsutil_smart_retry.py",
+ "--",
+ "RECIPE_REPO[depot_tools]/gsutil.py",
+ "-m",
+ "----",
+ "cp",
+ "-r",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "gs://mybucket/web_engine/0/ios-safari"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "gsutil upload goldens 0",
+ "~followup_annotations": [
+ "@@@STEP_LINK@archive goldens@https://console.cloud.google.com/storage/browser/mybucket/web_engine/0/ios-safari@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "glob",
+ "[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results",
+ "*.html"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "html goldens",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@glob@[CACHE]/builder/src/flutter/lib/web_ui/.dart_tool/test_results/a.html@@@",
+ "@@@STEP_LOG_END@glob@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Failed golden links",
+ "~followup_annotations": [
+ "@@@STEP_LINK@a.html@https://storage.googleapis.com/mybucket/web_engine/0/ios-safari/a.html@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "Killing Processes"
+ },
+ {
+ "cmd": [
+ "killall",
+ "-9",
+ "dart"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill dart",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "killall",
+ "-9",
+ "flutter"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill flutter",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "killall",
+ "-9",
+ "Chrome"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill Chrome",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "killall",
+ "-9",
+ "Safari"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill Safari",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "killall",
+ "-9",
+ "java"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill Safari (2)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "killall",
+ "-9",
+ "adb"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.kill Safari (3)",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "top",
+ "-l",
+ "3",
+ "-o",
+ "mem"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "OS info"
+ },
+ {
+ "cmd": [
+ "sudo",
+ "xcode-select",
+ "--reset"
+ ],
+ "cwd": "[CACHE]/builder/src/flutter/lib/web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]/builder",
+ "GOMA_DIR": "[CACHE]/goma/client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "reset XCode"
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/engine/web_engine_drone.expected/windows-post-submit.json b/recipes/engine/web_engine_drone.expected/windows-post-submit.json
new file mode 100644
index 0000000..bbf0fe1
--- /dev/null
+++ b/recipes/engine/web_engine_drone.expected/windows-post-submit.json
@@ -0,0 +1,433 @@
+[
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]\\builder\\src\\out"
+ ],
+ "infra_step": true,
+ "name": "Clobber build output: Win"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]\\builder"
+ ],
+ "infra_step": true,
+ "name": "Ensure checkout cache"
+ },
+ {
+ "cmd": [],
+ "name": "ensure goma"
+ },
+ {
+ "cmd": [
+ "cipd.bat",
+ "ensure",
+ "-root",
+ "[CACHE]\\goma\\client",
+ "-ensure-file",
+ "fuchsia/third_party/goma/client/${platform} release",
+ "-max-threads",
+ "0",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure goma.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-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/third_party/goma/client/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": "Checkout source code"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "rmtree",
+ "[CACHE]\\builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Clobber cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[CACHE]\\builder"
+ ],
+ "infra_step": true,
+ "name": "Checkout source code.Ensure checkout cache",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[depot_tools::bot_update]\\resources\\bot_update.py",
+ "--spec-path",
+ "cache_dir = '[CACHE]\\\\git'\nsolutions = [{'deps_file': '.DEPS.git', 'managed': True, 'name': 'src/flutter', 'url': 'https://chromium.googlesource.com/external/github.com/flutter/engine'}]",
+ "--revision_mapping_file",
+ "{\"got_engine_revision\": \"src/flutter\"}",
+ "--git-cache-dir",
+ "[CACHE]\\git",
+ "--cleanup-dir",
+ "[CLEANUP]\\bot_update",
+ "--output_json",
+ "/path/to/tmp/json",
+ "--revision",
+ "src/flutter@HEAD"
+ ],
+ "cwd": "[CACHE]\\builder",
+ "env": {
+ "GIT_HTTP_LOW_SPEED_LIMIT": "102400",
+ "GIT_HTTP_LOW_SPEED_TIME": "300"
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "infra_step": true,
+ "name": "Checkout source code.bot_update",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_TEXT@Some step text@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"did_run\": true, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"fixed_revisions\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": \"HEAD\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repository\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_failure\": false, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"patch_root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"properties\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision\": \"9221bca00ddbd888260084def81f09543281b952\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"got_engine_revision_cp\": \"refs/heads/master@{#84512}\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"root\": \"src/flutter\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"source_manifest\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"directories\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"src/flutter\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"git_checkout\": {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"repo_url\": \"https://fake.org/src/flutter.git\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"version\": 0@@@",
+ "@@@STEP_LOG_LINE@json.output@ }, @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"step_text\": \"Some step text\"@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision@\"9221bca00ddbd888260084def81f09543281b952\"@@@",
+ "@@@SET_BUILD_PROPERTY@got_engine_revision_cp@\"refs/heads/master@{#84512}\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_REPO[depot_tools]\\gclient.py",
+ "runhooks"
+ ],
+ "cwd": "[CACHE]\\builder",
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Checkout source code.gclient runhooks",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[CACHE]\\builder\\src\\out\\host_debug_unopt\\dart-sdk\\bin\\pub",
+ "get"
+ ],
+ "cwd": "[CACHE]\\builder\\src\\flutter\\web_sdk\\web_engine_tester",
+ "env": {
+ "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]\\builder",
+ "GOMA_DIR": "[CACHE]\\goma\\client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_engine_tester"
+ },
+ {
+ "cmd": [
+ "[CACHE]\\builder\\src\\out\\host_debug_unopt\\dart-sdk\\bin\\pub",
+ "get"
+ ],
+ "cwd": "[CACHE]\\builder\\src\\flutter\\lib\\web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]\\builder",
+ "GOMA_DIR": "[CACHE]\\goma\\client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "pub get in web_ui"
+ },
+ {
+ "cmd": [
+ "[CACHE]\\builder\\src\\out\\host_debug_unopt\\dart-sdk\\bin\\dart",
+ "dev/felt.dart",
+ "test"
+ ],
+ "cwd": "[CACHE]\\builder\\src\\flutter\\lib\\web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]\\builder",
+ "GOMA_DIR": "[CACHE]\\goma\\client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "felt test: test"
+ },
+ {
+ "cmd": [],
+ "name": "Killing Processes"
+ },
+ {
+ "cmd": [
+ "taskkill",
+ "/f",
+ "/im",
+ "java.exe",
+ "/t"
+ ],
+ "cwd": "[CACHE]\\builder\\src\\flutter\\lib\\web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]\\builder",
+ "GOMA_DIR": "[CACHE]\\goma\\client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.stop gradle daemon",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "taskkill",
+ "/f",
+ "/im",
+ "dart.exe",
+ "/t"
+ ],
+ "cwd": "[CACHE]\\builder\\src\\flutter\\lib\\web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]\\builder",
+ "GOMA_DIR": "[CACHE]\\goma\\client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.stop dart",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "taskkill",
+ "/f",
+ "/im",
+ "adb.exe",
+ "/t"
+ ],
+ "cwd": "[CACHE]\\builder\\src\\flutter\\lib\\web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]\\builder",
+ "GOMA_DIR": "[CACHE]\\goma\\client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.stop adb",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "taskkill",
+ "/f",
+ "/im",
+ "flutter_tester.exe",
+ "/t"
+ ],
+ "cwd": "[CACHE]\\builder\\src\\flutter\\lib\\web_ui",
+ "env": {
+ "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
+ "CHROME_NO_SANDBOX": "true",
+ "ENGINE_PATH": "[CACHE]\\builder",
+ "GOMA_DIR": "[CACHE]\\goma\\client"
+ },
+ "env_prefixes": {
+ "PATH": [
+ "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
+ ]
+ },
+ "env_suffixes": {
+ "DEPOT_TOOLS_UPDATE": [
+ "0",
+ "0"
+ ],
+ "PATH": [
+ "RECIPE_REPO[depot_tools]",
+ "RECIPE_REPO[depot_tools]"
+ ]
+ },
+ "name": "Killing Processes.stop flutter_tester",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "name": "$result"
+ }
+]
\ No newline at end of file
diff --git a/recipes/engine/web_engine_drone.py b/recipes/engine/web_engine_drone.py
new file mode 100644
index 0000000..a48190c
--- /dev/null
+++ b/recipes/engine/web_engine_drone.py
@@ -0,0 +1,214 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Recipe for engine shards.
+
+ web_engine.py will call these shards. It will build the Flutter Web Engine,
+ and will archive it to the isolate server.
+
+ These shards will be called with required dependencies, felt commands, and
+ with an isolate hash of the Flutter Web Engine.
+"""
+
+import contextlib
+import copy
+
+from recipe_engine import recipe_api
+
+from PB.recipes.flutter.engine import InputProperties
+from PB.recipes.flutter.engine import EnvProperties
+
+DEPS = [
+ 'depot_tools/bot_update',
+ 'depot_tools/depot_tools',
+ 'depot_tools/osx_sdk',
+ 'flutter/flutter_deps',
+ 'flutter/os_utils',
+ 'flutter/json_util',
+ 'flutter/repo_util',
+ 'flutter/web_util',
+ 'fuchsia/goma',
+ 'recipe_engine/context',
+ 'recipe_engine/file',
+ 'recipe_engine/json',
+ 'recipe_engine/path',
+ 'recipe_engine/platform',
+ 'recipe_engine/properties',
+ 'recipe_engine/runtime',
+ 'recipe_engine/step',
+]
+
+GIT_REPO = (
+ 'https://chromium.googlesource.com/external/github.com/flutter/engine')
+
+PROPERTIES = InputProperties
+ENV_PROPERTIES = EnvProperties
+
+
+def GetCheckoutPath(api):
+ """Path to checkout the flutter/engine repo."""
+ return api.path['cache'].join('builder', 'src')
+
+def RunSteps(api, properties, env_properties):
+ """Steps to checkout flutter engine and execute web test shard.
+
+ The test shard to run will be determined by `command_args` send as part of
+ properties.
+ """
+ cache_root = api.path['cache'].join('builder')
+ checkout = GetCheckoutPath(api)
+ platform = api.platform.name.capitalize()
+ if properties.clobber:
+ api.file.rmtree('Clobber cache', cache_root)
+ api.file.rmtree('Clobber build output: %s' % platform, checkout.join('out'))
+
+ api.file.ensure_directory('Ensure checkout cache', cache_root)
+ api.goma.ensure()
+ env = {}
+ env_prefixes = {}
+
+ # Checkout source code and build
+ api.repo_util.engine_checkout(cache_root, env, env_prefixes)
+
+ # Prepare the dependencies that web tests need.
+ # These can be browsers, web drivers or other repositories.
+ api.web_util.prepare_dependencies(checkout)
+
+ with api.context(
+ cwd=cache_root, env=env,
+ env_prefixes=env_prefixes), api.depot_tools.on_path():
+
+ target_name = 'host_debug_unopt'
+
+ # Load local engine information if available.
+ api.flutter_deps.flutter_engine(env, env_prefixes)
+
+ android_home = checkout.join('third_party', 'android_tools', 'sdk')
+ env = {
+ 'GOMA_DIR': api.goma.goma_dir,
+ 'ANDROID_HOME': str(android_home),
+ 'CHROME_NO_SANDBOX': 'true',
+ 'ENGINE_PATH': cache_root,
+ }
+ # flutter_engine deps adds dart dependency as out/host_debug_unopt/dart-sdk
+ # We are changing it with src/third_party/dart/tools/sdks/dart-sdk
+ dart_bin = checkout.join('third_party', 'dart', 'tools', 'sdks', 'dart-sdk',
+ 'bin')
+ paths = env_prefixes.get('PATH', [])
+ paths.insert(0, dart_bin)
+ env_prefixes['PATH'] = paths
+
+ command_args = api.properties.get('command_args', ['test'])
+ command_name = api.properties.get('command_name', 'test')
+ felt_cmd = [
+ checkout.join('out', target_name, 'dart-sdk', 'bin', 'dart'),
+ 'dev/felt.dart'
+ ]
+ felt_cmd.extend(command_args)
+
+ with api.context(
+ cwd=cache_root, env=env,
+ env_prefixes=env_prefixes), api.depot_tools.on_path():
+ # Update dart packages and run tests.
+ local_pub = checkout.join('out', target_name, 'dart-sdk', 'bin', 'pub')
+ with api.context(
+ cwd=checkout.join('flutter', 'web_sdk', 'web_engine_tester')):
+ api.step('pub get in web_engine_tester', [local_pub, 'get'])
+ with api.context(cwd=checkout.join('flutter', 'lib', 'web_ui')):
+ api.step('pub get in web_ui', [local_pub, 'get'])
+ if api.platform.is_mac:
+ with api.osx_sdk('ios'):
+ with recipe_api.defer_results():
+ api.step('felt test: %s' % command_name, felt_cmd)
+ if api.properties.get(
+ 'dependencies') and 'goldens_repo' in api.properties.get(
+ 'dependencies'):
+ api.web_util.upload_failing_goldens(checkout, 'ios-safari')
+ # This is to clean up leaked processes.
+ api.os_utils.kill_processes()
+ # Collect memory/cpu/process after task execution.
+ api.os_utils.collect_os_info()
+ else:
+ with recipe_api.defer_results():
+ api.step('felt test: %s' % command_name, felt_cmd)
+ if api.properties.get(
+ 'dependencies') and 'goldens_repo' in api.properties.get(
+ 'dependencies'):
+ api.web_util.upload_failing_goldens(checkout, 'chrome')
+ # This is to clean up leaked processes.
+ api.os_utils.kill_processes()
+ # Collect memory/cpu/process after task execution.
+ api.os_utils.collect_os_info()
+
+
+def GenTests(api):
+ golden_yaml_file = {'repository': 'repo', 'revision': 'b6efc758'}
+ browser_yaml_file = {
+ 'required_driver_version': {
+ 'chrome': 84
+ },
+ 'chrome': {
+ 'Linux': '768968',
+ 'Mac': '768985',
+ 'Win': '768975'
+ }
+ }
+ yield api.test(
+ 'linux-post-submit',
+ api.step_data('read browser lock yaml.parse',
+ api.json.output(browser_yaml_file)),
+ api.step_data('read browser lock yaml (2).parse',
+ api.json.output(browser_yaml_file)),
+ api.step_data('read yaml.parse', api.json.output(golden_yaml_file)),
+ api.properties(
+ goma_jobs='200',
+ gcs_goldens_bucket='mybucket',
+ dependencies=['chrome_driver', 'chrome', 'goldens_repo'],
+ command_args=['test', '--browser=chrome', '--integration-tests-only'],
+ command_name='chrome-integration-tests'), api.platform(
+ 'linux', 64)) + api.runtime(
+ is_experimental=False) + api.platform.name('linux')
+ yield api.test(
+ 'linux-firefox-integration',
+ api.step_data('read yaml.parse', api.json.output(golden_yaml_file)),
+ api.properties(
+ goma_jobs='200',
+ gcs_goldens_bucket='mybucket',
+ dependencies=['firefox_driver', 'goldens_repo'],
+ command_args=[
+ 'test', '--browser=firefox', '--integration-tests-only'
+ ],
+ command_name='firefox-integration-tests'), api.platform.name('linux'),
+ api.platform('linux', 64)) + api.runtime(is_experimental=False)
+ yield api.test('windows-post-submit') + api.properties(
+ goma_jobs='200') + api.platform('win',
+ 32) + api.runtime(is_experimental=False)
+ yield api.test(
+ 'mac-post-submit',
+ api.step_data('read yaml.parse', api.json.output(golden_yaml_file)),
+ api.properties(
+ goma_jobs='200',
+ gcs_goldens_bucket='mybucket',
+ dependencies=['goldens_repo'],
+ command_args=['test', '--browser=ios-safari', '--unit-tests-only'],
+ command_name='ios-safari-unit-tests'), api.platform(
+ 'mac', 64)) + api.runtime(is_experimental=False)
+ yield api.test(
+ 'linux-experimental',
+ api.step_data('read yaml.parse', api.json.output(golden_yaml_file)),
+ api.properties(
+ goma_jobs='200',
+ git_url='https://mygitrepo',
+ git_ref='refs/pull/1/head',
+ dependencies=['goldens_repo'],
+ clobber=True), api.platform('linux',
+ 64)) + api.runtime(is_experimental=True)
+ yield api.test(
+ 'linux-error',
+ api.properties(
+ goma_jobs='200',
+ git_url='https://mygitrepo',
+ git_ref='refs/pull/1/head',
+ dependencies=['invalid_dependency'],
+ clobber=True), api.platform('linux', 64),
+ api.expect_exception('ValueError')) + api.runtime(is_experimental=True)
diff --git a/recipes/web_engine.expected/linux-post-submit.json b/recipes/web_engine.expected/linux-post-submit.json
index 785444d..6d89280 100644
--- a/recipes/web_engine.expected/linux-post-submit.json
+++ b/recipes/web_engine.expected/linux-post-submit.json
@@ -284,63 +284,6 @@
},
{
"cmd": [
- "git",
- "fetch",
- "https://dart.googlesource.com/sdk.git",
- "--tags"
- ],
- "cwd": "[CACHE]/builder/src/third_party/dart",
- "env": {
- "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]/builder",
- "GOMA_DIR": "[CACHE]/goma/client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "Fetch dart tags"
- },
- {
- "cmd": [
- "git",
- "tag",
- "--list"
- ],
- "cwd": "[CACHE]/builder/src/third_party/dart",
- "env": {
- "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]/builder",
- "GOMA_DIR": "[CACHE]/goma/client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "List all tags"
- },
- {
- "cmd": [
"python",
"-u",
"RECIPE_REPO[depot_tools]/gclient.py",
diff --git a/recipes/web_engine.expected/linux-pre-submit.json b/recipes/web_engine.expected/linux-pre-submit.json
index 1b66446..1278e2e 100644
--- a/recipes/web_engine.expected/linux-pre-submit.json
+++ b/recipes/web_engine.expected/linux-pre-submit.json
@@ -299,63 +299,6 @@
},
{
"cmd": [
- "git",
- "fetch",
- "https://dart.googlesource.com/sdk.git",
- "--tags"
- ],
- "cwd": "[CACHE]/builder/src/third_party/dart",
- "env": {
- "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]/builder",
- "GOMA_DIR": "[CACHE]/goma/client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "Fetch dart tags"
- },
- {
- "cmd": [
- "git",
- "tag",
- "--list"
- ],
- "cwd": "[CACHE]/builder/src/third_party/dart",
- "env": {
- "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]/builder",
- "GOMA_DIR": "[CACHE]/goma/client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "List all tags"
- },
- {
- "cmd": [
"python",
"-u",
"RECIPE_REPO[depot_tools]/gclient.py",
diff --git a/recipes/web_engine.expected/mac-post-submit.json b/recipes/web_engine.expected/mac-post-submit.json
index 4149813..21ee450 100644
--- a/recipes/web_engine.expected/mac-post-submit.json
+++ b/recipes/web_engine.expected/mac-post-submit.json
@@ -392,63 +392,6 @@
},
{
"cmd": [
- "git",
- "fetch",
- "https://dart.googlesource.com/sdk.git",
- "--tags"
- ],
- "cwd": "[CACHE]/builder/src/third_party/dart",
- "env": {
- "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]/builder",
- "GOMA_DIR": "[CACHE]/goma/client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "Fetch dart tags"
- },
- {
- "cmd": [
- "git",
- "tag",
- "--list"
- ],
- "cwd": "[CACHE]/builder/src/third_party/dart",
- "env": {
- "ANDROID_HOME": "[CACHE]/builder/src/third_party/android_tools/sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]/builder",
- "GOMA_DIR": "[CACHE]/goma/client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]/builder/src/third_party/dart/tools/sdks/dart-sdk/bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "List all tags"
- },
- {
- "cmd": [
"python",
"-u",
"RECIPE_REPO[depot_tools]/gclient.py",
diff --git a/recipes/web_engine.expected/windows-post-submit.json b/recipes/web_engine.expected/windows-post-submit.json
index b39d79b..7b15b08 100644
--- a/recipes/web_engine.expected/windows-post-submit.json
+++ b/recipes/web_engine.expected/windows-post-submit.json
@@ -217,63 +217,6 @@
},
{
"cmd": [
- "git",
- "fetch",
- "https://dart.googlesource.com/sdk.git",
- "--tags"
- ],
- "cwd": "[CACHE]\\builder\\src\\third_party\\dart",
- "env": {
- "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]\\builder",
- "GOMA_DIR": "[CACHE]\\goma\\client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "Fetch dart tags"
- },
- {
- "cmd": [
- "git",
- "tag",
- "--list"
- ],
- "cwd": "[CACHE]\\builder\\src\\third_party\\dart",
- "env": {
- "ANDROID_HOME": "[CACHE]\\builder\\src\\third_party\\android_tools\\sdk",
- "CHROME_NO_SANDBOX": "true",
- "ENGINE_PATH": "[CACHE]\\builder",
- "GOMA_DIR": "[CACHE]\\goma\\client"
- },
- "env_prefixes": {
- "PATH": [
- "[CACHE]\\builder\\src\\third_party\\dart\\tools\\sdks\\dart-sdk\\bin"
- ]
- },
- "env_suffixes": {
- "DEPOT_TOOLS_UPDATE": [
- "0"
- ],
- "PATH": [
- "RECIPE_REPO[depot_tools]"
- ]
- },
- "name": "List all tags"
- },
- {
- "cmd": [
"python",
"-u",
"RECIPE_REPO[depot_tools]\\gclient.py",
diff --git a/recipes/web_engine.py b/recipes/web_engine.py
index 303f6bc..4310038 100644
--- a/recipes/web_engine.py
+++ b/recipes/web_engine.py
@@ -234,16 +234,6 @@
FormatAndDartTest(api)
Lint(api)
- # Presence of tags in git repo is critical for determining dart version.
- dart_sdk_dir = GetCheckoutPath(api).join('third_party', 'dart')
- with api.context(cwd=dart_sdk_dir):
- # The default fetch remote is a local dir, so explicitly fetch from
- # upstream remote
- api.step(
- 'Fetch dart tags',
- ['git', 'fetch', 'https://dart.googlesource.com/sdk.git', '--tags'])
- api.step('List all tags', ['git', 'tag', '--list'])
-
api.gclient.runhooks()
target_name = 'host_debug_unopt'