diff --git a/assets/pipeline-test.yaml b/assets/pipeline-test.yaml index 5bc72d5..43a2303 100644 --- a/assets/pipeline-test.yaml +++ b/assets/pipeline-test.yaml @@ -19,7 +19,7 @@ pipeline: #일반적인 if문과 동일 - if: #property의 내용은 기본 dynamic(Object)형으로써, 비교시 정확한 캐스팅 필요, 적지 않을시 기본 string - condition-int: == + condition-string: == on-false: - exe: zip diff --git a/lib/oto/application.dart b/lib/oto/application.dart index d896888..186fcdc 100644 --- a/lib/oto/application.dart +++ b/lib/oto/application.dart @@ -26,41 +26,11 @@ class Application { BuildType.file: () => DataComposerFile() }; - final Map exeMap = { - 'exe': () => PipelineExe(), - 'async': () => PipelineAsync(), - 'if': () => PipelineIf(), - /*'while': () => PipelineWhile(), - 'wait-until': () => PipelineWaitUntil(), - 'switch': () => PipelineSwitch(),*/ - }; - DataJenkins? jenkinsData; Map property = {}; Map dataCommandMap = {}; late Pipeline pipeline; - //pipeline validate & initialize - PipelineValidateResult pipelineInitialize(List list) { - var result = PipelineValidateResult(); - for (Map item in list) { - var key = item.keys.first; - if (!exeMap.containsKey(key)) { - result.enable = false; - result.message = 'Validate Error - "$key" is not a supported task'; - return result; - } - - var exe = exeMap[key]!(); - var childResult = exe.initialize(item); - if (!childResult.enable) { - return childResult; - } - result.exeList.add(exe); - } - return result; - } - Future build(BuildType buildType, {String? yamlContent}) async { setUTF8(); @@ -99,7 +69,8 @@ class Application { } //Parse pipeline & validate - var validateResult = pipelineInitialize(build.pipeline!.workflow); + var validateResult = + Pipeline.pipelineInitialize(build.pipeline!.workflow); if (!validateResult.enable) { var ex = ExceptionData(); ex.phase = 'Validate Pipeline'; diff --git a/lib/oto/pipeline/pipeline.dart b/lib/oto/pipeline/pipeline.dart index 5ea5bc9..57767d5 100644 --- a/lib/oto/pipeline/pipeline.dart +++ b/lib/oto/pipeline/pipeline.dart @@ -1,11 +1,38 @@ import 'package:dart_framework/utils/system_util.dart'; -import 'package:oto_cli/cli/cli.dart'; -import 'package:oto_cli/oto/application.dart'; -import 'package:oto_cli/oto/commands/command.dart'; -import 'package:oto_cli/oto/data/command_data.dart'; -import 'package:oto_cli/oto/data/pipeline_data.dart'; +import 'package:oto_cli/oto/pipeline/pipeline_exe.dart'; +import 'package:oto_cli/oto/pipeline/pipeline_if.dart'; class Pipeline { + static Map exeMap = { + 'exe': () => PipelineExe(), + 'async': () => PipelineAsync(), + 'if': () => PipelineIf(), + /*'while': () => PipelineWhile(), + 'wait-until': () => PipelineWaitUntil(), + 'switch': () => PipelineSwitch(),*/ + }; + + //pipeline validate & initialize + static PipelineValidateResult pipelineInitialize(List list) { + var result = PipelineValidateResult(); + for (Map item in list) { + var key = item.keys.first; + if (!exeMap.containsKey(key)) { + result.enable = false; + result.message = 'Validate Error - "$key" is not a supported task'; + return result; + } + + var exe = exeMap[key]!(); + var childResult = exe.initialize(item); + if (!childResult.enable) { + return childResult; + } + result.exeList.add(exe); + } + return result; + } + final List _exeList; Pipeline(this._exeList); @@ -30,101 +57,3 @@ class PipelineValidateResult { } } } - -abstract class PipelineExecutor { - //set & validate data - PipelineValidateResult initialize(Map set); - Future execute(); - - PipelineValidateResult validateTasks(List? list) { - var result = PipelineValidateResult(); - if (list != null) { - return Application.instance.pipelineInitialize(list); - } - return result; - } -} - -class PipelineExe extends PipelineExecutor { - late String targetCommandID; - @override - PipelineValidateResult initialize(Map set) { - var result = PipelineValidateResult(); - targetCommandID = set.values.first as String; - if (!Application.instance.dataCommandMap.containsKey(targetCommandID)) { - result.enable = false; - result.message = - 'The "$targetCommandID" command does not exist in the command list.'; - } - return result; - } - - Future get commandData async { - var commandData = Application.instance.dataCommandMap[targetCommandID]!; - await Application.instance - .printBuildStep('Phase Start: ${commandData.name}', Color.green); - return dataFutrue(commandData); - } - - @override - Future execute() async { - // 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'); - var data = await commandData; - await Command.byType(data.command).execute(data); - return simpleFuture; - } -} - -class PipelineAsync extends PipelineExe { - @override - Future execute() async { - executeAsync(await commandData); - return simpleFuture; - } - - void executeAsync(DataCommand data) async { - await Command.byType(data.command).execute(data); - } -} - -class PipelineIf extends PipelineExecutor { - late DataIf _data; - late Pipeline? _pipelineTrue; - late Pipeline? _pipelineFalse; - - @override - PipelineValidateResult initialize(Map set) { - var result = PipelineValidateResult(); - _data = DataIf.fromJson(set.values.first); - var dataValidateResult = _data.validate(); - if (!dataValidateResult.enable) { - return dataValidateResult; - } - //set true task - var validateResult = validateTasks(_data.on_true); - if (!validateResult.enable) { - return validateResult; - } - _pipelineTrue = validateResult.pipeline; - - //set false task - validateResult = validateTasks(_data.on_false); - if (!validateResult.enable) { - return validateResult; - } - _pipelineFalse = validateResult.pipeline; - - return result; - } - - @override - Future execute() async { - //To-do: check true or false - await _pipelineTrue?.execute(); - await _pipelineFalse?.execute(); - return simpleFuture; - } -} diff --git a/lib/oto/pipeline/pipeline_exe.dart b/lib/oto/pipeline/pipeline_exe.dart new file mode 100644 index 0000000..1847db6 --- /dev/null +++ b/lib/oto/pipeline/pipeline_exe.dart @@ -0,0 +1,65 @@ +import 'package:dart_framework/utils/system_util.dart'; +import 'package:oto_cli/cli/cli.dart'; +import 'package:oto_cli/oto/application.dart'; +import 'package:oto_cli/oto/commands/command.dart'; +import 'package:oto_cli/oto/data/command_data.dart'; +import 'package:oto_cli/oto/pipeline/pipeline.dart'; + +abstract class PipelineExecutor { + //set & validate data + PipelineValidateResult initialize(Map set); + Future execute(); + + PipelineValidateResult validateTasks(List? list) { + var result = PipelineValidateResult(); + if (list != null) { + return Pipeline.pipelineInitialize(list); + } + return result; + } +} + +class PipelineExe extends PipelineExecutor { + late String targetCommandID; + @override + PipelineValidateResult initialize(Map set) { + var result = PipelineValidateResult(); + targetCommandID = set.values.first as String; + if (!Application.instance.dataCommandMap.containsKey(targetCommandID)) { + result.enable = false; + result.message = + 'The "$targetCommandID" command does not exist in the command list.'; + } + return result; + } + + Future get commandData async { + var commandData = Application.instance.dataCommandMap[targetCommandID]!; + await Application.instance + .printBuildStep('Phase Start: ${commandData.name}', Color.green); + return dataFutrue(commandData); + } + + @override + Future execute() async { + // 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'); + var data = await commandData; + await Command.byType(data.command).execute(data); + return simpleFuture; + } +} + +class PipelineAsync extends PipelineExe { + @override + Future execute() async { + executeAsync(await commandData); + return simpleFuture; + } + + void executeAsync(DataCommand data) async { + await Command.byType(data.command).execute(data); + } +} diff --git a/lib/oto/pipeline/pipeline_if.dart b/lib/oto/pipeline/pipeline_if.dart new file mode 100644 index 0000000..309af92 --- /dev/null +++ b/lib/oto/pipeline/pipeline_if.dart @@ -0,0 +1,43 @@ +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_exe.dart'; + +class PipelineIf extends PipelineExecutor { + late DataIf _data; + late Pipeline? _pipelineTrue; + late Pipeline? _pipelineFalse; + + @override + PipelineValidateResult initialize(Map set) { + var result = PipelineValidateResult(); + _data = DataIf.fromJson(set.values.first); + var dataValidateResult = _data.validate(); + if (!dataValidateResult.enable) { + return dataValidateResult; + } + //set true task + var validateResult = validateTasks(_data.on_true); + if (!validateResult.enable) { + return validateResult; + } + _pipelineTrue = validateResult.pipeline; + + //set false task + validateResult = validateTasks(_data.on_false); + if (!validateResult.enable) { + return validateResult; + } + _pipelineFalse = validateResult.pipeline; + + return result; + } + + @override + Future execute() async { + //To-do: check true or false + await _pipelineTrue?.execute(); + await _pipelineFalse?.execute(); + return simpleFuture; + } +}