diff --git a/.npmignore b/.npmignore index 517ba0bd..03030ba5 100644 --- a/.npmignore +++ b/.npmignore @@ -42,6 +42,7 @@ lib/test/ docs/ /.idea/ .vscode/ +bin/ build/ fixtures/ coverage/ diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 19c8044b..a701b9a5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -72,16 +72,23 @@ jobs: - Linux - macOS - Windows + #condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) pool: - vmImage: 'xcode9-macos10.13' + vmImage: 'ubuntu-16.04' steps: - task: NodeTool@0 inputs: versionSpec: '8.x' displayName: 'Install Node.js' + - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2 + inputs: + versionSpec: "1.9.4" + displayName: 'Install Yarn' - script: | yarn displayName: 'Install dependencies and build' - script: | - echo 'success' - displayName: 'Test' + node ./bin/publish.js + env: + NPM_AUTH_TOKEN: $(NPM_AUTH_TOKEN) + displayName: 'Publish to npm' diff --git a/bin/publish.js b/bin/publish.js new file mode 100644 index 00000000..e7871155 --- /dev/null +++ b/bin/publish.js @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2019 The xterm.js authors. All rights reserved. + * @license MIT + */ + +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']}`); + +// Get the version +const tag = 'beta' +const nextVersion = getNextVersion(tag); +console.log(`Publishing version: ${nextVersion}`); + +// Set the version in package.json +const packageJsonFile = path.resolve(__dirname, '..', 'package.json'); +let packageJsonRaw = fs.readFileSync(packageJsonFile).toString(); +packageJsonRaw = packageJsonRaw.replace(/("version": ")3.10.0(")/, `$1${nextVersion}$2`); +fs.writeFileSync(packageJsonFile, packageJsonRaw); + +// Publish +cp.spawnSync('npm', ['publish', '--tag', tag], { + stdio: 'inherit' +}); + +function getNextVersion(tag) { + 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); + } + const publishedVersions = getPublishedVersions(packageJson.version, tag); + if (publishedVersions.length === 0) { + return `${packageJson.version}-${tag}1`; + } + const latestPublishedVersion = publishedVersions.sort((a, b) => b.localeCompare(a))[0]; + const latestTagVersion = parseInt(latestPublishedVersion.substr(latestPublishedVersion.search(/[0-9]+$/)), 10); + return `${packageJson.version}-${tag}${latestTagVersion + 1}`; +} + +function getPublishedVersions(version, tag) { + const versionsProcess = cp.spawnSync('npm', ['view', 'xterm', 'versions', '--json']); + const versionsJson = JSON.parse(versionsProcess.stdout); + return versionsJson.filter(v => !v.search(new RegExp(`${version}-${tag}[0-9]+`))); +} diff --git a/package.json b/package.json index 0d797f78..5ed3a4b8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "xterm", "description": "Full xterm terminal, in your browser", - "version": "3.9.0", + "version": "3.10.0", "main": "lib/public/Terminal.js", "types": "typings/xterm.d.ts", "repository": "https://github.com/xtermjs/xterm.js",