From a2ef094485c3082e08bf4f8e4bbd7664eac1f2b3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 6 Mar 2018 22:17:45 +0100 Subject: [PATCH] feat: support pinned versions in .travis.yml If the existing version was pinned, or if pinVersions=true, then Renovate will use pinned versions for all the new values. Closes #1605 --- lib/manager/travis/package.js | 12 ++++++++++-- .../travis/__snapshots__/package.spec.js.snap | 14 ++++++++++++++ test/manager/travis/package.spec.js | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/manager/travis/package.js b/lib/manager/travis/package.js index 4c3588a7f2..a9c21b10bd 100644 --- a/lib/manager/travis/package.js +++ b/lib/manager/travis/package.js @@ -1,4 +1,6 @@ const { isEqual } = require('lodash'); +const semver = require('semver'); +const { getRepoReleases } = require('../../datasource/github'); module.exports = { getPackageUpdates, @@ -13,19 +15,25 @@ const policies = { lts_latest: [8], }; -function getPackageUpdates(config) { +async function getPackageUpdates(config) { logger.debug('travis.getPackageUpdates()'); let { supportPolicy } = config; if (!(supportPolicy && supportPolicy.length)) { supportPolicy = ['lts']; } - const newVersion = supportPolicy + let newVersion = supportPolicy .map(policy => policies[policy]) .reduce((result, policy) => result.concat(policy), []) .sort() // sort combined array .reverse() // we want to order latest to oldest .map(version => `${version}`); // convert to strings logger.debug({ newVersion }); + if (config.pinVersions || semver.valid(config.currentVersion[0])) { + const releases = await getRepoReleases('nodejs/node'); + newVersion = newVersion.map(version => + semver.maxSatisfying(releases, version).replace(/^v/, '') + ); + } if (isEqual([...config.currentVersion].sort(), [...newVersion].sort())) { return []; } diff --git a/test/manager/travis/__snapshots__/package.spec.js.snap b/test/manager/travis/__snapshots__/package.spec.js.snap index 267bdc40a1..bb6c31a3bf 100644 --- a/test/manager/travis/__snapshots__/package.spec.js.snap +++ b/test/manager/travis/__snapshots__/package.spec.js.snap @@ -1,5 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`lib/workers/package/node getPackageUpdates detects pinning 1`] = ` +Array [ + Object { + "isRange": true, + "newVersion": Array [ + "8.9.4", + "6.11.0", + "4.4.4", + ], + "repositoryUrl": "https://github.com/nodejs/node", + }, +] +`; + exports[`lib/workers/package/node getPackageUpdates returns result if needing updates 1`] = ` Array [ Object { diff --git a/test/manager/travis/package.spec.js b/test/manager/travis/package.spec.js index 43aed6dbf7..e7ebcec7c0 100644 --- a/test/manager/travis/package.spec.js +++ b/test/manager/travis/package.spec.js @@ -1,5 +1,8 @@ const node = require('../../../lib/manager/travis/package'); const defaultConfig = require('../../../lib/config/defaults').getConfig(); +const githubDatasource = require('../../../lib/datasource/github'); + +jest.mock('../../../lib/datasource/github'); describe('lib/workers/package/node', () => { describe('getPackageUpdates', () => { @@ -18,5 +21,17 @@ describe('lib/workers/package/node', () => { config.currentVersion = ['6', '8']; expect(await node.getPackageUpdates(config)).toMatchSnapshot(); }); + it('detects pinning', async () => { + config.currentVersion = ['6.1.0', '8.4.0']; + githubDatasource.getRepoReleases.mockReturnValueOnce([ + 'v4.4.4', + 'v5.5.5', + 'v6.11.0', + 'v7.0.0', + 'v8.9.4', + 'v9.5.0', + ]); + expect(await node.getPackageUpdates(config)).toMatchSnapshot(); + }); }); }); -- GitLab