public async Task <Build> PushAsync(Guid projectId, BuildTaskDto taskDto) { logger.LogInformation("Pushing task into queue"); var build = await CreateBuildAsync(taskDto); var buildSteps = await buildStepRepository.GetAllFromBuildConfigAsync(taskDto.BuildConfig.Id); var commands = buildSteps.Select(bs => new BuildCommand { Command = bs.BuildStepScript.Command, Arguments = bs.BuildStepScript.Arguments }).ToList(); var project = await projectRepository.FindByIdAsync(projectId); var buildTask = new BuildTask { Id = Guid.NewGuid(), Commands = commands, BuildId = build.Id, GitToken = project.GitToken, ProjectUrl = project.ProjectUri.ToString() }; queue.Enqueue(buildTask, Priority.Normal); await ChangeBuildStatus(build.Id, BuildStatus.WaitingToStart, null); return(build); }
private async Task <Build> CreateBuildAsync(BuildTaskDto buildTaskDto) { var dbBuild = new global::Repositories.Database.Models.Build { BuildConfigId = buildTaskDto.BuildConfig.Id, BuildStatus = BuildStatus.WaitingToGetPlaceInQueue, FinishTime = null, Logs = null, StartedByUserId = buildTaskDto.StartedByUserId, StartTime = DateTime.Now }; var resultBuildDb = await buildRepository.AddAsync(dbBuild); return(new Build { Id = resultBuildDb.Id, BuildConfigId = resultBuildDb.BuildConfigId, BuildStatus = resultBuildDb.BuildStatus, FinishTime = resultBuildDb.FinishTime, Logs = resultBuildDb.Logs, StartedByUserId = resultBuildDb.StartedByUserId, StartTime = DateTime.Now }); }
public async Task <HttpOperationResult <Build> > PushTaskAsync(BuildTaskDto task) { var request = new HttpRequestMessage(HttpMethod.Post, new Uri(new Uri(ApiUrl), "/buildTasks")); request.Headers.Accept.Clear(); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); request.Headers.Add("Content-Type", "application/json"); var response = await HttpClient.SendAsync(request); if ((int)response.StatusCode < 200 || (int)response.StatusCode > 299) { return(HttpOperationResult <Build> .Failed(HttpStatusCode.InternalServerError, "Something gone wrong. Check agent-manager's logs")); } var body = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <HttpOperationResult <Build> >(body)); }
public async Task <Build> RunAsync(Guid id, string userId) { var dbBuildConfig = await buildConfigRepository.FindByIdAsync(id); var buildConfig = ModelsMapper.ConvertBuildConfigDbModelToServiceModel(dbBuildConfig); var buildTaskDto = new BuildTaskDto { BuildConfig = buildConfig, StartedByUserId = userId }; var pushTaskResult = await buildTaskProvider.PushTaskAsync(buildTaskDto); if (!pushTaskResult.IsSuccessful) { throw new Exception(pushTaskResult.Error); } var build = await buildRepository.FindByIdAsync(pushTaskResult.Value.Id); if (build == null) { throw new EntityNotFoundException(nameof(Build), pushTaskResult.Value.Id.ToString()); } return(ModelsMapper.ConvertBuildDbModelToServiceModel(build)); }
public async Task <HttpOperationResult <Build> > PushTaskAsync([FromBody] BuildTaskDto buildTaskDto) { var build = await buildTasksService.PushAsync(buildTaskDto.BuildConfig.ProjectId, buildTaskDto); return(HttpOperationResult <Build> .Ok(build)); }