diff --git a/package.json b/package.json index ff019780..8e1ccf34 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,11 @@ "updates": "^4.0.0" }, "scripts": { - "build": "npm run update && npm run build:cm", + "build": "npm run update && npm run versions && npm run build:cm", "build:cm": "node tools/update-libraries.js && node tools/update-codemirror-themes.js", "lint": "eslint **/*.js || true", "update": "updates -u && npm update", - "zip": "node tools/zip.js" + "versions": "node tools/update-versions", + "zip": "npm run versions && node tools/zip.js" } } diff --git a/tools/update-versions.js b/tools/update-versions.js new file mode 100644 index 00000000..658ac5d9 --- /dev/null +++ b/tools/update-versions.js @@ -0,0 +1,62 @@ +#!/usr/bin/env node +'use strict'; + +const fs = require('fs-extra'); +const path = require('path'); +const root = path.join(__dirname, '..'); + +const manifest = require(`${root}/manifest.json`); +const pkg = require(`${root}/package.json`); + +const good = '\x1b[32m%s\x1b[0m'; +const warn = '\x1b[36m%s\x1b[0m'; + +function exit(err) { + if (err) { + console.error(err); + } + process.exit(err ? 1 : 0); +} + +function verToArray(v) { + return v.replace('v', '').split('.').map(Number); +} + +// Simple compare function since we can't require semverCompare here +function compare(v1, v2) { + if (v1 === v2) { + return 0; + } + const [maj1, min1, pat1] = verToArray(v1); + const [maj2, min2, pat2] = verToArray(v2); + const majMatch = maj1 === maj2; + const minMatch = min1 === min2; + if ( + maj1 > maj2 || + majMatch && min1 > min2 || + majMatch && minMatch && pat1 > pat2 + ) { + return 1; + } + return -1; +} + +async function updateVersions() { + const result = compare(manifest.version, pkg.version); + let file, obj; + if (result === 0) { + return console.log(good, 'Manifest & package versions match'); + } else if (result > 0) { + pkg.version = manifest.version; + file = 'package.json'; + obj = pkg; + } else { + manifest.version = pkg.version; + file = 'manifest.json'; + obj = manifest; + } + console.log(warn, `Updating ${file} to ${pkg.version}`); + return fs.writeFile(`${root}/${file}`, JSON.stringify(obj, null, ' ') + '\n'); +} + +updateVersions().catch(err => exit(err));