summaryrefslogtreecommitdiffstats
path: root/extra/update-version.js
diff options
context:
space:
mode:
Diffstat (limited to 'extra/update-version.js')
-rw-r--r--extra/update-version.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/extra/update-version.js b/extra/update-version.js
new file mode 100644
index 0000000..f9aead0
--- /dev/null
+++ b/extra/update-version.js
@@ -0,0 +1,81 @@
+const pkg = require("../package.json");
+const fs = require("fs");
+const childProcess = require("child_process");
+const util = require("../src/util");
+
+util.polyfill();
+
+const newVersion = process.env.RELEASE_VERSION;
+
+console.log("New Version: " + newVersion);
+
+if (! newVersion) {
+ console.error("invalid version");
+ process.exit(1);
+}
+
+const exists = tagExists(newVersion);
+
+if (! exists) {
+
+ // Process package.json
+ pkg.version = newVersion;
+
+ // Replace the version: https://regex101.com/r/hmj2Bc/1
+ pkg.scripts.setup = pkg.scripts.setup.replace(/(git checkout )([^\s]+)/, `$1${newVersion}`);
+ fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n");
+
+ // Also update package-lock.json
+ const npm = /^win/.test(process.platform) ? "npm.cmd" : "npm";
+ childProcess.spawnSync(npm, [ "install" ]);
+
+ commit(newVersion);
+ tag(newVersion);
+
+} else {
+ console.log("version exists");
+}
+
+/**
+ * Commit updated files
+ * @param {string} version Version to update to
+ * @returns {void}
+ * @throws Error when committing files
+ */
+function commit(version) {
+ let msg = "Update to " + version;
+
+ let res = childProcess.spawnSync("git", [ "commit", "-m", msg, "-a" ]);
+ let stdout = res.stdout.toString().trim();
+ console.log(stdout);
+
+ if (stdout.includes("no changes added to commit")) {
+ throw new Error("commit error");
+ }
+}
+
+/**
+ * Create a tag with the specified version
+ * @param {string} version Tag to create
+ * @returns {void}
+ */
+function tag(version) {
+ let res = childProcess.spawnSync("git", [ "tag", version ]);
+ console.log(res.stdout.toString().trim());
+}
+
+/**
+ * Check if a tag exists for the specified version
+ * @param {string} version Version to check
+ * @returns {boolean} Does the tag already exist
+ * @throws Version is not valid
+ */
+function tagExists(version) {
+ if (! version) {
+ throw new Error("invalid version");
+ }
+
+ let res = childProcess.spawnSync("git", [ "tag", "-l", version ]);
+
+ return res.stdout.toString().trim() === version;
+}