Skip to content

Commit

Permalink
Add dependency unification script (#293)
Browse files Browse the repository at this point in the history
* Add dependency unification script

* Address comments

* Add use strict to unify script

* Address comments + fix lint
  • Loading branch information
Ace Nassri authored Jan 11, 2017
1 parent 2799aa5 commit 4e82315
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@
"system-test": "npm run st -- --verbose system-test/**/*.test.js **/system-test/**/*.test.js",
"system-cover": "npm run pretest && nyc --cache npm run system-test && nyc report --reporter=html",
"all-test": "npm run st -- --no-power-assert bigquery/system-test/*.test.js test/**/*.test.js **/test/**/*.test.js system-test/**/*.test.js **/system-test/**/*.test.js",
"all-cover": "npm run pretest && nyc --cache npm run all-test && nyc report --reporter=html"
"all-cover": "npm run pretest && nyc --cache npm run all-test && nyc report --reporter=html",
"unify": "node scripts/unify"
},
"devDependencies": {
"@google-cloud/bigquery": "0.6.0",
Expand Down
36 changes: 36 additions & 0 deletions scripts/unify
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
'use strict';

// Copyright 2016, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

const fs = require(`fs`);
const path = require(`path`);

const PROJECT_ROOT = path.join(__dirname, `..`);

// Get subdirectories with a `package.json` file
const directories = fs.readdirSync(PROJECT_ROOT)
.filter((dir) => fs.existsSync(path.join(PROJECT_ROOT, dir, `package.json`)));

// Dedupe package.json dependencies
// WARNING: This will fail if two different versions of the same package are required.
const pkgSet = {};
let pkgJson;
directories.forEach((dir) => {
pkgJson = JSON.parse(fs.readFileSync(path.join(PROJECT_ROOT, dir, `package.json`)));
Object.assign(pkgSet, pkgJson.dependencies);
});

// Update root-level package.json (by shelling to npm)
const spawn = require('child_process').spawn;
spawn(`yarn`, [`add`].concat(Object.keys(pkgSet).map(pkg => `${pkg}@${pkgSet[pkg]}`)));

0 comments on commit 4e82315

Please sign in to comment.