From 15c99869f5f6929b7af36b53261e567df1a19f0a Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 15 Jun 2019 13:51:13 -0700 Subject: [PATCH] Start of publishing addons Part of #2165 --- addons/xterm-addon-attach/package.json | 2 +- addons/xterm-addon-fit/package.json | 2 +- addons/xterm-addon-search/package.json | 2 +- addons/xterm-addon-web-links/package.json | 2 +- bin/publish.js | 77 +++++++++++++---------- 5 files changed, 49 insertions(+), 36 deletions(-) diff --git a/addons/xterm-addon-attach/package.json b/addons/xterm-addon-attach/package.json index 1d72b144..84740e1e 100644 --- a/addons/xterm-addon-attach/package.json +++ b/addons/xterm-addon-attach/package.json @@ -1,6 +1,6 @@ { "name": "xterm-addon-attach", - "version": "0.1.0-beta11", + "version": "0.1.0", "author": { "name": "The xterm.js authors", "url": "https://xtermjs.org/" diff --git a/addons/xterm-addon-fit/package.json b/addons/xterm-addon-fit/package.json index 4ee8e1b7..6e553700 100644 --- a/addons/xterm-addon-fit/package.json +++ b/addons/xterm-addon-fit/package.json @@ -1,6 +1,6 @@ { "name": "xterm-addon-fit", - "version": "0.1.0-beta3", + "version": "0.1.0", "author": { "name": "The xterm.js authors", "url": "https://xtermjs.org/" diff --git a/addons/xterm-addon-search/package.json b/addons/xterm-addon-search/package.json index 02cb6695..5a607fe9 100644 --- a/addons/xterm-addon-search/package.json +++ b/addons/xterm-addon-search/package.json @@ -1,6 +1,6 @@ { "name": "xterm-addon-search", - "version": "0.1.0-beta6", + "version": "0.1.0", "author": { "name": "The xterm.js authors", "url": "https://xtermjs.org/" diff --git a/addons/xterm-addon-web-links/package.json b/addons/xterm-addon-web-links/package.json index a764a200..fd3945d3 100644 --- a/addons/xterm-addon-web-links/package.json +++ b/addons/xterm-addon-web-links/package.json @@ -1,6 +1,6 @@ { "name": "xterm-addon-web-links", - "version": "0.1.0-beta10", + "version": "0.1.0", "author": { "name": "The xterm.js authors", "url": "https://xtermjs.org/" diff --git a/bin/publish.js b/bin/publish.js index d9e2798e..fd2475c4 100644 --- a/bin/publish.js +++ b/bin/publish.js @@ -6,7 +6,6 @@ const cp = require('child_process'); const fs = require('fs'); const path = require('path'); -const packageJson = require('../package.json'); // Setup auth fs.writeFileSync(`${process.env['HOME']}/.npmrc`, `//registry.npmjs.org/:_authToken=${process.env['NPM_AUTH_TOKEN']}`); @@ -16,36 +15,53 @@ if (isDryRun) { console.log('Publish dry run'); } -// Determine if this is a stable or beta release -const publishedVersions = getPublishedVersions(); -const isStableRelease = publishedVersions.indexOf(packageJson.version) === -1; +const publishablePackages = [ + path.resolve(__dirname, '..'), + 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') +]; -// Get the next version -let nextVersion = isStableRelease ? packageJson.version : getNextBetaVersion(); -console.log(`Publishing version: ${nextVersion}`); +publishablePackages.forEach(p => checkAndPublishPackage(p)); -// Set the version in package.json -const packageJsonFile = path.resolve(__dirname, '..', 'package.json'); -packageJson.version = nextVersion; -if (isDryRun) { - console.log(`Set version of ${packageJsonFile} to ${nextVersion}`); -} else { - fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, null, 2)); +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); + const isStableRelease = publishedVersions.indexOf(packageJson.version) === -1; + + // Get the next version + let nextVersion = isStableRelease ? packageJson.version : getNextBetaVersion(packageJson); + console.log(`Publishing version: ${nextVersion}`); + + // Set the version in package.json + const packageJsonFile = path.join(packageDir, 'package.json'); + packageJson.version = nextVersion; + if (isDryRun) { + console.log(`Set version of ${packageJsonFile} to ${nextVersion}`); + } else { + fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, null, 2)); + } + + // Publish + const args = ['publish']; + if (!isStableRelease) { + args.push('--tag', 'beta'); + } + if (isDryRun) { + console.log(`Spawn: npm ${args.join(' ')}`); + } else { + const result = cp.spawn('npm', args, { stdio: 'inherit' }); + result.on('exit', code => process.exit(code)); + } + + console.groupEnd(); } -// Publish -const args = ['publish']; -if (!isStableRelease) { - args.push('--tag', 'beta'); -} -if (isDryRun) { - console.log(`Spawn: npm ${args.join(' ')}`); -} else { - const result = cp.spawn('npm', args, { stdio: 'inherit' }); - result.on('exit', code => process.exit(code)); -} - -function getNextBetaVersion() { +function getNextBetaVersion(packageJson) { if (!/^[0-9]+\.[0-9]+\.[0-9]+$/.exec(packageJson.version)) { console.error('The package.json version must be of the form x.y.z'); process.exit(1); @@ -53,7 +69,7 @@ function getNextBetaVersion() { const tag = 'beta'; const stableVersion = packageJson.version.split('.'); const nextStableVersion = `${stableVersion[0]}.${parseInt(stableVersion[1]) + 1}.0`; - const publishedVersions = getPublishedVersions(nextStableVersion, tag); + const publishedVersions = getPublishedVersions(packageJson, nextStableVersion, tag); if (publishedVersions.length === 0) { return `${nextStableVersion}-${tag}1`; } @@ -66,7 +82,7 @@ function getNextBetaVersion() { return `${nextStableVersion}-${tag}${latestTagVersion + 1}`; } -function getPublishedVersions(version, tag) { +function getPublishedVersions(packageJson, version, tag) { const versionsProcess = cp.spawnSync('npm', ['view', packageJson.name, 'versions', '--json']); const versionsJson = JSON.parse(versionsProcess.stdout); if (tag) { @@ -74,6 +90,3 @@ function getPublishedVersions(version, tag) { } return versionsJson; } - -function publishPackage(packageDir) { -}