From fdaa88efb1cd6a87d5b6bd4c02a66c764ca5ded2 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Mon, 17 Jul 2017 16:13:59 +0200 Subject: [PATCH] feat(cleanup): Add specific lock file maintenance cleanup Now cleans up lock file maintenance branch - which is usually scheduled - if it has become unmergeable or pointless. --- lib/workers/repository/cleanup.js | 23 ++++++++++++- test/workers/repository/cleanup.spec.js | 46 +++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/lib/workers/repository/cleanup.js b/lib/workers/repository/cleanup.js index 5771c6b1f5..16a9cb7eb8 100644 --- a/lib/workers/repository/cleanup.js +++ b/lib/workers/repository/cleanup.js @@ -13,8 +13,29 @@ async function pruneStaleBranches(config, branchList) { logger.debug('Platform is not GitHub - returning'); return; } - const renovateBranches = await config.api.getAllRenovateBranches(); + let renovateBranches = await config.api.getAllRenovateBranches(); logger.debug(`renovateBranches=${renovateBranches}`); + if (renovateBranches.indexOf('renovate/lock-file-maintenance') !== -1) { + logger.debug('Checking lock file branch'); + const pr = await config.api.getBranchPr('renovate/lock-file-maintenance'); + if (pr.isClosed) { + logger.info( + 'Deleting lock file maintenance branch as PR has been closed' + ); + await config.api.deleteBranch('renovate/lock-file-maintenance'); + } else if (pr.isUnmergeable) { + logger.info('Deleting lock file maintenance branch as it is unmergeable'); + await config.api.deleteBranch('renovate/lock-file-maintenance'); + } else if (pr.changed_files === 0) { + logger.info( + 'Deleting lock file maintenance branch as it has no changed files' + ); + await config.api.deleteBranch('renovate/lock-file-maintenance'); + } + renovateBranches = renovateBranches.filter( + branch => branch !== 'renovate/lock-file-maintenance' + ); + } const remainingBranches = renovateBranches.filter( branch => branchList.indexOf(branch) === -1 ); diff --git a/test/workers/repository/cleanup.spec.js b/test/workers/repository/cleanup.spec.js index bf711aa34a..a29d9660c4 100644 --- a/test/workers/repository/cleanup.spec.js +++ b/test/workers/repository/cleanup.spec.js @@ -38,5 +38,51 @@ describe('workers/repository/cleanup', () => { expect(config.api.getAllRenovateBranches.mock.calls).toHaveLength(1); expect(config.api.deleteBranch.mock.calls).toHaveLength(1); }); + it('deletes lock file maintenance if pr is closed', async () => { + branchNames = ['renovate/lock-file-maintenance']; + config.api.getAllRenovateBranches.mockReturnValueOnce([ + 'renovate/lock-file-maintenance', + ]); + config.api.getBranchPr = jest.fn(() => ({ isClosed: true })); + await cleanup.pruneStaleBranches(config, [ + 'renovate/lock-file-maintenance', + ]); + expect(config.api.getAllRenovateBranches.mock.calls).toHaveLength(1); + expect(config.api.deleteBranch.mock.calls).toHaveLength(1); + }); + it('deletes lock file maintenance if pr is unmergeable', async () => { + branchNames = ['renovate/lock-file-maintenance']; + config.api.getAllRenovateBranches.mockReturnValueOnce([ + 'renovate/lock-file-maintenance', + ]); + config.api.getBranchPr = jest.fn(() => ({ isUnmergeable: true })); + await cleanup.pruneStaleBranches(config, [ + 'renovate/lock-file-maintenance', + ]); + expect(config.api.getAllRenovateBranches.mock.calls).toHaveLength(1); + expect(config.api.deleteBranch.mock.calls).toHaveLength(1); + }); + it('deletes lock file maintenance if no changed files', async () => { + branchNames = ['renovate/lock-file-maintenance']; + config.api.getAllRenovateBranches.mockReturnValueOnce([ + 'renovate/lock-file-maintenance', + ]); + config.api.getBranchPr = jest.fn(() => ({ changed_files: 0 })); + await cleanup.pruneStaleBranches(config, [ + 'renovate/lock-file-maintenance', + ]); + expect(config.api.getAllRenovateBranches.mock.calls).toHaveLength(1); + expect(config.api.deleteBranch.mock.calls).toHaveLength(1); + }); + it('calls delete only once', async () => { + branchNames = ['renovate/lock-file-maintenance']; + config.api.getAllRenovateBranches.mockReturnValueOnce([ + 'renovate/lock-file-maintenance', + ]); + config.api.getBranchPr = jest.fn(() => ({ isClosed: true })); + await cleanup.pruneStaleBranches(config, []); + expect(config.api.getAllRenovateBranches.mock.calls).toHaveLength(1); + expect(config.api.deleteBranch.mock.calls).toHaveLength(1); + }); }); }); -- GitLab