mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-28 08:57:32 +01:00
125 lines
4.2 KiB
JavaScript
125 lines
4.2 KiB
JavaScript
// import { Octokit } from "@octokit/rest";
|
|
import commandLineArgs from "command-line-args";
|
|
|
|
import fs from "fs/promises";
|
|
import { readFileSync } from "fs";
|
|
import path from "path";
|
|
import { fileURLToPath } from "url";
|
|
import pandoc from "node-pandoc";
|
|
|
|
// https://github.com/75lb/command-line-args
|
|
const optionDefinitions = [
|
|
{ name: "version", alias: "v", type: String, required: true },
|
|
{ name: "versionNumber", alias: "n", type: Number },
|
|
{ name: "versionDescription", alias: "d", type: String },
|
|
{ name: "changelog", alias: "l", type: String },
|
|
];
|
|
|
|
const cliArgs = commandLineArgs(optionDefinitions);
|
|
|
|
const appPaths = {};
|
|
appPaths.root = path.join(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
appPaths.mainPackage = path.join(appPaths.root, "./package.json");
|
|
appPaths.electronPackage = path.join(appPaths.root, "./electron/package.json");
|
|
appPaths.constants = path.join(appPaths.root, "./src/Constants.ts");
|
|
appPaths.sphinxConf = path.join(appPaths.root, "./doc/source/conf.py");
|
|
appPaths.sphinxChangelog = path.join(appPaths.root, "./doc/source/changelog.rst");
|
|
|
|
async function main(version, versionNumber, changelog) {
|
|
console.log(`Updating app files to match v${version}`);
|
|
|
|
const [major, minor] = version.split(".");
|
|
const shortVersion = `${major}.${minor}`;
|
|
const modifiedMainPackage = (await fs.readFile(appPaths.mainPackage, "utf8")).replace(
|
|
/(^\s*"version":\s)"(.*)",$/m,
|
|
`$1"${version}",`,
|
|
);
|
|
await fs.writeFile(appPaths.mainPackage, modifiedMainPackage);
|
|
console.log(`Modified ${appPaths.mainPackage}`);
|
|
|
|
const modifiedElectronPackage = (await fs.readFile(appPaths.electronPackage, "utf8")).replace(
|
|
/(^\s*"version":\s)"(.*)",$/m,
|
|
`$1"${version}",`,
|
|
);
|
|
await fs.writeFile(appPaths.electronPackage, modifiedElectronPackage);
|
|
console.log(`Modified ${appPaths.electronPackage}`);
|
|
|
|
let modifiedConstants = (await fs.readFile(appPaths.constants, "utf8")).replace(
|
|
/(^\s*?VersionString:\s)"(.*)",/m,
|
|
`$1"${version}",`,
|
|
);
|
|
modifiedConstants = modifiedConstants.replace(/(^\s*?VersionNumber:\s)(.*),/m, `$1${versionNumber},`);
|
|
|
|
if (changelog.trim() !== "") {
|
|
let htmlChangelog = "";
|
|
try {
|
|
htmlChangelog = await transform(changelog, "html");
|
|
console.log("Converted markdown changelog to html");
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
|
|
const paddedChangelog = htmlChangelog
|
|
.split("\n")
|
|
.map((line) => (line.trim() !== "" ? " " + line : ""))
|
|
.join("\n")
|
|
.replaceAll("`", "\\`");
|
|
|
|
modifiedConstants = modifiedConstants.replace(/(^\s*?LatestUpdate:\s`\n)(.*)`,$/ms, `$1${paddedChangelog}\n\`,`);
|
|
}
|
|
await fs.writeFile(appPaths.constants, modifiedConstants);
|
|
console.log(`Modified ${appPaths.constants}`);
|
|
|
|
let modifiedSphinxConfig = (await fs.readFile(appPaths.sphinxConf, "utf8")).replace(
|
|
/(^version = ')(.*)'$/m,
|
|
`$1${shortVersion}'`,
|
|
);
|
|
modifiedSphinxConfig = modifiedSphinxConfig.replace(/(^release = ')(.*)'$/m, `$1${version}'`);
|
|
await fs.writeFile(appPaths.sphinxConf, modifiedSphinxConfig);
|
|
console.log(`Modified ${appPaths.sphinxConf}`);
|
|
|
|
if (changelog.trim() !== "") {
|
|
let modifiedSphinxChangelog = await fs.readFile(appPaths.sphinxChangelog, "utf8");
|
|
const lines = modifiedSphinxChangelog.split("\n");
|
|
let rstChangelog = "";
|
|
try {
|
|
rstChangelog = await transform(changelog, "rst");
|
|
console.log("Converted markdown changelog to rst");
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
|
|
lines.splice(5, 0, rstChangelog);
|
|
modifiedSphinxChangelog = lines.join("\n");
|
|
await fs.writeFile(appPaths.sphinxChangelog, modifiedSphinxChangelog);
|
|
console.log(`Modified ${appPaths.sphinxChangelog}`);
|
|
}
|
|
}
|
|
|
|
async function transform(markdown, format) {
|
|
return new Promise((resolve, reject) => {
|
|
const args = `-f markdown -t ${format}`;
|
|
pandoc(markdown, args, (error, rst) => {
|
|
if (error) {
|
|
reject(error);
|
|
} else {
|
|
resolve(rst);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
async function getChangelog() {
|
|
// Read from stdin
|
|
// https://stackoverflow.com/a/56012724
|
|
try {
|
|
return readFileSync(0, "utf-8").replace("\r\n", "\n");
|
|
} catch (error) {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
getChangelog().then((changes) => {
|
|
main(cliArgs.version, cliArgs.versionNumber, changes).then(() => console.log("Done"));
|
|
});
|