From 4493c4d97bf2f05381092625b00b7049f7c80d76 Mon Sep 17 00:00:00 2001 From: "build@lguplus.co.kr" Date: Fri, 8 Dec 2023 19:14:33 +0900 Subject: [PATCH] pipeline if update --- lib/oto/application.dart | 13 ++------ lib/oto/data/pipeline_data.dart | 5 +++ lib/oto/data/pipeline_data.g.dart | 10 +++++- lib/oto/pipeline/pipeline_condition.dart | 42 +++++++++++++++--------- slack_test.yaml | 9 +++-- 5 files changed, 49 insertions(+), 30 deletions(-) diff --git a/lib/oto/application.dart b/lib/oto/application.dart index b255209..89b15e8 100644 --- a/lib/oto/application.dart +++ b/lib/oto/application.dart @@ -51,15 +51,8 @@ class Application { print(composer.buildYaml); property = build.property; - - if (build.pipeline == null) { - //이후 pipeline 안정이후, command로만 빌드는 삭제, pipeline 필수로 넣도록 구성 - for (var command in build.commands) { - await printBuildStep('Phase Start: ${command.name}', Color.green); - await Command.byType(command.command).execute(command); - } - } else { - //set command in dic, 중복 커맨드 id 필터 + + //set command in dic, 중복 커맨드 id 필터 for (var command in build.commands) { if (dataCommandMap.containsKey(command.id)) { var ex = ExceptionData(); @@ -84,7 +77,7 @@ class Application { //start build await pipeline.execute(); - } + } on Exception catch (e, stacktace) { await CLI.printString(e.toString(), color: Color.redStrong); await CLI.printString(stacktace.toString(), color: Color.yellowStrong); diff --git a/lib/oto/data/pipeline_data.dart b/lib/oto/data/pipeline_data.dart index 460b565..e6761fc 100644 --- a/lib/oto/data/pipeline_data.dart +++ b/lib/oto/data/pipeline_data.dart @@ -36,6 +36,8 @@ class DataCondition implements DataValidator { late String? condition_version; @JsonKey(name: 'condition-bool') late String? condition_bool; + @JsonKey(name: 'condition-object') + late dynamic condition_object; DataCondition(); @@ -57,6 +59,9 @@ class DataCondition implements DataValidator { } else if (condition_bool != null) { condition = condition_bool!; type = 'bool'; + } else if (condition_object != null) { + condition = condition_object; + type = 'object'; } else { result.message = 'Syntax requires a condition.'; result.enable = false; diff --git a/lib/oto/data/pipeline_data.g.dart b/lib/oto/data/pipeline_data.g.dart index 9bffb92..1c7a8c2 100644 --- a/lib/oto/data/pipeline_data.g.dart +++ b/lib/oto/data/pipeline_data.g.dart @@ -24,7 +24,8 @@ DataCondition _$DataConditionFromJson(Map json) => ..condition_float = json['condition-float'] as String? ..condition_string = json['condition-string'] as String? ..condition_version = json['condition-version'] as String? - ..condition_bool = json['condition-bool'] as String?; + ..condition_bool = json['condition-bool'] as String? + ..condition_object = json['condition-object']; Map _$DataConditionToJson(DataCondition instance) => { @@ -35,6 +36,7 @@ Map _$DataConditionToJson(DataCondition instance) => 'condition-string': instance.condition_string, 'condition-version': instance.condition_version, 'condition-bool': instance.condition_bool, + 'condition-object': instance.condition_object, }; DataIf _$DataIfFromJson(Map json) => DataIf() @@ -45,6 +47,7 @@ DataIf _$DataIfFromJson(Map json) => DataIf() ..condition_string = json['condition-string'] as String? ..condition_version = json['condition-version'] as String? ..condition_bool = json['condition-bool'] as String? + ..condition_object = json['condition-object'] ..on_true = json['on-true'] as List? ..on_false = json['on-false'] as List?; @@ -56,6 +59,7 @@ Map _$DataIfToJson(DataIf instance) => { 'condition-string': instance.condition_string, 'condition-version': instance.condition_version, 'condition-bool': instance.condition_bool, + 'condition-object': instance.condition_object, 'on-true': instance.on_true, 'on-false': instance.on_false, }; @@ -68,6 +72,7 @@ DataWhile _$DataWhileFromJson(Map json) => DataWhile() ..condition_string = json['condition-string'] as String? ..condition_version = json['condition-version'] as String? ..condition_bool = json['condition-bool'] as String? + ..condition_object = json['condition-object'] ..on_do = json['on-do'] as List?; Map _$DataWhileToJson(DataWhile instance) => { @@ -78,6 +83,7 @@ Map _$DataWhileToJson(DataWhile instance) => { 'condition-string': instance.condition_string, 'condition-version': instance.condition_version, 'condition-bool': instance.condition_bool, + 'condition-object': instance.condition_object, 'on-do': instance.on_do, }; @@ -89,6 +95,7 @@ DataSwitch _$DataSwitchFromJson(Map json) => DataSwitch() ..condition_string = json['condition-string'] as String? ..condition_version = json['condition-version'] as String? ..condition_bool = json['condition-bool'] as String? + ..condition_object = json['condition-object'] ..cases = (json['cases'] as List) .map((e) => DataSwitchValue.fromJson(e as Map)) .toList(); @@ -102,6 +109,7 @@ Map _$DataSwitchToJson(DataSwitch instance) => 'condition-string': instance.condition_string, 'condition-version': instance.condition_version, 'condition-bool': instance.condition_bool, + 'condition-object': instance.condition_object, 'cases': instance.cases, }; diff --git a/lib/oto/pipeline/pipeline_condition.dart b/lib/oto/pipeline/pipeline_condition.dart index 89978b3..e6ab75e 100644 --- a/lib/oto/pipeline/pipeline_condition.dart +++ b/lib/oto/pipeline/pipeline_condition.dart @@ -1,3 +1,5 @@ +// ignore_for_file: unnecessary_cast, unnecessary_null_comparison + import 'dart:io'; import 'package:dart_framework/core/app_data_manager.dart'; @@ -10,9 +12,9 @@ import 'package:oto_cli/oto/pipeline/pipeline_exe.dart'; abstract class PipelineCondition extends PipelineExecutor { late DataCondition data; - Map + Map conditions = {}; - Map types = {}; + Map typeCaster = {}; @override PipelineValidateResult initialize(Map set) { @@ -24,16 +26,13 @@ abstract class PipelineCondition extends PipelineExecutor { ' == ': (v0, v1, caster) => caster(v0) == caster(v1), ' != ': (v0, v1, caster) => caster(v0) != caster(v1), }; - types = { - 'int': (value) => value == 'null' ? null : int.parse(value) as int?, - 'float': (value) => - value == 'null' ? null : double.parse(value) as double?, - 'string': (value) => value == 'null' ? null : value, - 'bool': (value) => - value == 'null' ? null : (value.toLowerCase() == 'true') as bool?, - 'version': (value) => value == 'null' - ? null - : AppDataManager.to.versionToNumber(value) as double? + typeCaster = { + 'int': (value) => (value == 'null' || value == null) ? null : int.parse(value) as int?, + 'float': (value) => (value == 'null' || value == null) ? null : double.parse(value) as double?, + 'string': (value) => (value == 'null' || value == null) ? null : value, + 'bool': (value) => (value == 'null' || value == null) ? null : (value.toLowerCase() == 'true') as bool?, + 'version': (value) => (value == 'null' || value == null) ? null : AppDataManager.to.versionToNumber(value) as double?, + 'object': (value) => (value == 'null' || value == null) ? null : value, }; return PipelineValidateResult(); } @@ -52,10 +51,21 @@ abstract class PipelineCondition extends PipelineExecutor { for (var item in conditions.entries) { if (condition.contains(item.key)) { var list = condition.split(item.key); - var value0 = Command.replaceTagValue(list[0]); - var value1 = Command.replaceTagValue(list[1]); - result.conditionValue = '$value0${item.key}$value1'; - result.result = item.value(value0, value1, types[data.type]!); + dynamic value0; + dynamic value1; + if(data.type == 'object') + { + value0 = Command.replaceSingleTagValue(list[0]); + value1 = Command.replaceSingleTagValue(list[1]); + result.conditionValue = '${value0.toString()}${item.key}${value1.toString()}'; + } + else + { + value0 = Command.replaceTagValue(list[0]); + value1 = Command.replaceTagValue(list[1]); + result.conditionValue = '$value0${item.key}$value1'; + } + result.result = item.value(value0, value1, typeCaster[data.type]!); return result; } diff --git a/slack_test.yaml b/slack_test.yaml index 4863dbc..be00b26 100644 --- a/slack_test.yaml +++ b/slack_test.yaml @@ -2,12 +2,15 @@ property: workspace: . -pieline: +pipeline: id: main workflow: - exe: jira - - exe: slackUser - - exe: slackChannel + - if: + condition-object: != null + on-true: + - exe: slackUser + - exe: slackChannel commands: - command: Jira