From 64403f2dca174b7686b0b06457f95d3ad0af6ea4 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 15 Jun 2019 14:06:45 -0700 Subject: [PATCH] Publish addons and xterm based on whether files changed Fixes #2165 --- bin/publish.js | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/bin/publish.js b/bin/publish.js index fd2475c4..3bacb585 100644 --- a/bin/publish.js +++ b/bin/publish.js @@ -15,19 +15,30 @@ if (isDryRun) { console.log('Publish dry run'); } -const publishablePackages = [ - path.resolve(__dirname, '..'), +const addonPackageDirs = [ path.resolve(__dirname, '../addons/xterm-addon-attach'), path.resolve(__dirname, '../addons/xterm-addon-fit'), path.resolve(__dirname, '../addons/xterm-addon-search'), path.resolve(__dirname, '../addons/xterm-addon-web-links') ]; -publishablePackages.forEach(p => checkAndPublishPackage(p)); +const changedFiles = getChangedFilesInCommit('HEAD'); + +// Publish xterm if any files were changed outside of the addons directory +if (changedFiles.some(e => e.search(/^addons\//) === -1)) { + checkAndPublishPackage(path.resolve(__dirname, '..')); +} + +// Publish addons if any files were changed inside of the addon +addonPackageDirs.forEach(p => { + const addon = path.basename(p); + if (changedFiles.some(e => e.indexOf(addon) !== -1)) { + checkAndPublishPackage(p); + } +}); function checkAndPublishPackage(packageDir) { const packageJson = require(path.join(packageDir, 'package.json')); - console.group('Checking package ' + packageJson.name); // Determine if this is a stable or beta release const publishedVersions = getPublishedVersions(packageJson); @@ -90,3 +101,11 @@ function getPublishedVersions(packageJson, version, tag) { } return versionsJson; } + +function getChangedFilesInCommit(commit) { + const args = ['log', '-m', '-1', '--name-only', `--pretty=format:`, commit]; + const result = cp.spawnSync('git', args); + const output = result.stdout.toString(); + const changedFiles = output.split('\n').filter(e => e.length > 0); + return changedFiles; +}