diff options
Diffstat (limited to 'scripts/build-version.js')
| -rwxr-xr-x | scripts/build-version.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/build-version.js b/scripts/build-version.js new file mode 100755 index 0000000..0d77f7d --- /dev/null +++ b/scripts/build-version.js @@ -0,0 +1,61 @@ +#!/usr/bin/env node + +const fs = require("fs"); +const path = require("path"); +const versionFile = path.join("build", "version.json"); +const indexFile = path.join("build", "index.html"); + +const versionDate = (date) => date.toISOString().replace(".000", ""); + +const commitHash = () => { + try { + return require("child_process") + .execSync("git rev-parse --short HEAD") + .toString() + .trim(); + } catch { + return "none"; + } +}; + +const commitDate = (hash) => { + try { + const unix = require("child_process") + .execSync(`git show -s --format=%ct ${hash}`) + .toString() + .trim(); + const date = new Date(parseInt(unix) * 1000); + return versionDate(date); + } catch { + return versionDate(new Date()); + } +}; + +const getFullVersion = () => { + const hash = commitHash(); + return `${commitDate(hash)}-${hash}`; +}; + +const data = JSON.stringify( + { + version: getFullVersion(), + }, + undefined, + 2, +); + +fs.writeFileSync(versionFile, data); + +// https://stackoverflow.com/a/14181136/8418 +fs.readFile(indexFile, "utf8", (error, data) => { + if (error) { + return console.error(error); + } + const result = data.replace(/{version}/g, getFullVersion()); + + fs.writeFile(indexFile, result, "utf8", (error) => { + if (error) { + return console.error(error); + } + }); +}); |
