feat(cli): Add automatic update command and documentation updates

This commit is contained in:
2025-10-27 17:36:16 +00:00
parent bf3e44c8c5
commit f80a3fdb73
4 changed files with 120 additions and 7 deletions

View File

@@ -36,6 +36,7 @@ export const runCli = async () => {
logger.log('info', 'Available commands:');
logger.log('info', '* vgpu-setup - Install and configure Proxmox vGPU support');
logger.log('info', '* scripts - Manage Proxmox community scripts');
logger.log('info', '* update - Update MOXYTOOL to the latest version');
logger.log('info', '');
logger.log('info', 'Usage: moxytool <command> [options]');
});
@@ -129,6 +130,78 @@ export const runCli = async () => {
}
});
// Update command
smartcliInstance.addCommand('update').subscribe(async (argvArg) => {
logger.log('info', 'Checking for updates...');
logger.log('info', '');
try {
// Get current version from deno.json
const denoJsonPath = plugins.path.join(paths.packageDir, 'deno.json');
let currentVersion = '1.1.0'; // fallback
try {
const denoJsonContent = await Deno.readTextFile(denoJsonPath);
const denoJson = JSON.parse(denoJsonContent);
currentVersion = denoJson.version || currentVersion;
} catch {
// Use fallback version
}
// Fetch latest version from Gitea API
const apiUrl = 'https://code.foss.global/api/v1/repos/serve.zone/moxytool/releases/latest';
const response = await fetch(apiUrl);
if (!response.ok) {
logger.log('error', 'Failed to check for updates');
logger.log('error', `HTTP ${response.status}: ${response.statusText}`);
Deno.exit(1);
}
const release = await response.json();
const latestVersion = release.tag_name; // e.g., "v1.1.0"
// Normalize versions for comparison (ensure both have "v" prefix)
const normalizedCurrent = currentVersion.startsWith('v') ? currentVersion : `v${currentVersion}`;
const normalizedLatest = latestVersion.startsWith('v') ? latestVersion : `v${latestVersion}`;
logger.log('info', `Current version: ${normalizedCurrent}`);
logger.log('info', `Latest version: ${normalizedLatest}`);
logger.log('info', '');
// Compare normalized versions
if (normalizedCurrent === normalizedLatest) {
logger.log('success', 'Already up to date!');
logger.log('info', '');
return;
}
logger.log('ok', `New version available: ${latestVersion}`);
logger.log('info', 'Downloading and installing...');
logger.log('info', '');
// Download and run the install script
const installUrl = 'https://code.foss.global/serve.zone/moxytool/raw/branch/main/install.sh';
const updateResult = await smartshellInstance.exec(
`curl -sSL ${installUrl} | bash`
);
if (updateResult.exitCode !== 0) {
logger.log('error', 'Update failed');
logger.log('error', updateResult.stderr || 'Unknown error');
Deno.exit(1);
}
logger.log('info', '');
logger.log('success', `Updated to ${latestVersion}`);
logger.log('info', '');
} catch (error) {
logger.log('error', `Update failed: ${error instanceof Error ? error.message : String(error)}`);
Deno.exit(1);
}
});
// Scripts management commands
smartcliInstance.addCommand('scripts').subscribe(async (argvArg) => {
const subcommand = argvArg._[0];