diff --git a/lib/versioning/docker/index.js b/lib/versioning/docker/index.js index 1124b4f4d564f9138196361305f8b107393e0dd8..f0a3866de36dcf50510de97d35119c9a06b183c6 100644 --- a/lib/versioning/docker/index.js +++ b/lib/versioning/docker/index.js @@ -1,96 +1,8 @@ -function parse(version) { - const [prefix, suffix] = version.split('-'); - const release = prefix.split('.').map(Number); - if (release.some(Number.isNaN)) { - return null; - } - return { release, suffix: suffix || '' }; -} +const semver = require('../semver'); -function compare(version1, vervion2) { - const parsed1 = parse(version1); - const parsed2 = parse(vervion2); - const length = Math.max(parsed1.release.length, parsed2.release.length); - for (let i = 0; i < length; i += 1) { - const part1 = parsed1.release[i]; - const part2 = parsed2.release[i]; - // shorter is bigger 2.1 > 2.1.1 - if (part1 === undefined) { - return 1; - } - if (part2 === undefined) { - return -1; - } - if (part1 !== part2) { - return part1 - part2; - } - } - // equals - return parsed2.suffix.localeCompare(parsed1.suffix); -} - -function equals(version, other) { - return compare(version, other) === 0; -} -function getPart(version, index) { - const parsed = parse(version); - return parsed && parsed.release.length > index ? parsed.release[index] : null; -} -function getMajor(version) { - return getPart(version, 0); -} -function getMinor(version) { - return getPart(version, 1); -} -function getPatch(version) { - return getPart(version, 2); -} -function isGreaterThan(version, other) { - return compare(version, other) > 0; -} -function isLessThanRange(version, range) { - return compare(version, range) < 0; -} -function isValid(version) { - const parsed = parse(version); - return parsed ? version : null; -} - -// docker does not have ranges, so versions has to be equal -function maxSatisfyingVersion(versions, range) { - return versions.find(v => equals(v, range)) || null; -} -function minSatisfyingVersion(versions, range) { - return versions.find(v => equals(v, range)) || null; -} -function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) { - return toVersion; -} -function sortVersions(version, other) { - return compare(version, other); -} - -function isCompatible(version, range) { - const parsed1 = parse(version); - const parsed2 = parse(range); - return parsed1.release.length === parsed2.release.length; -} +const isValid = input => semver.isVersion(input); module.exports = { - equals, - getMajor, - getMinor, - getPatch, - isCompatible, - isGreaterThan, - isLessThanRange, - isSingleVersion: isValid, - isStable: isValid, + ...semver, isValid, - isVersion: isValid, - matches: equals, - maxSatisfyingVersion, - minSatisfyingVersion, - getNewValue, - sortVersions, }; diff --git a/lib/versioning/pep440/index.js b/lib/versioning/pep440/index.js index 9b128f514ee4c5519583c687d482c8468a538839..f63c58a2c26233089d704cdcd2667547f13ec651 100644 --- a/lib/versioning/pep440/index.js +++ b/lib/versioning/pep440/index.js @@ -45,7 +45,6 @@ module.exports = { getMajor, getMinor, getPatch, - isCompatible: isVersion, isGreaterThan, isSingleVersion, isStable, diff --git a/lib/versioning/semver-composer/index.js b/lib/versioning/semver-composer/index.js index 9fee015a7a876bfbb368f111621791b1a5eba286..064caee4202744dbd0d6263e56f405fa2c5298e5 100644 --- a/lib/versioning/semver-composer/index.js +++ b/lib/versioning/semver-composer/index.js @@ -128,7 +128,6 @@ module.exports = { getMajor, getMinor, getPatch, - isCompatible: isVersion, isGreaterThan, isLessThanRange, isSingleVersion, diff --git a/lib/versioning/semver/index.js b/lib/versioning/semver/index.js index c2e01356a228f95fcc6e9d19ca54ad1075303bc3..96ec9bfee7d12aced323ff4868ec075601626304 100644 --- a/lib/versioning/semver/index.js +++ b/lib/versioning/semver/index.js @@ -32,7 +32,6 @@ module.exports = { getMajor, getMinor, getPatch, - isCompatible: isVersion, isGreaterThan, isLessThanRange, isSingleVersion, diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js index dcc7357a271bcec2bc5f487f8598c2a5235e25bd..f31c47a784b4638df0103c9da8500136f02d4307 100644 --- a/lib/workers/repository/process/lookup/index.js +++ b/lib/workers/repository/process/lookup/index.js @@ -21,7 +21,6 @@ async function lookupUpdates(config) { getMinor, isGreaterThan, isSingleVersion, - isCompatible, isValid, isVersion, matches, @@ -129,9 +128,6 @@ async function lookupUpdates(config) { dependency.latestVersion, allVersions, releases - ).filter(version => - // Leave only compatible versions - isCompatible(version, currentValue) ); const buckets = {}; for (const toVersion of filteredVersions) { diff --git a/test/versioning/docker.spec.js b/test/versioning/docker.spec.js index 72acd0755e8258248c501a22e3e75b818c963f1d..215d2f85c81080ad89561ef5917d61dd0dbc0d21 100644 --- a/test/versioning/docker.spec.js +++ b/test/versioning/docker.spec.js @@ -1,121 +1,10 @@ const docker = require('../../lib/versioning')('docker'); -const semver = require('../../lib/versioning')('semver'); describe('docker.isValid(input)', () => { - describe('isValid(version)', () => { - it('should support all versions length', () => { - expect(docker.isValid('1.2.3')).toBe('1.2.3'); - expect(docker.isValid('18.04')).toBe('18.04'); - expect(docker.isValid('10.1')).toBe('10.1'); - expect(docker.isValid('3')).toBe('3'); - expect(docker.isValid('foo')).toBe(null); - }); + it('should return null for short version', () => { + expect(!!docker.isValid('3.7')).toBe(false); }); - describe('isValid(version)', () => { - it('should support all versions length', () => { - expect(docker.getMajor('1.2.3')).toBe(1); - expect(docker.getMajor('18.04')).toBe(18); - expect(docker.getMajor('10.1')).toBe(10); - expect(docker.getMajor('3')).toBe(3); - expect(docker.getMajor('foo')).toBe(null); - }); - }); - describe('getMinor(version)', () => { - it('should support all versions length', () => { - expect(docker.getMinor('1.2.3')).toBe(2); - expect(docker.getMinor('18.04')).toBe(4); - expect(docker.getMinor('10.1')).toBe(1); - expect(docker.getMinor('3')).toBe(null); - expect(docker.getMinor('foo')).toBe(null); - }); - }); - describe('getPatch(version)', () => { - it('should support all versions length', () => { - expect(docker.getPatch('1.2.3')).toBe(3); - expect(docker.getPatch('18.04')).toBe(null); - expect(docker.getPatch('10.1')).toBe(null); - expect(docker.getPatch('3')).toBe(null); - expect(docker.getPatch('foo')).toBe(null); - }); - }); - - describe('isGreaterThan(version, other)', () => { - it('should support all versions length', () => { - expect(docker.isGreaterThan('1.2.3', '1.2')).toBe(false); - expect(docker.isGreaterThan('18.04', '18.1')).toBe(true); - expect(docker.isGreaterThan('10.1', '10.1.2')).toBe(true); - expect(docker.isGreaterThan('3', '2')).toBe(true); - expect(docker.isGreaterThan('1.2.3', '1.2.3')).toBe(false); - }); - }); - describe('isLessThanRange(version, range)', () => { - it('should support all versions length', () => { - expect(docker.isLessThanRange('1.2.3', '2.0')).toBe(true); - expect(docker.isLessThanRange('18.04', '18.1')).toBe(false); - expect(docker.isLessThanRange('10.1', '10.0.4')).toBe(false); - expect(docker.isLessThanRange('3', '4.0')).toBe(true); - expect(docker.isLessThanRange('1.2', '1.3.4')).toBe(true); - }); - }); - describe('equals(version, other)', () => { - it('should support all versions length', () => { - expect(docker.equals('1.2.3', '1.2.3')).toBe(true); - expect(docker.equals('18.04', '18.4')).toBe(true); - expect(docker.equals('10.0', '10.0.4')).toBe(false); - expect(docker.equals('3', '4.0')).toBe(false); - expect(docker.equals('1.2', '1.2.3')).toBe(false); - }); - }); - describe('equals(version, other)', () => { - it('should support all versions length', () => { - expect(docker.equals('1.2.3', '1.2.3')).toBe(true); - expect(docker.equals('18.04', '18.4')).toBe(true); - expect(docker.equals('10.0', '10.0.4')).toBe(false); - expect(docker.equals('3', '4.0')).toBe(false); - expect(docker.equals('1.2', '1.2.3')).toBe(false); - }); - }); - describe('maxSatisfyingVersion(versions, range)', () => { - it('should support all versions length', () => { - [docker.minSatisfyingVersion, docker.maxSatisfyingVersion].forEach( - max => { - const versions = [ - '0.9.8', - '1.1.1', - '1.1', - '1.2.3', - '1.2', - '1', - '2.2.2', - '2.2', - '2', - ]; - // returns range if found - expect(max(versions, '1.2.3')).toBe('1.2.3'); - expect(max(versions, '1.2')).toBe('1.2'); - expect(max(versions, '1')).toBe('1'); - // return null if not found - expect(max(versions, '1.3')).toBe(null); - expect(max(versions, '0.9')).toBe(null); - } - ); - }); - }); - describe('sortVersions(v1, v2)', () => { - it('behaves like semver.sortVersions', () => { - [ - ['1.1.1', '1.2.3'], - ['1.2.3', '1.3.4'], - ['2.0.1', '1.2.3'], - ['1.2.3', '0.9.5'], - ].forEach(pair => { - expect(docker.sortVersions(...pair)).toBe(semver.sortVersions(...pair)); - }); - }); - }); - describe('getNewValue(', () => { - it('returns toVersion', () => { - expect(docker.getNewValue(null, null, null, '1.2.3')).toBe('1.2.3'); - }); + it('should support semver', () => { + expect(!!docker.isValid('1.2.3')).toBe(true); }); }); diff --git a/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap b/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap index e68236b70763fb795f062ed532b0deb4937c0118..b62afc274869ae828daf981442a408111b66b29b 100644 --- a/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap +++ b/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap @@ -847,116 +847,6 @@ Array [ exports[`manager/npm/lookup .lookupUpdates() should warn if no version matches dist-tag 1`] = `Array []`; -exports[`manager/npm/lookup .lookupUpdates() skips uncompatible versions for 8 1`] = ` -Object { - "changelogUrl": undefined, - "homepage": undefined, - "releases": Array [ - Object { - "version": "8", - }, - Object { - "version": "9", - }, - ], - "repositoryUrl": null, - "updates": Array [ - Object { - "canBeUnpublished": undefined, - "fromVersion": "8", - "isSingleVersion": true, - "newMajor": 9, - "newMinor": null, - "newValue": "9", - "releaseTimestamp": undefined, - "toVersion": "9", - "updateType": "major", - }, - ], - "warnings": Array [], -} -`; - -exports[`manager/npm/lookup .lookupUpdates() skips uncompatible versions for 8.1 1`] = ` -Object { - "changelogUrl": undefined, - "homepage": undefined, - "releases": Array [ - Object { - "version": "8.1", - }, - Object { - "version": "8.2", - }, - Object { - "version": "9.0", - }, - ], - "repositoryUrl": null, - "updates": Array [ - Object { - "canBeUnpublished": undefined, - "fromVersion": "8.1", - "isSingleVersion": true, - "newMajor": 8, - "newMinor": 2, - "newValue": "8.2", - "releaseTimestamp": undefined, - "toVersion": "8.2", - "updateType": "minor", - }, - Object { - "canBeUnpublished": undefined, - "fromVersion": "8.1", - "isSingleVersion": true, - "newMajor": 9, - "newMinor": 0, - "newValue": "9.0", - "releaseTimestamp": undefined, - "toVersion": "9.0", - "updateType": "major", - }, - ], - "warnings": Array [], -} -`; - -exports[`manager/npm/lookup .lookupUpdates() skips uncompatible versions for 8.1.0 1`] = ` -Object { - "changelogUrl": undefined, - "homepage": undefined, - "releases": Array [ - Object { - "version": "8.1.0", - }, - Object { - "version": "8.1.5", - }, - Object { - "version": "8.2.0", - }, - Object { - "version": "8.2.5", - }, - ], - "repositoryUrl": null, - "updates": Array [ - Object { - "canBeUnpublished": undefined, - "fromVersion": "8.1.0", - "isSingleVersion": true, - "newMajor": 8, - "newMinor": 2, - "newValue": "8.2.5", - "releaseTimestamp": undefined, - "toVersion": "8.2.5", - "updateType": "minor", - }, - ], - "warnings": Array [], -} -`; - exports[`manager/npm/lookup .lookupUpdates() skips undefined values 1`] = ` Object { "skipReason": "unsupported-value", diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js index b15a3ca33b9529f63349bcdaccba0cc2ba35777e..6e78b359aaf25e40908c84f77c2eb63f7ae6a682 100644 --- a/test/workers/repository/process/lookup/index.spec.js +++ b/test/workers/repository/process/lookup/index.spec.js @@ -1027,29 +1027,6 @@ describe('manager/npm/lookup', () => { const res = await lookup.lookupUpdates(config); expect(res).toMatchSnapshot(); }); - ['8.1.0', '8.1', '8'].forEach(currentValue => { - it('skips uncompatible versions for ' + currentValue, async () => { - config.currentValue = currentValue; - config.depName = 'node'; - config.purl = 'pkg:docker/node'; - config.versionScheme = 'docker'; - docker.getPkgReleases.mockReturnValueOnce({ - releases: [ - { version: '8.1.0' }, - { version: '8.1.5' }, - { version: '8.1' }, - { version: '8.2.0' }, - { version: '8.2.5' }, - { version: '8.2' }, - { version: '8' }, - { version: '9.0' }, - { version: '9' }, - ], - }); - const res = await lookup.lookupUpdates(config); - expect(res).toMatchSnapshot(); - }); - }); it('handles digest pin for up to date version', async () => { config.currentValue = '8.1.0'; config.depName = 'node';