Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
f750299780 | |||
ca1039408d | |||
df3e0b9424 | |||
c8e5960abd | |||
7304a62357 | |||
a5a88e53ba | |||
73bc271c59 | |||
1e98181e71 | |||
eb5a8185ae |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@serve.zone/nupst",
|
||||
"version": "4.3.3",
|
||||
"version": "5.0.3",
|
||||
"exports": "./mod.ts",
|
||||
"tasks": {
|
||||
"dev": "deno run --allow-all mod.ts",
|
||||
|
91
install.sh
91
install.sh
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
# NUPST Installer Script (v4.0+)
|
||||
# NUPST Installer Script (v5.0+)
|
||||
# Downloads and installs pre-compiled NUPST binary from Gitea releases
|
||||
#
|
||||
# Usage:
|
||||
@@ -8,7 +8,7 @@
|
||||
# curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash
|
||||
#
|
||||
# With version specification:
|
||||
# curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- --version v4.0.0
|
||||
# curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- --version v5.0.0
|
||||
#
|
||||
# Options:
|
||||
# -h, --help Show this help message
|
||||
@@ -48,14 +48,14 @@ while [[ $# -gt 0 ]]; do
|
||||
done
|
||||
|
||||
if [ $SHOW_HELP -eq 1 ]; then
|
||||
echo "NUPST Installer Script (v4.0+)"
|
||||
echo "NUPST Installer Script (v5.0+)"
|
||||
echo "Downloads and installs pre-compiled NUPST binary"
|
||||
echo ""
|
||||
echo "Usage: $0 [options]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -h, --help Show this help message"
|
||||
echo " --version VERSION Install specific version (e.g., v4.0.0)"
|
||||
echo " --version VERSION Install specific version (e.g., v5.0.0)"
|
||||
echo " --install-dir DIR Installation directory (default: /opt/nupst)"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
@@ -63,7 +63,7 @@ if [ $SHOW_HELP -eq 1 ]; then
|
||||
echo " curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash"
|
||||
echo ""
|
||||
echo " # Install specific version"
|
||||
echo " curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- --version v4.0.0"
|
||||
echo " curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | sudo bash -s -- --version v5.0.0"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -145,7 +145,7 @@ get_latest_version() {
|
||||
|
||||
# Main installation process
|
||||
echo "================================================"
|
||||
echo " NUPST Installation Script (v4.0+)"
|
||||
echo " NUPST Installation Script (v5.0+)"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
|
||||
@@ -169,51 +169,26 @@ DOWNLOAD_URL="${GITEA_BASE_URL}/${GITEA_REPO}/releases/download/${VERSION}/${BIN
|
||||
echo "Download URL: $DOWNLOAD_URL"
|
||||
echo ""
|
||||
|
||||
# Check if installation directory exists
|
||||
# Check if service is running and stop it
|
||||
SERVICE_WAS_RUNNING=0
|
||||
OLD_NODE_INSTALL=0
|
||||
|
||||
if [ -d "$INSTALL_DIR" ]; then
|
||||
# Check if this is an old Node.js-based installation
|
||||
if [ -f "$INSTALL_DIR/package.json" ] || [ -d "$INSTALL_DIR/node_modules" ]; then
|
||||
OLD_NODE_INSTALL=1
|
||||
echo "Detected old Node.js-based NUPST installation (v3.x or earlier)"
|
||||
echo "This installer will migrate to the new Deno-based binary version (v4.0+)"
|
||||
echo ""
|
||||
if systemctl is-enabled --quiet nupst 2>/dev/null || systemctl is-active --quiet nupst 2>/dev/null; then
|
||||
SERVICE_WAS_RUNNING=1
|
||||
if systemctl is-active --quiet nupst 2>/dev/null; then
|
||||
echo "Stopping NUPST service..."
|
||||
systemctl stop nupst
|
||||
fi
|
||||
|
||||
echo "Updating existing installation at $INSTALL_DIR..."
|
||||
|
||||
# Check if service exists (enabled or running) and stop it if active
|
||||
if systemctl is-enabled --quiet nupst 2>/dev/null || systemctl is-active --quiet nupst 2>/dev/null; then
|
||||
SERVICE_WAS_RUNNING=1
|
||||
if systemctl is-active --quiet nupst 2>/dev/null; then
|
||||
echo "Stopping NUPST service..."
|
||||
systemctl stop nupst
|
||||
else
|
||||
echo "Service is installed but not currently running (will be updated)..."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Clean up old Node.js installation files
|
||||
if [ $OLD_NODE_INSTALL -eq 1 ]; then
|
||||
echo "Cleaning up old Node.js installation files..."
|
||||
rm -rf "$INSTALL_DIR/node_modules" 2>/dev/null || true
|
||||
rm -rf "$INSTALL_DIR/vendor" 2>/dev/null || true
|
||||
rm -rf "$INSTALL_DIR/dist_ts" 2>/dev/null || true
|
||||
rm -f "$INSTALL_DIR/package.json" 2>/dev/null || true
|
||||
rm -f "$INSTALL_DIR/package-lock.json" 2>/dev/null || true
|
||||
rm -f "$INSTALL_DIR/pnpm-lock.yaml" 2>/dev/null || true
|
||||
rm -f "$INSTALL_DIR/tsconfig.json" 2>/dev/null || true
|
||||
rm -f "$INSTALL_DIR/setup.sh" 2>/dev/null || true
|
||||
rm -rf "$INSTALL_DIR/bin" 2>/dev/null || true
|
||||
echo "Old installation files removed."
|
||||
fi
|
||||
else
|
||||
echo "Creating installation directory: $INSTALL_DIR"
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
fi
|
||||
|
||||
# Clean installation directory - ensure only binary exists
|
||||
if [ -d "$INSTALL_DIR" ]; then
|
||||
echo "Cleaning installation directory: $INSTALL_DIR"
|
||||
rm -rf "$INSTALL_DIR"
|
||||
fi
|
||||
|
||||
# Create fresh installation directory
|
||||
echo "Creating installation directory: $INSTALL_DIR"
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
|
||||
# Download binary
|
||||
echo "Downloading NUPST binary..."
|
||||
TEMP_FILE="$INSTALL_DIR/nupst.download"
|
||||
@@ -260,14 +235,6 @@ echo "Symlink created: $BIN_DIR/nupst -> $BINARY_PATH"
|
||||
|
||||
echo ""
|
||||
|
||||
# Update systemd service file if migrating from v3
|
||||
if [ $SERVICE_WAS_RUNNING -eq 1 ] && [ $OLD_NODE_INSTALL -eq 1 ]; then
|
||||
echo "Updating systemd service file for v4..."
|
||||
$BINARY_PATH service enable > /dev/null 2>&1
|
||||
echo "Service file updated."
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Restart service if it was running before update
|
||||
if [ $SERVICE_WAS_RUNNING -eq 1 ]; then
|
||||
echo "Restarting NUPST service..."
|
||||
@@ -280,20 +247,6 @@ echo "================================================"
|
||||
echo " NUPST Installation Complete!"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
|
||||
if [ $OLD_NODE_INSTALL -eq 1 ]; then
|
||||
echo "Migration from v3.x to v4.0 successful!"
|
||||
echo ""
|
||||
echo "What changed:"
|
||||
echo " • Node.js runtime removed (now a self-contained binary)"
|
||||
echo " • Faster startup and lower memory usage"
|
||||
echo " • CLI commands now use subcommand structure"
|
||||
echo " (old commands still work with deprecation warnings)"
|
||||
echo ""
|
||||
echo "See readme for migration details: https://code.foss.global/serve.zone/nupst#migration-from-v3x"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo "Installation details:"
|
||||
echo " Binary location: $BINARY_PATH"
|
||||
echo " Symlink location: $BIN_DIR/nupst"
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import * as path from 'node:path';
|
||||
import * as fs from 'node:fs';
|
||||
import process from 'node:process';
|
||||
import { exec } from 'node:child_process';
|
||||
import { promisify } from 'node:util';
|
||||
import { Action, type IActionConfig, type IActionContext } from './base-action.ts';
|
||||
|
82
ts/cli.ts
82
ts/cli.ts
@@ -127,8 +127,7 @@ export class NupstCli {
|
||||
break;
|
||||
}
|
||||
case 'remove':
|
||||
case 'rm': // Alias
|
||||
case 'delete': { // Backward compatibility
|
||||
case 'rm': {
|
||||
const upsIdToRemove = subcommandArgs[0];
|
||||
if (!upsIdToRemove) {
|
||||
logger.error('UPS ID is required for remove command');
|
||||
@@ -172,8 +171,7 @@ export class NupstCli {
|
||||
break;
|
||||
}
|
||||
case 'remove':
|
||||
case 'rm': // Alias
|
||||
case 'delete': { // Backward compatibility
|
||||
case 'rm': {
|
||||
const groupIdToRemove = subcommandArgs[0];
|
||||
if (!groupIdToRemove) {
|
||||
logger.error('Group ID is required for remove command');
|
||||
@@ -206,8 +204,7 @@ export class NupstCli {
|
||||
break;
|
||||
}
|
||||
case 'remove':
|
||||
case 'rm': // Alias
|
||||
case 'delete': { // Backward compatibility
|
||||
case 'rm': {
|
||||
const upsId = subcommandArgs[0];
|
||||
const actionIndex = subcommandArgs[1];
|
||||
await actionHandler.remove(upsId, actionIndex);
|
||||
@@ -242,72 +239,8 @@ export class NupstCli {
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle top-level commands and backward compatibility
|
||||
// Handle top-level commands
|
||||
switch (command) {
|
||||
// Backward compatibility - old UPS commands
|
||||
case 'add':
|
||||
logger.log("Note: 'nupst add' is deprecated. Use 'nupst ups add' instead.");
|
||||
await upsHandler.add();
|
||||
break;
|
||||
case 'edit':
|
||||
logger.log("Note: 'nupst edit' is deprecated. Use 'nupst ups edit' instead.");
|
||||
await upsHandler.edit(commandArgs[0]);
|
||||
break;
|
||||
case 'delete':
|
||||
logger.log("Note: 'nupst delete' is deprecated. Use 'nupst ups remove' instead.");
|
||||
if (!commandArgs[0]) {
|
||||
logger.error('UPS ID is required for delete command');
|
||||
this.showHelp();
|
||||
return;
|
||||
}
|
||||
await upsHandler.remove(commandArgs[0]);
|
||||
break;
|
||||
case 'list':
|
||||
logger.log("Note: 'nupst list' is deprecated. Use 'nupst ups list' instead.");
|
||||
await upsHandler.list();
|
||||
break;
|
||||
case 'test':
|
||||
logger.log("Note: 'nupst test' is deprecated. Use 'nupst ups test' instead.");
|
||||
await upsHandler.test(debugMode);
|
||||
break;
|
||||
case 'setup':
|
||||
logger.log("Note: 'nupst setup' is deprecated. Use 'nupst ups edit' instead.");
|
||||
await upsHandler.edit(undefined);
|
||||
break;
|
||||
|
||||
// Backward compatibility - old service commands
|
||||
case 'enable':
|
||||
logger.log("Note: 'nupst enable' is deprecated. Use 'nupst service enable' instead.");
|
||||
await serviceHandler.enable();
|
||||
break;
|
||||
case 'disable':
|
||||
logger.log("Note: 'nupst disable' is deprecated. Use 'nupst service disable' instead.");
|
||||
await serviceHandler.disable();
|
||||
break;
|
||||
case 'start':
|
||||
logger.log("Note: 'nupst start' is deprecated. Use 'nupst service start' instead.");
|
||||
await serviceHandler.start();
|
||||
break;
|
||||
case 'stop':
|
||||
logger.log("Note: 'nupst stop' is deprecated. Use 'nupst service stop' instead.");
|
||||
await serviceHandler.stop();
|
||||
break;
|
||||
case 'status':
|
||||
logger.log("Note: 'nupst status' is deprecated. Use 'nupst service status' instead.");
|
||||
await serviceHandler.status();
|
||||
break;
|
||||
case 'logs':
|
||||
logger.log("Note: 'nupst logs' is deprecated. Use 'nupst service logs' instead.");
|
||||
await serviceHandler.logs();
|
||||
break;
|
||||
case 'daemon-start':
|
||||
logger.log(
|
||||
"Note: 'nupst daemon-start' is deprecated. Use 'nupst service start-daemon' instead.",
|
||||
);
|
||||
await serviceHandler.daemonStart(debugMode);
|
||||
break;
|
||||
|
||||
// Top-level commands (no changes)
|
||||
case 'update':
|
||||
await serviceHandler.update();
|
||||
break;
|
||||
@@ -589,11 +522,6 @@ export class NupstCli {
|
||||
logger.dim(' nupst group list # Show all configured groups');
|
||||
logger.dim(' nupst config # Display current configuration');
|
||||
console.log('');
|
||||
|
||||
// Note about deprecated commands
|
||||
logger.warn('Note: Old command format (e.g., \'nupst add\') still works but is deprecated.');
|
||||
logger.dim(' Use the new format (e.g., \'nupst ups add\') going forward.');
|
||||
console.log('');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -692,7 +620,7 @@ Usage:
|
||||
|
||||
Subcommands:
|
||||
add <ups-id|group-id> - Add a new action to a UPS or group interactively
|
||||
remove <ups-id|group-id> <index> - Remove an action by index (alias: rm, delete)
|
||||
remove <ups-id|group-id> <index> - Remove an action by index (alias: rm)
|
||||
list [ups-id|group-id] - List all actions (optionally for specific target) (alias: ls)
|
||||
|
||||
Options:
|
||||
|
Reference in New Issue
Block a user