diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts index 7d7f9d729f08c3c2bb159b49097174d9a78c0738..7fbf76f36e2dde3063a634854a42eda4bc23eb58 100644 --- a/lib/workers/repository/process/lookup/filter.ts +++ b/lib/workers/repository/process/lookup/filter.ts @@ -4,6 +4,8 @@ import * as allVersioning from '../../../../versioning'; import { Release } from '../../../../datasource'; import { CONFIG_VALIDATION } from '../../../../constants/error-messages'; import * as npmVersioning from '../../../../versioning/npm'; +import * as pep440 from '../../../../versioning/pep440'; +import * as poetryVersioning from '../../../../versioning/poetry'; import { regEx } from '../../../../util/regex'; export interface FilterConfig { @@ -95,6 +97,17 @@ export function filterVersions( filteredVersions = filteredVersions.filter((v) => semver.satisfies(semver.coerce(v), allowedVersions) ); + } else if ( + versioning === poetryVersioning.id && + pep440.isValid(allowedVersions) + ) { + logger.debug( + { depName: config.depName }, + 'Falling back to pypi syntax for allowedVersions' + ); + filteredVersions = filteredVersions.filter((v) => + pep440.matches(v, allowedVersions) + ); } else { const error = new Error(CONFIG_VALIDATION); error.configFile = 'config'; diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index d3ff35ed83c0c965296218b16d95a46af6390ed9..698a49a0062b4ba51bcfdb8fd556f92fd7fd0934 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -13,6 +13,7 @@ import * as dockerVersioning from '../../../../versioning/docker'; import * as gitVersioning from '../../../../versioning/git'; import * as npmVersioning from '../../../../versioning/npm'; import * as pep440Versioning from '../../../../versioning/pep440'; +import * as poetryVersioning from '../../../../versioning/poetry'; import * as datasourceNpm from '../../../../datasource/npm'; import * as datasourcePypi from '../../../../datasource/pypi'; import * as datasourcePackagist from '../../../../datasource/packagist'; @@ -171,6 +172,15 @@ describe('workers/repository/process/lookup', () => { nock('https://registry.npmjs.org').get('/q').reply(200, qJson); expect((await lookup.lookupUpdates(config)).updates).toHaveLength(1); }); + it('falls back to pep440 syntax allowedVersions', async () => { + config.currentValue = '0.4.0'; + config.allowedVersions = '==0.9.4'; + config.depName = 'q'; + config.versioning = poetryVersioning.id; // this doesn't make sense but works for this test + config.datasource = datasourceNpm.id; // this doesn't make sense but works for this test + nock('https://registry.npmjs.org').get('/q').reply(200, qJson); + expect((await lookup.lookupUpdates(config)).updates).toHaveLength(1); + }); it('skips invalid allowedVersions', async () => { config.currentValue = '0.4.0'; config.allowedVersions = 'less than 1';