Publish check ignores prerelease sdk (#3560)
diff --git a/script/tool/lib/src/publish_check_command.dart b/script/tool/lib/src/publish_check_command.dart
index 8d6f6bb..af00995 100644
--- a/script/tool/lib/src/publish_check_command.dart
+++ b/script/tool/lib/src/publish_check_command.dart
@@ -3,6 +3,7 @@
// found in the LICENSE file.
import 'dart:async';
+import 'dart:io' as io;
import 'package:colorize/colorize.dart';
import 'package:file/file.dart';
@@ -63,6 +64,44 @@
}
}
+ Future<bool> hasValidPublishCheckRun(Directory package) async {
+ final io.Process process = await io.Process.start(
+ 'flutter',
+ <String>['pub', 'publish', '--', '--dry-run'],
+ workingDirectory: package.path,
+ );
+
+ final StringBuffer outputBuffer = StringBuffer();
+
+ final Completer<void> stdOutCompleter = Completer<void>();
+ process.stdout.listen(
+ (List<int> event) {
+ io.stdout.add(event);
+ outputBuffer.write(String.fromCharCodes(event));
+ },
+ onDone: () => stdOutCompleter.complete(),
+ );
+
+ final Completer<void> stdInCompleter = Completer<void>();
+ process.stderr.listen(
+ (List<int> event) {
+ io.stderr.add(event);
+ outputBuffer.write(String.fromCharCodes(event));
+ },
+ onDone: () => stdInCompleter.complete(),
+ );
+
+ if (await process.exitCode == 0) return true;
+
+ await stdOutCompleter.future;
+ await stdInCompleter.future;
+
+ final String output = outputBuffer.toString();
+ return output.contains('Package has 1 warning.') &&
+ output.contains(
+ 'Packages with an SDK constraint on a pre-release of the Dart SDK should themselves be published as a pre-release version.');
+ }
+
Future<bool> passesPublishCheck(Directory package) async {
final String packageName = package.basename;
print('Checking that $packageName can be published.');
@@ -75,13 +114,7 @@
return true;
}
- final int exitCode = await processRunner.runAndStream(
- 'flutter',
- <String>['pub', 'publish', '--', '--dry-run'],
- workingDir: package,
- );
-
- if (exitCode == 0) {
+ if (await hasValidPublishCheckRun(package)) {
print("Package $packageName is able to be published.");
return true;
} else {