Skip to content

Commit 8ad5823

Browse files
author
serverpod_cloud
committed
refactor: 1012263a9ddf60bc84e821d42da3638fb12ddac2
1 parent c3c652e commit 8ad5823

36 files changed

Lines changed: 70 additions & 5426 deletions

serverpod_cloud_cli/bin/serverpod_cloud_cli.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'dart:async';
22
import 'dart:io';
33

4-
import 'package:args/command_runner.dart';
54
import 'package:cli_tools/cli_tools.dart';
65
import 'package:serverpod_cloud_cli/command_logger/command_logger.dart';
76
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command_runner.dart';

serverpod_cloud_cli/lib/command_runner/cloud_cli_command.dart

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,29 @@
1-
import 'dart:io';
2-
1+
import 'package:args/args.dart' show ArgResults;
32
import 'package:args/command_runner.dart';
43
import 'package:cli_tools/cli_tools.dart';
54
import 'package:serverpod_cloud_cli/command_logger/command_logger.dart';
65
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command_runner.dart';
76
import 'package:serverpod_cloud_cli/shared/exceptions/cloud_cli_usage_exception.dart';
8-
import 'package:serverpod_cloud_cli/util/capitalize.dart';
97
import 'package:serverpod_cloud_cli/util/cli_authentication_key_manager.dart';
10-
import 'package:serverpod_cloud_cli/util/config/configuration.dart';
11-
import 'package:serverpod_cloud_cli/util/scloud_config/scloud_config.dart';
8+
import 'package:serverpod_cloud_cli/util/scloud_config/scloud_config_broker.dart'
9+
show scloudCliConfigBroker;
1210

1311
import 'exit_exceptions.dart';
1412

15-
abstract class CloudCliCommand<T extends OptionDefinition>
16-
extends BetterCommand {
13+
abstract class CloudCliCommand<O extends OptionDefinition>
14+
extends BetterCommand<O, void> {
1715
final CommandLogger logger;
1816

19-
/// The option definitions for this command.
20-
final List<T> options;
21-
2217
/// Whether the command requires the user to be logged in.
2318
/// The default is true, subclasses can override to false.
2419
final bool requireLogin = true;
2520

2621
CloudCliCommand({
2722
required this.logger,
28-
this.options = const [],
23+
super.options = const [],
2924
}) : super(
30-
passOutput: MessageOutput(
31-
logUsage: logger.info,
32-
),
3325
wrapTextColumn: logger.wrapTextColumn,
34-
) {
35-
options.prepareForParsing(argParser);
36-
}
26+
);
3727

3828
/// Gets the top parent command for this command.
3929
Command get _topCommand {
@@ -62,25 +52,6 @@ abstract class CloudCliCommand<T extends OptionDefinition>
6252
/// Runs this command. Subclasses should instead override [runWithConfig].
6353
@override
6454
Future<void> run() async {
65-
final config = Configuration.resolve(
66-
options: options,
67-
argResults: argResults,
68-
env: Platform.environment,
69-
configBroker: scloudCliConfigBroker(
70-
globalConfig: globalConfiguration,
71-
logger: logger,
72-
),
73-
);
74-
75-
if (config.errors.isNotEmpty) {
76-
final buffer = StringBuffer();
77-
final errors = config.errors.map(
78-
(final e) => '${e.capitalize()}.',
79-
);
80-
buffer.writeAll(errors, '\n');
81-
usageException(buffer.toString());
82-
}
83-
8455
final apiCloudClient = runner.serviceProvider.cloudApiClient;
8556

8657
if (requireLogin &&
@@ -95,7 +66,7 @@ abstract class CloudCliCommand<T extends OptionDefinition>
9566
}
9667

9768
try {
98-
await runWithConfig(config);
69+
await super.run();
9970
} on CloudCliUsageException catch (e, stackTrace) {
10071
// TODO: Don't catch CloudCliUsageException,
10172
// it's a UsageException and is handled by the caller.
@@ -104,9 +75,23 @@ abstract class CloudCliCommand<T extends OptionDefinition>
10475
}
10576
}
10677

78+
@override
79+
Configuration<O> resolveConfiguration(final ArgResults? argResults) {
80+
return Configuration.resolve(
81+
options: options,
82+
argResults: argResults,
83+
env: envVariables,
84+
configBroker: scloudCliConfigBroker(
85+
globalConfig: globalConfiguration,
86+
logger: logger,
87+
),
88+
);
89+
}
90+
10791
/// Runs this command with prepared configuration (options).
10892
/// Subclasses should override this method.
109-
Future<void> runWithConfig(final Configuration<T> commandConfig) async {
93+
@override
94+
Future<void> runWithConfig(final Configuration<O> commandConfig) async {
11095
throw UnimplementedError(
11196
'CLI command $name has not implemented runWithConfig.');
11297
}

serverpod_cloud_cli/lib/command_runner/cloud_cli_command_runner.dart

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:args/args.dart';
44
import 'package:cli_tools/cli_tools.dart';
55
import 'package:path/path.dart' as p;
66
import 'package:pub_semver/pub_semver.dart';
7+
78
import 'package:serverpod_cloud_cli/command_logger/command_logger.dart';
89
import 'package:serverpod_cloud_cli/command_runner/commands/custom_domain_command.dart';
910
import 'package:serverpod_cloud_cli/command_runner/commands/db_command.dart';
@@ -21,15 +22,13 @@ import 'package:serverpod_cloud_cli/command_runner/helpers/cloud_cli_service_pro
2122
import 'package:serverpod_cloud_cli/command_runner/helpers/cli_version_checker.dart';
2223
import 'package:serverpod_cloud_cli/constants.dart';
2324
import 'package:serverpod_cloud_cli/persistent_storage/resource_manager.dart';
24-
import 'package:serverpod_cloud_cli/util/capitalize.dart';
2525
import 'package:serverpod_cloud_cli/util/common.dart';
26-
import 'package:serverpod_cloud_cli/util/config/config.dart';
2726
import 'package:serverpod_cloud_cli/util/pubspec_validator.dart';
2827
import 'package:serverpod_cloud_cli/util/scloud_config/scloud_config.dart';
2928
import 'package:serverpod_cloud_cli/util/scloud_version.dart';
3029

3130
/// Represents the Serverpod Cloud CLI main command, its global options, and subcommands.
32-
class CloudCliCommandRunner extends BetterCommandRunner {
31+
class CloudCliCommandRunner extends BetterCommandRunner<GlobalOption, void> {
3332
final Version version;
3433
final CommandLogger logger;
3534
final CloudCliServiceProvider serviceProvider;
@@ -39,7 +38,7 @@ class CloudCliCommandRunner extends BetterCommandRunner {
3938
GlobalConfiguration? _globalConfiguration;
4039

4140
/// The curremt global configuration for the Serverpod Cloud CLI.
42-
/// (Since this object is re-entrant, the global config is regenerated each call to [runCommand].)
41+
@override
4342
GlobalConfiguration get globalConfiguration {
4443
final globalConfig = _globalConfiguration;
4544
if (globalConfig == null) {
@@ -48,6 +47,16 @@ class CloudCliCommandRunner extends BetterCommandRunner {
4847
return globalConfig;
4948
}
5049

50+
/// Sets the curremt global configuration for the Serverpod Cloud CLI.
51+
/// (Since this object is re-entrant, the global config is regenerated
52+
/// each call to [run].)
53+
@override
54+
set globalConfiguration(final Configuration<GlobalOption> configuration) {
55+
_globalConfiguration = GlobalConfiguration.from(
56+
configuration: configuration,
57+
);
58+
}
59+
5160
CloudCliCommandRunner._({
5261
required this.logger,
5362
required this.version,
@@ -57,9 +66,10 @@ class CloudCliCommandRunner extends BetterCommandRunner {
5766
super(
5867
'scloud',
5968
'Manage your Serverpod Cloud projects',
69+
globalOptions: GlobalOption.values,
6070
wrapTextColumn: logger.wrapTextColumn,
6171
messageOutput: MessageOutput(
62-
logUsage: logger.info,
72+
usageLogger: logger.info,
6373
),
6474
);
6575

@@ -83,9 +93,6 @@ class CloudCliCommandRunner extends BetterCommandRunner {
8393
),
8494
);
8595

86-
// Add global options
87-
GlobalOption.values.prepareForParsing(runner.argParser);
88-
8996
// Add commands (which may in turn have their own options and subcommands)
9097
runner.addCommands([
9198
runner._versionCommand,
@@ -106,22 +113,6 @@ class CloudCliCommandRunner extends BetterCommandRunner {
106113

107114
@override
108115
Future<void> runCommand(final ArgResults topLevelResults) async {
109-
_globalConfiguration = GlobalConfiguration(
110-
argResults: topLevelResults,
111-
env: Platform.environment,
112-
);
113-
114-
if (globalConfiguration.errors.isNotEmpty) {
115-
final buffer = StringBuffer();
116-
final errors = globalConfiguration.errors.map(
117-
(final e) => '${e.capitalize()}.',
118-
);
119-
buffer.writeAll(errors, '\n');
120-
usageException(buffer.toString());
121-
}
122-
123-
logger.configuration = globalConfiguration;
124-
125116
serviceProvider.initialize(
126117
globalConfiguration: globalConfiguration,
127118
logger: logger,
@@ -379,8 +370,12 @@ File? _projectConfigFileFinder(final Configuration cfg) {
379370
}
380371

381372
/// The current global configuration values for the Serverpod Cloud CLI.
382-
class GlobalConfiguration extends Configuration {
383-
GlobalConfiguration({
373+
class GlobalConfiguration extends Configuration<GlobalOption> {
374+
GlobalConfiguration.from({
375+
required super.configuration,
376+
}) : super.from();
377+
378+
GlobalConfiguration.resolve({
384379
super.argResults,
385380
super.args,
386381
super.env,

serverpod_cloud_cli/lib/command_runner/commands/auth_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import 'dart:async';
22

3+
import 'package:cli_tools/config.dart';
34
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command.dart';
45
import 'package:serverpod_cloud_cli/command_runner/exit_exceptions.dart';
56
import 'package:serverpod_cloud_cli/persistent_storage/models/serverpod_cloud_data.dart';
67
import 'package:serverpod_cloud_cli/persistent_storage/resource_manager.dart';
78
import 'package:serverpod_cloud_cli/util/browser_launcher.dart';
8-
import 'package:serverpod_cloud_cli/util/config/config.dart';
99
import 'package:serverpod_cloud_cli/util/listener_server.dart';
1010

1111
import 'categories.dart';

serverpod_cloud_cli/lib/command_runner/commands/custom_domain_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import 'package:basic_utils/basic_utils.dart';
2+
import 'package:cli_tools/config.dart';
23
import 'package:serverpod_cloud_cli/command_logger/command_logger.dart';
34
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command.dart';
45
import 'package:serverpod_cloud_cli/command_runner/exit_exceptions.dart';
56
import 'package:serverpod_cloud_cli/command_runner/helpers/command_options.dart';
67
import 'package:serverpod_cloud_cli/shared/helpers/common_exceptions_handler.dart';
7-
import 'package:serverpod_cloud_cli/util/config/config.dart';
88
import 'package:serverpod_cloud_cli/util/printers/table_printer.dart';
99
import 'package:ground_control_client/ground_control_client.dart';
1010

serverpod_cloud_cli/lib/command_runner/commands/db_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import 'package:cli_tools/config.dart';
12
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command.dart';
23
import 'package:serverpod_cloud_cli/command_runner/exit_exceptions.dart';
34
import 'package:serverpod_cloud_cli/command_runner/helpers/command_options.dart';
45
import 'package:serverpod_cloud_cli/shared/helpers/common_exceptions_handler.dart';
5-
import 'package:serverpod_cloud_cli/util/config/config.dart';
66

77
import 'categories.dart';
88

serverpod_cloud_cli/lib/command_runner/commands/deploy_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import 'package:cli_tools/config.dart';
12
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command.dart';
23
import 'package:serverpod_cloud_cli/command_runner/helpers/command_options.dart';
34
import 'package:serverpod_cloud_cli/commands/deploy/deploy.dart';
4-
import 'package:serverpod_cloud_cli/util/config/config.dart';
55

66
import 'categories.dart';
77

serverpod_cloud_cli/lib/command_runner/commands/env_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import 'package:cli_tools/config.dart';
12
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command.dart';
23
import 'package:serverpod_cloud_cli/command_runner/exit_exceptions.dart';
34
import 'package:serverpod_cloud_cli/command_runner/helpers/command_options.dart';
45
import 'package:serverpod_cloud_cli/shared/helpers/common_exceptions_handler.dart';
5-
import 'package:serverpod_cloud_cli/util/config/config.dart';
66
import 'package:serverpod_cloud_cli/util/printers/table_printer.dart';
77
import 'package:ground_control_client/ground_control_client.dart';
88

serverpod_cloud_cli/lib/command_runner/commands/launch_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import 'package:cli_tools/config.dart';
12
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command.dart';
23
import 'package:serverpod_cloud_cli/command_runner/commands/categories.dart';
34
import 'package:serverpod_cloud_cli/command_runner/helpers/command_options.dart';
45
import 'package:serverpod_cloud_cli/commands/launch/launch.dart';
5-
import 'package:serverpod_cloud_cli/util/config/config.dart';
66

77
enum LaunchOption<V> implements OptionDefinition<V> {
88
projectId(ProjectIdOption.nonMandatory()),

serverpod_cloud_cli/lib/command_runner/commands/log_command.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
import 'package:cli_tools/config.dart';
12
import 'package:serverpod_cloud_cli/command_runner/cloud_cli_command.dart';
23
import 'package:serverpod_cloud_cli/command_runner/exit_exceptions.dart';
34
import 'package:serverpod_cloud_cli/command_runner/helpers/command_options.dart';
45
import 'package:serverpod_cloud_cli/shared/helpers/common_exceptions_handler.dart';
56
import 'package:serverpod_cloud_cli/commands/logs/logs.dart';
67
import 'package:serverpod_cloud_cli/shared/exceptions/cloud_cli_usage_exception.dart';
7-
import 'package:serverpod_cloud_cli/util/config/config.dart';
88

99
import 'categories.dart';
1010

0 commit comments

Comments
 (0)