From eba78caa8a8310c0ad3de22a36032a5ed950ea02 Mon Sep 17 00:00:00 2001 From: Fernando Ferrara Date: Wed, 11 Jan 2023 00:06:02 -0300 Subject: [PATCH] Add update command to stacked_cli --- packages/stacked_cli/CHANGELOG.md | 4 ++++ packages/stacked_cli/bin/stacked.dart | 2 ++ .../src/commands/update/update_command.dart | 23 +++++++++++++++++++ .../lib/src/constants/command_constants.dart | 12 ++++++++++ .../lib/src/services/analytics_service.dart | 4 ++++ .../lib/src/services/process_service.dart | 8 +++++++ packages/stacked_cli/pubspec.yaml | 2 +- .../test/helpers/test_helpers.mocks.dart | 9 ++++++++ 8 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 packages/stacked_cli/lib/src/commands/update/update_command.dart diff --git a/packages/stacked_cli/CHANGELOG.md b/packages/stacked_cli/CHANGELOG.md index 02d3d218c..9bfdf82b8 100644 --- a/packages/stacked_cli/CHANGELOG.md +++ b/packages/stacked_cli/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.2 + +- Adds the new Update command + ## 1.1.1+1 - Updates cli link in readme diff --git a/packages/stacked_cli/bin/stacked.dart b/packages/stacked_cli/bin/stacked.dart index 8eb472804..00adb7f77 100644 --- a/packages/stacked_cli/bin/stacked.dart +++ b/packages/stacked_cli/bin/stacked.dart @@ -5,6 +5,7 @@ import 'package:stacked_cli/src/commands/compile/compile_command.dart'; import 'package:stacked_cli/src/commands/create/create_command.dart'; import 'package:stacked_cli/src/commands/delete/delete_command.dart'; import 'package:stacked_cli/src/commands/generate/generate_command.dart'; +import 'package:stacked_cli/src/commands/update/update_command.dart'; import 'package:stacked_cli/src/exceptions/invalid_stacked_structure_exception.dart'; import 'package:stacked_cli/src/locator.dart'; @@ -20,6 +21,7 @@ Future main(List arguments) async { ..addCommand(DeleteCommand()) ..addCommand(CompileCommand()) ..addCommand(GenerateCommand()) + ..addCommand(UpdateCommand()) ..run(arguments); } on InvalidStackedStructureException catch (e) { stdout.writeln(e.message); diff --git a/packages/stacked_cli/lib/src/commands/update/update_command.dart b/packages/stacked_cli/lib/src/commands/update/update_command.dart new file mode 100644 index 000000000..0cee4bf8a --- /dev/null +++ b/packages/stacked_cli/lib/src/commands/update/update_command.dart @@ -0,0 +1,23 @@ +import 'dart:async'; + +import 'package:args/command_runner.dart'; +import 'package:stacked_cli/src/locator.dart'; +import 'package:stacked_cli/src/services/analytics_service.dart'; +import 'package:stacked_cli/src/services/process_service.dart'; + +class UpdateCommand extends Command { + final _analyticsService = locator(); + final _processService = locator(); + + @override + String get description => '''Updates stacked_cli to latest version'''; + + @override + String get name => 'update'; + + @override + Future run() async { + await _processService.runPubGlobal(); + unawaited(_analyticsService.cliUpdated()); + } +} diff --git a/packages/stacked_cli/lib/src/constants/command_constants.dart b/packages/stacked_cli/lib/src/constants/command_constants.dart index 102ba07f5..14a68db36 100644 --- a/packages/stacked_cli/lib/src/constants/command_constants.dart +++ b/packages/stacked_cli/lib/src/constants/command_constants.dart @@ -1,5 +1,6 @@ /// Stores all the commands used throughout the app that +const String ksDart = 'dart'; const String ksFlutter = 'flutter'; const String ksCreate = 'create'; const String ksRun = 'run'; @@ -15,6 +16,9 @@ const String ksUseBuilder = 'use-builder'; const String ksLineLength = 'line-length'; const String ksExcludeDependency = 'exclude-dependency'; const String ksCurrentDirectory = '.'; +const String ksGlobal = 'global'; +const String ksActivate = 'activate'; +const String ksStackedCli = 'stacked_cli'; /// A list of strings that are used to run the pub run build runner build --delete-conflicting-outputs command. const List buildRunnerArguments = [ @@ -27,3 +31,11 @@ const List buildRunnerArguments = [ /// A list of strings that are used to run the pub get command. const List pubGetArguments = [ksPub, ksGet]; + +/// A list of strings that are used to run the pub global command. +const List pubGlobalArguments = [ + ksPub, + ksGlobal, + ksActivate, + ksStackedCli +]; diff --git a/packages/stacked_cli/lib/src/services/analytics_service.dart b/packages/stacked_cli/lib/src/services/analytics_service.dart index 1ab942e5c..299e197c0 100644 --- a/packages/stacked_cli/lib/src/services/analytics_service.dart +++ b/packages/stacked_cli/lib/src/services/analytics_service.dart @@ -56,6 +56,10 @@ class AnalyticsService { await _analytics.sendEvent('command', 'generate'); } + Future cliUpdated() async { + await _analytics.sendEvent('command', 'update'); + } + Future templatesCompiled() async { await _analytics.sendEvent('command', 'compile'); } diff --git a/packages/stacked_cli/lib/src/services/process_service.dart b/packages/stacked_cli/lib/src/services/process_service.dart index 2435339f4..8902a746c 100644 --- a/packages/stacked_cli/lib/src/services/process_service.dart +++ b/packages/stacked_cli/lib/src/services/process_service.dart @@ -73,6 +73,14 @@ class ProcessService { ); } + /// It runs the `dart pub global` command in the app's directory + Future runPubGlobal() async { + await _runProcessAndLogOutput( + programName: ksFlutter, + arguments: pubGlobalArguments, + ); + } + /// It runs a process and logs the output to the console /// /// Args: diff --git a/packages/stacked_cli/pubspec.yaml b/packages/stacked_cli/pubspec.yaml index a9d120cc2..1be8cb504 100644 --- a/packages/stacked_cli/pubspec.yaml +++ b/packages/stacked_cli/pubspec.yaml @@ -1,6 +1,6 @@ name: stacked_cli description: The official dev tools for the Stacked Framework -version: 1.1.1+1 +version: 1.1.2 homepage: https://stacked.filledstacks.com/docs/stacked-cli repository: https://github.com/FilledStacks/stacked/tree/master/packages/stacked_cli diff --git a/packages/stacked_cli/test/helpers/test_helpers.mocks.dart b/packages/stacked_cli/test/helpers/test_helpers.mocks.dart index 942615b31..cf245f63c 100644 --- a/packages/stacked_cli/test/helpers/test_helpers.mocks.dart +++ b/packages/stacked_cli/test/helpers/test_helpers.mocks.dart @@ -961,6 +961,15 @@ class MockProcessService extends _i1.Mock implements _i15.ProcessService { returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); @override + _i6.Future runPubGlobal() => (super.noSuchMethod( + Invocation.method( + #runPubGlobal, + [], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + @override void logSuccessStatus(int? exitCode) => super.noSuchMethod( Invocation.method( #logSuccessStatus,