From 8ccc636a89bb85262f6b96e6b97fc1919a5a1688 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Fri, 7 Jul 2023 15:39:00 -0400 Subject: [PATCH 1/9] Create new top level command to run flutter dependencies on changed packages --- .../lib/src/fetch_gradle_deps_command.dart | 74 +++++++++++++++++++ script/tool/lib/src/main.dart | 2 + 2 files changed, 76 insertions(+) create mode 100644 script/tool/lib/src/fetch_gradle_deps_command.dart diff --git a/script/tool/lib/src/fetch_gradle_deps_command.dart b/script/tool/lib/src/fetch_gradle_deps_command.dart new file mode 100644 index 000000000000..401235a2b5fa --- /dev/null +++ b/script/tool/lib/src/fetch_gradle_deps_command.dart @@ -0,0 +1,74 @@ +// Copyright 2013 The Flutter 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 'package:file/file.dart'; +import 'package:platform/platform.dart'; + +import 'common/core.dart'; +import 'common/gradle.dart'; +import 'common/package_looping_command.dart'; +import 'common/plugin_utils.dart'; +import 'common/process_runner.dart'; +import 'common/repository_package.dart'; + +/// Run 'gradlew dependencies'. +/// +/// See https://docs.gradle.org/6.4/userguide/core_dependency_management.html#sec:dependency-mgmt-in-gradle. +class FetchGradleDeps extends PackageLoopingCommand { + /// Creates an instance of the linter command. + FetchGradleDeps( + Directory packagesDir, { + ProcessRunner processRunner = const ProcessRunner(), + Platform platform = const LocalPlatform(), + }) : super(packagesDir, processRunner: processRunner, platform: platform); + + @override + final String name = 'fetch-gradle-deps'; + + @override + final String description = 'Runs "gradlew dependencies" on Android plugins.\n\n' + 'Requires the examples to have been build at least once before running.'; + + @override + Future runForPackage(RepositoryPackage package) async { + if (!pluginSupportsPlatform(platformAndroid, package, + requiredMode: PlatformSupport.inline)) { + return PackageResult.skip( + 'Plugin does not have an Android implementation.'); + } + + for (final RepositoryPackage example in package.getExamples()) { + final GradleProject project = GradleProject(example, + processRunner: processRunner, platform: platform); + + if (!project.isConfigured()) { + final int exitCode = await processRunner.runAndStream( + flutterCommand, + ['build', 'apk', '--config-only'], + workingDir: example.directory, + ); + if (exitCode != 0) { + printError('Unable to configure Gradle project.'); + return PackageResult.fail(['Unable to configure Gradle.']); + } + } + + final String packageName = package.directory.basename; + + // Only lint one build mode to avoid extra work. + // Only lint the plugin project itself, to avoid failing due to errors in + // dependencies. + // + // TODO(stuartmorgan): Consider adding an XML parser to read and summarize + // all results. Currently, only the first three errors will be shown + // inline, and the rest have to be checked via the CI-uploaded artifact. + final int exitCode = await project.runCommand('$packageName:dependencies'); + if (exitCode != 0) { + return PackageResult.fail(); + } + } + + return PackageResult.success(); + } +} diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart index 78fa5a3f0c7b..671149567214 100644 --- a/script/tool/lib/src/main.dart +++ b/script/tool/lib/src/main.dart @@ -17,6 +17,7 @@ import 'dart_test_command.dart'; import 'dependabot_check_command.dart'; import 'drive_examples_command.dart'; import 'federation_safety_check_command.dart'; +import 'fetch_gradle_deps_command.dart'; import 'firebase_test_lab_command.dart'; import 'fix_command.dart'; import 'format_command.dart'; @@ -65,6 +66,7 @@ void main(List args) { ..addCommand(DependabotCheckCommand(packagesDir)) ..addCommand(DriveExamplesCommand(packagesDir)) ..addCommand(FederationSafetyCheckCommand(packagesDir)) + ..addCommand(FetchGradleDeps(packagesDir)) ..addCommand(FirebaseTestLabCommand(packagesDir)) ..addCommand(FixCommand(packagesDir)) ..addCommand(FormatCommand(packagesDir)) From 96d0254ae545b841b5b8c45e1cb55eae6a77b10d Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Fri, 7 Jul 2023 16:37:20 -0400 Subject: [PATCH 2/9] when running android tests download dependencies before running tests --- .ci/targets/android_platform_tests.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.ci/targets/android_platform_tests.yaml b/.ci/targets/android_platform_tests.yaml index 1944cdecc9df..d03b0a138d2a 100644 --- a/.ci/targets/android_platform_tests.yaml +++ b/.ci/targets/android_platform_tests.yaml @@ -7,6 +7,10 @@ tasks: - name: lint script: script/tool_runner.sh args: ["lint-android"] + - name: download android deps + script: script/tool_runner.sh + infra_step: true + args: ["fetch-android-deps"] # Native unit and native integration are split into two steps to allow for # different exclusions. # TODO(stuartmorgan): Eliminate the native unit test exclusion, and combine From 3a552d26d81041d1bcde2960098fc0dd0056a443 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 10 Jul 2023 11:34:30 -0400 Subject: [PATCH 3/9] remove unrelated comment --- script/tool/lib/src/fetch_gradle_deps_command.dart | 7 ------- 1 file changed, 7 deletions(-) diff --git a/script/tool/lib/src/fetch_gradle_deps_command.dart b/script/tool/lib/src/fetch_gradle_deps_command.dart index 401235a2b5fa..251296d3dd4f 100644 --- a/script/tool/lib/src/fetch_gradle_deps_command.dart +++ b/script/tool/lib/src/fetch_gradle_deps_command.dart @@ -56,13 +56,6 @@ class FetchGradleDeps extends PackageLoopingCommand { final String packageName = package.directory.basename; - // Only lint one build mode to avoid extra work. - // Only lint the plugin project itself, to avoid failing due to errors in - // dependencies. - // - // TODO(stuartmorgan): Consider adding an XML parser to read and summarize - // all results. Currently, only the first three errors will be shown - // inline, and the rest have to be checked via the CI-uploaded artifact. final int exitCode = await project.runCommand('$packageName:dependencies'); if (exitCode != 0) { return PackageResult.fail(); From 68779074df2fb157c28a87d278f042d2b8d254d6 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 10 Jul 2023 16:13:48 -0400 Subject: [PATCH 4/9] Rename command to fetch deps --- .../lib/src/fetch_gradle_deps_command.dart | 67 ------------------- script/tool/lib/src/main.dart | 4 +- 2 files changed, 2 insertions(+), 69 deletions(-) delete mode 100644 script/tool/lib/src/fetch_gradle_deps_command.dart diff --git a/script/tool/lib/src/fetch_gradle_deps_command.dart b/script/tool/lib/src/fetch_gradle_deps_command.dart deleted file mode 100644 index 251296d3dd4f..000000000000 --- a/script/tool/lib/src/fetch_gradle_deps_command.dart +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2013 The Flutter 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 'package:file/file.dart'; -import 'package:platform/platform.dart'; - -import 'common/core.dart'; -import 'common/gradle.dart'; -import 'common/package_looping_command.dart'; -import 'common/plugin_utils.dart'; -import 'common/process_runner.dart'; -import 'common/repository_package.dart'; - -/// Run 'gradlew dependencies'. -/// -/// See https://docs.gradle.org/6.4/userguide/core_dependency_management.html#sec:dependency-mgmt-in-gradle. -class FetchGradleDeps extends PackageLoopingCommand { - /// Creates an instance of the linter command. - FetchGradleDeps( - Directory packagesDir, { - ProcessRunner processRunner = const ProcessRunner(), - Platform platform = const LocalPlatform(), - }) : super(packagesDir, processRunner: processRunner, platform: platform); - - @override - final String name = 'fetch-gradle-deps'; - - @override - final String description = 'Runs "gradlew dependencies" on Android plugins.\n\n' - 'Requires the examples to have been build at least once before running.'; - - @override - Future runForPackage(RepositoryPackage package) async { - if (!pluginSupportsPlatform(platformAndroid, package, - requiredMode: PlatformSupport.inline)) { - return PackageResult.skip( - 'Plugin does not have an Android implementation.'); - } - - for (final RepositoryPackage example in package.getExamples()) { - final GradleProject project = GradleProject(example, - processRunner: processRunner, platform: platform); - - if (!project.isConfigured()) { - final int exitCode = await processRunner.runAndStream( - flutterCommand, - ['build', 'apk', '--config-only'], - workingDir: example.directory, - ); - if (exitCode != 0) { - printError('Unable to configure Gradle project.'); - return PackageResult.fail(['Unable to configure Gradle.']); - } - } - - final String packageName = package.directory.basename; - - final int exitCode = await project.runCommand('$packageName:dependencies'); - if (exitCode != 0) { - return PackageResult.fail(); - } - } - - return PackageResult.success(); - } -} diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart index 671149567214..9502b3368c29 100644 --- a/script/tool/lib/src/main.dart +++ b/script/tool/lib/src/main.dart @@ -17,7 +17,7 @@ import 'dart_test_command.dart'; import 'dependabot_check_command.dart'; import 'drive_examples_command.dart'; import 'federation_safety_check_command.dart'; -import 'fetch_gradle_deps_command.dart'; +import 'fetch_deps_command.dart'; import 'firebase_test_lab_command.dart'; import 'fix_command.dart'; import 'format_command.dart'; @@ -66,7 +66,7 @@ void main(List args) { ..addCommand(DependabotCheckCommand(packagesDir)) ..addCommand(DriveExamplesCommand(packagesDir)) ..addCommand(FederationSafetyCheckCommand(packagesDir)) - ..addCommand(FetchGradleDeps(packagesDir)) + ..addCommand(FetchDeps(packagesDir)) ..addCommand(FirebaseTestLabCommand(packagesDir)) ..addCommand(FixCommand(packagesDir)) ..addCommand(FormatCommand(packagesDir)) From 30829a084d196dcb6c2292e9dbdaafb0f5fc17d9 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 10 Jul 2023 16:42:43 -0400 Subject: [PATCH 5/9] Rename command to fetch deps, add tests --- script/tool/lib/src/fetch_deps_command.dart | 71 +++++ script/tool/lib/src/main.dart | 2 +- script/tool/test/fetch_deps_command_test.dart | 252 ++++++++++++++++++ 3 files changed, 324 insertions(+), 1 deletion(-) create mode 100644 script/tool/lib/src/fetch_deps_command.dart create mode 100644 script/tool/test/fetch_deps_command_test.dart diff --git a/script/tool/lib/src/fetch_deps_command.dart b/script/tool/lib/src/fetch_deps_command.dart new file mode 100644 index 000000000000..35f9eacbdd9e --- /dev/null +++ b/script/tool/lib/src/fetch_deps_command.dart @@ -0,0 +1,71 @@ +// Copyright 2013 The Flutter 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 'common/core.dart'; +import 'common/gradle.dart'; +import 'common/package_looping_command.dart'; +import 'common/plugin_utils.dart'; +import 'common/repository_package.dart'; + +/// Run 'gradlew dependencies' on android. +/// +/// Support TBD for dart (flutter/flutter/issues/130279) +/// Support TBD for ios (flutter/flutter/issues/130280) +/// +/// See https://docs.gradle.org/6.4/userguide/core_dependency_management.html#sec:dependency-mgmt-in-gradle. +class FetchDepsCommand extends PackageLoopingCommand { + /// Creates an instance of the linter command. + FetchDepsCommand( + super.packagesDir, { + super.processRunner, + super.platform, + }); + + @override + final String name = 'fetch-deps'; + + @override + final String description = 'Fetches dependencies for plugins.\n' + 'Runs "gradlew dependencies" on Android plugins.\n' + 'Dart see flutter/flutter/issues/130279\n' + 'iOS plugins see flutter/flutter/issues/130280\n' + '\n' + 'Requires the examples to have been built at least once before running.'; + + @override + Future runForPackage(RepositoryPackage package) async { + if (!pluginSupportsPlatform(platformAndroid, package, + requiredMode: PlatformSupport.inline)) { + return PackageResult.skip( + 'Plugin does not have an Android implementation.'); + } + + for (final RepositoryPackage example in package.getExamples()) { + final GradleProject gradleProject = GradleProject(example, + processRunner: processRunner, platform: platform); + + if (!gradleProject.isConfigured()) { + final int exitCode = await processRunner.runAndStream( + flutterCommand, + ['build', 'apk', '--config-only'], + workingDir: example.directory, + ); + if (exitCode != 0) { + printError('Unable to configure Gradle project.'); + return PackageResult.fail(['Unable to configure Gradle.']); + } + } + + final String packageName = package.directory.basename; + + final int exitCode = await gradleProject.runCommand('$packageName:dependencies'); + if (exitCode != 0) { + return PackageResult.fail(); + } + } + + return PackageResult.success(); + } +} diff --git a/script/tool/lib/src/main.dart b/script/tool/lib/src/main.dart index 9502b3368c29..89ffae268276 100644 --- a/script/tool/lib/src/main.dart +++ b/script/tool/lib/src/main.dart @@ -66,7 +66,7 @@ void main(List args) { ..addCommand(DependabotCheckCommand(packagesDir)) ..addCommand(DriveExamplesCommand(packagesDir)) ..addCommand(FederationSafetyCheckCommand(packagesDir)) - ..addCommand(FetchDeps(packagesDir)) + ..addCommand(FetchDepsCommand(packagesDir)) ..addCommand(FirebaseTestLabCommand(packagesDir)) ..addCommand(FixCommand(packagesDir)) ..addCommand(FormatCommand(packagesDir)) diff --git a/script/tool/test/fetch_deps_command_test.dart b/script/tool/test/fetch_deps_command_test.dart new file mode 100644 index 000000000000..baff6f657d19 --- /dev/null +++ b/script/tool/test/fetch_deps_command_test.dart @@ -0,0 +1,252 @@ +// Copyright 2013 The Flutter 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 'package:args/command_runner.dart'; +import 'package:file/file.dart'; +import 'package:file/memory.dart'; +import 'package:flutter_plugin_tools/src/common/core.dart'; +import 'package:flutter_plugin_tools/src/common/plugin_utils.dart'; +import 'package:flutter_plugin_tools/src/fetch_deps_command.dart'; +import 'package:test/test.dart'; + +import 'mocks.dart'; +import 'util.dart'; + +void main() { + group('FetchDepsCommand', () { + FileSystem fileSystem; + late Directory packagesDir; + late CommandRunner runner; + late MockPlatform mockPlatform; + late RecordingProcessRunner processRunner; + + setUp(() { + fileSystem = MemoryFileSystem(); + packagesDir = createPackagesDirectory(fileSystem: fileSystem); + mockPlatform = MockPlatform(); + processRunner = RecordingProcessRunner(); + final FetchDepsCommand command = FetchDepsCommand( + packagesDir, + processRunner: processRunner, + platform: mockPlatform, + ); + + runner = + CommandRunner('fetch_deps_test', 'Test for $FetchDepsCommand'); + runner.addCommand(command); + }); + group('android', () { + test('runs gradlew dependencies', () async { + final RepositoryPackage plugin = + createFakePlugin('plugin1', packagesDir, extraFiles: [ + 'example/android/gradlew', + ], platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline) + }); + + final Directory androidDir = plugin + .getExamples() + .first + .platformDirectory(FlutterPlatform.android); + + final List output = + await runCapturingPrint(runner, ['fetch-deps']); + + expect( + processRunner.recordedCalls, + orderedEquals([ + ProcessCall( + androidDir.childFile('gradlew').path, + const ['plugin1:dependencies'], + androidDir.path, + ), + ]), + ); + + expect( + output, + containsAllInOrder([ + contains('Running for plugin1'), + contains('No issues found!'), + ])); + }); + + test('runs on all examples', () async { + final List examples = ['example1', 'example2']; + final RepositoryPackage plugin = createFakePlugin( + 'plugin1', packagesDir, + examples: examples, + extraFiles: [ + 'example/example1/android/gradlew', + 'example/example2/android/gradlew', + ], + platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline) + }); + + final Iterable exampleAndroidDirs = plugin.getExamples().map( + (RepositoryPackage example) => + example.platformDirectory(FlutterPlatform.android)); + + final List output = + await runCapturingPrint(runner, ['fetch-deps']); + + expect( + processRunner.recordedCalls, + orderedEquals([ + for (final Directory directory in exampleAndroidDirs) + ProcessCall( + directory.childFile('gradlew').path, + const ['plugin1:dependencies'], + directory.path, + ), + ]), + ); + + expect( + output, + containsAllInOrder([ + contains('Running for plugin1'), + contains('No issues found!'), + ])); + }); + + test('runs --config-only build if gradlew is missing', () async { + final RepositoryPackage plugin = createFakePlugin( + 'plugin1', packagesDir, platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline) + }); + + final Directory androidDir = plugin + .getExamples() + .first + .platformDirectory(FlutterPlatform.android); + + final List output = + await runCapturingPrint(runner, ['fetch-deps']); + + expect( + processRunner.recordedCalls, + orderedEquals([ + ProcessCall( + getFlutterCommand(mockPlatform), + const ['build', 'apk', '--config-only'], + plugin.getExamples().first.directory.path, + ), + ProcessCall( + androidDir.childFile('gradlew').path, + const ['plugin1:dependencies'], + androidDir.path, + ), + ]), + ); + + expect( + output, + containsAllInOrder([ + contains('Running for plugin1'), + contains('No issues found!'), + ])); + }); + + test('fails if gradlew generation fails', () async { + createFakePlugin('plugin1', packagesDir, + platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline) + }); + + processRunner + .mockProcessesForExecutable[getFlutterCommand(mockPlatform)] = + [ + FakeProcessInfo(MockProcess(exitCode: 1)), + ]; + + Error? commandError; + final List output = await runCapturingPrint( + runner, ['fetch-deps'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder( + [ + contains('Unable to configure Gradle project'), + ], + )); + }); + + test('fails if dependency download finds issues', () async { + final RepositoryPackage plugin = + createFakePlugin('plugin1', packagesDir, extraFiles: [ + 'example/android/gradlew', + ], platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.inline) + }); + + final String gradlewPath = plugin + .getExamples() + .first + .platformDirectory(FlutterPlatform.android) + .childFile('gradlew') + .path; + processRunner.mockProcessesForExecutable[gradlewPath] = + [ + FakeProcessInfo(MockProcess(exitCode: 1)), + ]; + + Error? commandError; + final List output = await runCapturingPrint( + runner, ['fetch-deps'], errorHandler: (Error e) { + commandError = e; + }); + + expect(commandError, isA()); + expect( + output, + containsAllInOrder( + [ + contains('The following packages had errors:'), + ], + )); + }); + }); + + test('skips non-Android plugins', () async { + createFakePlugin('plugin1', packagesDir); + + final List output = + await runCapturingPrint(runner, ['fetch-deps']); + + expect( + output, + containsAllInOrder( + [ + contains( + 'SKIPPING: Plugin does not have an Android implementation.') + ], + )); + }); + + test('skips non-inline plugins', () async { + createFakePlugin('plugin1', packagesDir, + platformSupport: { + platformAndroid: const PlatformDetails(PlatformSupport.federated) + }); + + final List output = + await runCapturingPrint(runner, ['fetch-deps']); + + expect( + output, + containsAllInOrder( + [ + contains( + 'SKIPPING: Plugin does not have an Android implementation.') + ], + )); + }); + }); +} From 681fe6e402d2d486d9f433d888444c888d83d3f9 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Mon, 10 Jul 2023 16:48:32 -0400 Subject: [PATCH 6/9] Bump dependency downloading to before build --- .ci/targets/android_platform_tests.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.ci/targets/android_platform_tests.yaml b/.ci/targets/android_platform_tests.yaml index ae9076e11423..77d51c3ced31 100644 --- a/.ci/targets/android_platform_tests.yaml +++ b/.ci/targets/android_platform_tests.yaml @@ -1,16 +1,16 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh + - name: download android deps + script: script/tool_runner.sh + infra_step: true + args: ["fetch-android-deps"] - name: build examples script: script/tool_runner.sh args: ["build-examples", "--apk"] - name: lint script: script/tool_runner.sh args: ["lint-android"] - - name: download android deps - script: script/tool_runner.sh - infra_step: true - args: ["fetch-android-deps"] # Native unit and native integration are split into two steps to allow for # different exclusions. # TODO(stuartmorgan): Eliminate the native unit test exclusion, and combine From f5871c9aeb86fadd5d1452b6de3a1685579e2d3b Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 11 Jul 2023 13:05:19 -0400 Subject: [PATCH 7/9] Document that "always" does not mean always when dealing with infra_step improve documentaion in fetch-deps command --- .ci/targets/android_platform_tests.yaml | 1 + script/tool/lib/src/fetch_deps_command.dart | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.ci/targets/android_platform_tests.yaml b/.ci/targets/android_platform_tests.yaml index 77d51c3ced31..aa8d6452e3a4 100644 --- a/.ci/targets/android_platform_tests.yaml +++ b/.ci/targets/android_platform_tests.yaml @@ -1,6 +1,7 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh + infra_step: true # Note infra steps failing prevents "always" from running. - name: download android deps script: script/tool_runner.sh infra_step: true diff --git a/script/tool/lib/src/fetch_deps_command.dart b/script/tool/lib/src/fetch_deps_command.dart index 35f9eacbdd9e..ad8e6c0b7c8b 100644 --- a/script/tool/lib/src/fetch_deps_command.dart +++ b/script/tool/lib/src/fetch_deps_command.dart @@ -9,14 +9,16 @@ import 'common/package_looping_command.dart'; import 'common/plugin_utils.dart'; import 'common/repository_package.dart'; -/// Run 'gradlew dependencies' on android. +/// Download dependencies for the following platforms {android}. /// -/// Support TBD for dart (flutter/flutter/issues/130279) -/// Support TBD for ios (flutter/flutter/issues/130280) +/// Specficially each platform runs: +/// Android: 'gradlew dependencies'. +/// Dart: TBD (flutter/flutter/issues/130279) +/// iOS: TBD (flutter/flutter/issues/130280) /// /// See https://docs.gradle.org/6.4/userguide/core_dependency_management.html#sec:dependency-mgmt-in-gradle. class FetchDepsCommand extends PackageLoopingCommand { - /// Creates an instance of the linter command. + /// Creates an instance of the fetch-deps command. FetchDepsCommand( super.packagesDir, { super.processRunner, From 2ffae59d24495e40d9eb7bce5df61f6b5f8cd802 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Tue, 11 Jul 2023 15:35:50 -0400 Subject: [PATCH 8/9] fix name of arg with command name change --- .ci/targets/android_platform_tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/targets/android_platform_tests.yaml b/.ci/targets/android_platform_tests.yaml index aa8d6452e3a4..40dbc7d2d017 100644 --- a/.ci/targets/android_platform_tests.yaml +++ b/.ci/targets/android_platform_tests.yaml @@ -5,7 +5,7 @@ tasks: - name: download android deps script: script/tool_runner.sh infra_step: true - args: ["fetch-android-deps"] + args: ["fetch-deps"] - name: build examples script: script/tool_runner.sh args: ["build-examples", "--apk"] From 6689161a2e7f33c1373737b7cd7e62ff7d4897f3 Mon Sep 17 00:00:00 2001 From: Reid Baker Date: Fri, 14 Jul 2023 11:04:51 -0400 Subject: [PATCH 9/9] Add import for moved utility --- script/tool/lib/src/fetch_deps_command.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/script/tool/lib/src/fetch_deps_command.dart b/script/tool/lib/src/fetch_deps_command.dart index ad8e6c0b7c8b..ce70b41524c5 100644 --- a/script/tool/lib/src/fetch_deps_command.dart +++ b/script/tool/lib/src/fetch_deps_command.dart @@ -5,6 +5,7 @@ import 'common/core.dart'; import 'common/gradle.dart'; +import 'common/output_utils.dart'; import 'common/package_looping_command.dart'; import 'common/plugin_utils.dart'; import 'common/repository_package.dart';