Recipe for running framework smoke tests in the engine. This is moving the build_test_host_debug task from cirrus to LUCI. Change-Id: Ib15640bb34b478190ac7740a70fa2b0ee9fc3ec6 Bug: https://github.com/flutter/flutter/issues/72391 Reviewed-on: https://flutter-review.googlesource.com/c/recipes/+/13880 Reviewed-by: Zach Anderson <zra@google.com> Commit-Queue: Godofredo Contreras <godofredoc@google.com>
diff --git a/recipes/engine/framework_smoke.expected/basic.json b/recipes/engine/framework_smoke.expected/basic.json new file mode 100644 index 0000000..5c79f86 --- /dev/null +++ b/recipes/engine/framework_smoke.expected/basic.json
@@ -0,0 +1,617 @@ +[ + { + "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" + }, + { + "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": "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": "1800" + }, + "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": "Build host_debug_unopt" + }, + { + "cmd": [], + "name": "Build host_debug_unopt.ensure goma", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "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": "Build host_debug_unopt.ensure goma.ensure_installed", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@2@@@", + "@@@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": [ + "python", + "[CACHE]/builder/src/flutter/tools/gn", + "--goma", + "--unoptimized", + "--full-dart-sdk" + ], + "env": { + "GOMA_DIR": "[CACHE]/goma/client" + }, + "name": "Build host_debug_unopt.gn --unoptimized --full-dart-sdk", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [], + "name": "Build host_debug_unopt.setup goma", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CACHE]/goma/client/goma_ctl.py", + "restart" + ], + "env": { + "GLOG_log_dir": "[CLEANUP]", + "GOMA_CACHE_DIR": "[CACHE]/goma", + "GOMA_DEPS_CACHE_FILE": "goma_deps_cache", + "GOMA_DIR": "[CACHE]/goma/client", + "GOMA_DUMP_STATS_FILE": "[CACHE]/goma/client/goma_stats.json", + "GOMA_LOCAL_OUTPUT_CACHE_DIR": "[CACHE]/goma/localoutputcache", + "GOMA_MAX_SUM_OUTPUT_SIZE_IN_MB": "256", + "GOMA_SERVER_HOST": "rbe-prod1.endpoints.fuchsia-infra-goma-prod.cloud.goog", + "GOMA_STORE_LOCAL_RUN_OUTPUT": "True", + "GOMA_TMP_DIR": "[CLEANUP]/goma", + "GOMA_USE_LOCAL": "False" + }, + "infra_step": true, + "name": "Build host_debug_unopt.setup goma.start goma", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@2@@@" + ] + }, + { + "cmd": [ + "RECIPE_REPO[depot_tools]/ninja", + "-j", + "100", + "-C", + "[CACHE]/builder/src/out/host_debug_unopt" + ], + "env": { + "GOMA_DIR": "[CACHE]/goma/client", + "GOMA_TMP_DIR": "[CLEANUP]/goma", + "GOMA_USE_LOCAL": "False" + }, + "env_suffixes": { + "DEPOT_TOOLS_UPDATE": [ + "0" + ], + "PATH": [ + "RECIPE_REPO[depot_tools]" + ] + }, + "name": "Build host_debug_unopt.build host_debug_unopt", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [], + "name": "Build host_debug_unopt.teardown goma", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CACHE]/goma/client/goma_ctl.py", + "jsonstatus", + "[CACHE]/goma/client/jsonstatus" + ], + "env": { + "GLOG_log_dir": "[CLEANUP]", + "GOMA_CACHE_DIR": "[CACHE]/goma", + "GOMA_DEPS_CACHE_FILE": "goma_deps_cache", + "GOMA_DIR": "[CACHE]/goma/client", + "GOMA_DUMP_STATS_FILE": "[CACHE]/goma/client/goma_stats.json", + "GOMA_LOCAL_OUTPUT_CACHE_DIR": "[CACHE]/goma/localoutputcache", + "GOMA_MAX_SUM_OUTPUT_SIZE_IN_MB": "256", + "GOMA_SERVER_HOST": "rbe-prod1.endpoints.fuchsia-infra-goma-prod.cloud.goog", + "GOMA_STORE_LOCAL_RUN_OUTPUT": "True", + "GOMA_TMP_DIR": "[CLEANUP]/goma", + "GOMA_USE_LOCAL": "False" + }, + "name": "Build host_debug_unopt.teardown goma.goma jsonstatus", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@2@@@", + "@@@STEP_LOG_LINE@json.output@{@@@", + "@@@STEP_LOG_LINE@json.output@ \"notice\": [@@@", + "@@@STEP_LOG_LINE@json.output@ {@@@", + "@@@STEP_LOG_LINE@json.output@ \"infra_status\": {@@@", + "@@@STEP_LOG_LINE@json.output@ \"num_user_error\": 0, @@@", + "@@@STEP_LOG_LINE@json.output@ \"ping_status_code\": 200@@@", + "@@@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": [ + "python", + "-u", + "[CACHE]/goma/client/goma_ctl.py", + "stat" + ], + "env": { + "GLOG_log_dir": "[CLEANUP]", + "GOMA_CACHE_DIR": "[CACHE]/goma", + "GOMA_DEPS_CACHE_FILE": "goma_deps_cache", + "GOMA_DIR": "[CACHE]/goma/client", + "GOMA_DUMP_STATS_FILE": "[CACHE]/goma/client/goma_stats.json", + "GOMA_LOCAL_OUTPUT_CACHE_DIR": "[CACHE]/goma/localoutputcache", + "GOMA_MAX_SUM_OUTPUT_SIZE_IN_MB": "256", + "GOMA_SERVER_HOST": "rbe-prod1.endpoints.fuchsia-infra-goma-prod.cloud.goog", + "GOMA_STORE_LOCAL_RUN_OUTPUT": "True", + "GOMA_TMP_DIR": "[CLEANUP]/goma", + "GOMA_USE_LOCAL": "False" + }, + "name": "Build host_debug_unopt.teardown goma.goma stats", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@2@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "[CACHE]/goma/client/goma_ctl.py", + "stop" + ], + "env": { + "GLOG_log_dir": "[CLEANUP]", + "GOMA_CACHE_DIR": "[CACHE]/goma", + "GOMA_DEPS_CACHE_FILE": "goma_deps_cache", + "GOMA_DIR": "[CACHE]/goma/client", + "GOMA_DUMP_STATS_FILE": "[CACHE]/goma/client/goma_stats.json", + "GOMA_LOCAL_OUTPUT_CACHE_DIR": "[CACHE]/goma/localoutputcache", + "GOMA_MAX_SUM_OUTPUT_SIZE_IN_MB": "256", + "GOMA_SERVER_HOST": "rbe-prod1.endpoints.fuchsia-infra-goma-prod.cloud.goog", + "GOMA_STORE_LOCAL_RUN_OUTPUT": "True", + "GOMA_TMP_DIR": "[CLEANUP]/goma", + "GOMA_USE_LOCAL": "False" + }, + "name": "Build host_debug_unopt.teardown goma.stop goma", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@2@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[CLEANUP]/compiler_proxy.WARNING", + "/path/to/tmp/" + ], + "env": { + "GOMA_DIR": "[CACHE]/goma/client", + "GOMA_TMP_DIR": "[CLEANUP]/goma", + "GOMA_USE_LOCAL": "False" + }, + "infra_step": true, + "name": "Build host_debug_unopt.teardown goma.read goma_client warning log", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@2@@@", + "@@@STEP_LOG_LINE@compiler_proxy.WARNING@test log@@@", + "@@@STEP_LOG_END@compiler_proxy.WARNING@@@" + ] + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "copy", + "[CACHE]/goma/client/goma_stats.json", + "/path/to/tmp/" + ], + "env": { + "GOMA_DIR": "[CACHE]/goma/client", + "GOMA_TMP_DIR": "[CLEANUP]/goma", + "GOMA_USE_LOCAL": "False" + }, + "infra_step": true, + "name": "Build host_debug_unopt.teardown goma.read goma_stats.json", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@2@@@" + ] + }, + { + "cmd": [], + "name": "Checkout flutter/flutter" + }, + { + "cmd": [ + "python", + "-u", + "RECIPE_MODULE[depot_tools::git]/resources/git_setup.py", + "--path", + "[CACHE]/flutter", + "--url", + "https://chromium.googlesource.com/external/github.com/flutter/flutter" + ], + "name": "Checkout flutter/flutter.git setup", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "fetch", + "origin", + "master", + "--recurse-submodules", + "--progress", + "--tags" + ], + "cwd": "[CACHE]/flutter", + "env": { + "PATH": "RECIPE_REPO[depot_tools]:<PATH>" + }, + "infra_step": true, + "name": "Checkout flutter/flutter.git fetch", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "checkout", + "-f", + "FETCH_HEAD" + ], + "cwd": "[CACHE]/flutter", + "infra_step": true, + "name": "Checkout flutter/flutter.git checkout", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "rev-parse", + "HEAD" + ], + "cwd": "[CACHE]/flutter", + "infra_step": true, + "name": "Checkout flutter/flutter.read revision", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", + "@@@STEP_TEXT@<br/>checked out 'deadbeef'<br/>@@@", + "@@@SET_BUILD_PROPERTY@got_revision@\"deadbeef\"@@@" + ] + }, + { + "cmd": [ + "git", + "clean", + "-f", + "-d", + "-x" + ], + "cwd": "[CACHE]/flutter", + "infra_step": true, + "name": "Checkout flutter/flutter.git clean", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "sync" + ], + "cwd": "[CACHE]/flutter", + "infra_step": true, + "name": "Checkout flutter/flutter.submodule sync", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "git", + "submodule", + "update", + "--init", + "--recursive" + ], + "cwd": "[CACHE]/flutter", + "infra_step": true, + "name": "Checkout flutter/flutter.submodule update", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [], + "name": "Framework analyze" + }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "rmtree", + "[CACHE]/flutter/bin/cache/pkg/sky_engine" + ], + "cwd": "[CACHE]/flutter", + "infra_step": true, + "name": "Framework analyze.Delete framework engine 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]/flutter/bin/cache/pkg" + ], + "cwd": "[CACHE]/flutter", + "infra_step": true, + "name": "Framework analyze.Ensure framework engine cache", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "bin/flutter", + "update-packages", + "--local-engine=[CACHE]/builder/src/out/host_debug_unopt" + ], + "cwd": "[CACHE]/flutter", + "name": "Framework analyze.Update packages", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "bin/flutter", + "analyze", + "--flutter-repo", + "--local-engine=[CACHE]/builder/src/out/host_debug_unopt" + ], + "cwd": "[CACHE]/flutter", + "name": "Framework analyze.Framework analyze", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [], + "name": "Framework test" + }, + { + "cmd": [ + "[CACHE]/flutter/bin/flutter", + "test", + "--null-assertions", + "--sound-null-safety", + "--local-engine=[CACHE]/builder/src/out/host_debug_unopt" + ], + "cwd": "[CACHE]/flutter/packages/flutter", + "name": "Framework test.Framework test", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "name": "$result" + } +] \ No newline at end of file
diff --git a/recipes/engine/framework_smoke.py b/recipes/engine/framework_smoke.py new file mode 100644 index 0000000..1aaeb5d --- /dev/null +++ b/recipes/engine/framework_smoke.py
@@ -0,0 +1,92 @@ +# Copyright 2016 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 to run framework tests with local builds.""" + +from contextlib import contextmanager + +from PB.recipes.flutter.engine import InputProperties +from PB.recipes.flutter.engine import EnvProperties + +from PB.go.chromium.org.luci.buildbucket.proto import build as build_pb2 +from google.protobuf import struct_pb2 + +DEPS = [ + 'depot_tools/depot_tools', + 'flutter/build_util', + 'flutter/os_utils', + 'flutter/osx_sdk', + 'flutter/repo_util', + 'fuchsia/goma', + 'recipe_engine/context', + 'recipe_engine/file', + 'recipe_engine/path', + 'recipe_engine/platform', + 'recipe_engine/properties', + 'recipe_engine/step', +] + +PROPERTIES = InputProperties +ENV_PROPERTIES = EnvProperties + + +def RunSteps(api, properties, env_properties): + checkout_base = api.path['cache'].join('builder') + checkout = api.path['cache'].join('builder', 'src') + api.file.rmtree('Clobber build output', checkout.join('out')) + cache_root = api.path['cache'].join('builder') + api.file.ensure_directory('Ensure checkout cache', cache_root) + env = {} + env_prefixes = {} + + # Checkout Engine. + api.repo_util.engine_checkout(cache_root, env, env_prefixes) + + # Build engine host unopt. + with api.step.nest('Build host_debug_unopt'): + api.build_util.run_gn(['--unoptimized', '--full-dart-sdk'], checkout) + api.build_util.build('host_debug_unopt', checkout, []) + + # Checkout framework and analyze. + flutter_checkout_path = api.path['cache'].join('flutter') + api.repo_util.checkout('flutter', checkout_path=flutter_checkout_path) + build_dir = checkout.join('out', 'host_debug_unopt') + with api.step.nest('Framework analyze'): + with api.context(env=env, env_prefixes=env_prefixes, + cwd=flutter_checkout_path): + api.file.rmtree( + 'Delete framework engine cache', + flutter_checkout_path.join('bin', 'cache', 'pkg', 'sky_engine') + ) + api.file.ensure_directory( + 'Ensure framework engine cache', + flutter_checkout_path.join('bin', 'cache', 'pkg') + ) + api.step( + 'Update packages', [ + 'bin/flutter', 'update-packages', + '--local-engine=%s' % str(build_dir) + ] + ) + api.step( + 'Framework analyze', [ + 'bin/flutter', 'analyze', '--flutter-repo', + '--local-engine=%s' % str(build_dir) + ] + ) + # Run framework packages test + with api.step.nest('Framework test'): + with api.context(env=env, env_prefixes=env_prefixes, + cwd=flutter_checkout_path.join('packages', 'flutter')): + api.step( + 'Framework test', [ + str(flutter_checkout_path.join('bin', 'flutter')), 'test', + '--null-assertions', '--sound-null-safety', + '--local-engine=%s' % str(build_dir) + ] + ) + + +def GenTests(api): + yield api.test('basic', api.properties(goma_jobs="100"))