Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.

Commit a3a67bd

Browse files
authored
Updated onStatusUpdate to consider land requests which are running. (#212)
Co-authored-by: Grace <[email protected]>
1 parent 4d60a05 commit a3a67bd

File tree

2 files changed

+74
-50
lines changed

2 files changed

+74
-50
lines changed

src/lib/Runner.ts

+35-41
Original file line numberDiff line numberDiff line change
@@ -360,52 +360,46 @@ export class Runner {
360360

361361
// onStatusUpdate only updates status' for landrequests, never moves a state and always exits early
362362
onStatusUpdate = async (statusEvent: BB.BuildStatusEvent) => {
363-
const running = await this.getRunning();
364-
if (!running.length) {
365-
Logger.info('No builds running, status event is irrelevant', {
363+
const requests = await this.getRunning();
364+
const landRequestStatus = requests.find(
365+
({ state, request }) => state === 'running' && request.buildId === statusEvent.buildId,
366+
);
367+
368+
const landRequest = landRequestStatus?.request;
369+
370+
if (!landRequest) {
371+
Logger.info('No running build for status event, ignoring', {
366372
namespace: 'lib:runner:onStatusUpdate',
367373
statusEvent,
368374
});
369375
return;
370376
}
371-
for (const landRequestStatus of running) {
372-
const landRequest = landRequestStatus.request;
373-
if (statusEvent.buildId !== landRequest.buildId) continue; // check next landRequest
374-
switch (statusEvent.buildStatus) {
375-
case 'SUCCESSFUL':
376-
Logger.info('Moving landRequest to awaiting-merge state', {
377-
namespace: 'lib:runner:onStatusUpdate',
378-
landRequestId: landRequest.id,
379-
pullRequestId: landRequest.pullRequestId,
380-
landRequestStatus,
381-
});
382-
await landRequest.setStatus('awaiting-merge');
383-
return this.next();
384-
case 'FAILED':
385-
Logger.info('Moving landRequest to failed state', {
386-
namespace: 'lib:runner:onStatusUpdate',
387-
landRequestId: landRequest.id,
388-
pullRequestId: landRequest.pullRequestId,
389-
landRequestStatus,
390-
});
391-
await landRequest.setStatus('fail', 'Landkid build failed');
392-
return this.next();
393-
case 'STOPPED':
394-
Logger.info('Moving landRequest to aborted state', {
395-
namespace: 'lib:runner:onStatusUpdate',
396-
landRequestId: landRequest.id,
397-
pullRequestId: landRequest.pullRequestId,
398-
landRequestStatus,
399-
});
400-
await landRequest.setStatus('aborted', 'Landkid pipelines build was stopped');
401-
return this.next();
402-
default:
403-
Logger.info('Dont know what to do with build status, ignoring', {
404-
namespace: 'lib:runner:onStatusUpdate',
405-
statusEvent,
406-
});
407-
break;
408-
}
377+
378+
const logMessage = (message: string) =>
379+
Logger.info(message, {
380+
namespace: 'lib:runner:onStatusUpdate',
381+
landRequestId: landRequest.id,
382+
pullRequestId: landRequest.pullRequestId,
383+
landRequestStatus,
384+
statusEvent,
385+
});
386+
387+
switch (statusEvent.buildStatus) {
388+
case 'SUCCESSFUL':
389+
logMessage('Moving landRequest to awaiting-merge state');
390+
await landRequest.setStatus('awaiting-merge');
391+
return this.next();
392+
case 'FAILED':
393+
logMessage('Moving landRequest to failed state');
394+
await landRequest.setStatus('fail', 'Landkid build failed');
395+
return this.next();
396+
case 'STOPPED':
397+
logMessage('Moving landRequest to aborted state');
398+
await landRequest.setStatus('aborted', 'Landkid pipelines build was stopped');
399+
return this.next();
400+
default:
401+
logMessage('Dont know what to do with build status, ignoring');
402+
break;
409403
}
410404
};
411405

src/lib/__tests__/Runner.test.ts

+39-9
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,7 @@ describe('Runner', () => {
643643
describe('onStatusUpdate', () => {
644644
let request: LandRequest;
645645
let nextSpy: jest.SpyInstance<any>;
646+
let runningStatuses: LandRequestStatus[];
646647
beforeEach(() => {
647648
const pullRequest = new PullRequest({
648649
prId: mockPullRequest.pullRequestId,
@@ -659,15 +660,17 @@ describe('Runner', () => {
659660
pullRequestId: 1,
660661
pullRequest,
661662
});
662-
const runningStatus = new LandRequestStatus({
663-
date: new Date(120),
664-
id: '0',
665-
isLatest: true,
666-
request,
667-
requestId: '0',
668-
state: 'running',
669-
});
670-
mockQueue.getRunning = jest.fn(async () => [runningStatus]);
663+
runningStatuses = [
664+
new LandRequestStatus({
665+
date: new Date(120),
666+
id: '0',
667+
isLatest: true,
668+
request,
669+
requestId: '0',
670+
state: 'running',
671+
}),
672+
];
673+
mockQueue.getRunning = jest.fn(async () => runningStatuses);
671674
nextSpy = jest.spyOn(runner, 'next').mockImplementation(async () => {});
672675
});
673676

@@ -728,6 +731,33 @@ describe('Runner', () => {
728731
expect(request.setStatus).not.toHaveBeenCalled();
729732
expect(nextSpy).not.toHaveBeenCalled();
730733
});
734+
735+
it('should not set status of request with matching build ID and currently in awaiting-merge state', async () => {
736+
runningStatuses = [
737+
new LandRequestStatus({
738+
date: new Date(120),
739+
id: '0',
740+
isLatest: true,
741+
request: new LandRequest({
742+
buildId: 1234,
743+
created: new Date(120),
744+
forCommit: 'abc',
745+
id: '0',
746+
triggererAaid: '123',
747+
pullRequestId: 1,
748+
}),
749+
requestId: '0',
750+
state: 'awaiting-merge',
751+
}),
752+
];
753+
expect(request.setStatus).not.toHaveBeenCalled();
754+
await runner.onStatusUpdate({
755+
buildId: 1234,
756+
buildStatus: 'SUCCESSFUL',
757+
});
758+
expect(request.setStatus).not.toHaveBeenCalled();
759+
expect(nextSpy).not.toHaveBeenCalled();
760+
});
731761
});
732762

733763
describe('getState', () => {

0 commit comments

Comments
 (0)