113 lines
3.6 KiB
TypeScript
113 lines
3.6 KiB
TypeScript
/*
|
|
Copyright 2024 Resultium LLC
|
|
|
|
This file is part of RCZ.
|
|
|
|
RCZ is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
any later version.
|
|
|
|
RCZ is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with RCZ. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import { existsSync } from "fs";
|
|
import { readFile, writeFile } from "fs/promises";
|
|
import { join } from "path";
|
|
import { cwd } from "process";
|
|
import { Config } from "../types";
|
|
import { request } from "http";
|
|
import { tmpdir } from "os";
|
|
import { execSync } from "child_process";
|
|
import { gt } from "semver";
|
|
import { note } from "@clack/prompts";
|
|
|
|
export const getConfig = async () => {
|
|
if (existsSync(join(cwd(), ".rczrc"))) {
|
|
return JSON.parse(
|
|
(await readFile(join(cwd(), ".rczrc"))).toString(),
|
|
) as Config;
|
|
} else if (existsSync(join(cwd(), ".rczrc.json"))) {
|
|
return JSON.parse(
|
|
(await readFile(join(cwd(), ".rczrc.json"))).toString(),
|
|
) as Config;
|
|
} else if (existsSync(join(cwd(), "rcz.config.json"))) {
|
|
return JSON.parse(
|
|
(await readFile(join(cwd(), "rcz.config.json"))).toString(),
|
|
) as Config;
|
|
} else if (existsSync(join(cwd(), ".rcz", "config.json"))) {
|
|
return JSON.parse(
|
|
(await readFile(join(cwd(), ".rcz", "config.json"))).toString(),
|
|
) as Config;
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
export const getOnReleaseScript = async () => {
|
|
if (existsSync(join(cwd(), ".rcz.onrelease.js"))) {
|
|
return (await readFile(join(cwd(), ".rcz.onrelease.js"))).toString();
|
|
} else if (existsSync(join(cwd(), ".rcz", "onrelease.js"))) {
|
|
return (await readFile(join(cwd(), ".rcz", "onrelease.js"))).toString();
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
export const getPostReleaseScript = async () => {
|
|
if (existsSync(join(cwd(), ".rcz.postrelease.js"))) {
|
|
return (await readFile(join(cwd(), ".rcz.postrelease.js"))).toString();
|
|
} else if (existsSync(join(cwd(), ".rcz", "postrelease.js"))) {
|
|
return (await readFile(join(cwd(), ".rcz", "postrelease.js"))).toString();
|
|
} else {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
export const isOnline = () => {
|
|
return new Promise<boolean>((resolve) => {
|
|
request({ method: "GET", hostname: "icanhazip.com" }, (res) => {
|
|
res.on("data", () => {});
|
|
|
|
res.on("end", () => {
|
|
resolve(res.statusCode === 200);
|
|
});
|
|
})
|
|
.on("error", () => {
|
|
resolve(false);
|
|
})
|
|
.end();
|
|
});
|
|
};
|
|
|
|
export const checkForUpdates = async () => {
|
|
const updateText =
|
|
"You are running on an outdated version of Resultium Commitizen, in order to update run\n\nnpm install -g @resultium/rcz@latest";
|
|
|
|
const cachedVersion = existsSync(join(tmpdir(), "rcz-server-version"))
|
|
? (await readFile(join(tmpdir(), "rcz-server-version"))).toString().trim()
|
|
: null;
|
|
const localVersion = execSync("rcz --version").toString().trim();
|
|
|
|
// even if cached once in a while it should get newest data
|
|
if ((cachedVersion && Math.random() < 0.1) || cachedVersion === null) {
|
|
if (!(await isOnline())) return;
|
|
|
|
const serverVersion = execSync("npm show @resultium/rcz version")
|
|
.toString()
|
|
.trim();
|
|
|
|
writeFile(join(tmpdir(), "rcz-server-version"), serverVersion);
|
|
|
|
if (gt(serverVersion, localVersion)) note(updateText);
|
|
} else if (cachedVersion) {
|
|
if (gt(cachedVersion, localVersion)) note(updateText);
|
|
}
|
|
};
|