From 95c88f8a9b133cb9f0d4b8ab4ba515040d0c7abc Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 27 Sep 2023 17:52:05 -0700 Subject: [PATCH] [tool] Don't lint Flutter shim podspecs (#5007) The Flutter build process creates podspecs that are just shims pointing to the local Flutter framework, and which don't pass the linter since they aren't intended for publishing. When finding podspecs to lint, skip those. This avoids incorrect failures when running on a tree that isn't clean (in particular, where macOS and/or iOS builds have happened), which is very common locally. --- .../tool/lib/src/podspec_check_command.dart | 6 ++- .../tool/test/podspec_check_command_test.dart | 54 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/script/tool/lib/src/podspec_check_command.dart b/script/tool/lib/src/podspec_check_command.dart index 5968de5eaf..9259e0dbb0 100644 --- a/script/tool/lib/src/podspec_check_command.dart +++ b/script/tool/lib/src/podspec_check_command.dart @@ -102,8 +102,10 @@ class PodspecCheckCommand extends PackageLoopingCommand { Future> _podspecsToLint(RepositoryPackage package) async { final List podspecs = await getFilesForPackage(package).where((File entity) { - final String filePath = entity.path; - return path.extension(filePath) == '.podspec'; + final String filename = entity.basename; + return path.extension(filename) == '.podspec' && + filename != 'Flutter.podspec' && + filename != 'FlutterMacOS.podspec'; }).toList(); podspecs.sort((File a, File b) => a.basename.compareTo(b.basename)); diff --git a/script/tool/test/podspec_check_command_test.dart b/script/tool/test/podspec_check_command_test.dart index a581542827..97783cb29b 100644 --- a/script/tool/test/podspec_check_command_test.dart +++ b/script/tool/test/podspec_check_command_test.dart @@ -171,6 +171,60 @@ void main() { expect(output, contains('Bar')); }); + test('skips shim podspecs for the Flutter framework', () async { + final RepositoryPackage plugin = createFakePlugin( + 'plugin1', + packagesDir, + extraFiles: [ + 'example/ios/Flutter/Flutter.podspec', + 'example/macos/Flutter/ephemeral/FlutterMacOS.podspec', + ], + ); + _writeFakePodspec(plugin, 'macos'); + + final List output = + await runCapturingPrint(runner, ['podspec-check']); + + expect(output, isNot(contains('FlutterMacOS.podspec'))); + expect( + processRunner.recordedCalls, + orderedEquals([ + ProcessCall('which', const ['pod'], packagesDir.path), + ProcessCall( + 'pod', + [ + 'lib', + 'lint', + plugin + .platformDirectory(FlutterPlatform.macos) + .childFile('plugin1.podspec') + .path, + '--configuration=Debug', + '--skip-tests', + '--allow-warnings', + '--use-modular-headers', + '--use-libraries' + ], + packagesDir.path), + ProcessCall( + 'pod', + [ + 'lib', + 'lint', + plugin + .platformDirectory(FlutterPlatform.macos) + .childFile('plugin1.podspec') + .path, + '--configuration=Debug', + '--skip-tests', + '--allow-warnings', + '--use-modular-headers', + ], + packagesDir.path), + ]), + ); + }); + test('fails if pod is missing', () async { final RepositoryPackage plugin = createFakePlugin('plugin1', packagesDir); _writeFakePodspec(plugin, 'ios');