From cd155769f65d2b8c83f9b844274b0b0b2bf0584b Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Fri, 27 Mar 2026 11:06:14 -0400 Subject: [PATCH 1/4] Convert to a markdown list of suggestions --- CODEOWNERS | 127 ---------------------------- suggested_reviewers.md | 187 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 187 insertions(+), 127 deletions(-) delete mode 100644 CODEOWNERS create mode 100644 suggested_reviewers.md diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index a49a588717fc..000000000000 --- a/CODEOWNERS +++ /dev/null @@ -1,127 +0,0 @@ -# Below is a list of Flutter team members who are suggested reviewers -# for contributions to packages in this repository. -# -# These names are just suggestions. It is fine to have your changes -# reviewed by someone else. - -packages/animations/** @hannah-hyj -packages/camera/** @bparrishMines -packages/cross_file/** @stuartmorgan-g -packages/cupertino_ui/** @dkwingsmt -packages/extension_google_sign_in_as_googleapis_auth/** @stuartmorgan-g -packages/file_selector/** @stuartmorgan-g -packages/flutter_lints/** @chunhtai -packages/flutter_template_images/** @stuartmorgan-g -packages/go_router/** @chunhtai -packages/go_router_builder/** @chunhtai -packages/google_adsense/** @sokoloff06 @ditman -packages/google_identity_services_web/** @mdebbar -packages/google_fonts/** @Piinks -packages/google_maps_flutter/** @stuartmorgan-g -packages/google_sign_in/** @stuartmorgan-g -packages/image_picker/** @tarrinneal -packages/interactive_media_ads/** @bparrishMines -packages/in_app_purchase/** @bparrishMines -packages/local_auth/** @stuartmorgan-g -packages/material_ui/** @qunccccccc -packages/metrics_center/** @bkonyi -packages/multicast_dns/** @vashworth -packages/path_provider/** @stuartmorgan-g -packages/pigeon/** @tarrinneal -packages/platform/** @stuartmorgan-g -packages/plugin_platform_interface/** @stuartmorgan-g -packages/pointer_interceptor/** @ditman -packages/quick_actions/** @bparrishMines -packages/rfw/** @Hixie -packages/shared_preferences/** @tarrinneal -packages/standard_message_codec/** @stuartmorgan-g -packages/two_dimensional_scrollables/** @Piinks -packages/url_launcher/** @stuartmorgan-g -packages/vector_graphics/** @jtmcdole -packages/vector_graphics_codec/** @jtmcdole -packages/vector_graphics_compiler/** @jtmcdole -packages/video_player/** @tarrinneal -packages/web_benchmarks/** @yjbanov -packages/webview_flutter/** @bparrishMines -packages/xdg_directories/** @stuartmorgan-g -third_party/packages/cupertino_icons/** @victorsanni -third_party/packages/cupertino_icons/test/goldens/** @LongCatIsLooong -third_party/packages/flutter_svg/** @domesticmouse -third_party/packages/flutter_svg_test/** @domesticmouse -third_party/packages/mustache_template/** @bkonyi @parlough -third_party/packages/path_parsing/** @domesticmouse - -# Plugin platform implementation rules. These should stay last, since the last -# matching entry takes precedence. - -# - Web -packages/camera/camera_web/** @mdebbar -packages/file_selector/file_selector_web/** @mdebbar -packages/google_maps_flutter/google_maps_flutter_web/** @mdebbar -packages/google_sign_in/google_sign_in_web/** @mdebbar -packages/image_picker/image_picker_for_web/** @mdebbar -packages/pointer_interceptor/pointer_interceptor_web/** @mdebbar -packages/shared_preferences/shared_preferences_web/** @mdebbar -packages/url_launcher/url_launcher_web/** @mdebbar -packages/video_player/video_player_web/** @mdebbar -packages/webview_flutter/webview_flutter_web/** @mdebbar - -# - Android -packages/camera/camera_android/** @camsim99 -packages/camera/camera_android_camerax/** @camsim99 -packages/espresso/** @jesswrd -packages/file_selector/file_selector_android/** @mboetger -packages/flutter_plugin_android_lifecycle/** @reidbaker -packages/google_maps_flutter/google_maps_flutter_android/** @reidbaker -packages/google_sign_in/google_sign_in_android/** @reidbaker -packages/image_picker/image_picker_android/** @gmackall -packages/in_app_purchase/in_app_purchase_android/** @gmackall -packages/local_auth/local_auth_android/** @mboetger -packages/path_provider/path_provider_android/** @camsim99 -packages/quick_actions/quick_actions_android/** @jesswrd -packages/shared_preferences/shared_preferences_android/** @jesswrd -packages/url_launcher/url_launcher_android/** @gmackall -packages/video_player/video_player_android/** @mboetger -# Owned by ecosystem team for now during the wrapper evaluation. -packages/webview_flutter/webview_flutter_android/** @bparrishMines - -# - Darwin -packages/camera/camera_avfoundation/** @hellohuanlin @louisehsu -packages/file_selector/file_selector_ios/** @okorohelijah @vashworth -packages/file_selector/file_selector_macos/** @okorohelijah @vashworth -packages/google_maps_flutter/google_maps_flutter_ios/** @vashworth @LongCatIsLooong -packages/google_maps_flutter/google_maps_flutter_ios_sdk9/** @vashworth @LongCatIsLooong -packages/google_maps_flutter/google_maps_flutter_ios_sdk10/** @vashworth @LongCatIsLooong -packages/google_sign_in/google_sign_in_ios/** @LongCatIsLooong @okorohelijah -packages/image_picker/image_picker_ios/** @okorohelijah @vashworth -packages/image_picker/image_picker_macos/** @okorohelijah @vashworth -packages/in_app_purchase/in_app_purchase_storekit/** @louisehsu @LongCatIsLooong -packages/local_auth/local_auth_darwin/** @louisehsu @okorohelijah -packages/path_provider/path_provider_foundation/** @LongCatIsLooong @vashworth -packages/pointer_interceptor/pointer_interceptor_ios/** @louisehsu @hellohuanlin -packages/quick_actions/quick_actions_ios/** @louisehsu @LongCatIsLooong -packages/shared_preferences/shared_preferences_foundation/** @tarrinneal -packages/url_launcher/url_launcher_ios/** @vashworth @LongCatIsLooong -packages/url_launcher/url_launcher_macos/** @vashworth @LongCatIsLooong -packages/video_player/video_player_avfoundation/** @hellohuanlin @louisehsu -packages/webview_flutter/webview_flutter_wkwebview/** @LongCatIsLooong @hellohuanlin - -# - Linux -packages/file_selector/file_selector_linux/** @robert-ancell @stuartmorgan-g -packages/image_picker/image_picker_linux/** @robert-ancell @stuartmorgan-g -packages/path_provider/path_provider_linux/** @robert-ancell @stuartmorgan-g -packages/shared_preferences/shared_preferences_linux/** @robert-ancell @stuartmorgan-g -packages/url_launcher/url_launcher_linux/** @robert-ancell @stuartmorgan-g - -# - Windows -packages/camera/camera_windows/** @stuartmorgan-g -packages/file_selector/file_selector_windows/** @stuartmorgan-g -packages/image_picker/image_picker_windows/** @stuartmorgan-g -packages/local_auth/local_auth_windows/** @stuartmorgan-g -packages/path_provider/path_provider_windows/** @stuartmorgan-g -packages/shared_preferences/shared_preferences_windows/** @stuartmorgan-g -packages/url_launcher/url_launcher_windows/** @stuartmorgan-g - -# - DevTools extensions -# @adsonpleal is the actual maintainer of shared_preferences_tool but is not yet a committer, so can't be listed as the owner. -packages/shared_preferences/shared_preferences_tool/** @tarrinneal diff --git a/suggested_reviewers.md b/suggested_reviewers.md new file mode 100644 index 000000000000..c6a1ac95daec --- /dev/null +++ b/suggested_reviewers.md @@ -0,0 +1,187 @@ +Below is a list of Flutter team members who are suggested reviewers +for contributions to packages in this repository. + +These names are just suggestions. It is fine to have your changes +reviewed by someone else. + +`animations`: + - @hannah-hyj + +`camera`: + - **Cross-platform**: @bparrishMines + - **Android**: @camsim99 + - **iOS**: @hellohuanlin, @louisehsu + - **Web**: @mdebbar + - **Windows**: @stuartmorgan-g + +`cross_file`: + - @stuartmorgan-g + +`cupertino_icons`: + - @victorsanni + +`cupertino_ui`: + - @dkwingsmt + +`espresso`: + - @jesswrd + +`extension_google_sign_in_as_googleapis_auth`: + - @stuartmorgan-g + +`file_selector`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @mboetger + - **iOS**: @okorohelijah, @vashworth + - **Linux**: @robert-ancell, @stuartmorgan-g + - **macOS**: @okorohelijah, @vashworth + - **Web**: @mdebbar + - **Windows**: @stuartmorgan-g + +`flutter_lints`: + - @chunhtai + +`flutter_plugin_android_lifecycle`: + - @reidbaker + +`flutter_svg, flutter_svg_test`: + - @domesticmouse + +`flutter_template_images`: + - @stuartmorgan-g + +`go_router / go_router_builder`: + - @chunhtai + +`google_adsense`: + - @sokoloff06, @ditman + +`google_identity_services_**Web**`: + - @mdebbar + +`google_fonts`: + - @Piinks + +`google_maps_flutter`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @reidbaker + - **iOS**: @vashworth, @LongCatIsLooong + - **Web**: @mdebbar + +`google_sign_in`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @reidbaker + - **iOS**: @LongCatIsLooong, @okorohelijah + - **Web**: @mdebbar + +`image_picker`: + - **Cross-platform**: @tarrinneal + - **Android**: @gmackall + - **iOS**: @okorohelijah, @vashworth + - **Linux**: @robert-ancell, @stuartmorgan-g + - **macOS**: @okorohelijah, @vashworth + - **Web**: @mdebbar + - **Windows**: @stuartmorgan-g + +`interactive_media_ads`: + - @bparrishMines + +`in_app_purchase`: + - **Cross-platform**: @bparrishMines + - **Android**: @gmackall + - **iOS**: @louisehsu, @LongCatIsLooong + +`local_auth`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @mboetger + - **iOS/macOS**: @louisehsu, @okorohelijah + - **Windows**: @stuartmorgan-g + +`material_ui`: + - @qunccccccc + +`metrics_center`: + - @bkonyi + +`multicast_dns`: + - @vashworth + +`mustache_template`: + - @bkonyi, @parlough + +`path_parsing`: + - @domesticmouse + +`path_provider`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @camsim99 + - **iOS/macOS**: @LongCatIsLooong, @vashworth + - **Linux**: @robert-ancell, @stuartmorgan-g + - **Windows**: @stuartmorgan-g + +`pigeon`: + - @tarrinneal + +`platform`: + - @stuartmorgan-g + +`plugin_platform_interface`: + - @stuartmorgan-g + +`pointer_interceptor`: + - **Cross-platform**: @ditman + - **iOS**: @louisehsu, @hellohuanlin + - **Web**: @mdebbar + +`quick_actions`: + - **Cross-platform**: @bparrishMines + - **Android**: @jesswrd + - **iOS**: @louisehsu, @LongCatIsLooong + +`rfw`: + - @Hixie + +`shared_preferences`: + - **Cross-platform**: @tarrinneal + - **Android**: @jesswrd + - **iOS/macOS**: @tarrinneal + - **Linux**: @robert-ancell, @stuartmorgan-g + - **Windows**: @stuartmorgan-g + - **Web**: @mdebbar + - **Devtools**: @adsonpleal + +`standard_message_codec`: + - @stuartmorgan-g + +`two_dimensional_scrollables`: + - @Piinks + +`url_launcher`: + - **Cross-platform**: @stuartmorgan-g + - **Android**: @gmackall + - **iOS**: @vashworth, @LongCatIsLooong + - **Linux**: @robert-ancell, @stuartmorgan-g + - **macOS**: @vashworth, @LongCatIsLooong + - **Windows**: @stuartmorgan-g + - **Web**: @mdebbar + +`vector_graphics, vector_graphics_codec, vector_graphics_compiler`: + - @jtmcdole + +`video_player`: + - **Cross-platform**: @tarrinneal + - **Android**: @mboetger + - **iOS/macOS**: @hellohuanlin, @louisehsu + - **Web**: @mdebbar + +`web_benchmarks`: + - @yjbanov + +`webview_flutter`: + - **Cross-platform**: @bparrishMines + - **Android**: @bparrishMines + - **iOS/macOS**: @bparrishMines, @LongCatIsLooong, @hellohuanlin + - **Web**: @mdebbar + +`xdg_directories`: + - @stuartmorgan-g From e61dba5efd1730aecaddffc2b3c712cbbc09b840 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Fri, 27 Mar 2026 11:10:35 -0400 Subject: [PATCH 2/4] Remove tool validation --- ...ted_reviewers.md => SUGGESTED_REVIEWERS.md | 0 script/tool/lib/src/common/file_filters.dart | 2 +- .../src/repo_package_info_check_command.dart | 34 +--------- script/tool/test/analyze_command_test.dart | 6 +- .../test/build_examples_command_test.dart | 2 +- .../tool/test/common/file_filters_test.dart | 2 +- script/tool/test/dart_test_command_test.dart | 2 +- .../test/drive_examples_command_test.dart | 2 +- .../test/firebase_test_lab_command_test.dart | 2 +- .../tool/test/native_test_command_test.dart | 2 +- .../repo_package_info_check_command_test.dart | 67 ------------------- 11 files changed, 11 insertions(+), 110 deletions(-) rename suggested_reviewers.md => SUGGESTED_REVIEWERS.md (100%) diff --git a/suggested_reviewers.md b/SUGGESTED_REVIEWERS.md similarity index 100% rename from suggested_reviewers.md rename to SUGGESTED_REVIEWERS.md diff --git a/script/tool/lib/src/common/file_filters.dart b/script/tool/lib/src/common/file_filters.dart index 7a1bafd06a5c..90be24da8d03 100644 --- a/script/tool/lib/src/common/file_filters.dart +++ b/script/tool/lib/src/common/file_filters.dart @@ -9,10 +9,10 @@ bool isRepoLevelNonCodeImpactingFile(String path) { return [ 'AUTHORS', - 'CODEOWNERS', 'CONTRIBUTING.md', 'LICENSE', 'README.md', + 'SUGGESTED_REVIEWERS.md', 'AGENTS.md', // This deliberate lists specific files rather than excluding the whole // .github directory since it's better to have false negatives than to diff --git a/script/tool/lib/src/repo_package_info_check_command.dart b/script/tool/lib/src/repo_package_info_check_command.dart index c423d760ea85..1c213fd2d0f3 100644 --- a/script/tool/lib/src/repo_package_info_check_command.dart +++ b/script/tool/lib/src/repo_package_info_check_command.dart @@ -16,7 +16,7 @@ const int _exitBadTableEntry = 3; const int _exitUnknownPackageEntry = 4; /// A command to verify repository-level metadata about packages, such as -/// repo README and CODEOWNERS entries. +/// repo README and auto-label entries. class RepoPackageInfoCheckCommand extends PackageLoopingCommand { /// Creates Dependabot check command instance. RepoPackageInfoCheckCommand(super.packagesDir, {super.gitDir}); @@ -27,9 +27,6 @@ class RepoPackageInfoCheckCommand extends PackageLoopingCommand { final Map> _readmeTableEntries = >{}; - /// Packages with entries in CODEOWNERS. - final List _ownedPackages = []; - /// Packages with entries in labeler.yml. final List _autoLabeledPackages = []; @@ -82,25 +79,6 @@ class RepoPackageInfoCheckCommand extends PackageLoopingCommand { } } - // Extract all of the CODEOWNERS package entries. - final packageOwnershipPattern = RegExp( - r'^((?:third_party/)?packages/(?:[^/]*/)?([^/]*))/\*\*', - ); - for (final String line - in _repoRoot.childFile('CODEOWNERS').readAsLinesSync()) { - final RegExpMatch? match = packageOwnershipPattern.firstMatch(line); - if (match == null) { - continue; - } - final String path = match.group(1)!; - final String name = match.group(2)!; - if (!_repoRoot.childDirectory(path).existsSync()) { - printError('Unknown directory "$path" in CODEOWNERS'); - throw ToolExit(_exitUnknownPackageEntry); - } - _ownedPackages.add(name); - } - // Extract all of the lebeler.yml package entries. // Validate the match rules rather than the label itself, as the labels // don't always correspond 1:1 to packages and package names. @@ -126,16 +104,6 @@ class RepoPackageInfoCheckCommand extends PackageLoopingCommand { final String packageName = package.directory.basename; final errors = []; - // All packages should have an owner. - // Platform interface packages are considered to be owned by the app-facing - // package owner. - if (!(_ownedPackages.contains(packageName) || - package.isPlatformInterface && - _ownedPackages.contains(package.directory.parent.basename))) { - printError('${indentation}Missing CODEOWNERS entry.'); - errors.add('Missing CODEOWNERS entry'); - } - // All packages should have an auto-applied label. For plugins, only the // group needs a rule, so check the app-facing package. if (!(package.isFederated && !package.isAppFacing) && diff --git a/script/tool/test/analyze_command_test.dart b/script/tool/test/analyze_command_test.dart index 0509f8d25988..ef2a609579ac 100644 --- a/script/tool/test/analyze_command_test.dart +++ b/script/tool/test/analyze_command_test.dart @@ -758,7 +758,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), @@ -1064,7 +1064,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md packages/package_a/lib/foo.dart ''', @@ -1669,7 +1669,7 @@ packages/package_a/$file .gemini/config.yaml AGENTS.md README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md packages/package_a/lib/foo.dart ''', diff --git a/script/tool/test/build_examples_command_test.dart b/script/tool/test/build_examples_command_test.dart index b2f66c5dbd6f..2b8a8c8952fd 100644 --- a/script/tool/test/build_examples_command_test.dart +++ b/script/tool/test/build_examples_command_test.dart @@ -1133,7 +1133,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/common/file_filters_test.dart b/script/tool/test/common/file_filters_test.dart index 0143fb3dde30..dd06515509f2 100644 --- a/script/tool/test/common/file_filters_test.dart +++ b/script/tool/test/common/file_filters_test.dart @@ -9,10 +9,10 @@ void main() { group('isRepoLevelNonCodeImpactingFile', () { test('returns true for known non-code files', () { expect(isRepoLevelNonCodeImpactingFile('AUTHORS'), isTrue); - expect(isRepoLevelNonCodeImpactingFile('CODEOWNERS'), isTrue); expect(isRepoLevelNonCodeImpactingFile('CONTRIBUTING.md'), isTrue); expect(isRepoLevelNonCodeImpactingFile('LICENSE'), isTrue); expect(isRepoLevelNonCodeImpactingFile('README.md'), isTrue); + expect(isRepoLevelNonCodeImpactingFile('SUGGESTED_REVIEWERS.md'), isTrue); expect(isRepoLevelNonCodeImpactingFile('AGENTS.md'), isTrue); expect( isRepoLevelNonCodeImpactingFile('.github/PULL_REQUEST_TEMPLATE.md'), diff --git a/script/tool/test/dart_test_command_test.dart b/script/tool/test/dart_test_command_test.dart index 1a16a3703b3f..a6cac49ac0e7 100644 --- a/script/tool/test/dart_test_command_test.dart +++ b/script/tool/test/dart_test_command_test.dart @@ -881,7 +881,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/drive_examples_command_test.dart b/script/tool/test/drive_examples_command_test.dart index f4aebdb569ac..6d4e44ca748a 100644 --- a/script/tool/test/drive_examples_command_test.dart +++ b/script/tool/test/drive_examples_command_test.dart @@ -1801,7 +1801,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md .gitignore packages/package_a/CHANGELOG.md ''', diff --git a/script/tool/test/firebase_test_lab_command_test.dart b/script/tool/test/firebase_test_lab_command_test.dart index e469e1f2c645..2fd731ef8ad2 100644 --- a/script/tool/test/firebase_test_lab_command_test.dart +++ b/script/tool/test/firebase_test_lab_command_test.dart @@ -1068,7 +1068,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/native_test_command_test.dart b/script/tool/test/native_test_command_test.dart index 6c51ed7f2fd1..1a34ebf5acb5 100644 --- a/script/tool/test/native_test_command_test.dart +++ b/script/tool/test/native_test_command_test.dart @@ -492,7 +492,7 @@ packages/package_a/$file MockProcess( stdout: ''' README.md -CODEOWNERS +SUGGESTED_REVIEWERS.md packages/package_a/CHANGELOG.md ''', ), diff --git a/script/tool/test/repo_package_info_check_command_test.dart b/script/tool/test/repo_package_info_check_command_test.dart index 341e0b2892c2..8f1d8645a0d4 100644 --- a/script/tool/test/repo_package_info_check_command_test.dart +++ b/script/tool/test/repo_package_info_check_command_test.dart @@ -44,22 +44,6 @@ void main() { '''; } - void writeCodeOwners(List ownedPackages) { - final List subpaths = ownedPackages - .map( - (RepositoryPackage p) => p.isFederated - ? [ - p.directory.parent.basename, - p.directory.basename, - ].join('/') - : p.directory.basename, - ) - .toList(); - root.childFile('CODEOWNERS').writeAsStringSync(''' -${subpaths.map((String subpath) => 'packages/$subpath/** @someone').join('\n')} -'''); - } - String readmeTableEntry(String packageName) { final String encodedTag = Uri.encodeComponent('p: $packageName'); return '| [$packageName](./packages/$packageName/) | ' @@ -100,7 +84,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); final List output = await runCapturingPrint(runner, [ 'repo-package-info-check', @@ -130,7 +113,6 @@ ${readmeTableEntry(pluginName)} '''); writeAutoLabelerYaml([packages.first]); writeAutoLabelerYaml([packages.first]); - writeCodeOwners(packages); // 4 packages * 2 checks (git, gh) = 8 calls. // Default mocks in setUp cover 1 call each. We need 3 more each. @@ -162,7 +144,6 @@ ${readmeTableHeader()} ${readmeTableEntry('another_package')} '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -193,7 +174,6 @@ ${readmeTableHeader()} ${readmeTableEntry('another_package')} '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -237,7 +217,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -282,7 +261,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -329,7 +307,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -376,7 +353,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -423,7 +399,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -470,7 +445,6 @@ ${readmeTableHeader()} $entry '''); writeAutoLabelerYaml(packages); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -496,41 +470,6 @@ $entry ); }); - test('fails for missing CODEOWNER', () async { - const packageName = 'a_package'; - final packages = [ - createFakePackage('a_package', packagesDir), - ]; - - root.childFile('README.md').writeAsStringSync(''' -${readmeTableHeader()} -${readmeTableEntry(packageName)} -'''); - writeAutoLabelerYaml(packages); - writeCodeOwners([]); - - Error? commandError; - final List output = await runCapturingPrint( - runner, - ['repo-package-info-check'], - errorHandler: (Error e) { - commandError = e; - }, - ); - - expect(commandError, isA()); - expect( - output, - containsAllInOrder([ - contains('Missing CODEOWNERS entry.'), - contains( - 'a_package:\n' - ' Missing CODEOWNERS entry', - ), - ]), - ); - }); - test('fails for missing auto-labeler entry', () async { const packageName = 'a_package'; final packages = [ @@ -542,7 +481,6 @@ ${readmeTableHeader()} ${readmeTableEntry(packageName)} '''); writeAutoLabelerYaml([]); - writeCodeOwners(packages); Error? commandError; final List output = await runCapturingPrint( @@ -578,7 +516,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); package.ciConfigFile.writeAsStringSync(''' release: @@ -603,7 +540,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); final List output = await runCapturingPrint(runner, [ 'repo-package-info-check', @@ -626,7 +562,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); package.ciConfigFile.writeAsStringSync(''' something: true '''); @@ -660,7 +595,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); package.ciConfigFile.writeAsStringSync(''' release: batch: 1 @@ -699,7 +633,6 @@ ${readmeTableHeader()} ${readmeTableEntry('a_package')} '''); writeAutoLabelerYaml([package]); - writeCodeOwners([package]); return package; } From 4c917a35368ca040c6abcd7a7908ab41797ea67d Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Fri, 27 Mar 2026 11:39:05 -0400 Subject: [PATCH 3/4] Fix replace-all mistake --- SUGGESTED_REVIEWERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SUGGESTED_REVIEWERS.md b/SUGGESTED_REVIEWERS.md index c6a1ac95daec..ad9a954e7683 100644 --- a/SUGGESTED_REVIEWERS.md +++ b/SUGGESTED_REVIEWERS.md @@ -56,7 +56,7 @@ reviewed by someone else. `google_adsense`: - @sokoloff06, @ditman -`google_identity_services_**Web**`: +`google_identity_services_web`: - @mdebbar `google_fonts`: From 5344feab93c5b9ab2fcbdb609825c2779b4af230 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Fri, 27 Mar 2026 11:39:52 -0400 Subject: [PATCH 4/4] analyzer --- script/tool/test/repo_package_info_check_command_test.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/script/tool/test/repo_package_info_check_command_test.dart b/script/tool/test/repo_package_info_check_command_test.dart index 8f1d8645a0d4..820c45ca6ce0 100644 --- a/script/tool/test/repo_package_info_check_command_test.dart +++ b/script/tool/test/repo_package_info_check_command_test.dart @@ -472,9 +472,7 @@ $entry test('fails for missing auto-labeler entry', () async { const packageName = 'a_package'; - final packages = [ - createFakePackage('a_package', packagesDir), - ]; + createFakePackage('a_package', packagesDir); root.childFile('README.md').writeAsStringSync(''' ${readmeTableHeader()}