50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { execSync } from "node:child_process";
|
|
import {
|
|
compareSemver,
|
|
fetchLatestVersionFromRegistry,
|
|
resolveInstallCommand,
|
|
} from "./update-check.js";
|
|
|
|
const NPM_PACKAGE = "singularity-forge";
|
|
|
|
export async function runUpdate(): Promise<void> {
|
|
const current = process.env.SF_VERSION || "0.0.0";
|
|
const bold = "\x1b[1m";
|
|
const dim = "\x1b[2m";
|
|
const green = "\x1b[32m";
|
|
const yellow = "\x1b[33m";
|
|
const reset = "\x1b[0m";
|
|
|
|
process.stdout.write(`${dim}Current version:${reset} v${current}\n`);
|
|
process.stdout.write(`${dim}Checking npm registry...${reset}\n`);
|
|
|
|
const latest = await fetchLatestVersionFromRegistry();
|
|
if (!latest) {
|
|
process.stderr.write(`${yellow}Failed to reach npm registry.${reset}\n`);
|
|
process.exit(1);
|
|
}
|
|
|
|
process.stdout.write(`${dim}Latest version:${reset} v${latest}\n`);
|
|
|
|
if (compareSemver(latest, current) <= 0) {
|
|
process.stdout.write(`${green}Already up to date.${reset}\n`);
|
|
return;
|
|
}
|
|
|
|
process.stdout.write(
|
|
`${dim}Updating:${reset} v${current} → ${bold}v${latest}${reset}\n`,
|
|
);
|
|
|
|
const installCmd = resolveInstallCommand(`${NPM_PACKAGE}@latest`);
|
|
try {
|
|
execSync(installCmd, {
|
|
stdio: "inherit",
|
|
});
|
|
process.stdout.write(`\n${green}${bold}Updated to v${latest}${reset}\n`);
|
|
} catch {
|
|
process.stderr.write(
|
|
`\n${yellow}Update failed. Try manually: ${installCmd}${reset}\n`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
}
|