add swtich syntax
This commit is contained in:
parent
dbd33b3fff
commit
f9c8f4c2cb
10 changed files with 163 additions and 10 deletions
|
|
@ -15,6 +15,14 @@ pipeline:
|
|||
#비동기식 실행, 해당 수행이 완료됨과 관계없이 실행하고 다음 스텝을 실행한다
|
||||
# - exe: buildDart
|
||||
|
||||
- switch:
|
||||
condition-string: <!property.old-version>
|
||||
cases:
|
||||
#case 아이템 하나에 여러 작업을 array형태로 할당
|
||||
- value: 0.0.152
|
||||
tasks:
|
||||
- exe: git
|
||||
|
||||
- async: git-count
|
||||
|
||||
- wait-until-string: <!state.git-count> != complete
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_exe.dart';
|
||||
part 'pipeline_data.g.dart';
|
||||
|
||||
/// ***************************** Base Data ****************************///
|
||||
|
|
@ -126,3 +127,56 @@ class DataWhile extends DataCondition {
|
|||
@override
|
||||
Map<String, dynamic> toJson() => _$DataWhileToJson(this);
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class DataSwitch extends DataCondition {
|
||||
late List<DataSwitchValue> cases = [];
|
||||
|
||||
DataSwitch();
|
||||
|
||||
@override
|
||||
PipelineValidateResult validate() {
|
||||
var result = super.validate();
|
||||
if (!result.enable) {
|
||||
return result;
|
||||
}
|
||||
|
||||
for (var item in cases) {
|
||||
result = item.validate();
|
||||
if (!result.enable) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
factory DataSwitch.fromJson(Map<String, dynamic> json) =>
|
||||
_$DataSwitchFromJson(json);
|
||||
@override
|
||||
Map<String, dynamic> toJson() => _$DataSwitchToJson(this);
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class DataSwitchValue implements DataValidator {
|
||||
dynamic value;
|
||||
late List<dynamic> tasks = [];
|
||||
|
||||
DataSwitchValue();
|
||||
|
||||
@override
|
||||
PipelineValidateResult validate() {
|
||||
var result = PipelineValidateResult();
|
||||
//pipeline check
|
||||
var validateResult = PipelineExecutor.validateTasks(tasks);
|
||||
if (!validateResult.enable) {
|
||||
return validateResult;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
factory DataSwitchValue.fromJson(Map<String, dynamic> json) =>
|
||||
_$DataSwitchValueFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$DataSwitchValueToJson(this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,3 +80,38 @@ Map<String, dynamic> _$DataWhileToJson(DataWhile instance) => <String, dynamic>{
|
|||
'condition-bool': instance.condition_bool,
|
||||
'on-do': instance.on_do,
|
||||
};
|
||||
|
||||
DataSwitch _$DataSwitchFromJson(Map<String, dynamic> json) => DataSwitch()
|
||||
..condition = json['condition'] as String?
|
||||
..type = json['type'] as String?
|
||||
..condition_int = json['condition-int'] as String?
|
||||
..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?
|
||||
..cases = (json['cases'] as List<dynamic>)
|
||||
.map((e) => DataSwitchValue.fromJson(e as Map<String, dynamic>))
|
||||
.toList();
|
||||
|
||||
Map<String, dynamic> _$DataSwitchToJson(DataSwitch instance) =>
|
||||
<String, dynamic>{
|
||||
'condition': instance.condition,
|
||||
'type': instance.type,
|
||||
'condition-int': instance.condition_int,
|
||||
'condition-float': instance.condition_float,
|
||||
'condition-string': instance.condition_string,
|
||||
'condition-version': instance.condition_version,
|
||||
'condition-bool': instance.condition_bool,
|
||||
'cases': instance.cases,
|
||||
};
|
||||
|
||||
DataSwitchValue _$DataSwitchValueFromJson(Map<String, dynamic> json) =>
|
||||
DataSwitchValue()
|
||||
..value = json['value']
|
||||
..tasks = json['tasks'] as List<dynamic>;
|
||||
|
||||
Map<String, dynamic> _$DataSwitchValueToJson(DataSwitchValue instance) =>
|
||||
<String, dynamic>{
|
||||
'value': instance.value,
|
||||
'tasks': instance.tasks,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:dart_framework/utils/system_util.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_exe.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_if.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_switch.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_wait_until.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_while.dart';
|
||||
|
||||
|
|
@ -13,7 +14,7 @@ class Pipeline {
|
|||
'wait-until-int': () => PipelineWaitUntil('int'),
|
||||
'wait-until-double': () => PipelineWaitUntil('double'),
|
||||
'wait-until-string': () => PipelineWaitUntil('string'),
|
||||
/*'switch': () => PipelineSwitch(),*/
|
||||
'switch': () => PipelineSwitch(),
|
||||
};
|
||||
|
||||
//pipeline validate & initialize
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import 'package:oto_cli/oto/data/pipeline_data.dart';
|
|||
import 'package:oto_cli/oto/pipeline/pipeline.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_exe.dart';
|
||||
|
||||
abstract class PiplineCondition extends PipelineExecutor {
|
||||
abstract class PipelineCondition extends PipelineExecutor {
|
||||
late DataCondition data;
|
||||
Map<String, bool Function(String, String, dynamic Function(String))>
|
||||
conditions = {};
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ abstract class PipelineExecutor {
|
|||
PipelineValidateResult initialize(Map<String, dynamic> set);
|
||||
Future execute();
|
||||
|
||||
PipelineValidateResult validateTasks(List<dynamic>? list) {
|
||||
static PipelineValidateResult validateTasks(List<dynamic>? list) {
|
||||
var result = PipelineValidateResult();
|
||||
if (list != null) {
|
||||
return Pipeline.pipelineInitialize(list);
|
||||
|
|
@ -21,6 +21,8 @@ abstract class PipelineExecutor {
|
|||
|
||||
class PipelineExe extends PipelineExecutor {
|
||||
late String commandID;
|
||||
String printPrefix = '';
|
||||
|
||||
@override
|
||||
PipelineValidateResult initialize(Map<String, dynamic> set) {
|
||||
var result = PipelineValidateResult();
|
||||
|
|
@ -37,7 +39,8 @@ class PipelineExe extends PipelineExecutor {
|
|||
Future<DataCommand> get commandData async {
|
||||
var commandData = Application.instance.dataCommandMap[commandID]!;
|
||||
await Application.instance.printBuildStep(
|
||||
'Phase Start: ${commandData.name} ($commandID)', Color.green);
|
||||
'${printPrefix}Phase Start: ${commandData.name} ($commandID)',
|
||||
Color.green);
|
||||
return dataFutrue(commandData);
|
||||
}
|
||||
|
||||
|
|
@ -62,6 +65,7 @@ class PipelineExe extends PipelineExecutor {
|
|||
class PipelineAsync extends PipelineExe {
|
||||
@override
|
||||
Future execute() async {
|
||||
printPrefix = 'Async ';
|
||||
updateState(CommandState.progress);
|
||||
executeAsync(await commandData);
|
||||
return simpleFuture;
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ import 'package:dart_framework/utils/system_util.dart';
|
|||
import 'package:oto_cli/oto/data/pipeline_data.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_condition.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_exe.dart';
|
||||
|
||||
class PipelineIf extends PiplineCondition {
|
||||
class PipelineIf extends PipelineCondition {
|
||||
late Pipeline? _pipelineTrue;
|
||||
late Pipeline? _pipelineFalse;
|
||||
|
||||
|
|
@ -17,14 +18,14 @@ class PipelineIf extends PiplineCondition {
|
|||
}
|
||||
|
||||
//set true task
|
||||
var validateResult = validateTasks(data.on_true);
|
||||
var validateResult = PipelineExecutor.validateTasks(data.on_true);
|
||||
if (!validateResult.enable) {
|
||||
return validateResult;
|
||||
}
|
||||
_pipelineTrue = validateResult.pipeline;
|
||||
|
||||
//set false task
|
||||
validateResult = validateTasks(data.on_false);
|
||||
validateResult = PipelineExecutor.validateTasks(data.on_false);
|
||||
if (!validateResult.enable) {
|
||||
return validateResult;
|
||||
}
|
||||
|
|
|
|||
49
lib/oto/pipeline/pipeline_switch.dart
Normal file
49
lib/oto/pipeline/pipeline_switch.dart
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
import 'package:dart_framework/utils/system_util.dart';
|
||||
import 'package:oto_cli/oto/data/pipeline_data.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_condition.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_exe.dart';
|
||||
|
||||
class PipelineSwitch extends PipelineCondition {
|
||||
late Pipeline? _pipeline;
|
||||
|
||||
@override
|
||||
PipelineValidateResult initialize(Map<String, dynamic> set) {
|
||||
var result = super.initialize(set);
|
||||
var data = DataSwitch.fromJson(set.values.first);
|
||||
var dataValidateResult = data.validate();
|
||||
if (!dataValidateResult.enable) {
|
||||
return dataValidateResult;
|
||||
}
|
||||
this.data = data;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@override
|
||||
Future execute() async {
|
||||
var data = this.data as DataSwitch;
|
||||
var condition = '${data.condition!} == ';
|
||||
var executed = false;
|
||||
for (var item in data.cases) {
|
||||
var addCondition = '$condition${item.value}';
|
||||
var result = checkCondition(addCondition);
|
||||
if (result.result) {
|
||||
executed = true;
|
||||
var validateResult = PipelineExecutor.validateTasks(item.tasks);
|
||||
_pipeline = validateResult.pipeline;
|
||||
await printCondition('Switch', data.condition!, 'Start task', result);
|
||||
await _pipeline?.execute();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!executed) {
|
||||
var result = ConditionCheckResult();
|
||||
result.conditionValue = 'null';
|
||||
result.result = false;
|
||||
await printCondition(
|
||||
'Switch', condition, 'not exist Same condition', result);
|
||||
}
|
||||
return simpleFuture;
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ import 'package:oto_cli/oto/data/pipeline_data.dart';
|
|||
import 'package:oto_cli/oto/pipeline/pipeline.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_condition.dart';
|
||||
|
||||
class PipelineWaitUntil extends PiplineCondition {
|
||||
class PipelineWaitUntil extends PipelineCondition {
|
||||
PipelineWaitUntil(String type) {
|
||||
data = DataCondition();
|
||||
data.type = type;
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@ import 'package:dart_framework/utils/system_util.dart';
|
|||
import 'package:oto_cli/oto/data/pipeline_data.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_condition.dart';
|
||||
import 'package:oto_cli/oto/pipeline/pipeline_exe.dart';
|
||||
|
||||
class PipelineWhile extends PiplineCondition {
|
||||
class PipelineWhile extends PipelineCondition {
|
||||
late Pipeline? _pipelineOnDo;
|
||||
|
||||
@override
|
||||
|
|
@ -16,7 +17,7 @@ class PipelineWhile extends PiplineCondition {
|
|||
}
|
||||
|
||||
//set do task
|
||||
var validateResult = validateTasks(data.on_do);
|
||||
var validateResult = PipelineExecutor.validateTasks(data.on_do);
|
||||
if (!validateResult.enable) {
|
||||
return validateResult;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue