diff --git a/lib/worker.js b/lib/worker.js index cd0657bce0361b880a27257755be17742c5de5a1..e91053c7dbf8bb3cfb70276ed73c0d7234392e40 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -257,7 +257,7 @@ async function updateBranch(upgrades) { } const branchCreated = await branchWorker.ensureBranch(upgrades); if (branchCreated) { - const pr = await prWorker.ensurePr(upgrade0); + const pr = await prWorker.ensurePr(upgrades); if (pr) { await prWorker.checkAutoMerge(pr, upgrade0); } diff --git a/lib/workers/pr.js b/lib/workers/pr.js index b381106def0087d84c8c75712ad3b5a0d93888ca..3e9414e630787166827402bdcda11e99ba79460d 100644 --- a/lib/workers/pr.js +++ b/lib/workers/pr.js @@ -8,7 +8,9 @@ module.exports = { }; // Ensures that PR exists with matching title/body -async function ensurePr(upgradeConfig) { +async function ensurePr(upgrades) { + logger.debug(`ensurePr(${JSON.stringify(upgrades)})`); + const upgradeConfig = upgrades[0]; const config = Object.assign({}, upgradeConfig); logger.debug('Ensuring PR'); @@ -33,11 +35,23 @@ async function ensurePr(upgradeConfig) { } // Get changelog and then generate template strings - config.changelog = await getChangeLog( - config.depName, - config.changeLogFromVersion, - config.changeLogToVersion - ); + config.changelogs = []; + for (const upgrade of upgrades) { + let log = await getChangeLog( + upgrade.depName, + upgrade.changeLogFromVersion, + upgrade.changeLogToVersion + ); + if (!(log && log.length)) { + log = 'No changelog available'; + } + config.changelogs.push({ + depName: upgrade.depName, + log, + }); + } + // Configure changelog for backwards compatibility + config.changelog = config.changelogs[0].log; const prTitle = handlebars.compile(config.prTitle)(config); const prBody = handlebars.compile(config.prBody)(config); diff --git a/test/workers/pr.spec.js b/test/workers/pr.spec.js index a3186e69e4fddeb8e671984abed45e5aea05880f..b8ced7f1eec7e246f01997592ecc291c997b3b2a 100644 --- a/test/workers/pr.spec.js +++ b/test/workers/pr.spec.js @@ -70,7 +70,7 @@ describe('workers/pr', () => { expect(config.api.mergePr.mock.calls.length).toBe(0); }); }); - describe('ensurePr(config)', () => { + describe('ensurePr(upgrades)', () => { let config; let existingPr; beforeEach(() => { @@ -81,7 +81,7 @@ describe('workers/pr', () => { existingPr = { title: 'Update dependency dummy to version 1.1.0', body: - 'This Pull Request updates dependency dummy from version `1.0.0` to `1.1.0`\n\n', + 'This Pull Request updates dependency dummy from version `1.0.0` to `1.1.0`\n\nNo changelog available', displayNumber: 'Existing PR', }; }); @@ -89,45 +89,45 @@ describe('workers/pr', () => { config.api.getBranchPr = jest.fn(() => { throw new Error('oops'); }); - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toBe(null); }); it('should return null if waiting for success', async () => { config.api.getBranchStatus = jest.fn(() => 'failed'); config.prCreation = 'status-success'; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toBe(null); }); it('should create PR if success', async () => { config.api.getBranchStatus = jest.fn(() => 'success'); config.api.getBranchPr = jest.fn(); config.prCreation = 'status-success'; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); }); it('should return null if waiting for not pending', async () => { config.api.getBranchStatus = jest.fn(() => 'pending'); config.prCreation = 'not-pending'; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toBe(null); }); it('should create PR if no longer pending', async () => { config.api.getBranchStatus = jest.fn(() => 'failed'); config.api.getBranchPr = jest.fn(); config.prCreation = 'not-pending'; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); }); it('should create new branch if none exists', async () => { config.api.getBranchPr = jest.fn(); - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); }); it('should add labels to new PR', async () => { config.api.getBranchPr = jest.fn(); config.api.addLabels = jest.fn(); config.labels = ['foo']; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); expect(config.api.addLabels.mock.calls.length).toBe(1); }); @@ -135,7 +135,7 @@ describe('workers/pr', () => { config.api.getBranchPr = jest.fn(); config.api.addLabels = jest.fn(); config.labels = []; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); expect(config.api.addLabels.mock.calls.length).toBe(0); }); @@ -145,7 +145,7 @@ describe('workers/pr', () => { config.api.addReviewers = jest.fn(); config.assignees = ['bar']; config.reviewers = ['baz']; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); expect(config.api.addAssignees.mock.calls.length).toBe(1); expect(config.api.addReviewers.mock.calls.length).toBe(1); @@ -157,7 +157,7 @@ describe('workers/pr', () => { config.assignees = ['bar']; config.reviewers = ['baz']; config.automerge = 'any'; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); expect(config.api.addAssignees.mock.calls.length).toBe(0); expect(config.api.addReviewers.mock.calls.length).toBe(0); @@ -170,7 +170,7 @@ describe('workers/pr', () => { config.reviewers = ['baz']; config.upgradeType = 'minor'; config.automerge = 'minor'; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); expect(config.api.addAssignees.mock.calls.length).toBe(0); expect(config.api.addReviewers.mock.calls.length).toBe(0); @@ -183,7 +183,7 @@ describe('workers/pr', () => { config.reviewers = ['baz']; config.upgradeType = 'major'; config.automerge = 'minor'; - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); expect(config.api.addAssignees.mock.calls.length).toBe(1); expect(config.api.addReviewers.mock.calls.length).toBe(1); @@ -194,7 +194,7 @@ describe('workers/pr', () => { config.newVersion = '1.1.0'; config.api.getBranchPr = jest.fn(() => existingPr); config.api.updatePr = jest.fn(); - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); expect(pr).toMatchObject(existingPr); }); it('should return modified existing PR', async () => { @@ -203,10 +203,10 @@ describe('workers/pr', () => { config.newVersion = '1.2.0'; config.api.getBranchPr = jest.fn(() => existingPr); config.api.updatePr = jest.fn(); - const pr = await prWorker.ensurePr(config); + const pr = await prWorker.ensurePr([config]); const updatedPr = Object.assign(existingPr, { body: - 'This Pull Request updates dependency dummy from version `1.0.0` to `1.2.0`\n\n', + 'This Pull Request updates dependency dummy from version `1.0.0` to `1.2.0`\n\nNo changelog available', }); expect(pr).toMatchObject(updatedPr); });