From a13b59571bd550d7a00054cc1479bf64f478cff3 Mon Sep 17 00:00:00 2001 From: Kieran <kieran@supportpal.com> Date: Wed, 29 Jul 2020 13:23:39 +0100 Subject: [PATCH] fix(packagist): prevent packages.json being added twice (#6853) Co-authored-by: Rhys Arkins <rhys@arkins.net> Co-authored-by: Michael Kriese <michael.kriese@visualon.de> --- lib/manager/composer/__fixtures__/composer4.json | 4 ++++ .../composer/__snapshots__/extract.spec.ts.snap | 1 + lib/manager/composer/extract.spec.ts | 2 +- lib/manager/composer/extract.ts | 13 ++++++++++++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/manager/composer/__fixtures__/composer4.json b/lib/manager/composer/__fixtures__/composer4.json index 89e3d1dd42..2a1f21d3ec 100644 --- a/lib/manager/composer/__fixtures__/composer4.json +++ b/lib/manager/composer/__fixtures__/composer4.json @@ -15,6 +15,10 @@ { "type": "composer", "url": "https://wpackagist.org" + }, + { + "type": "composer", + "url": "https://gitlab.vendor.com/api/v4/group/2/-/packages/composer/packages.json" } ], "require": { diff --git a/lib/manager/composer/__snapshots__/extract.spec.ts.snap b/lib/manager/composer/__snapshots__/extract.spec.ts.snap index d29731eb95..e51fb13efe 100644 --- a/lib/manager/composer/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/composer/__snapshots__/extract.spec.ts.snap @@ -600,6 +600,7 @@ Object { ], "registryUrls": Array [ "https://wpackagist.org", + "https://gitlab.vendor.com/api/v4/group/2/-/packages/composer", "https://packagist.org", ], } diff --git a/lib/manager/composer/extract.spec.ts b/lib/manager/composer/extract.spec.ts index 17a4f48071..ff3fe792f1 100644 --- a/lib/manager/composer/extract.spec.ts +++ b/lib/manager/composer/extract.spec.ts @@ -58,7 +58,7 @@ describe('lib/manager/composer/extract', () => { it('extracts repositories and registryUrls', async () => { const res = await extractPackageFile(requirements4, packageFile); expect(res).toMatchSnapshot(); - expect(res.registryUrls).toHaveLength(2); + expect(res.registryUrls).toHaveLength(3); }); it('extracts object repositories and registryUrls with lock file', async () => { fs.readLocalFile.mockResolvedValue(requirements5Lock); diff --git a/lib/manager/composer/extract.ts b/lib/manager/composer/extract.ts index 1a53277532..28d64d14f4 100644 --- a/lib/manager/composer/extract.ts +++ b/lib/manager/composer/extract.ts @@ -29,6 +29,17 @@ interface ComposerConfig { 'require-dev': Record<string, string>; } +/** + * The regUrl is expected to be a base URL. GitLab composer repository installation guide specifies + * to use a base URL containing packages.json. Composer still works in this scenario by determining + * whether to add / remove packages.json from the URL. + * + * See https://github.com/composer/composer/blob/750a92b4b7aecda0e5b2f9b963f1cb1421900675/src/Composer/Repository/ComposerRepository.php#L815 + */ +function transformRegUrl(url: string): string { + return url.replace(/(\/packages\.json)$/, ''); +} + /** * Parse the repositories field from a composer.json * @@ -53,7 +64,7 @@ function parseRepositories( repositories[name] = repo; break; case 'composer': - registryUrls.push(repo.url); + registryUrls.push(transformRegUrl(repo.url)); break; case 'package': logger.debug( -- GitLab