From cac11a76a309be39aa0b2b42b33a80f55c25c3ba Mon Sep 17 00:00:00 2001 From: zhangmeng <494089941@qq.com> Date: Thu, 22 Jul 2021 15:40:43 +0800 Subject: [PATCH] add version tool add version to 1.6.0 --- pubspec.lock | 2 +- pubspec.yaml | 3 ++- tool/_add_version.dart | 41 +++++++++++++++++++++++++++++ tool/grind.dart | 13 +++------- tool/version_tool.dart | 59 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 tool/_add_version.dart create mode 100644 tool/version_tool.dart diff --git a/pubspec.lock b/pubspec.lock index 594f813..472c951 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -829,7 +829,7 @@ packages: source: hosted version: "5.0.0" pub_semver: - dependency: transitive + dependency: "direct dev" description: name: pub_semver url: "https://pub.flutter-io.cn" diff --git a/pubspec.yaml b/pubspec.yaml index 2d70144..50d07e4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A new Flutter application. publish_to: "none" -version: 1.5.1+11 +version: 1.6.0-dev+12 environment: sdk: '>=2.12.0 <3.0.0' @@ -86,6 +86,7 @@ dev_dependencies: json_serializable: ^4.1.1 build_runner: ^2.0.3 yaml: ^3.1.0 + pub_semver: ^2.0.0 flutter: uses-material-design: true diff --git a/tool/_add_version.dart b/tool/_add_version.dart new file mode 100644 index 0000000..d6d79c5 --- /dev/null +++ b/tool/_add_version.dart @@ -0,0 +1,41 @@ +part of 'grind.dart'; + +@Task('add minor version number') +void addVersion() async { + String projectPath = Directory('.').absolute.path; + String yamlPath = join(projectPath, 'pubspec.yaml'); + String yamlContent = await File(yamlPath).readAsString(); + dynamic content = loadYaml(yamlContent); + String version = content['version']; + //rename version + + Version resultVersion = VersionTool.fromText(version).nextMinorTag('dev'); + + String result = yamlContent.replaceFirst(version, resultVersion.toString()); + await File(yamlPath).writeAsString(result); +} + +@Task('add path version number') +void addVersionPatch() async { + String projectPath = Directory('.').absolute.path; + String yamlPath = join(projectPath, 'pubspec.yaml'); + String yamlContent = await File(yamlPath).readAsString(); + dynamic content = loadYaml(yamlContent); + String version = content['version']; + //rename version + + Version resultVersion = VersionTool.fromText(version).nextPatchTag('dev'); + + String result = yamlContent.replaceFirst(version, resultVersion.toString()); + await File(yamlPath).writeAsString(result); +} + +@Task() +Future getVersion() async { + String projectPath = Directory('.').absolute.path; + String yamlPath = join(projectPath, 'pubspec.yaml'); + String yamlContent = await File(yamlPath).readAsString(); + dynamic content = loadYaml(yamlContent); + String version = content['version']; + return version; +} \ No newline at end of file diff --git a/tool/grind.dart b/tool/grind.dart index e193740..1121d05 100644 --- a/tool/grind.dart +++ b/tool/grind.dart @@ -2,10 +2,13 @@ import 'dart:io'; import 'package:common_utils/common_utils.dart'; import 'package:grinder/grinder.dart'; +import 'package:pub_semver/pub_semver.dart'; import 'package:yaml/yaml.dart'; import 'package:path/path.dart'; import 'config.dart'; +import 'version_tool.dart'; +part '_add_version.dart'; main(args) => grind(args); @@ -88,13 +91,3 @@ void genClean() async { await Pub.runAsync('build_runner', arguments: ['build', '--delete-conflicting-outputs']); } - -@Task() -Future getVersion() async { - String projectPath = Directory('.').absolute.path; - String yamlPath = join(projectPath, 'pubspec.yaml'); - String yamlContent = await File(yamlPath).readAsString(); - dynamic content = loadYaml(yamlContent); - String version = content['version']; - return version; -} diff --git a/tool/version_tool.dart b/tool/version_tool.dart new file mode 100644 index 0000000..0a3cd99 --- /dev/null +++ b/tool/version_tool.dart @@ -0,0 +1,59 @@ +import 'package:pub_semver/pub_semver.dart'; + +enum VersionNumber { + MAJOR, + MINOR, + PATCH, +} + +class VersionTool { + Version version; + VersionTool(this.version); + VersionTool.fromText(String text) : version = Version.parse(text); + + Version get nextMajor => _addBuildNumber(VersionNumber.MAJOR); + Version get nextMinor => _addBuildNumber(VersionNumber.MINOR); + Version get nextPatch => _addBuildNumber(VersionNumber.PATCH); + + Version nextMajorTag(String tag) => _addBuildNumber( + VersionNumber.MAJOR, + tag: tag, + ); + Version nextMinorTag(String tag) => _addBuildNumber( + VersionNumber.MINOR, + tag: tag, + ); + Version nextPatchTag(String tag) => _addBuildNumber( + VersionNumber.PATCH, + tag: tag, + ); + + Version _addBuildNumber(VersionNumber type, {String? tag}) { + switch (type) { + case VersionNumber.MAJOR: + return Version( + version.major, + version.minor, + version.patch + 1, + pre: tag, + build: '${(version.build.first as int) + 1}', + ); + case VersionNumber.MINOR: + return Version( + version.major, + version.minor + 1, + 0, + pre: tag, + build: '${(version.build.first as int) + 1}', + ); + case VersionNumber.PATCH: + return Version( + version.major + 1, + 0, + 0, + pre: tag, + build: '${(version.build.first as int) + 1}', + ); + } + } +}