Skip to content

Commit 27af484

Browse files
authored
feat: check for updates last and improve update prompt styling (VeryGoodOpenSource#207)
1 parent b2c219d commit 27af484

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

lib/src/command_runner.dart

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,28 +95,37 @@ class VeryGoodCommandRunner extends CommandRunner<int> {
9595

9696
@override
9797
Future<int?> runCommand(ArgResults topLevelResults) async {
98-
await _checkForUpdates();
98+
int? exitCode = ExitCode.unavailable.code;
9999
if (topLevelResults['version'] == true) {
100100
_logger.info('very_good version: $packageVersion');
101-
return ExitCode.success.code;
102-
}
103-
if (topLevelResults['analytics'] != null) {
101+
exitCode = ExitCode.success.code;
102+
} else if (topLevelResults['analytics'] != null) {
104103
final optIn = topLevelResults['analytics'] == 'true';
105104
_analytics.enabled = optIn;
106105
_logger.info('analytics ${_analytics.enabled ? 'enabled' : 'disabled'}.');
107-
return ExitCode.success.code;
106+
exitCode = ExitCode.success.code;
107+
} else {
108+
exitCode = await super.runCommand(topLevelResults);
108109
}
109-
return super.runCommand(topLevelResults);
110+
await _checkForUpdates();
111+
return exitCode;
110112
}
111113

112114
Future<void> _checkForUpdates() async {
113115
try {
114116
final latestVersion = await _pubUpdater.getLatestVersion(packageName);
115117
final isUpToDate = packageVersion == latestVersion;
116118
if (!isUpToDate) {
117-
_logger.info(
118-
'''${lightYellow.wrap('A new version of $packageName is available:')} ${lightCyan.wrap(packageVersion)} -> ${lightCyan.wrap(latestVersion)}''',
119-
);
119+
_logger
120+
..info('')
121+
..info('''
122+
+------------------------------------------------------------------------------------+
123+
| |
124+
| ${lightYellow.wrap('Update available!')} ${lightCyan.wrap(packageVersion)} \u2192 ${lightCyan.wrap(latestVersion)} |
125+
| ${lightYellow.wrap('Changelog:')} ${lightCyan.wrap('https://github.com/verygoodopensource/very_good_cli/releases/tag/v$latestVersion')} |
126+
| |
127+
+------------------------------------------------------------------------------------+
128+
''');
120129
final response = _logger.prompt('Would you like to update? (y/n) ');
121130
if (response.isYes()) {
122131
final done = _logger.progress('Updating to $latestVersion');

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ dependencies:
1212
mason: ^0.0.1-dev.51
1313
meta: ^1.3.0
1414
path: ^1.8.0
15-
pub_updater: ^0.2.0
15+
pub_updater: ^0.2.1
1616
universal_io: ^2.0.4
1717
usage: ^4.0.2
1818
very_good_analysis: ^2.3.0

test/src/command_runner_test.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,14 @@ void main() {
108108
expect(result, equals(ExitCode.success.code));
109109
verify(
110110
() => logger.info(
111-
'''${lightYellow.wrap('A new version of $packageName is available:')} ${lightCyan.wrap(packageVersion)} -> ${lightCyan.wrap(latestVersion)}''',
111+
'''
112+
+------------------------------------------------------------------------------------+
113+
| |
114+
| ${lightYellow.wrap('Update available!')} ${lightCyan.wrap(packageVersion)} \u2192 ${lightCyan.wrap(latestVersion)} |
115+
| ${lightYellow.wrap('Changelog:')} ${lightCyan.wrap('https://github.com/verygoodopensource/very_good_cli/releases/tag/v$latestVersion')} |
116+
| |
117+
+------------------------------------------------------------------------------------+
118+
''',
112119
),
113120
).called(1);
114121
verify(

0 commit comments

Comments
 (0)