From 25c18e8e07d4d08f8ea2178e1e730799d655149f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Fri, 25 Oct 2019 17:29:38 +0200 Subject: [PATCH 1/6] conditional build for addons --- bin/install-addons.js | 40 ++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 41 insertions(+) create mode 100644 bin/install-addons.js diff --git a/bin/install-addons.js b/bin/install-addons.js new file mode 100644 index 00000000..b042552a --- /dev/null +++ b/bin/install-addons.js @@ -0,0 +1,40 @@ +const path = require('path'); +const cp = require('child_process'); +const fs = require('fs'); + +const PACKAGE_ROOT = path.join(__dirname, '..'); + +// install addon deps +const addonsPath = path.join(PACKAGE_ROOT, 'addons'); +if (fs.existsSync(addonsPath)) { + console.log('pulling addon dependencies...'); + + // whether to use yarn or npm + let hasYarn = false; + try { + cp.execSync('yarn --version').toString(); + hasYarn = true; + } catch(e) {} + + // walk all addon folders + fs.readdir(addonsPath, (err, files) => { + files.forEach(folder => { + const addonPath = path.join(addonsPath, folder); + + // install only if there are dependencies listed + const packageJson = require(path.join(addonPath, 'package.json')); + if ((packageJson.devDependencies && Object.keys(packageJson.devDependencies).length) + || (packageJson.dependencies && Object.keys(packageJson.dependencies).length)) + { + console.log('Preparing', folder); + if (hasYarn) { + cp.execSync('yarn', {cwd: addonPath}); + } else { + cp.execSync('npm install', {cwd: addonPath}); + } + } else { + console.log('Skipped', folder); + } + }); + }); +} diff --git a/package.json b/package.json index 8174bbf5..773d954a 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "repository": "https://github.com/xtermjs/xterm.js", "license": "MIT", "scripts": { + "postinstall": "node -e \"try { require('./bin/install-addons'); } catch(e) {}\"", "prepackage": "npm run build", "package": "webpack", "start": "node demo/start", From 6f8cbc56ebfd7e53c7e611244fe04017c13ccf86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Fri, 25 Oct 2019 18:07:32 +0200 Subject: [PATCH 2/6] skip folder w'o package.json; restrict linter to src folders --- bin/install-addons.js | 15 ++++++++++++--- package.json | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/bin/install-addons.js b/bin/install-addons.js index b042552a..0a3ebe0c 100644 --- a/bin/install-addons.js +++ b/bin/install-addons.js @@ -22,9 +22,18 @@ if (fs.existsSync(addonsPath)) { const addonPath = path.join(addonsPath, folder); // install only if there are dependencies listed - const packageJson = require(path.join(addonPath, 'package.json')); - if ((packageJson.devDependencies && Object.keys(packageJson.devDependencies).length) - || (packageJson.dependencies && Object.keys(packageJson.dependencies).length)) + // also skip addon if it does not contain any package.json + // (might happen after branch switches) + let packageJson; + try { + packageJson = require(path.join(addonPath, 'package.json')); + } catch (e) {} + if (packageJson + && ( + (packageJson.devDependencies && Object.keys(packageJson.devDependencies).length) + || (packageJson.dependencies && Object.keys(packageJson.dependencies).length) + ) + ) { console.log('Preparing', folder); if (hasYarn) { diff --git a/package.json b/package.json index 773d954a..7762cd84 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "prepackage": "npm run build", "package": "webpack", "start": "node demo/start", - "lint": "tslint 'src/**/*.ts' 'addons/**/*.ts'", + "lint": "tslint 'src/**/*.ts' 'addons/*/src/**/*.ts'", "test": "npm run test-unit", "posttest": "npm run lint", "test-api": "mocha \"**/*.api.js\"", From d733ce3e63d74a0ec4f02630fb241d7c2dab8569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Fri, 25 Oct 2019 19:27:29 +0200 Subject: [PATCH 3/6] add copyright note --- bin/install-addons.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/bin/install-addons.js b/bin/install-addons.js index 0a3ebe0c..bba0a9ea 100644 --- a/bin/install-addons.js +++ b/bin/install-addons.js @@ -1,3 +1,10 @@ +/** + * Copyright (c) 2019 The xterm.js authors. All rights reserved. + * @license MIT + * + * Script to initialize addon packages under "addons/" with outer deps. + */ + const path = require('path'); const cp = require('child_process'); const fs = require('fs'); From 04f828bc1aa1bf463bf325fd22d8442f75052d44 Mon Sep 17 00:00:00 2001 From: jerch Date: Fri, 25 Oct 2019 21:46:49 +0200 Subject: [PATCH 4/6] Update bin/install-addons.js Co-Authored-By: Daniel Imms --- bin/install-addons.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/install-addons.js b/bin/install-addons.js index bba0a9ea..23ae445a 100644 --- a/bin/install-addons.js +++ b/bin/install-addons.js @@ -34,7 +34,9 @@ if (fs.existsSync(addonsPath)) { let packageJson; try { packageJson = require(path.join(addonPath, 'package.json')); - } catch (e) {} + } catch (e) { + // swallow as changing branches can leave folders around + } if (packageJson && ( (packageJson.devDependencies && Object.keys(packageJson.devDependencies).length) From 03435a9f4d8542a0f05884f983875758bb4fc68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Fri, 25 Oct 2019 22:11:51 +0200 Subject: [PATCH 5/6] use prebuild instead of postinstall --- bin/install-addons.js | 2 -- package.json | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/bin/install-addons.js b/bin/install-addons.js index 23ae445a..83adea1f 100644 --- a/bin/install-addons.js +++ b/bin/install-addons.js @@ -29,8 +29,6 @@ if (fs.existsSync(addonsPath)) { const addonPath = path.join(addonsPath, folder); // install only if there are dependencies listed - // also skip addon if it does not contain any package.json - // (might happen after branch switches) let packageJson; try { packageJson = require(path.join(addonPath, 'package.json')); diff --git a/package.json b/package.json index 7762cd84..1bc7861e 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "repository": "https://github.com/xtermjs/xterm.js", "license": "MIT", "scripts": { - "postinstall": "node -e \"try { require('./bin/install-addons'); } catch(e) {}\"", "prepackage": "npm run build", "package": "webpack", "start": "node demo/start", @@ -17,6 +16,7 @@ "posttest": "npm run lint", "test-api": "mocha \"**/*.api.js\"", "test-unit": "node ./bin/test.js", + "prebuild": "node ./bin/install-addons.js", "build": "tsc -b ./tsconfig.all.json", "prepare": "npm run build", "prepublishOnly": "npm run package", From 5b3a093f13aded3d5165634fd109088b17dd303d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Sat, 26 Oct 2019 17:20:35 +0200 Subject: [PATCH 6/6] stick to prepare to avoid re-running yarn for addons everytime during build --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1bc7861e..fb9592c7 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,10 @@ "posttest": "npm run lint", "test-api": "mocha \"**/*.api.js\"", "test-unit": "node ./bin/test.js", - "prebuild": "node ./bin/install-addons.js", "build": "tsc -b ./tsconfig.all.json", - "prepare": "npm run build", + "prepare": "npm run setup", + "setup": "npm run build", + "presetup": "node ./bin/install-addons.js", "prepublishOnly": "npm run package", "watch": "tsc -b -w ./tsconfig.all.json --preserveWatchOutput", "benchmark": "NODE_PATH=./out xterm-benchmark -r 5 -c test/benchmark/benchmark.json",