Skip to content

Commit 199c3e8

Browse files
Fix bug with the dt update-version tool (#9793)
1 parent ca4a472 commit 199c3e8

5 files changed

Lines changed: 82 additions & 26 deletions

File tree

pubspec.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -975,10 +975,10 @@ packages:
975975
dependency: transitive
976976
description:
977977
name: vm_service
978-
sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
978+
sha256: "046d3928e16fa4dc46e8350415661755ab759d9fc97fc21b5ab295f71e4f0499"
979979
url: "https://pub.dev"
980980
source: hosted
981-
version: "15.0.2"
981+
version: "15.1.0"
982982
vm_service_protos:
983983
dependency: transitive
984984
description:

tool/lib/commands/presubmit.dart

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,10 @@ class PresubmitCommand extends Command {
6565
final pathsToFormat = _getPathsToFormat(p);
6666

6767
final formatProcess = await pm.runProcess(
68-
CliCommand.dart(['format', ...pathsToFormat], throwOnException: false),
68+
CliCommand.dart([
69+
'format',
70+
...pathsToFormat,
71+
], throwOnException: false),
6972
workingDirectory: p.packagePath,
7073
);
7174

@@ -108,10 +111,12 @@ class PresubmitCommand extends Command {
108111
final pathsToFormat = _getPathsToFormat(p);
109112

110113
final formatProcess = await pm.runProcess(
111-
CliCommand.dart(
112-
['format', '--output=none', '--set-exit-if-changed', ...pathsToFormat],
113-
throwOnException: false,
114-
),
114+
CliCommand.dart([
115+
'format',
116+
'--output=none',
117+
'--set-exit-if-changed',
118+
...pathsToFormat,
119+
], throwOnException: false),
115120
workingDirectory: p.packagePath,
116121
);
117122

tool/lib/commands/update_version.dart

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,25 @@ bool isDevVersion(String version) {
208208
return RegExp(r'-dev\.\d+').hasMatch(version);
209209
}
210210

211+
String calculateNewVersion(String currentVersion, String type) {
212+
switch (type) {
213+
case 'release':
214+
if (isDevVersion(currentVersion)) {
215+
return stripPreReleases(currentVersion);
216+
} else {
217+
return incrementVersionByType(currentVersion, 'minor')!;
218+
}
219+
case 'dev':
220+
return incrementDevVersion(currentVersion);
221+
default:
222+
final version = incrementVersionByType(currentVersion, type);
223+
if (version == null) {
224+
throw 'Failed to determine the newVersion.';
225+
}
226+
return version;
227+
}
228+
}
229+
211230
const pubspecVersionPrefix = 'version:';
212231

213232
class ManualUpdateCommand extends Command {
@@ -326,23 +345,10 @@ class AutoUpdateCommand extends Command {
326345
final type = argResults!['type'] as String;
327346
final isDryRun = argResults!['dry-run'] as bool;
328347
final currentVersion = versionFromPubspecFile();
329-
String? newVersion;
330348
if (currentVersion == null) {
331349
throw 'Could not automatically determine current version.';
332350
}
333-
switch (type) {
334-
case 'release':
335-
newVersion = stripPreReleases(currentVersion);
336-
break;
337-
case 'dev':
338-
newVersion = incrementDevVersion(currentVersion);
339-
break;
340-
default:
341-
newVersion = incrementVersionByType(currentVersion, type);
342-
if (newVersion == null) {
343-
throw 'Failed to determine the newVersion.';
344-
}
345-
}
351+
final newVersion = calculateNewVersion(currentVersion, type);
346352
print('Bump version from $currentVersion to $newVersion');
347353

348354
if (isDryRun) {

tool/test/update_version_test.dart

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2026 The Flutter Authors
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
4+
5+
import 'package:devtools_tool/commands/update_version.dart';
6+
import 'package:test/test.dart';
7+
8+
void main() {
9+
group('calculateNewVersion', () {
10+
test('release type strips pre-release when on dev version', () {
11+
expect(calculateNewVersion('2.28.0-dev.0', 'release'), '2.28.0');
12+
expect(calculateNewVersion('2.28.0-dev.5', 'release'), '2.28.0');
13+
});
14+
15+
test('release type increments minor version when not on dev version', () {
16+
expect(calculateNewVersion('2.28.0', 'release'), '2.29.0');
17+
expect(calculateNewVersion('2.28.1', 'release'), '2.29.0');
18+
});
19+
20+
test('dev type increments dev version', () {
21+
expect(calculateNewVersion('1.2.3', 'dev'), '1.2.3-dev.0');
22+
expect(calculateNewVersion('1.2.3-dev.4', 'dev'), '1.2.3-dev.5');
23+
});
24+
25+
test('patch type increments patch version', () {
26+
expect(calculateNewVersion('1.2.3', 'patch'), '1.2.4');
27+
expect(calculateNewVersion('1.2.3-dev.4', 'patch'), '1.2.4');
28+
});
29+
30+
test('minor type increments minor version', () {
31+
expect(calculateNewVersion('1.2.3', 'minor'), '1.3.0');
32+
expect(calculateNewVersion('1.2.3-dev.4', 'minor'), '1.3.0');
33+
});
34+
35+
test('major type increments major version', () {
36+
expect(calculateNewVersion('1.2.3', 'major'), '2.0.0');
37+
expect(calculateNewVersion('1.2.3-dev.4', 'major'), '2.0.0');
38+
});
39+
});
40+
}

tool/test/validate_skills_test.dart

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ void main() {
1111
test('Validate DevTools Skills', () async {
1212
final Level oldLevel = Logger.root.level;
1313
Logger.root.level = Level.ALL;
14-
final StreamSubscription<LogRecord> subscription = Logger.root.onRecord.listen((record) {
15-
print(record.message);
16-
});
14+
final StreamSubscription<LogRecord> subscription = Logger.root.onRecord
15+
.listen((record) {
16+
print(record.message);
17+
});
1718

1819
try {
19-
// TODO(https://github.com/flutter/skills/issues/85): Update test
20+
// TODO(https://github.com/flutter/skills/issues/85): Update test
2021
// to use dart_skills_lint.yaml for config when available.
2122
final bool isValid = await validateSkills(
2223
skillDirPaths: ['../.agents/skills'],
@@ -26,7 +27,11 @@ void main() {
2627
'check-trailing-whitespace': AnalysisSeverity.error,
2728
},
2829
);
29-
expect(isValid, isTrue, reason: 'Skills validation failed. See above for details.');
30+
expect(
31+
isValid,
32+
isTrue,
33+
reason: 'Skills validation failed. See above for details.',
34+
);
3035
} finally {
3136
Logger.root.level = oldLevel;
3237
await subscription.cancel();

0 commit comments

Comments
 (0)