Skip to content

Commit

Permalink
feat: use new merge method
Browse files Browse the repository at this point in the history
  • Loading branch information
VincentHardouin committed Dec 23, 2024
1 parent 2493c26 commit e3f2e9d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 54 deletions.
33 changes: 6 additions & 27 deletions build/controllers/github.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { logger } from '../../common/services/logger.js';
import ScalingoClient from '../../common/services/scalingo-client.js';
import { config } from '../../config.js';
import * as reviewAppRepo from '../repositories/review-app-repository.js';
import * as _pullRequestRepository from '../repositories/pull-request-repository.js';
import { mergeQueue as _mergeQueue } from '../services/merge-queue.js';

const repositoryToScalingoAppsReview = {
Expand Down Expand Up @@ -248,8 +247,7 @@ async function processWebhook(
pushOnDefaultBranchWebhook = _pushOnDefaultBranchWebhook,
handleRA = _handleRA,
handleCloseRA = _handleCloseRA,
pullRequestRepository = _pullRequestRepository,
mergeQueue = _mergeQueue.handle,
mergeQueue = _mergeQueue,
githubService = commonGithubService,
} = {},
) {
Expand All @@ -262,11 +260,7 @@ async function processWebhook(
}
if (request.payload.action === 'closed') {
const repositoryName = request.payload.repository.full_name;
await pullRequestRepository.remove({
number: request.payload.number,
repositoryName,
});
await mergeQueue({ repositoryName });
await mergeQueue.unhandlePullRequest({ repositoryName, number: request.payload.number });
return handleCloseRA(request);
}
if (request.payload.action === 'labeled' && request.payload.label.name == 'no-review-app') {
Expand All @@ -280,20 +274,12 @@ async function processWebhook(
const repositoryName = request.payload.repository.full_name;
const isAllowedRepository = config.github.automerge.allowedRepositories.includes(repositoryName);
if (isAllowedRepository) {
await pullRequestRepository.save({
number: request.payload.number,
repositoryName,
});
await mergeQueue({ repositoryName });
await mergeQueue.handlePullRequest({ repositoryName, number: request.payload.number });
}
}
if (request.payload.action === 'unlabeled' && request.payload.label.name === ':rocket: Ready to Merge') {
const repositoryName = request.payload.repository.full_name;
await pullRequestRepository.remove({
number: request.payload.number,
repositoryName,
});
await mergeQueue({ repositoryName });
await mergeQueue.unhandlePullRequest({ repositoryName, number: request.payload.number });
}
return `Ignoring ${request.payload.action} action`;
} else if (eventName === 'check_suite') {
Expand All @@ -306,24 +292,17 @@ async function processWebhook(

const prNumber = request.payload.check_suite.pull_requests[0].number;
if (request.payload.check_suite.conclusion !== 'success') {
await pullRequestRepository.remove({
number: prNumber,
repositoryName,
});
await mergeQueue.unhandlePullRequest({ repositoryName, number: prNumber });
} else {
const hasReadyToMergeLabel = await githubService.isPrLabelledWith({
repositoryName,
number: prNumber,
label: ':rocket: Ready to Merge',
});
if (hasReadyToMergeLabel) {
await pullRequestRepository.save({
number: prNumber,
repositoryName,
});
await mergeQueue.handlePullRequest({ repositoryName, number: prNumber });
}
}
await mergeQueue({ repositoryName });
return `check_suite event handle`;
}
return `Ignoring '${request.payload.action}' action for check_suite event`;
Expand Down
42 changes: 15 additions & 27 deletions test/unit/build/controllers/github_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,21 +195,18 @@ Les variables d'environnement seront accessibles sur scalingo https://dashboard.
},
});

const mergeQueue = sinon.stub();
const pullRequestRepository = { save: sinon.stub() };
const mergeQueue = { handlePullRequest: sinon.stub() };
const githubService = { checkUserBelongsToPix: sinon.stub() };
githubService.checkUserBelongsToPix.resolves(true);

// when
await githubController.processWebhook(request, { githubService, pullRequestRepository, mergeQueue });
await githubController.processWebhook(request, { githubService, mergeQueue });

// then
expect(pullRequestRepository.save).to.be.calledOnceWithExactly({
expect(mergeQueue.handlePullRequest).to.be.calledOnceWithExactly({
number: 123,
repositoryName,
});

expect(mergeQueue).to.be.calledOnceWithExactly({ repositoryName });
});
});

Expand Down Expand Up @@ -256,19 +253,16 @@ Les variables d'environnement seront accessibles sur scalingo https://dashboard.
repository: { full_name: repositoryName },
});

const mergeQueue = sinon.stub();
const pullRequestRepository = { remove: sinon.stub() };
const mergeQueue = { unhandlePullRequest: sinon.stub() };

// when
await githubController.processWebhook(request, { pullRequestRepository, mergeQueue });
await githubController.processWebhook(request, { mergeQueue });

// then
expect(pullRequestRepository.remove).to.be.calledOnceWithExactly({
expect(mergeQueue.unhandlePullRequest).to.be.calledOnceWithExactly({
number: 123,
repositoryName: repositoryName,
});

expect(mergeQueue).to.be.calledOnceWithExactly({ repositoryName });
});
});
});
Expand All @@ -284,19 +278,17 @@ Les variables d'environnement seront accessibles sur scalingo https://dashboard.
});

const handleCloseRA = sinon.stub();
const mergeQueue = sinon.stub();
const pullRequestRepository = { remove: sinon.stub() };
const mergeQueue = { unhandlePullRequest: sinon.stub() };

// when
await githubController.processWebhook(request, { handleCloseRA, pullRequestRepository, mergeQueue });
await githubController.processWebhook(request, { handleCloseRA, mergeQueue });

// then
expect(pullRequestRepository.remove).to.be.calledOnceWithExactly({
expect(mergeQueue.unhandlePullRequest).to.be.calledOnceWithExactly({
number: 123,
repositoryName,
});
expect(handleCloseRA.calledOnceWithExactly(request)).to.be.true;
expect(mergeQueue).to.be.calledOnceWithExactly({ repositoryName });
});
});

Expand Down Expand Up @@ -327,18 +319,16 @@ Les variables d'environnement seront accessibles sur scalingo https://dashboard.
},
};

const mergeQueue = sinon.stub();
const pullRequestRepository = { remove: sinon.stub() };
const mergeQueue = { unhandlePullRequest: sinon.stub() };

// when
await githubController.processWebhook(request, { pullRequestRepository, mergeQueue });
await githubController.processWebhook(request, { mergeQueue });

// then
expect(pullRequestRepository.remove).to.be.calledOnceWithExactly({
expect(mergeQueue.unhandlePullRequest).to.be.calledOnceWithExactly({
number: 123,
repositoryName,
});
expect(mergeQueue).to.be.calledOnceWithExactly({ repositoryName });
});
});

Expand Down Expand Up @@ -374,8 +364,7 @@ Les variables d'environnement seront accessibles sur scalingo https://dashboard.
},
};

const mergeQueue = sinon.stub();
const pullRequestRepository = { save: sinon.stub() };
const mergeQueue = { handlePullRequest: sinon.stub() };
const githubService = { isPrLabelledWith: sinon.stub() };

githubService.isPrLabelledWith
Expand All @@ -387,14 +376,13 @@ Les variables d'environnement seront accessibles sur scalingo https://dashboard.
})
.resolves(true);
// when
await githubController.processWebhook(request, { githubService, pullRequestRepository, mergeQueue });
await githubController.processWebhook(request, { githubService, mergeQueue });

// then
expect(pullRequestRepository.save).to.be.calledOnceWithExactly({
expect(mergeQueue.handlePullRequest).to.be.calledOnceWithExactly({
number: prNumber,
repositoryName,
});
expect(mergeQueue).to.be.calledOnceWithExactly({ repositoryName });
});
});
});
Expand Down

0 comments on commit e3f2e9d

Please sign in to comment.