diff --git a/lib/workers/repository/updates/generate.js b/lib/workers/repository/updates/generate.js index 80023f16f1888e93c879f7c11481873ca93d44f7..7e0b073c50951e3742b9d8cfcbf671a0923fa55b 100644 --- a/lib/workers/repository/updates/generate.js +++ b/lib/workers/repository/updates/generate.js @@ -1,6 +1,7 @@ const handlebars = require('handlebars'); const semver = require('semver'); const { mergeChildConfig } = require('../../../config'); +const { DateTime } = require('luxon'); function generateBranchConfig(branchUpgrades) { logger.debug(`generateBranchConfig(${branchUpgrades.length})`); @@ -31,6 +32,7 @@ function generateBranchConfig(branchUpgrades) { logger.debug(`groupEligible: ${groupEligible}`); const useGroupSettings = hasGroupName && groupEligible; logger.debug(`useGroupSettings: ${useGroupSettings}`); + let releaseTimestamp; for (const branchUpgrade of branchUpgrades) { let upgrade = { ...branchUpgrade }; if (useGroupSettings) { @@ -110,6 +112,17 @@ function generateBranchConfig(branchUpgrades) { upgrade.prTitle = handlebars.compile(upgrade.prTitle)(upgrade); logger.debug(`${upgrade.branchName}, ${upgrade.prTitle}`); config.upgrades.push(upgrade); + if (upgrade.releaseTimestamp) { + if (releaseTimestamp) { + const existingStamp = DateTime.fromISO(releaseTimestamp); + const upgradeStamp = DateTime.fromISO(upgrade.releaseTimestamp); + if (upgradeStamp > existingStamp) { + releaseTimestamp = upgrade.releaseTimestamp; // eslint-disable-line + } + } else { + releaseTimestamp = upgrade.releaseTimestamp; // eslint-disable-line + } + } } if ( depNames.length === 2 && @@ -123,7 +136,7 @@ function generateBranchConfig(branchUpgrades) { config.hasTypes = true; } // Now assign first upgrade's config as branch config - return { ...config, ...config.upgrades[0] }; + return { ...config, ...config.upgrades[0], releaseTimestamp }; } module.exports = { diff --git a/test/workers/repository/updates/generate.spec.js b/test/workers/repository/updates/generate.spec.js index 41500860e43b3eab31b6006341c35bee95e6529c..3145e22bf92f1d62414b34a1f53df86fc6602803 100644 --- a/test/workers/repository/updates/generate.spec.js +++ b/test/workers/repository/updates/generate.spec.js @@ -18,6 +18,7 @@ describe('workers/repository/updates/generate', () => { branchName: 'some-branch', prTitle: 'some-title', lazyGrouping: true, + releaseTimestamp: '2017-02-07T20:01:41+00:00', foo: 1, group: { foo: 2, @@ -27,6 +28,7 @@ describe('workers/repository/updates/generate', () => { const res = generateBranchConfig(branch); expect(res.foo).toBe(1); expect(res.groupName).toBeUndefined(); + expect(res.releaseTimestamp).toBeDefined(); }); it('groups single upgrade if not lazyGrouping', () => { const branch = [ @@ -90,6 +92,7 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, + releaseTimestamp: '2017-02-07T20:01:41+00:00', }, { depName: 'some-other-dep', @@ -104,11 +107,13 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, + releaseTimestamp: '2017-02-06T20:01:41+00:00', }, ]; const res = generateBranchConfig(branch); expect(res.foo).toBe(2); expect(res.groupName).toBeDefined(); + expect(res.releaseTimestamp).toEqual('2017-02-07T20:01:41+00:00'); }); it('groups multiple upgrades different version', () => { const branch = [ @@ -125,6 +130,7 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, + releaseTimestamp: '2017-02-07T20:01:41+00:00', }, { depName: 'some-other-dep', @@ -139,6 +145,7 @@ describe('workers/repository/updates/generate', () => { group: { foo: 2, }, + releaseTimestamp: '2017-02-08T20:01:41+00:00', }, ]; const res = generateBranchConfig(branch); @@ -146,6 +153,7 @@ describe('workers/repository/updates/generate', () => { expect(res.singleVersion).toBeUndefined(); expect(res.recreateClosed).toBe(true); expect(res.groupName).toBeDefined(); + expect(res.releaseTimestamp).toEqual('2017-02-08T20:01:41+00:00'); }); it('uses semantic commits', () => { const branch = [