From d8a054410bbd4f81c0e39290ab13d9b77526b3c3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Fri, 7 Jul 2017 11:09:52 +0200 Subject: [PATCH] =?UTF-8?q?feat(onboarding):=20Allow=20update=20of=20renov?= =?UTF-8?q?ate.json=20if=20it=E2=80=99s=20unmodified=20(#469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This allows for improvements to renovate’s default renovate.json to be passed on to users who haven’t merged or modified their Configure Renovate PR. Closes #465 --- lib/workers/repository/onboarding.js | 8 +++++++- .../__snapshots__/onboarding.spec.js.snap | 8 ++++---- test/workers/repository/onboarding.spec.js | 14 ++++++++++++-- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/lib/workers/repository/onboarding.js b/lib/workers/repository/onboarding.js index 0ddba69e8b..33b31df6d9 100644 --- a/lib/workers/repository/onboarding.js +++ b/lib/workers/repository/onboarding.js @@ -176,6 +176,7 @@ async function getOnboardingStatus(config) { 'Configure Renovate' ); if (pr) { + config.logger.debug(`Found existing onboarding PR#${pr.number}`); if (pr.isClosed) { config.logger.debug('Found closed Configure Renovate PR'); return true; @@ -184,8 +185,13 @@ async function getOnboardingStatus(config) { config.logger.debug( `PR #${pr.displayNumber} needs to be closed to enable renovate to continue` ); - return false; + const prDetails = await config.api.getPr(pr.number); + if (!prDetails.canRebase) { + // Cannot update files if rebasing not possible + return false; + } } + // Create or update files, then return await module.exports.createBranch(config); return false; } diff --git a/test/workers/repository/__snapshots__/onboarding.spec.js.snap b/test/workers/repository/__snapshots__/onboarding.spec.js.snap index d35d12af03..affb372c0b 100644 --- a/test/workers/repository/__snapshots__/onboarding.spec.js.snap +++ b/test/workers/repository/__snapshots__/onboarding.spec.js.snap @@ -201,7 +201,7 @@ Alternatively, you can add the same configuration settings into a \\"renovate\\" ] `; -exports[`lib/workers/repository/onboarding getOnboardingStatus(config) enables semantic commits 1`] = ` +exports[`lib/workers/repository/onboarding getOnboardingStatus(config) commits files and returns false if no pr 1`] = ` Array [ "renovate/configure", Array [ @@ -219,7 +219,7 @@ Array [ \\"ignoreDeps\\": [], \\"pinVersions\\": true, \\"separateMajorReleases\\": true, - \\"semanticCommits\\": true, + \\"semanticCommits\\": false, \\"semanticPrefix\\": \\"chore(deps): \\", \\"rebaseStalePrs\\": false, \\"prCreation\\": \\"immediate\\", @@ -238,7 +238,7 @@ Array [ ] `; -exports[`lib/workers/repository/onboarding getOnboardingStatus(config) returns false if no pr 1`] = ` +exports[`lib/workers/repository/onboarding getOnboardingStatus(config) enables semantic commits 1`] = ` Array [ "renovate/configure", Array [ @@ -256,7 +256,7 @@ Array [ \\"ignoreDeps\\": [], \\"pinVersions\\": true, \\"separateMajorReleases\\": true, - \\"semanticCommits\\": false, + \\"semanticCommits\\": true, \\"semanticPrefix\\": \\"chore(deps): \\", \\"rebaseStalePrs\\": false, \\"prCreation\\": \\"immediate\\", diff --git a/test/workers/repository/onboarding.spec.js b/test/workers/repository/onboarding.spec.js index 07ea36224e..dbf0bbb71b 100644 --- a/test/workers/repository/onboarding.spec.js +++ b/test/workers/repository/onboarding.spec.js @@ -177,6 +177,7 @@ describe('lib/workers/repository/onboarding', () => { commitFilesToBranch: jest.fn(), createPr: jest.fn(() => ({ displayNumber: 1 })), findPr: jest.fn(), + getPr: jest.fn(() => {}), getCommitMessages: jest.fn(), }; config.logger = logger; @@ -203,14 +204,23 @@ describe('lib/workers/repository/onboarding', () => { expect(config.api.findPr.mock.calls.length).toBe(1); expect(config.api.commitFilesToBranch.mock.calls.length).toBe(0); }); - it('returns false if pr and pr is not closed', async () => { + it('commits files if pr is not closed and is rebaseable', async () => { config.api.findPr.mockReturnValueOnce({}); + config.api.getPr.mockReturnValueOnce({ canRebase: true }); + const res = await onboarding.getOnboardingStatus(config); + expect(res).toEqual(false); + expect(config.api.findPr.mock.calls.length).toBe(1); + expect(config.api.commitFilesToBranch.mock.calls.length).toBe(1); + }); + it('skips file update if existing pr is not rebaseable', async () => { + config.api.findPr.mockReturnValueOnce({}); + config.api.getPr.mockReturnValueOnce({ canRebase: false }); const res = await onboarding.getOnboardingStatus(config); expect(res).toEqual(false); expect(config.api.findPr.mock.calls.length).toBe(1); expect(config.api.commitFilesToBranch.mock.calls.length).toBe(0); }); - it('returns false if no pr', async () => { + it('commits files and returns false if no pr', async () => { const res = await onboarding.getOnboardingStatus(config); expect(res).toEqual(false); expect(config.api.findPr.mock.calls.length).toBe(1); -- GitLab