Index: packages/dart_style/tool/grind.dart |
diff --git a/packages/dart_style/tool/grind.dart b/packages/dart_style/tool/grind.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5a9b1c697f05fe92b9c1dd309b9caf2a2e883b60 |
--- /dev/null |
+++ b/packages/dart_style/tool/grind.dart |
@@ -0,0 +1,84 @@ |
+// Copyright (c) 2015, 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:grinder/grinder.dart'; |
+import 'package:pub_semver/pub_semver.dart'; |
+import 'package:yaml/yaml.dart' as yaml; |
+ |
+/// Matches the version line in dart_style's pubspec. |
+final _versionPattern = new RegExp(r"^version: .*$", multiLine: true); |
+ |
+main(args) => grind(args); |
+ |
+@DefaultTask() |
+@Task() |
+validate() async { |
+ // Test it. |
+ await new TestRunner().testAsync(); |
+ |
+ // Make sure it's warning clean. |
+ Analyzer.analyze("bin/format.dart", fatalWarnings: true); |
+ |
+ // Format it. |
+ Dart.run("bin/format.dart", arguments: ["-w", "."]); |
+} |
+ |
+/// Gets ready to publish a new version of the package. |
+/// |
+/// To publish a version, you need to: |
+/// |
+/// 1. Make sure the version in the pubspec is a "-dev" number. This should |
+/// already be the case since you've already landed patches that change |
+/// the formatter and bumped to that as a consequence. |
+/// |
+/// 2. Run this task: |
+/// |
+/// pub run grinder bump |
+/// |
+/// 3. Commit the change to a branch. |
+/// |
+/// 4. Send it out for review: |
+/// |
+/// git cl upload |
+/// |
+/// 5. After the review is complete, land it: |
+/// |
+/// git cl land |
+/// |
+/// 6. Tag the commit: |
+/// |
+/// git tag -a "<version>" -m "<version>" |
+/// git push origin <version> |
+/// |
+/// 7. Publish the package: |
+/// |
+/// pub lish |
+@Task() |
+@Depends(validate) |
+bump() async { |
+ // Read the version from the pubspec. |
+ var pubspecFile = getFile("pubspec.yaml"); |
+ var pubspec = pubspecFile.readAsStringSync(); |
+ var version = new Version.parse(yaml.loadYaml(pubspec)["version"]); |
+ |
+ // Require a "-dev" version since we don't otherwise know what to bump it to. |
+ if (!version.isPreRelease) throw "Cannot publish non-dev version $version."; |
+ |
+ // Don't allow versions like "1.2.3-dev+4" because it's not clear if the |
+ // user intended the "+4" to be discarded or not. |
+ if (version.build.isNotEmpty) throw "Cannot publish build version $version."; |
+ |
+ var bumped = new Version(version.major, version.minor, version.patch); |
+ |
+ // Update the version in the pubspec. |
+ pubspec = pubspec.replaceAll(_versionPattern, "version: $bumped"); |
+ pubspecFile.writeAsStringSync(pubspec); |
+ |
+ // Update the version constant in bin/format.dart. |
+ var binFormatFile = getFile("bin/format.dart"); |
+ var binFormat = binFormatFile.readAsStringSync().replaceAll( |
+ new RegExp(r'const version = "[^"]+";'), 'const version = "$bumped";'); |
+ binFormatFile.writeAsStringSync(binFormat); |
+ log("Updated version to '$bumped'."); |
+} |