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.