pipeline if update

This commit is contained in:
build@lguplus.co.kr 2023-12-08 19:14:33 +09:00
parent ea5cd8fbfa
commit 4493c4d97b
5 changed files with 49 additions and 30 deletions

View file

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

View file

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

View file

@ -24,7 +24,8 @@ DataCondition _$DataConditionFromJson(Map<String, dynamic> 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<String, dynamic> _$DataConditionToJson(DataCondition instance) =>
<String, dynamic>{
@ -35,6 +36,7 @@ Map<String, dynamic> _$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<String, dynamic> json) => DataIf()
@ -45,6 +47,7 @@ DataIf _$DataIfFromJson(Map<String, dynamic> 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<dynamic>?
..on_false = json['on-false'] as List<dynamic>?;
@ -56,6 +59,7 @@ Map<String, dynamic> _$DataIfToJson(DataIf instance) => <String, dynamic>{
'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<String, dynamic> 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<dynamic>?;
Map<String, dynamic> _$DataWhileToJson(DataWhile instance) => <String, dynamic>{
@ -78,6 +83,7 @@ Map<String, dynamic> _$DataWhileToJson(DataWhile instance) => <String, dynamic>{
'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<String, dynamic> 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<dynamic>)
.map((e) => DataSwitchValue.fromJson(e as Map<String, dynamic>))
.toList();
@ -102,6 +109,7 @@ Map<String, dynamic> _$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,
};

View file

@ -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<String, bool Function(String, String, dynamic Function(String))>
Map<String, bool Function(dynamic, dynamic, dynamic Function(String?))>
conditions = {};
Map<String, dynamic Function(String value)> types = {};
Map<String, dynamic Function(String? value)> typeCaster = {};
@override
PipelineValidateResult initialize(Map<String, dynamic> 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;
}

View file

@ -2,12 +2,15 @@
property:
workspace: .
pieline:
pipeline:
id: main
workflow:
- exe: jira
- exe: slackUser
- exe: slackChannel
- if:
condition-object: <!property.slackUser> != null
on-true:
- exe: slackUser
- exe: slackChannel
commands:
- command: Jira