fix(composer): handle non-array repositories

This commit is contained in:
Rhys Arkins 2018-10-16 06:33:42 +02:00
parent b7123806f4
commit 956d198f89
6 changed files with 246 additions and 1 deletions

View file

@ -187,6 +187,8 @@ async function getPkgReleases(purl, config = {}) {
for (const regUrl of config.registryUrls) {
if (regUrl.type === 'composer') {
regUrls.push(regUrl.url);
} else if (regUrl.type === 'package') {
logger.info({ regUrl }, 'Skipping package repository entry');
} else if (regUrl['packagist.org'] !== false) {
logger.info({ regUrl }, 'Unsupported Packagist registry URL');
}

View file

@ -1,3 +1,4 @@
const is = require('@sindresorhus/is');
const semverComposer = require('../../versioning')('semverComposer');
module.exports = {
@ -58,7 +59,23 @@ async function extractDependencies(content, fileName) {
}
const res = { deps, composerLock };
if (packageJson.repositories) {
if (is.array(packageJson.repositories)) {
res.registryUrls = packageJson.repositories;
} else if (is.object(packageJson.repositories)) {
try {
res.registryUrls = [];
for (const repository of Object.values(packageJson.repositories)) {
res.registryUrls.push(repository);
}
} catch (err) /* istanbul ignore next */ {
logger.info({ err }, 'Error extracting composer repositories');
}
} /* istanbul ignore next */ else {
logger.info(
{ repositories: packageJson.repositories },
'Unknown composer repositories'
);
}
}
return res;
}

View file

@ -0,0 +1,66 @@
{
"name": "asha23/arlo-timber-framework",
"type": "project",
"license": "MIT",
"description": "A Composer Framework to help you get WordPress with Timber up and running in around a minute",
"authors": [{
"name": "Ash Whiting",
"email": "ash_whiting@hotmail.com"
}],
"keywords": [
"Arlo", "wordpress framework", "base theme", "wordpress", "composer", "vagrant", "wp"
],
"repositories": {
"wp-packagist": {
"type": "composer",
"url": "https://wpackagist.org"
},
"theme": {
"type": "package",
"package": {
"name": "asha23/wp-seed-timber",
"type": "wordpress-theme",
"version": "1.2.6",
"dist": {
"type": "zip",
"url": "https://github.com/asha23/wp-seed-timber/archive/v1.2.6.zip"
}
}
},
"wp-sync-db": {
"type": "package",
"package": {
"name": "wp-sync-db/wp-sync-db",
"type": "wordpress-plugin",
"version": "1.5",
"dist": {
"type": "zip",
"url": "https://github.com/corysimmons/wp-sync-db/archive/1.6.zip"
}
}
}
},
"require": {
"php": ">=5.5",
"composer/installers": "~1.0.12",
"johnpbloch/wordpress": "*",
"vlucas/phpdotenv": "^2.0.1",
"oscarotero/env": "^1.0",
"wpackagist-plugin/tinymce-advanced": "*",
"wpackagist-plugin/acf-content-analysis-for-yoast-seo": "*",
"wpackagist-plugin/duplicate-post": "*",
"wpackagist-plugin/simple-image-sizes": "*",
"wpackagist-plugin/wordpress-seo": "*",
"wpackagist-plugin/timber-library": "*",
"wp-sync-db/wp-sync-db": "*",
"asha23/wp-seed-timber": "*"
},
"extra": {
"installer-paths": {
"web/content/plugins/{$name}/": ["type:wordpress-plugin"],
"web/content/themes/{$name}/": ["type:wordpress-theme"]
},
"wordpress-install-dir": "web/wp",
"content-install-dir": "web/content"
}
}

View file

@ -29,6 +29,18 @@ describe('datasource/packagist', () => {
{
type: 'unknown',
},
{
type: 'package',
package: {
name: 'abc/def',
type: 'wordpress-theme',
version: '1.2.6',
dist: {
type: 'zip',
url: 'https://github.com/abc/def/archive/v1.2.6.zip',
},
},
},
{
'packagist.org': false,
},

View file

@ -500,6 +500,145 @@ Object {
}
`;
exports[`lib/manager/composer/extract extractDependencies() extracts object registryUrls 1`] = `
Object {
"composerLock": false,
"deps": Array [
Object {
"currentValue": ">=5.5",
"depName": "php",
"depType": "require",
"purl": "pkg:packagist/php",
"skipReason": "unsupported",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "~1.0.12",
"depName": "composer/installers",
"depType": "require",
"purl": "pkg:packagist/composer/installers",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "johnpbloch/wordpress",
"depType": "require",
"purl": "pkg:packagist/johnpbloch/wordpress",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "^2.0.1",
"depName": "vlucas/phpdotenv",
"depType": "require",
"purl": "pkg:packagist/vlucas/phpdotenv",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "^1.0",
"depName": "oscarotero/env",
"depType": "require",
"purl": "pkg:packagist/oscarotero/env",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "wpackagist-plugin/tinymce-advanced",
"depType": "require",
"purl": "pkg:packagist/wpackagist-plugin/tinymce-advanced",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "wpackagist-plugin/acf-content-analysis-for-yoast-seo",
"depType": "require",
"purl": "pkg:packagist/wpackagist-plugin/acf-content-analysis-for-yoast-seo",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "wpackagist-plugin/duplicate-post",
"depType": "require",
"purl": "pkg:packagist/wpackagist-plugin/duplicate-post",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "wpackagist-plugin/simple-image-sizes",
"depType": "require",
"purl": "pkg:packagist/wpackagist-plugin/simple-image-sizes",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "wpackagist-plugin/wordpress-seo",
"depType": "require",
"purl": "pkg:packagist/wpackagist-plugin/wordpress-seo",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "wpackagist-plugin/timber-library",
"depType": "require",
"purl": "pkg:packagist/wpackagist-plugin/timber-library",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "wp-sync-db/wp-sync-db",
"depType": "require",
"purl": "pkg:packagist/wp-sync-db/wp-sync-db",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
Object {
"currentValue": "*",
"depName": "asha23/wp-seed-timber",
"depType": "require",
"purl": "pkg:packagist/asha23/wp-seed-timber",
"skipReason": "any-version",
"versionScheme": "semverComposer",
},
],
"registryUrls": Array [
Object {
"type": "composer",
"url": "https://wpackagist.org",
},
Object {
"package": Object {
"dist": Object {
"type": "zip",
"url": "https://github.com/asha23/wp-seed-timber/archive/v1.2.6.zip",
},
"name": "asha23/wp-seed-timber",
"type": "wordpress-theme",
"version": "1.2.6",
},
"type": "package",
},
Object {
"package": Object {
"dist": Object {
"type": "zip",
"url": "https://github.com/corysimmons/wp-sync-db/archive/1.6.zip",
},
"name": "wp-sync-db/wp-sync-db",
"type": "wordpress-plugin",
"version": "1.5",
},
"type": "package",
},
],
}
`;
exports[`lib/manager/composer/extract extractDependencies() extracts registryUrls 1`] = `
Object {
"composerLock": false,

View file

@ -11,6 +11,10 @@ const requirements2 = fs.readFileSync(
'test/_fixtures/composer/composer2.json',
'utf8'
);
const requirements3 = fs.readFileSync(
'test/_fixtures/composer/composer3.json',
'utf8'
);
describe('lib/manager/composer/extract', () => {
describe('extractDependencies()', () => {
@ -33,6 +37,11 @@ describe('lib/manager/composer/extract', () => {
expect(res).toMatchSnapshot();
expect(res.registryUrls).toHaveLength(1);
});
it('extracts object registryUrls', async () => {
const res = await extractDependencies(requirements3, packageFile);
expect(res).toMatchSnapshot();
expect(res.registryUrls).toHaveLength(3);
});
it('extracts dependencies with lock file', async () => {
platform.getFile.mockReturnValueOnce('some content');
const res = await extractDependencies(requirements1, packageFile);