From 7402d6a13317a97d0aa6159b5e9457580f01d062 Mon Sep 17 00:00:00 2001 From: "leedongmyung[desktop]" Date: Sat, 25 Nov 2023 19:43:10 +0900 Subject: [PATCH] =?UTF-8?q?Json=20reader=20command=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/pipeline-test.yaml | 25 ++++++------ lib/oto/commands/build/app_data_creator.dart | 5 +-- lib/oto/commands/build/build_dart.dart | 1 - lib/oto/commands/command.dart | 12 +++++- lib/oto/commands/util/json.dart | 41 ++++++++++++++++++++ lib/oto/data/command_data.dart | 31 ++++++++++++++- lib/oto/data/command_data.g.dart | 33 ++++++++++++++-- lib/oto/pipeline/pipeline.dart | 2 +- 8 files changed, 125 insertions(+), 25 deletions(-) create mode 100644 lib/oto/commands/util/json.dart diff --git a/assets/pipeline-test.yaml b/assets/pipeline-test.yaml index e2129f9..5bc72d5 100644 --- a/assets/pipeline-test.yaml +++ b/assets/pipeline-test.yaml @@ -8,6 +8,7 @@ pipeline: - exe: git - exe: git-rev - exe: git-count + - exe: json-reader #동기식 실행, 해당 수행이 끝나야만 다음 스텝실행, command일경우 해당 id 기입 - async: appData @@ -44,16 +45,16 @@ commands: param: result-value: -# ### Json value read -# - command: JsonValue -# id: json-value -# param: -# - set: -# from: gitHash -# to: -# - set: -# from: version -# to: +### Json value read +- command: JsonReader + id: json-reader + param: + path: ./assets/data/app_data.json + pair: + - from: gitHash + to: + - from: version + to: ### Version 쓰기 - command: CreateAppData @@ -62,8 +63,8 @@ commands: scm: Git name: OTO relativeAssetPath: assets/data - returnVersion: "" - returnHash: "" + return-version: "" + return-hash: "" ### 실행가능한 파일로 빌드 - command: BuildDart diff --git a/lib/oto/commands/build/app_data_creator.dart b/lib/oto/commands/build/app_data_creator.dart index 356d4b9..8a35a39 100644 --- a/lib/oto/commands/build/app_data_creator.dart +++ b/lib/oto/commands/build/app_data_creator.dart @@ -9,14 +9,13 @@ class CreateAppData extends Command { @override Future execute(DataCommand command) async { - Completer c = Completer(); var data = DataAppDataCreator.fromJson(command.param); var workspace = getWorkspace(data.workspace); var appData = await AppDataManager.to .create(data.scm, workspace, data.relativeAssetPath, data.name); - Command.setReturnValue(data.returnVersion, appData.version); - Command.setReturnValue(data.returnHash, appData.gitHash.substring(0, 7)); + setReturn(data.return_version, appData.version); + setReturn(data.return_hash, appData.gitHash.substring(0, 7)); return complete(0, command); } } diff --git a/lib/oto/commands/build/build_dart.dart b/lib/oto/commands/build/build_dart.dart index 86b6c12..9371f8c 100644 --- a/lib/oto/commands/build/build_dart.dart +++ b/lib/oto/commands/build/build_dart.dart @@ -15,7 +15,6 @@ class BuildDart extends Command { @override Future execute(DataCommand command) async { - Completer c = Completer(); var data = DataBuildDart.fromJson(command.param); var workspace = getWorkspace(data.workspace); diff --git a/lib/oto/commands/command.dart b/lib/oto/commands/command.dart index 2d5261e..bab23b0 100644 --- a/lib/oto/commands/command.dart +++ b/lib/oto/commands/command.dart @@ -11,6 +11,7 @@ import 'package:oto_cli/oto/commands/build/build_dot_net.dart'; import 'package:oto_cli/oto/commands/build/build_flutter.dart'; import 'package:oto_cli/oto/commands/build/build_ios.dart'; import 'package:oto_cli/oto/commands/git/git.dart'; +import 'package:oto_cli/oto/commands/util/json.dart'; import 'package:oto_cli/oto/data/command_data.dart'; import 'package:oto_cli/oto/data/jenkins_data.dart'; import 'package:oto_cli/oto/commands/file/delete.dart'; @@ -46,7 +47,8 @@ enum CommandType { Shell, Git, GitRev, - GitCount + GitCount, + JsonReader } abstract class Command { @@ -73,6 +75,7 @@ abstract class Command { CommandType.Git: Git(), CommandType.GitRev: GitRev(), CommandType.GitCount: GitCount(), + CommandType.JsonReader: JsonReader() }; factory Command.byType(CommandType type) { @@ -91,6 +94,7 @@ abstract class Command { if (tag.startsWith('property')) { var key = tag.replaceFirst('property.', ''); Application.instance.property[key] = value; + print('=========> set return - $key : $value'); } } @@ -139,7 +143,11 @@ abstract class Command { } String getWorkspace(String? dataWorkspace) { - var path = getPathNormal(dataWorkspace ?? jenkinsData!.workspace); + return getAbs(dataWorkspace ?? jenkinsData!.workspace); + } + + String getAbs(String path) { + path = getPathNormal(path); if (path == '.' || path.startsWith('./')) { path = path.replaceFirst('.', getPathNormal(pathlib.current)); } diff --git a/lib/oto/commands/util/json.dart b/lib/oto/commands/util/json.dart new file mode 100644 index 0000000..c3b14c1 --- /dev/null +++ b/lib/oto/commands/util/json.dart @@ -0,0 +1,41 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:oto_cli/oto/commands/command.dart'; +import 'package:oto_cli/oto/data/command_data.dart'; + +class JsonReader extends Command { + @override + Future execute(DataCommand command) async { + var data = DataJsonReader.fromJson(command.param); + var path = getAbs(data.path); + var file = File(path); + if (file.existsSync()) { + var content = await file.readAsString(); + try { + Map json = jsonDecode(content); + Map temp = json; + for (var item in data.pair) { + var keys = item.from.split('.'); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (temp.containsKey(key)) { + if (i == keys.length - 1) { + setReturn(item.to, temp[keys[i]].toString()); + break; + } else { + temp = temp[keys[i]]; + } + } else { + throw Exception('Not exist key: "$key" in $item'); + } + } + } + } on Exception catch (e) { + throw Exception('Json parsing error: $e'); + } + } else { + throw Exception('Json File not exist: $path'); + } + } +} diff --git a/lib/oto/data/command_data.dart b/lib/oto/data/command_data.dart index 266f716..7242242 100644 --- a/lib/oto/data/command_data.dart +++ b/lib/oto/data/command_data.dart @@ -65,8 +65,10 @@ class DataAppDataCreator extends DataParam { late SCMType scm; late String relativeAssetPath; - late String returnVersion; - late String returnHash; + @JsonKey(name: 'return-version') + late String return_version; + @JsonKey(name: 'return-hash') + late String return_hash; late String name; factory DataAppDataCreator.fromJson(Map json) => @@ -349,3 +351,28 @@ class DataGitRev extends DataParam { _$DataGitRevFromJson(json); Map toJson() => _$DataGitRevToJson(this); } + +//GitRev +@JsonSerializable() +class DataJsonReader extends DataParam { + DataJsonReader(); + + late String path; + late List pair; + + factory DataJsonReader.fromJson(Map json) => + _$DataJsonReaderFromJson(json); + Map toJson() => _$DataJsonReaderToJson(this); +} + +@JsonSerializable() +class DataPair { + late String from; + late String to; + + DataPair(); + + factory DataPair.fromJson(Map json) => + _$DataPairFromJson(json); + Map toJson() => _$DataPairToJson(this); +} diff --git a/lib/oto/data/command_data.g.dart b/lib/oto/data/command_data.g.dart index 9bdfede..b62bf70 100644 --- a/lib/oto/data/command_data.g.dart +++ b/lib/oto/data/command_data.g.dart @@ -56,6 +56,7 @@ const _$CommandTypeEnumMap = { CommandType.Git: 'Git', CommandType.GitRev: 'GitRev', CommandType.GitCount: 'GitCount', + CommandType.JsonReader: 'JsonReader', }; DataParam _$DataParamFromJson(Map json) => @@ -81,8 +82,8 @@ DataAppDataCreator _$DataAppDataCreatorFromJson(Map json) => ..workspace = json['workspace'] as String? ..scm = $enumDecode(_$SCMTypeEnumMap, json['scm']) ..relativeAssetPath = json['relativeAssetPath'] as String - ..returnVersion = json['returnVersion'] as String - ..returnHash = json['returnHash'] as String + ..return_version = json['return-version'] as String + ..return_hash = json['return-hash'] as String ..name = json['name'] as String; Map _$DataAppDataCreatorToJson(DataAppDataCreator instance) => @@ -90,8 +91,8 @@ Map _$DataAppDataCreatorToJson(DataAppDataCreator instance) => 'workspace': instance.workspace, 'scm': _$SCMTypeEnumMap[instance.scm]!, 'relativeAssetPath': instance.relativeAssetPath, - 'returnVersion': instance.returnVersion, - 'returnHash': instance.returnHash, + 'return-version': instance.return_version, + 'return-hash': instance.return_hash, 'name': instance.name, }; @@ -387,3 +388,27 @@ Map _$DataGitRevToJson(DataGitRev instance) => 'workspace': instance.workspace, 'result-value': instance.result_value, }; + +DataJsonReader _$DataJsonReaderFromJson(Map json) => + DataJsonReader() + ..workspace = json['workspace'] as String? + ..path = json['path'] as String + ..pair = (json['pair'] as List) + .map((e) => DataPair.fromJson(e as Map)) + .toList(); + +Map _$DataJsonReaderToJson(DataJsonReader instance) => + { + 'workspace': instance.workspace, + 'path': instance.path, + 'pair': instance.pair, + }; + +DataPair _$DataPairFromJson(Map json) => DataPair() + ..from = json['from'] as String + ..to = json['to'] as String; + +Map _$DataPairToJson(DataPair instance) => { + 'from': instance.from, + 'to': instance.to, + }; diff --git a/lib/oto/pipeline/pipeline.dart b/lib/oto/pipeline/pipeline.dart index 9e717eb..5543253 100644 --- a/lib/oto/pipeline/pipeline.dart +++ b/lib/oto/pipeline/pipeline.dart @@ -72,7 +72,7 @@ class PipelineExe extends PipelineExecutor { var now = DateTime.now(); var time = '${now.minute.toString().padLeft(2)}:${now.second.toString().padLeft(2)}:${now.millisecond.toString().padLeft(2)}'; - print('==================> [$time] Execute: $targetCommandID'); + // print('==================> [$time] Execute: $targetCommandID'); var data = await commandData; await Command.byType(data.command).execute(data); return simpleFuture;