diff --git a/lib/workers/repository/onboarding.js b/lib/workers/repository/onboarding.js index 0ddba69e8bb5585bb1852826fac102fd8a5f7a05..33b31df6d91cf0dec5ae2c38cf0b263a7e631737 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 d35d12af0306fe2573560fd60e7a9c6c72e8a5c2..affb372c0b66b8a20cfe4c5700f0eb5cdb4494d0 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 07ea36224e3233a23c40e67e2b45093ab2cc710c..dbf0bbb71b9916593941493533eadf7fe4b0392e 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);