diff options
author | Xianny <8582774+xianny@users.noreply.github.com> | 2019-02-05 18:58:30 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-05 18:58:30 +0800 |
commit | 703aa38a17dac2b1ff39cbee012956d36baa4e62 (patch) | |
tree | b8fabbd91234f3c1d4ea9a8c13620081534beee9 /packages/monorepo-scripts | |
parent | b2f35057a56faa82f31d8c5ef09249171dc130d2 (diff) | |
download | dexon-0x-contracts-703aa38a17dac2b1ff39cbee012956d36baa4e62.tar.gz dexon-0x-contracts-703aa38a17dac2b1ff39cbee012956d36baa4e62.tar.zst dexon-0x-contracts-703aa38a17dac2b1ff39cbee012956d36baa4e62.zip |
CI test for dependencies to have the same version (#1556)
* add failing CI for dependencies with multiple versions
* update dependencies
* increase bundlewatch maxsize for 0x.js
Diffstat (limited to 'packages/monorepo-scripts')
-rw-r--r-- | packages/monorepo-scripts/package.json | 6 | ||||
-rw-r--r-- | packages/monorepo-scripts/src/deps_versions.ts | 93 |
2 files changed, 71 insertions, 28 deletions
diff --git a/packages/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json index 187a80c93..b1e1f3ca1 100644 --- a/packages/monorepo-scripts/package.json +++ b/packages/monorepo-scripts/package.json @@ -32,13 +32,13 @@ }, "homepage": "https://github.com/0xProject/0x-monorepo/packages/monorepo-scripts/README.md", "devDependencies": { - "@types/glob": "^5.0.33", + "@types/glob": "5.0.35", "@types/mkdirp": "^0.5.2", "@types/node": "*", "@types/opn": "^5.1.0", "@types/rimraf": "^2.0.2", "@types/semver": "5.5.0", - "@types/yargs": "^10.0.0", + "@types/yargs": "^11.0.0", "depcheck": "^0.6.9", "make-promises-safe": "^1.1.0", "npm-run-all": "^4.1.2", @@ -55,7 +55,7 @@ "es6-promisify": "^5.0.0", "glob": "^7.1.2", "isomorphic-fetch": "2.2.1", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "mkdirp": "^0.5.1", "moment": "2.21.0", "opn": "^5.3.0", diff --git a/packages/monorepo-scripts/src/deps_versions.ts b/packages/monorepo-scripts/src/deps_versions.ts index 1053906b7..0bb255508 100644 --- a/packages/monorepo-scripts/src/deps_versions.ts +++ b/packages/monorepo-scripts/src/deps_versions.ts @@ -3,7 +3,7 @@ import chalk from 'chalk'; import * as fs from 'fs'; import { sync as globSync } from 'glob'; -import * as _ from 'lodash'; +import * as path from 'path'; import { utils } from './utils/utils'; @@ -17,11 +17,32 @@ interface VersionsByDependency { [depName: string]: Versions; } -const PACKAGE_JSON_GLOB = '../*/package.json'; +interface ParsedDependencies { + ignored: VersionsByDependency; + included: VersionsByDependency; +} + +const PACKAGE_JSON_GLOB = '../../*/package.json'; + +const config = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../package.json')).toString()).config; +const dependenciesWithIgnoredVersions: string[] = config.ignoreDependencyVersions.split(' '); +const packagesWithIgnoredVersions: string[] = config.ignoreDependencyVersionsForPackage.split(' '); + +if (require.main === module) { + const dependencies = parseDependencies(); + const ignoredMultiples = getDependenciesWithMultipleVersions(dependencies.ignored); + const multiples = getDependenciesWithMultipleVersions(dependencies.included); + printVersionsByDependency(multiples); + utils.log(`├── ${chalk.bold('IGNORED')}`); + printVersionsByDependency(ignoredMultiples); + if (Object.keys(multiples).length !== 0) { + utils.log(`Add space-separated exceptions to root package.json config.ignoreDependencyVersions`); + process.exit(1); + } +} -// tslint:disable:no-unused-variable -function getDependencies(path: string): Dependencies { - const file = fs.readFileSync(path).toString(); +function getDependencies(_path: string): Dependencies { + const file = fs.readFileSync(_path).toString(); const parsed = JSON.parse(file); const dependencies = { ...parsed.dependencies, @@ -30,27 +51,49 @@ function getDependencies(path: string): Dependencies { return dependencies; } -const files = globSync(PACKAGE_JSON_GLOB); -const versionsByDependency: VersionsByDependency = {}; -files.map(path => { - const [_1, packageName, _2] = path.split('/'); - const dependencies = getDependencies(path); - _.map(dependencies, (version: string, depName: string) => { - if (_.isUndefined(versionsByDependency[depName])) { - versionsByDependency[depName] = {}; - } - versionsByDependency[depName][packageName] = version; +function parseDependencies(): ParsedDependencies { + const files = globSync(path.join(__dirname, PACKAGE_JSON_GLOB)); + const parsedDependencies: ParsedDependencies = { + ignored: {}, + included: {}, + }; + files.map(_path => { + const pathParts = _path.split('/'); + const packageName = pathParts[pathParts.length - 2]; + const packageCategory = packagesWithIgnoredVersions.includes(packageName) ? 'ignored' : 'included'; + const dependencies = getDependencies(_path); + Object.keys(dependencies).forEach((depName: string) => { + const category = dependenciesWithIgnoredVersions.includes(depName) ? 'ignored' : packageCategory; + if (parsedDependencies[category][depName] === undefined) { + parsedDependencies[category][depName] = {}; + } + const version = dependencies[depName]; + parsedDependencies[category][depName][packageName] = version; + }); }); -}); + return parsedDependencies; +} + +function getDependenciesWithMultipleVersions(versionsByDependency: VersionsByDependency): VersionsByDependency { + return Object.keys(versionsByDependency) + .filter((depName: string) => hasMultipleVersions(versionsByDependency[depName])) + .reduce<VersionsByDependency>((obj, depName: string) => { + obj[depName] = versionsByDependency[depName]; + return obj; + }, {}); +} -_.map(versionsByDependency, (versions: Versions, depName: string) => { - if (_.uniq(_.values(versions)).length === 1) { - delete versionsByDependency[depName]; - } else { +function printVersionsByDependency(versionsByDependency: VersionsByDependency): void { + Object.keys(versionsByDependency).forEach((depName: string) => { + const versions: Versions = versionsByDependency[depName]; utils.log(chalk.bold(depName)); - _.map(versions, (version: string, packageName: string) => { - utils.log(`├── ${packageName} -> ${version}`); + Object.keys(versions).forEach((packageName: string) => { + utils.log(`├── ${packageName} -> ${versions[packageName]}`); }); - } -}); -// tslint:disable:no-unused-variable + }); +} + +function hasMultipleVersions(versions: Versions): boolean { + const uniques = new Set(Object.values(versions)); + return uniques.size > 1; +} |