const pkg = require("../package.json"); const fs = require("fs"); const child_process = require("child_process"); const util = require("../src/util"); util.polyfill(); const oldVersion = pkg.version; const newVersion = process.argv[2]; console.log("Old Version: " + oldVersion); 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; pkg.scripts.setup = pkg.scripts.setup.replaceAll(oldVersion, newVersion); pkg.scripts["build-docker"] = pkg.scripts["build-docker"].replaceAll(oldVersion, newVersion); pkg.scripts["build-docker-alpine"] = pkg.scripts["build-docker-alpine"].replaceAll(oldVersion, newVersion); pkg.scripts["build-docker-debian"] = pkg.scripts["build-docker-debian"].replaceAll(oldVersion, newVersion); fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n"); commit(newVersion); tag(newVersion); updateWiki(oldVersion, newVersion); } else { console.log("version exists"); } /** * Updates the version number in package.json and commits it to git * @param {string} version - The new version number * * Generated by Trelent */ function commit(version) { let msg = "update to " + version; let res = child_process.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"); } } function tag(version) { let res = child_process.spawnSync("git", ["tag", version]); console.log(res.stdout.toString().trim()); } /** * Checks if a given version is already tagged in the git repository. * @param {string} version - The version to check for. * * Generated by Trelent */ function tagExists(version) { if (! version) { throw new Error("invalid version"); } let res = child_process.spawnSync("git", ["tag", "-l", version]); return res.stdout.toString().trim() === version; } /** * Update the How-to-Update.md file in the wiki to reflect a new version of Kuma. * @param {string} oldVersion The previous version of Kuma that was released. * @param {string} newVersion The current version of Kuma that is being released. * * Generated by Trelent */ function updateWiki(oldVersion, newVersion) { const wikiDir = "./tmp/wiki"; const howToUpdateFilename = "./tmp/wiki/🆙-How-to-Update.md"; safeDelete(wikiDir); child_process.spawnSync("git", ["clone", "https://github.com/louislam/uptime-kuma.wiki.git", wikiDir]); let content = fs.readFileSync(howToUpdateFilename).toString(); content = content.replaceAll(`git checkout ${oldVersion}`, `git checkout ${newVersion}`); fs.writeFileSync(howToUpdateFilename, content); child_process.spawnSync("git", ["add", "-A"], { cwd: wikiDir, }); child_process.spawnSync("git", ["commit", "-m", `Update to ${newVersion} from ${oldVersion}`], { cwd: wikiDir, }); console.log("Pushing to Github"); child_process.spawnSync("git", ["push"], { cwd: wikiDir, }); safeDelete(wikiDir); } function safeDelete(dir) { if (fs.existsSync(dir)) { fs.rmdirSync(dir, { recursive: true, }); } }