From c2f2f1e2eeb1543ef3c17bea49e50ce4a19e6772 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Sun, 19 Oct 2025 22:50:03 +0000 Subject: [PATCH] feat(update): add version check to skip update when already latest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now `nupst update` checks current version against latest release before downloading anything. Behavior: - Fetches latest version from Gitea API - Compares with current version - Shows "Already up to date!" if versions match - Only downloads/installs if newer version available Example output when up to date: Checking for updates... Current version: v4.0.8 Latest version: v4.0.8 ✓ Already up to date! --- deno.json | 2 +- ts/cli/service-handler.ts | 31 ++++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/deno.json b/deno.json index 8569ebb..2e737f7 100644 --- a/deno.json +++ b/deno.json @@ -1,6 +1,6 @@ { "name": "@serve.zone/nupst", - "version": "4.0.7", + "version": "4.0.8", "exports": "./mod.ts", "tasks": { "dev": "deno run --allow-all mod.ts", diff --git a/ts/cli/service-handler.ts b/ts/cli/service-handler.ts index 9422d0c..2ee52c7 100644 --- a/ts/cli/service-handler.ts +++ b/ts/cli/service-handler.ts @@ -133,22 +133,43 @@ export class ServiceHandler { ); console.log(''); - logger.info('Updating NUPST to latest version...'); - console.log(''); + logger.info('Checking for updates...'); try { + // Get current version + const currentVersion = this.nupst.getVersion(); + + // Fetch latest version from Gitea API + const apiUrl = 'https://code.foss.global/api/v1/repos/serve.zone/nupst/releases/latest'; + const response = execSync(`curl -sSL ${apiUrl}`).toString(); + const release = JSON.parse(response); + const latestVersion = release.tag_name; // e.g., "v4.0.7" + + logger.dim(`Current version: ${currentVersion}`); + logger.dim(`Latest version: ${latestVersion}`); + console.log(''); + + // Compare versions (both are in format "v4.0.7") + if (currentVersion === latestVersion) { + logger.success('Already up to date!'); + console.log(''); + return; + } + + logger.info(`New version available: ${latestVersion}`); + logger.dim('Downloading and installing...'); + console.log(''); + // Download and run the install script // This handles everything: download binary, stop service, replace, restart const installUrl = 'https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh'; - logger.dim('Downloading install script...'); execSync(`curl -sSL ${installUrl} | bash`, { stdio: 'inherit', // Show install script output to user }); console.log(''); - logger.success('Update completed successfully!'); - logger.dim('Run "nupst service status" to verify the update.'); + logger.success(`Updated to ${latestVersion}`); console.log(''); } catch (error) { console.log('');