示例#1
0
        public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues)
        {
            var provider = CodeRepositoryProviders?.FirstOrDefault(p => p.Name == Provider);

            if (provider == null)
            {
                return(new TaskRunnerResult($"Code repository provider \"{Provider}\" could not be found."));
            }

            await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices);

            var arg    = GetArgString();
            var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString);

            if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString()))
            {
                return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError));
            }

            var outputValues = new Dictionary <string, string>();

            if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString()))
            {
                outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString());
            }

            return(new TaskRunnerResult(true, "", outputValues)
            {
                TaskRemarks = $"The remote repository \"{TaskConfig.Repository}\" has been deleted"
            });
        }
示例#2
0
        public void GetTaskProviders_ReturnsEmpty()
        {
            var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object);
            var items = taskProviderManager.GetTaskProviders("NotExistProvider");

            Assert.Empty(items);
        }
示例#3
0
        public async void RefreshTaskProvider_TaskProviderLoaded()
        {
            var workingLocation = Path.Combine(AppContext.BaseDirectory, "working", "20180817.1");

            if (Directory.Exists(workingLocation))
            {
                Directory.Delete(workingLocation, true);
            }

            Directory.CreateDirectory(workingLocation);

            var taskProviderName = "Polyrific.Catapult.TaskProviders.TestTaskProvider";
            var taskProviderType = "TestTaskProvider";
            var publishLocation  = Path.Combine(workingLocation, "publish");

            _engineConfig.SetupGet(e => e.TaskProvidersLocation).Returns(publishLocation);

            await GenerateTestTaskProvider(taskProviderName, taskProviderType, workingLocation, publishLocation);

            var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object);

            taskProviderManager.RefreshTaskProviders();

            var newTaskProvider = taskProviderManager.GetTaskProvider(taskProviderType, taskProviderName);

            Assert.NotNull(newTaskProvider);
            Assert.Equal(Path.Combine(publishLocation, $"{taskProviderName}.dll"), newTaskProvider.StartFilePath);
        }
示例#4
0
        public void GetTaskProvider_ReturnsNull()
        {
            var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object);
            var item = taskProviderManager.GetTaskProvider("NotExistProvider", "not-exist-taskProvider");

            Assert.Null(item);
        }
示例#5
0
        public void GetTaskProvider_ReturnsTaskProviderItem()
        {
            var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object);
            var item = taskProviderManager.GetTaskProvider("FakeProvider", "fake-taskProvider");

            Assert.NotNull(item);
            Assert.Equal("fake-taskProvider", item.Name);
        }
示例#6
0
        public void AddTaskProviderLocation_Success()
        {
            var taskProviderManager = new TaskProviderManager(_engineConfig.Object, _taskProviderProcess.Object, _logger.Object);

            taskProviderManager.AddTaskProviderLocation("path/to/new/location");

            Assert.Contains("path/to/new/location", taskProviderManager.TaskProviderLocations);
        }
示例#7
0
        public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues)
        {
            var provider = CodeRepositoryProviders?.FirstOrDefault(p => p.Name == Provider);

            if (provider == null)
            {
                return(new TaskRunnerResult($"Code repository provider \"{Provider}\" could not be found."));
            }

            await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices);

            var arg    = GetArgString("main");
            var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString);

            if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString()))
            {
                return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError));
            }

            var remoteUrl   = "";
            var taskRemarks = "";

            if (result.ContainsKey("remoteUrl"))
            {
                remoteUrl   = result["remoteUrl"].ToString();
                taskRemarks = $"Changes has been pushed into {remoteUrl}";
            }

            var outputValues = new Dictionary <string, string>();

            if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString()))
            {
                outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString());
            }

            // stop the next process if we're creating a pull request
            var taskRunnerResult = new TaskRunnerResult(true, remoteUrl, outputValues, TaskConfig.CreatePullRequest)
            {
                TaskRemarks = taskRemarks
            };

            if (TaskConfig.CreatePullRequest)
            {
                var prUrl = "";
                if (result.ContainsKey("pullRequestUrl"))
                {
                    prUrl = result["pullRequestUrl"].ToString();
                }

                taskRunnerResult.StopRemarks = $"A pull request has been submitted to {prUrl}. Please review it, and restart this queue when it's ready to be merged";
            }

            return(taskRunnerResult);
        }
示例#8
0
        public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues)
        {
            var provider = CodeRepositoryProviders?.FirstOrDefault(p => p.Name == Provider);

            if (provider == null)
            {
                return(new TaskRunnerResult($"Code repository provider \"{Provider}\" could not be found."));
            }

            await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices);

            var prNumber = "";

            if (previousTasksOutputValues.ContainsKey("PRNumber"))
            {
                prNumber = previousTasksOutputValues["PRNumber"];
            }

            if (string.IsNullOrEmpty(prNumber))
            {
                return(new TaskRunnerResult("PR Number was undefined.", !TaskConfig.ContinueWhenError));
            }

            var arg    = GetArgString("main", prNumber);
            var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString);

            if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString()))
            {
                return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError));
            }

            var remoteUrl   = "";
            var taskRemarks = "";

            if (result.ContainsKey("remoteUrl"))
            {
                remoteUrl   = result["remoteUrl"].ToString();
                taskRemarks = $"Pull request #{prNumber} has been merged";
            }

            var outputValues = new Dictionary <string, string>();

            if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString()))
            {
                outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString());
            }

            return(new TaskRunnerResult(true, remoteUrl, outputValues)
            {
                TaskRemarks = taskRemarks
            });
        }
示例#9
0
        public async void InvokeTaskProvider_Error()
        {
            _taskProviderProcess.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())).Returns((ProcessStartInfo startInfo) => new Process
            {
                StartInfo = startInfo
            });
            _taskProviderProcess.Setup(p => p.GetStandardOutput(It.IsAny <Process>()))
            .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(""))));
            _taskProviderProcess.Setup(p => p.GetStandardError(It.IsAny <Process>()))
            .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes("test error"))));

            var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object);
            var result = await taskProviderManager.InvokeTaskProvider("path/to/taskProvider.dll", "taskProvider args");

            Assert.Equal("test error", result["errorMessage"]);
        }
示例#10
0
        public async void InvokeTaskProvider_Exe_Success()
        {
            _taskProviderProcess.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())).Returns((ProcessStartInfo startInfo) => new Process
            {
                StartInfo = startInfo
            });
            _taskProviderProcess.Setup(p => p.GetStandardOutput(It.IsAny <Process>()))
            .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes("[OUTPUT] {\"output\":\"success\"}\n[LOG][Information]Logged"))));
            _taskProviderProcess.Setup(p => p.GetStandardError(It.IsAny <Process>()))
            .Returns(new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(""))));

            var taskProviderManager = new TaskProviderManager(_taskProviders, _engineConfig.Object, _taskProviderProcess.Object, _logger.Object);
            var result = await taskProviderManager.InvokeTaskProvider(Path.Combine(AppContext.BaseDirectory, "taskProvider.exe"), "taskProvider args");

            Assert.Equal("success", result["output"]);
        }
示例#11
0
        public override async Task <TaskRunnerResult> RunPostprocessingTask()
        {
            var provider = HostingProviders?.FirstOrDefault(p => p.Name == Provider);

            if (provider == null)
            {
                return(new TaskRunnerResult($"Deploy provider \"{Provider}\" could not be found."));
            }

            await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices);

            var arg    = GetArgString("post");
            var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString);

            if (result.ContainsKey("errorMessage"))
            {
                return(new TaskRunnerResult(result["errorMessage"].ToString(), TaskConfig.PostProcessMustSucceed));
            }

            return(new TaskRunnerResult(true, ""));
        }
示例#12
0
        public override async Task <TaskRunnerResult> RunMainTask(Dictionary <string, string> previousTasksOutputValues)
        {
            var provider = TestProvider?.FirstOrDefault(p => p.Name == Provider);

            if (provider == null)
            {
                return(new TaskRunnerResult($"Test provider \"{Provider}\" could not be found."));
            }

            await LoadRequiredServicesToAdditionalConfigs(provider.RequiredServices);

            var arg    = GetArgString("main");
            var result = await TaskProviderManager.InvokeTaskProvider(provider.StartFilePath, arg.argString, arg.securedArgString);

            if (result.ContainsKey("errorMessage") && !string.IsNullOrEmpty(result["errorMessage"].ToString()))
            {
                return(new TaskRunnerResult(result["errorMessage"].ToString(), !TaskConfig.ContinueWhenError));
            }

            var testResultLocation = "";
            var taskRemarks        = "";

            if (result.ContainsKey("testResultLocation"))
            {
                testResultLocation = result["testResultLocation"].ToString();
                taskRemarks        = $"The test result is located at {testResultLocation}";
            }

            var outputValues = new Dictionary <string, string>();

            if (result.ContainsKey("outputValues") && !string.IsNullOrEmpty(result["outputValues"]?.ToString()))
            {
                outputValues = JsonConvert.DeserializeObject <Dictionary <string, string> >(result["outputValues"].ToString());
            }

            return(new TaskRunnerResult(true, testResultLocation, outputValues)
            {
                TaskRemarks = taskRemarks
            });
        }