mirror of
https://github.com/flutter/packages.git
synced 2025-06-27 04:37:07 +08:00
[flutter_plugin_tools] Support YAML exception lists (#4183)
Currently the tool accepts `--custom-analysis` to allow a list of packages for which custom `analysis_options.yaml` are allowed, and `--exclude` to exclude a set of packages when running a command against all, or all changed, packages. This results in these exception lists being embedded into CI configuration files (e.g., .cirrus.yaml) or scripts, which makes them harder to maintain, and harder to re-use in other contexts (local runs, new CI systems). This adds support for both flags to accept paths to YAML files that contain the lists, so that they can be maintained separately, and with inline comments about the reasons things are on the lists. Also updates the CI to use this new support, eliminating those lists from `.cirrus.yaml` and `tool_runner.sh` Fixes https://github.com/flutter/flutter/issues/86799
This commit is contained in:
@ -6,6 +6,7 @@ import 'dart:async';
|
||||
|
||||
import 'package:file/file.dart';
|
||||
import 'package:platform/platform.dart';
|
||||
import 'package:yaml/yaml.dart';
|
||||
|
||||
import 'common/core.dart';
|
||||
import 'common/package_looping_command.dart';
|
||||
@ -23,7 +24,10 @@ class AnalyzeCommand extends PackageLoopingCommand {
|
||||
}) : super(packagesDir, processRunner: processRunner, platform: platform) {
|
||||
argParser.addMultiOption(_customAnalysisFlag,
|
||||
help:
|
||||
'Directories (comma separated) that are allowed to have their own analysis options.',
|
||||
'Directories (comma separated) that are allowed to have their own '
|
||||
'analysis options.\n\n'
|
||||
'Alternately, a list of one or more YAML files that contain a list '
|
||||
'of allowed directories.',
|
||||
defaultsTo: <String>[]);
|
||||
argParser.addOption(_analysisSdk,
|
||||
valueHelp: 'dart-sdk',
|
||||
@ -37,6 +41,8 @@ class AnalyzeCommand extends PackageLoopingCommand {
|
||||
|
||||
late String _dartBinaryPath;
|
||||
|
||||
Set<String> _allowedCustomAnalysisDirectories = const <String>{};
|
||||
|
||||
@override
|
||||
final String name = 'analyze';
|
||||
|
||||
@ -56,7 +62,7 @@ class AnalyzeCommand extends PackageLoopingCommand {
|
||||
continue;
|
||||
}
|
||||
|
||||
final bool allowed = (getStringListArg(_customAnalysisFlag)).any(
|
||||
final bool allowed = _allowedCustomAnalysisDirectories.any(
|
||||
(String directory) =>
|
||||
directory.isNotEmpty &&
|
||||
path.isWithin(
|
||||
@ -107,6 +113,17 @@ class AnalyzeCommand extends PackageLoopingCommand {
|
||||
throw ToolExit(_exitPackagesGetFailed);
|
||||
}
|
||||
|
||||
_allowedCustomAnalysisDirectories =
|
||||
getStringListArg(_customAnalysisFlag).expand<String>((String item) {
|
||||
if (item.endsWith('.yaml')) {
|
||||
final File file = packagesDir.fileSystem.file(item);
|
||||
return (loadYaml(file.readAsStringSync()) as YamlList)
|
||||
.toList()
|
||||
.cast<String>();
|
||||
}
|
||||
return <String>[item];
|
||||
}).toSet();
|
||||
|
||||
// Use the Dart SDK override if one was passed in.
|
||||
final String? dartSdk = argResults![_analysisSdk] as String?;
|
||||
_dartBinaryPath =
|
||||
|
@ -9,6 +9,7 @@ import 'package:file/file.dart';
|
||||
import 'package:git/git.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:platform/platform.dart';
|
||||
import 'package:yaml/yaml.dart';
|
||||
|
||||
import 'core.dart';
|
||||
import 'git_version_finder.dart';
|
||||
@ -48,7 +49,9 @@ abstract class PluginCommand extends Command<void> {
|
||||
argParser.addMultiOption(
|
||||
_excludeArg,
|
||||
abbr: 'e',
|
||||
help: 'Exclude packages from this command.',
|
||||
help: 'A list of packages to exclude from from this command.\n\n'
|
||||
'Alternately, a list of one or more YAML files that contain a list '
|
||||
'of packages to exclude.',
|
||||
defaultsTo: <String>[],
|
||||
);
|
||||
argParser.addFlag(_runOnChangedPackagesArg,
|
||||
@ -214,8 +217,18 @@ abstract class PluginCommand extends Command<void> {
|
||||
/// of packages in the flutter/packages repository.
|
||||
Stream<Directory> _getAllPlugins() async* {
|
||||
Set<String> plugins = Set<String>.from(getStringListArg(_packagesArg));
|
||||
|
||||
final Set<String> excludedPlugins =
|
||||
Set<String>.from(getStringListArg(_excludeArg));
|
||||
getStringListArg(_excludeArg).expand<String>((String item) {
|
||||
if (item.endsWith('.yaml')) {
|
||||
final File file = packagesDir.fileSystem.file(item);
|
||||
return (loadYaml(file.readAsStringSync()) as YamlList)
|
||||
.toList()
|
||||
.cast<String>();
|
||||
}
|
||||
return <String>[item];
|
||||
}).toSet();
|
||||
|
||||
final bool runOnChangedPackages = getBoolArg(_runOnChangedPackagesArg);
|
||||
if (plugins.isEmpty &&
|
||||
runOnChangedPackages &&
|
||||
|
Reference in New Issue
Block a user