| 1 | import 'dart:convert'; |
| 2 | import 'dart:io'; |
| 3 | import 'generate_new_secrets.dart'; |
| 4 | import 'import_secrets_config.dart'; |
| 5 | import 'utils/utils.dart'; |
| 6 | |
| 7 | const configPath = 'tool/.secrets-config.json'; |
| 8 | |
| 9 | Future<void> main(List<String> args) async { |
| 10 | await updateSecretsConfig(args); |
| 11 | await importSecretsConfig(); |
| 12 | } |
| 13 | |
| 14 | Future<void> updateSecretsConfig(List<String> args) async { |
| 15 | final extraInfo = args.fold(<String, dynamic>{}, (Map<String, dynamic> acc, String arg) { |
| 16 | final parts = arg.split('='); |
| 17 | final key = normalizeKeyName(parts[0]); |
| 18 | acc[key] = parts.length > 1 ? parts[1] : 1; |
| 19 | return acc; |
| 20 | }); |
| 21 | |
| 22 | final configFile = File(configPath); |
| 23 | final secrets = <String, dynamic>{}; |
| 24 | |
| 25 | secrets.addAll(extraInfo); |
| 26 | secrets.removeWhere((key, dynamic value) { |
| 27 | if (key.contains('--')) { |
| 28 | return true; |
| 29 | } |
| 30 | |
| 31 | return false; |
| 32 | }); |
| 33 | |
| 34 | final fileConfig = json.decode(configFile.readAsStringSync()) as Map<String, dynamic>; |
| 35 | fileConfig.forEach((key, dynamic value) { |
| 36 | if (secrets[key] == null) { |
| 37 | secrets[key] = value; |
| 38 | } |
| 39 | }); |
| 40 | |
| 41 | final secretsJson = JsonEncoder.withIndent(' ').convert(secrets); |
| 42 | await configFile.writeAsString(secretsJson); |
| 43 | await generateSecrets(args); |
| 44 | } |