feat(update): add version check to skip update when already latest
All checks were successful
CI / Type Check & Lint (push) Successful in 6s
CI / Build Test (Current Platform) (push) Successful in 6s
Release / build-and-release (push) Successful in 48s
CI / Build All Platforms (push) Successful in 53s

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!
This commit is contained in:
2025-10-19 22:50:03 +00:00
parent 936f86c346
commit c2f2f1e2ee
2 changed files with 27 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "@serve.zone/nupst", "name": "@serve.zone/nupst",
"version": "4.0.7", "version": "4.0.8",
"exports": "./mod.ts", "exports": "./mod.ts",
"tasks": { "tasks": {
"dev": "deno run --allow-all mod.ts", "dev": "deno run --allow-all mod.ts",

View File

@@ -133,22 +133,43 @@ export class ServiceHandler {
); );
console.log(''); console.log('');
logger.info('Updating NUPST to latest version...'); logger.info('Checking for updates...');
console.log('');
try { 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 // Download and run the install script
// This handles everything: download binary, stop service, replace, restart // This handles everything: download binary, stop service, replace, restart
const installUrl = 'https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh'; const installUrl = 'https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh';
logger.dim('Downloading install script...');
execSync(`curl -sSL ${installUrl} | bash`, { execSync(`curl -sSL ${installUrl} | bash`, {
stdio: 'inherit', // Show install script output to user stdio: 'inherit', // Show install script output to user
}); });
console.log(''); console.log('');
logger.success('Update completed successfully!'); logger.success(`Updated to ${latestVersion}`);
logger.dim('Run "nupst service status" to verify the update.');
console.log(''); console.log('');
} catch (error) { } catch (error) {
console.log(''); console.log('');