Skip to content

Commit 0785154

Browse files
authored
Try to resolve problem with manual job triggering II. (#180)
1 parent 9841839 commit 0785154

File tree

2 files changed

+38
-99
lines changed

2 files changed

+38
-99
lines changed

server/src/Job.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,10 @@ export interface JobArgs {
88

99
export type JobFunction = (args: JobArgs) => Promise<unknown> | unknown;
1010

11-
interface JobState {
12-
checkManualJobs: boolean;
13-
}
14-
1511
export class Job {
1612
private _info: JobInfo;
1713
private _status: JobStatus;
1814
private _priority: JobPriority;
19-
private _state: JobState = {
20-
checkManualJobs: true,
21-
};
2215

2316
private readonly _id: string;
2417
private readonly _fn: JobFunction;
@@ -67,10 +60,6 @@ export class Job {
6760
this.onChange();
6861
}
6962

70-
public updateState(callback: (state: JobState) => JobState) {
71-
this._state = callback(this._state);
72-
}
73-
7463
public run(args: JobArgs): Promise<unknown> | unknown {
7564
return this._fn(args);
7665
}
@@ -91,10 +80,6 @@ export class Job {
9180
return this._priority;
9281
}
9382

94-
get state(): JobState {
95-
return this._state;
96-
}
97-
9883
public getData(): GQLJob {
9984
return {
10085
priority: this.priority,

server/src/MergeRequestAcceptor.ts

Lines changed: 38 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -494,10 +494,6 @@ export const runAcceptingMergeRequest = async (
494494
await tryCancelPipeline(gitlabApi, mergeRequestInfo, user);
495495
await gitlabApi.rebaseMergeRequest(mergeRequestInfo.project_id, mergeRequestInfo.iid);
496496
job.updateStatus(JobStatus.REBASING);
497-
job.updateState((state) => ({
498-
...state,
499-
checkManualJobs: true,
500-
}));
501497
return;
502498
}
503499

@@ -513,50 +509,47 @@ export const runAcceptingMergeRequest = async (
513509
return;
514510
}
515511

516-
if (job.state.checkManualJobs) {
517-
job.updateState((state) => ({
518-
...state,
519-
checkManualJobs: false,
520-
}));
521-
const currentPipeline = mergeRequestInfo.head_pipeline;
522-
if (currentPipeline !== null) {
523-
const jobs = uniqueNamedJobsByDate(
524-
await gitlabApi.getPipelineJobs(mergeRequestInfo.project_id, currentPipeline.id),
525-
);
512+
const currentPipeline = mergeRequestInfo.head_pipeline;
526513

527-
const manualJobsToRun = jobs.filter(
528-
(job) => PipelineJobStatus.Manual === job.status && !job.allow_failure,
529-
);
530-
const canceledJobsToRun = jobs.filter(
531-
(job) => PipelineJobStatus.Canceled === job.status && !job.allow_failure,
532-
);
514+
if (
515+
currentPipeline !== null &&
516+
mergeRequestInfo.detailed_merge_status === DetailedMergeStatus.CiMustPass &&
517+
[PipelineStatus.Manual, PipelineStatus.Canceled].includes(currentPipeline.status)
518+
) {
519+
const jobs = uniqueNamedJobsByDate(
520+
await gitlabApi.getPipelineJobs(mergeRequestInfo.project_id, currentPipeline.id),
521+
);
533522

534-
if (manualJobsToRun.length > 0 || canceledJobsToRun.length > 0) {
535-
if (!config.AUTORUN_MANUAL_BLOCKING_JOBS) {
536-
return {
537-
kind: AcceptMergeRequestResultKind.WaitingPipeline,
538-
mergeRequestInfo,
539-
user,
540-
pipeline: currentPipeline,
541-
};
542-
}
543-
544-
console.log(
545-
`[MR][${mergeRequestInfo.iid}] there are some blocking manual or canceled. triggering again`,
546-
);
547-
job.updateStatus(JobStatus.WAITING_FOR_CI);
548-
await Promise.all(
549-
manualJobsToRun.map((job) =>
550-
gitlabApi.runJob(mergeRequestInfo.project_id, job.id),
551-
),
552-
);
553-
await Promise.all(
554-
canceledJobsToRun.map((job) =>
555-
gitlabApi.retryJob(mergeRequestInfo.project_id, job.id),
556-
),
557-
);
558-
return;
523+
const manualJobsToRun = jobs.filter(
524+
(job) => PipelineJobStatus.Manual === job.status && !job.allow_failure,
525+
);
526+
const canceledJobsToRun = jobs.filter(
527+
(job) => PipelineJobStatus.Canceled === job.status && !job.allow_failure,
528+
);
529+
530+
if (manualJobsToRun.length > 0 || canceledJobsToRun.length > 0) {
531+
if (!config.AUTORUN_MANUAL_BLOCKING_JOBS) {
532+
return {
533+
kind: AcceptMergeRequestResultKind.WaitingPipeline,
534+
mergeRequestInfo,
535+
user,
536+
pipeline: currentPipeline,
537+
};
559538
}
539+
540+
console.log(
541+
`[MR][${mergeRequestInfo.iid}] there are some blocking manual or canceled. triggering again`,
542+
);
543+
job.updateStatus(JobStatus.WAITING_FOR_CI);
544+
await Promise.all(
545+
manualJobsToRun.map((job) => gitlabApi.runJob(mergeRequestInfo.project_id, job.id)),
546+
);
547+
await Promise.all(
548+
canceledJobsToRun.map((job) =>
549+
gitlabApi.retryJob(mergeRequestInfo.project_id, job.id),
550+
),
551+
);
552+
return;
560553
}
561554
}
562555

@@ -589,7 +582,6 @@ export const runAcceptingMergeRequest = async (
589582
};
590583
}
591584

592-
const currentPipeline: MergeRequestPipeline | null = mergeRequestInfo.head_pipeline;
593585
if (currentPipeline === null) {
594586
console.log(
595587
`[MR][${mergeRequestInfo.iid}] Merge request can't be merged. Pipeline does not exist`,
@@ -626,44 +618,6 @@ export const runAcceptingMergeRequest = async (
626618
};
627619
}
628620

629-
if ([PipelineStatus.Manual, PipelineStatus.Canceled].includes(currentPipeline.status)) {
630-
if (!config.AUTORUN_MANUAL_BLOCKING_JOBS) {
631-
return {
632-
kind: AcceptMergeRequestResultKind.WaitingPipeline,
633-
mergeRequestInfo,
634-
user,
635-
pipeline: currentPipeline,
636-
};
637-
}
638-
639-
const jobs = uniqueNamedJobsByDate(
640-
await gitlabApi.getPipelineJobs(mergeRequestInfo.project_id, currentPipeline.id),
641-
);
642-
643-
const manualJobsToRun = jobs.filter(
644-
(job) => PipelineJobStatus.Manual === job.status && !job.allow_failure,
645-
);
646-
const canceledJobsToRun = jobs.filter(
647-
(job) => PipelineJobStatus.Canceled === job.status && !job.allow_failure,
648-
);
649-
650-
if (manualJobsToRun.length > 0 || canceledJobsToRun.length > 0) {
651-
console.log(
652-
`[MR][${mergeRequestInfo.iid}] there are some blocking manual or canceled. triggering again`,
653-
);
654-
job.updateStatus(JobStatus.WAITING_FOR_CI);
655-
await Promise.all(
656-
manualJobsToRun.map((job) => gitlabApi.runJob(mergeRequestInfo.project_id, job.id)),
657-
);
658-
await Promise.all(
659-
canceledJobsToRun.map((job) =>
660-
gitlabApi.retryJob(mergeRequestInfo.project_id, job.id),
661-
),
662-
);
663-
return;
664-
}
665-
}
666-
667621
if (
668622
currentPipeline.status !== PipelineStatus.Success &&
669623
currentPipeline.status !== PipelineStatus.Skipped &&

0 commit comments

Comments
 (0)