feat: Add --ignore-warnings flag to pub publish --dry-run (#4698)
diff --git a/lib/src/command/lish.dart b/lib/src/command/lish.dart
index a2d405f..b2adb58 100644
--- a/lib/src/command/lish.dart
+++ b/lib/src/command/lish.dart
@@ -124,6 +124,11 @@
help: 'Run this in the directory <dir>.',
valueHelp: 'dir',
);
+ argParser.addFlag(
+ 'ignore-warnings',
+ help: 'Do not treat warnings as fatal.',
+ negatable: false,
+ );
}
Future<void> _publishUsingClient(
@@ -299,6 +304,10 @@
if (_toArchive != null && force) {
usageException('Cannot use both --to-archive and --force.');
}
+
+ if (argResults.wasParsed('ignore-warnings') && !dryRun) {
+ usageException('`--ignore-warnings` can only be used with `--dry-run`.');
+ }
}
Future<_Publication> _publicationFromEntrypoint() async {
@@ -490,7 +499,8 @@
: _publicationFromArchive(_fromArchive));
if (dryRun) {
log.message(publication.warningsCountMessage);
- if (publication.warningCount != 0) {
+ if (publication.warningCount != 0 &&
+ !argResults.flag('ignore-warnings')) {
overrideExitCode(DATA);
}
return;
diff --git a/test/lish/ignore_warnings_test.dart b/test/lish/ignore_warnings_test.dart
new file mode 100644
index 0000000..f78019e
--- /dev/null
+++ b/test/lish/ignore_warnings_test.dart
@@ -0,0 +1,65 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// for details. 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:pub/src/exit_codes.dart' as exit_codes;
+import 'package:test/test.dart';
+
+import '../descriptor.dart' as d;
+import '../test_pub.dart';
+
+void main() {
+ test('dry-run with warnings exits with DATA error by default', () async {
+ (await servePackages()).serve('foo', '1.0.0');
+ await d
+ .validPackage(
+ pubspecExtras: {
+ 'dependencies': {'foo': 'any'},
+ },
+ )
+ .create();
+
+ await runPub(
+ args: ['publish', '--dry-run'],
+ output: contains('Package has 1 warning.'),
+ exitCode: exit_codes.DATA,
+ );
+ });
+
+ test(
+ 'dry-run with --ignore-warnings and warnings exits with SUCCESS',
+ () async {
+ (await servePackages()).serve('foo', '1.0.0');
+ await d
+ .validPackage(
+ pubspecExtras: {
+ 'dependencies': {'foo': 'any'},
+ },
+ )
+ .create();
+
+ await runPub(
+ args: ['publish', '--dry-run', '--ignore-warnings'],
+ output: contains('Package has 1 warning.'),
+ exitCode: exit_codes.SUCCESS,
+ );
+ },
+ );
+
+ test('--ignore-warnings without --dry-run is a usage error', () async {
+ (await servePackages()).serve('foo', '1.0.0');
+ await d
+ .validPackage(
+ pubspecExtras: {
+ 'dependencies': {'foo': 'any'},
+ },
+ )
+ .create();
+
+ await runPub(
+ args: ['publish', '--ignore-warnings'],
+ error: contains('`--ignore-warnings` can only be used with `--dry-run`.'),
+ exitCode: exit_codes.USAGE,
+ );
+ });
+}
diff --git a/test/testdata/goldens/help_test/pub publish --help.txt b/test/testdata/goldens/help_test/pub publish --help.txt
index 30ebb01..5af5e6f 100644
--- a/test/testdata/goldens/help_test/pub publish --help.txt
+++ b/test/testdata/goldens/help_test/pub publish --help.txt
@@ -10,6 +10,7 @@
-f, --force Publish without confirmation if there are no errors.
--skip-validation Publish without validation and resolution (this will ignore errors).
-C, --directory=<dir> Run this in the directory <dir>.
+ --ignore-warnings Do not treat warnings as fatal.
Run "pub help" to see global options.
See https://dart.dev/tools/pub/cmd/pub-lish for detailed documentation.