diff --git a/lib/datasource/git-tags/index.ts b/lib/datasource/git-tags/index.ts index 9f62f00da51ec30c67800d90448aebd5e4355fc4..7346469cd65643e51f5e9ac27bca31f4cde249ca 100644 --- a/lib/datasource/git-tags/index.ts +++ b/lib/datasource/git-tags/index.ts @@ -36,7 +36,7 @@ export async function getPkgReleases({ const result: ReleaseResult = { sourceUrl, releases: tags.map(tag => ({ - version: semver.isValid(tag), + version: tag, gitRef: tag, })), }; diff --git a/lib/versioning/composer/index.ts b/lib/versioning/composer/index.ts index a4a57a950f0c6805022a2b46a70116feb6a802aa..bf7cdc5cd8fe0d7082fdbd4d3e2d8bf54981f954 100644 --- a/lib/versioning/composer/index.ts +++ b/lib/versioning/composer/index.ts @@ -12,13 +12,14 @@ function padZeroes(input: string): string { } function composer2npm(input: string): string { - if (npm.isVersion(input)) { - return input; + const cleanInput = input.replace(/^v/, ''); + if (npm.isVersion(cleanInput)) { + return cleanInput; } - if (npm.isVersion(padZeroes(input))) { - return padZeroes(input); + if (npm.isVersion(padZeroes(cleanInput))) { + return padZeroes(cleanInput); } - let output = input; + let output = cleanInput; // ~4 to ^4 and ~4.1 to ^4.1 output = output.replace(/(?:^|\s)~([1-9][0-9]*(?:\.[0-9]*)?)(?: |$)/g, '^$1'); // ~0.4 to >=0.4 <1 diff --git a/lib/versioning/swift/index.ts b/lib/versioning/swift/index.ts index 8ec6dcc2f9281cc907c53664dd27727d03f1dd81..61b583bb71209c3e669ee8d48d20e4f0c8174205 100644 --- a/lib/versioning/swift/index.ts +++ b/lib/versioning/swift/index.ts @@ -24,9 +24,15 @@ export const isValid = (input: string): boolean => !!valid(input) || !!validRange(toSemverRange(input)); export const isVersion = (input: string): boolean => !!valid(input); const maxSatisfyingVersion = (versions: string[], range: string): string => - maxSatisfying(versions, toSemverRange(range)); + maxSatisfying( + versions.map(v => v.replace(/^v/, '')), + toSemverRange(range) + ); const minSatisfyingVersion = (versions: string[], range: string): string => - minSatisfying(versions, toSemverRange(range)); + minSatisfying( + versions.map(v => v.replace(/^v/, '')), + toSemverRange(range) + ); const isLessThanRange = (version: string, range: string): boolean => ltr(version, toSemverRange(range)); const matches = (version: string, range: string): boolean => diff --git a/lib/versioning/swift/range.ts b/lib/versioning/swift/range.ts index 7f15bf564f659e22943f93df1e15a8fdade7628b..cca8135e8b3f9f7c371ba46758830e3bf7815d21 100644 --- a/lib/versioning/swift/range.ts +++ b/lib/versioning/swift/range.ts @@ -36,7 +36,7 @@ function toSemverRange(range: string): string { function getNewValue({ currentValue, toVersion }: NewValueConfig): string { if (fromParam.test(currentValue)) { - return toVersion; + return toVersion.replace(/^v/, ''); } if (fromRange.test(currentValue)) { const [, version] = currentValue.match(fromRange); diff --git a/test/datasource/git-tags.spec.ts b/test/datasource/git-tags.spec.ts index c4a447da9bf85bc8f8330cb9b7032c7bc4a3c8a4..ef6f0d3b3b71b506900ceaca99aea536558d9d15 100644 --- a/test/datasource/git-tags.spec.ts +++ b/test/datasource/git-tags.spec.ts @@ -41,7 +41,7 @@ describe('datasource/git-tags', () => { lookupName, }); const result = versions.releases.map(x => x.version).sort(); - expect(result).toEqual(['0.0.1', '0.0.2']); + expect(result).toEqual(['0.0.1', 'v0.0.2']); }); }); }); diff --git a/test/versioning/composer.spec.ts b/test/versioning/composer.spec.ts index a7c3a70c631b454515d7e0df619cf6068fbb9975..4496b70b6f2431a2e5ce371fdbf90ba84b1cb204 100644 --- a/test/versioning/composer.spec.ts +++ b/test/versioning/composer.spec.ts @@ -75,6 +75,12 @@ describe('semver.maxSatisfyingVersion()', () => { '~4' ) ).toBe('4.2.0'); + expect( + semver.maxSatisfyingVersion( + ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'], + '~4' + ) + ).toBe('4.2.0'); expect( semver.maxSatisfyingVersion( ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], @@ -91,6 +97,12 @@ describe('semver.minSatisfyingVersion()', () => { '~4' ) ).toBe('4.0.0'); + expect( + semver.minSatisfyingVersion( + ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'], + '~4' + ) + ).toBe('4.0.0'); expect( semver.minSatisfyingVersion( ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], diff --git a/test/versioning/swift.spec.ts b/test/versioning/swift.spec.ts index 79a59835f076f570c443c49975f6704d8d1f6ffb..64c548400792d185910bfab39831ae9a5b81f83f 100644 --- a/test/versioning/swift.spec.ts +++ b/test/versioning/swift.spec.ts @@ -38,6 +38,7 @@ describe('isValid(input)', () => { }); it('should support simple semver', () => { expect(isValid('1.2.3')).toBe(true); + expect(isValid('v1.2.3')).toBe(true); }); it('should support semver with dash', () => { expect(isValid('1.2.3-foo')).toBe(true); @@ -58,22 +59,34 @@ describe('isValid(input)', () => { expect( minSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"') ).toBe('1.2.3'); + expect( + minSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"') + ).toBe('1.2.3'); expect( maxSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"') ).toBe('1.2.3'); + expect( + maxSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"') + ).toBe('1.2.3'); expect( maxSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..."1.2.4"') ).toBe('1.2.4'); expect(isLessThanRange('1.2.3', '..."1.2.4"')).toBe(false); + expect(isLessThanRange('v1.2.3', '..."1.2.4"')).toBe(false); expect(isLessThanRange('1.2.3', '"1.2.4"...')).toBe(true); + expect(isLessThanRange('v1.2.3', '"1.2.4"...')).toBe(true); + expect(matches('1.2.4', '..."1.2.4"')).toBe(true); + expect(matches('v1.2.4', '..."1.2.4"')).toBe(true); expect(matches('1.2.4', '..."1.2.3"')).toBe(false); + expect(matches('v1.2.4', '..."1.2.3"')).toBe(false); }); }); describe('getNewValue()', () => { it('supports range update', () => { [ ['1.2.3', 'auto', '1.2.3', '1.2.4', '1.2.3'], + ['v1.2.3', 'auto', 'v1.2.3', 'v1.2.4', 'v1.2.3'], ['from: "1.2.3"', 'auto', '1.2.3', '1.2.4', '1.2.4'], ['"1.2.3"...', 'auto', '1.2.3', '1.2.4', '"1.2.4"...'], ['"1.2.3"..."1.2.4"', 'auto', '1.2.3', '1.2.5', '"1.2.3"..."1.2.5"'],