Beispiel #1
0
        private async Task <ActionResult> Finish(Guid id, int number, bool error = false)
        {
            if (id == Guid.Empty)
            {
                return(BadRequest());
            }

            Step next = null;

            using (await syncService.GetLockObject(SyncService.Job))
            {
                var job = await jobService.GetById(id);

                if (job == null)
                {
                    return(NotFound("Job not found"));
                }

                Step current = job.Steps.Find(s => s.Number == number);
                if (current == null)
                {
                    return(NotFound("Step not found"));
                }

                if (current.State != ProcessingState.InProgress)
                {
                    return(StatusCode(406, "Step is not in progress"));
                }

                current.State = error ? ProcessingState.Error : ProcessingState.Done;
                current.End   = DateTime.UtcNow;

                if (!error)
                {
                    next = job.Steps.Find(s => s.Number == current.Number + 1);
                }

                if (next == null)
                {
                    job.Finished = DateTime.UtcNow;
                    job.State    = current.State;
                }
                else
                {
                    next.State = ProcessingState.Scheduled;
                }

                await jobService.Update(id, job);
            }

            if (next != null)
            {
                longPollingService.Notify(LongPollingService.StepsCreated);
            }

            return(Ok());
        }
Beispiel #2
0
        public async Task <ActionResult> TriggerBuild(Guid projectId, JobInitiator initiator)
        {
            if (projectId == Guid.Empty)
            {
                return(BadRequest());
            }

            Project project = await projectService.GetById(projectId);

            if (project == null)
            {
                return(NotFound());
            }

            IEnumerable <Job> jobs = await jobService.GetBy(t => t.ProjectId == projectId &&
                                                            t.State != ProcessingState.Done &&
                                                            t.State != ProcessingState.Error);

            if (jobs.Count() > 0)
            {
                return(new StatusCodeResult(503));
            }

            Job job = new Job();

            job.Created   = DateTime.Now;
            job.Initiator = initiator;
            job.ProjectId = project.Id;
            job.State     = ProcessingState.Created;

            job.Steps = new List <Step>(new Step[] {
                new Step {
                    Number = 0,
                    Name   = "Bootstrap",
                    State  = ProcessingState.Scheduled,
                }
            });

            await jobService.Add(job);

            longPollingService.Notify(LongPollingService.StepsCreated);

            return(Ok(job));
        }