Json reader command 추가

This commit is contained in:
leedongmyung[desktop] 2023-11-25 19:43:10 +09:00
parent eaed1bc8d7
commit 7402d6a133
8 changed files with 125 additions and 25 deletions

View file

@ -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: <!property.git-count>
# ### Json value read
# - command: JsonValue
# id: json-value
# param:
# - set:
# from: gitHash
# to: <!property:old-git-rev>
# - set:
# from: version
# to: <!property:old-version>
### Json value read
- command: JsonReader
id: json-reader
param:
path: ./assets/data/app_data.json
pair:
- from: gitHash
to: <!property.old-git-rev>
- from: version
to: <!property.old-version>
### Version 쓰기
- command: CreateAppData
@ -62,8 +63,8 @@ commands:
scm: Git
name: OTO
relativeAssetPath: assets/data
returnVersion: "<!property.version>"
returnHash: "<!property.hash>"
return-version: "<!property.version>"
return-hash: "<!property.hash>"
### 실행가능한 파일로 빌드
- command: BuildDart

View file

@ -9,14 +9,13 @@ class CreateAppData extends Command {
@override
Future execute(DataCommand command) async {
Completer<bool> c = Completer<bool>();
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);
}
}

View file

@ -15,7 +15,6 @@ class BuildDart extends Command {
@override
Future execute(DataCommand command) async {
Completer<bool> c = Completer<bool>();
var data = DataBuildDart.fromJson(command.param);
var workspace = getWorkspace(data.workspace);

View file

@ -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));
}

View file

@ -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<String, dynamic> json = jsonDecode(content);
Map<String, dynamic> 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');
}
}
}

View file

@ -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<String, dynamic> json) =>
@ -349,3 +351,28 @@ class DataGitRev extends DataParam {
_$DataGitRevFromJson(json);
Map<String, dynamic> toJson() => _$DataGitRevToJson(this);
}
//GitRev
@JsonSerializable()
class DataJsonReader extends DataParam {
DataJsonReader();
late String path;
late List<DataPair> pair;
factory DataJsonReader.fromJson(Map<String, dynamic> json) =>
_$DataJsonReaderFromJson(json);
Map<String, dynamic> toJson() => _$DataJsonReaderToJson(this);
}
@JsonSerializable()
class DataPair {
late String from;
late String to;
DataPair();
factory DataPair.fromJson(Map<String, dynamic> json) =>
_$DataPairFromJson(json);
Map<String, dynamic> toJson() => _$DataPairToJson(this);
}

View file

@ -56,6 +56,7 @@ const _$CommandTypeEnumMap = {
CommandType.Git: 'Git',
CommandType.GitRev: 'GitRev',
CommandType.GitCount: 'GitCount',
CommandType.JsonReader: 'JsonReader',
};
DataParam _$DataParamFromJson(Map<String, dynamic> json) =>
@ -81,8 +82,8 @@ DataAppDataCreator _$DataAppDataCreatorFromJson(Map<String, dynamic> 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<String, dynamic> _$DataAppDataCreatorToJson(DataAppDataCreator instance) =>
@ -90,8 +91,8 @@ Map<String, dynamic> _$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<String, dynamic> _$DataGitRevToJson(DataGitRev instance) =>
'workspace': instance.workspace,
'result-value': instance.result_value,
};
DataJsonReader _$DataJsonReaderFromJson(Map<String, dynamic> json) =>
DataJsonReader()
..workspace = json['workspace'] as String?
..path = json['path'] as String
..pair = (json['pair'] as List<dynamic>)
.map((e) => DataPair.fromJson(e as Map<String, dynamic>))
.toList();
Map<String, dynamic> _$DataJsonReaderToJson(DataJsonReader instance) =>
<String, dynamic>{
'workspace': instance.workspace,
'path': instance.path,
'pair': instance.pair,
};
DataPair _$DataPairFromJson(Map<String, dynamic> json) => DataPair()
..from = json['from'] as String
..to = json['to'] as String;
Map<String, dynamic> _$DataPairToJson(DataPair instance) => <String, dynamic>{
'from': instance.from,
'to': instance.to,
};

View file

@ -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;