14 Commits

Author SHA1 Message Date
d832343b38 1.3.6
Some checks failed
Publish to npm / npm-publish (push) Failing after 4s
CI / Type Check & Lint (push) Successful in 40s
Release / build-and-release (push) Successful in 2m8s
CI / Build All Platforms (push) Successful in 2m21s
CI / Build Test (Current Platform) (push) Successful in 2m26s
2025-10-28 18:39:51 +00:00
b38c99aaa0 fix(deps): Bump smartcli dependency and add local settings file 2025-10-28 18:39:51 +00:00
e379d60c65 1.3.5
Some checks failed
CI / Type Check & Lint (push) Failing after 5s
CI / Build Test (Current Platform) (push) Failing after 4s
CI / Build All Platforms (push) Failing after 4s
Publish to npm / npm-publish (push) Failing after 5s
Release / build-and-release (push) Failing after 3s
2025-10-28 18:36:25 +00:00
99b68c9bb0 fix(smartcli): Bump @push.rocks/smartcli to ^4.0.18 and add local settings file for tooling permissions 2025-10-28 18:36:24 +00:00
32d38975ec 1.3.4
Some checks failed
CI / Type Check & Lint (push) Successful in 17s
Publish to npm / npm-publish (push) Failing after 43s
CI / Build Test (Current Platform) (push) Successful in 55s
CI / Build All Platforms (push) Successful in 1m36s
Release / build-and-release (push) Successful in 1m38s
2025-10-28 15:06:39 +00:00
4ac2d99c32 fix(smartcli): Update @push.rocks/smartcli to ^4.0.16 and add local Claude settings 2025-10-28 15:06:39 +00:00
9265670e63 1.3.3
Some checks failed
CI / Type Check & Lint (push) Successful in 38s
Publish to npm / npm-publish (push) Failing after 58s
CI / Build Test (Current Platform) (push) Successful in 1m10s
CI / Build All Platforms (push) Successful in 1m57s
Release / build-and-release (push) Successful in 1m57s
2025-10-28 14:06:15 +00:00
9341b9cd16 fix(deno.json): Bump @push.rocks/smartcli to ^4.0.15 2025-10-28 14:06:15 +00:00
8e6418a574 1.3.2
Some checks failed
CI / Type Check & Lint (push) Successful in 38s
Publish to npm / npm-publish (push) Failing after 1m0s
CI / Build Test (Current Platform) (push) Successful in 1m11s
CI / Build All Platforms (push) Successful in 2m0s
Release / build-and-release (push) Successful in 2m4s
2025-10-28 12:36:50 +00:00
33609bff9a fix(cli): Correct scripts subcommand argument parsing and bump smartcli dependency 2025-10-28 12:36:50 +00:00
ef7bab3e32 1.3.1
Some checks failed
CI / Type Check & Lint (push) Successful in 18s
Publish to npm / npm-publish (push) Failing after 39s
CI / Build Test (Current Platform) (push) Successful in 46s
CI / Build All Platforms (push) Successful in 1m35s
Release / build-and-release (push) Successful in 1m35s
2025-10-27 17:38:30 +00:00
723dca735f fix(publish): Switch publish registry to internal Verdaccio instance and add local CI settings 2025-10-27 17:38:29 +00:00
dc868e3fbc 1.3.0
Some checks failed
CI / Type Check & Lint (push) Successful in 40s
Publish to npm / npm-publish (push) Failing after 1m1s
CI / Build Test (Current Platform) (push) Successful in 1m7s
CI / Build All Platforms (push) Successful in 1m52s
Release / build-and-release (push) Successful in 1m57s
2025-10-27 17:36:16 +00:00
f80a3fdb73 feat(cli): Add automatic update command and documentation updates 2025-10-27 17:36:16 +00:00
6 changed files with 166 additions and 15 deletions

View File

@@ -1,5 +1,51 @@
# Changelog # Changelog
## 2025-10-28 - 1.3.6 - fix(deps)
Bump smartcli dependency and add local settings file
- Bumped @push.rocks/smartcli from ^4.0.18 to ^4.0.19 in deno.json
- Added .claude/settings.local.json (development/local settings file)
## 2025-10-28 - 1.3.5 - fix(smartcli)
Bump @push.rocks/smartcli to ^4.0.18 and add local settings file for tooling permissions
- Updated dependency @push.rocks/smartcli from ^4.0.16 to ^4.0.18 in deno.json
- Added a local settings file (.claude/settings.local.json) to configure runtime/tooling permissions (web fetch domains, bash/deno/npm command allowances, and local read access)
- No code API changes; this is a dependency/infra update — incrementing patch version
## 2025-10-28 - 1.3.4 - fix(smartcli)
Update @push.rocks/smartcli to ^4.0.16 and add local Claude settings
- Bump dependency in deno.json: @push.rocks/smartcli from ^4.0.15 to ^4.0.16
- Add .claude/settings.local.json containing local permissions/configuration (development/local-only file)
## 2025-10-28 - 1.3.3 - fix(deno.json)
Bump @push.rocks/smartcli to ^4.0.15 and add local Claude settings
- Updated deno.json: @push.rocks/smartcli ^4.0.14 → ^4.0.15
- Added .claude/settings.local.json with local permissions for development/CI
- No runtime source changes; dependency update only — recommend a patch release
## 2025-10-28 - 1.3.2 - fix(cli)
Correct scripts subcommand argument parsing and bump smartcli dependency
- Fix scripts command argument indices so the subcommand is read from argvArg._[1] and subsequent arguments from argvArg._[2]. This resolves incorrect handling of 'scripts search', 'scripts info' and 'scripts run' inputs.
- Upgrade @push.rocks/smartcli dependency from ^4.0.11 to ^4.0.14 in deno.json for compatibility/stability improvements.
## 2025-10-27 - 1.3.1 - fix(publish)
Switch publish registry to internal Verdaccio instance and add local CI settings
- Update package.json publishConfig.registry from https://registry.npmjs.org/ to https://verdaccio.lossless.digital/ to publish packages to the internal Verdaccio registry.
- Add .claude/settings.local.json to include local CI/dev settings (local configuration only).
## 2025-10-27 - 1.3.0 - feat(cli)
Add automatic update command and documentation updates
- Add 'update' CLI command that checks the latest Gitea release and runs the install script to perform a self-update
- Implements release fetch/compare logic and executes the repository install.sh via curl
- Update README to document the one-line installer and the new 'moxytool update' usage
- Update changelog to note the new update command and installation clarifications
## 2025-10-27 - 1.2.0 - feat(scripts) ## 2025-10-27 - 1.2.0 - feat(scripts)
Add community scripts subsystem: script index, runner, and CLI commands with background refresh; update docs and paths Add community scripts subsystem: script index, runner, and CLI commands with background refresh; update docs and paths
@@ -19,6 +65,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [1.1.0] - 2025-01-27 ## [1.1.0] - 2025-01-27
### Added ### Added
- `update` command for automatic self-updating from Gitea releases
- `scripts` command for Proxmox community scripts management - `scripts` command for Proxmox community scripts management
- Access to 400+ community-maintained installation scripts - Access to 400+ community-maintained installation scripts
- Automatic daily index updates with local caching - Automatic daily index updates with local caching
@@ -26,8 +73,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Interactive script execution with full stdin/stdout/stderr passthrough - Interactive script execution with full stdin/stdout/stderr passthrough
- Support for both LXC containers and VM templates - Support for both LXC containers and VM templates
- Script metadata display (requirements, ports, credentials) - Script metadata display (requirements, ports, credentials)
- One-line installation script as primary installation method
### Features ### Features
- `moxytool update` - Update MOXYTOOL to the latest version automatically
- `moxytool scripts list` - List all available scripts - `moxytool scripts list` - List all available scripts
- `moxytool scripts search <query>` - Search scripts by keyword - `moxytool scripts search <query>` - Search scripts by keyword
- `moxytool scripts info <slug>` - View detailed script information - `moxytool scripts info <slug>` - View detailed script information

View File

@@ -1,6 +1,6 @@
{ {
"name": "@serve.zone/moxytool", "name": "@serve.zone/moxytool",
"version": "1.2.0", "version": "1.3.6",
"exports": "./mod.ts", "exports": "./mod.ts",
"nodeModulesDir": "auto", "nodeModulesDir": "auto",
"tasks": { "tasks": {
@@ -40,7 +40,7 @@
"@push.rocks/npmextra": "npm:@push.rocks/npmextra@^5.1.2", "@push.rocks/npmextra": "npm:@push.rocks/npmextra@^5.1.2",
"@push.rocks/projectinfo": "npm:@push.rocks/projectinfo@^5.0.1", "@push.rocks/projectinfo": "npm:@push.rocks/projectinfo@^5.0.1",
"@push.rocks/qenv": "npm:@push.rocks/qenv@^6.1.0", "@push.rocks/qenv": "npm:@push.rocks/qenv@^6.1.0",
"@push.rocks/smartcli": "npm:@push.rocks/smartcli@^4.0.11", "@push.rocks/smartcli": "npm:@push.rocks/smartcli@^4.0.19",
"@push.rocks/smartdelay": "npm:@push.rocks/smartdelay@^3.0.5", "@push.rocks/smartdelay": "npm:@push.rocks/smartdelay@^3.0.5",
"@push.rocks/smartfile": "npm:@push.rocks/smartfile@^11.0.23", "@push.rocks/smartfile": "npm:@push.rocks/smartfile@^11.0.23",
"@push.rocks/smartjson": "npm:@push.rocks/smartjson@^5.0.20", "@push.rocks/smartjson": "npm:@push.rocks/smartjson@^5.0.20",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@serve.zone/moxytool", "name": "@serve.zone/moxytool",
"version": "1.2.0", "version": "1.3.6",
"description": "Proxmox administration tool for vGPU setup, VM management, and cluster configuration", "description": "Proxmox administration tool for vGPU setup, VM management, and cluster configuration",
"keywords": [ "keywords": [
"proxmox", "proxmox",
@@ -55,7 +55,7 @@
], ],
"publishConfig": { "publishConfig": {
"access": "public", "access": "public",
"registry": "https://registry.npmjs.org/" "registry": "https://verdaccio.lossless.digital/"
}, },
"packageManager": "pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34" "packageManager": "pnpm@10.18.1+sha512.77a884a165cbba2d8d1c19e3b4880eee6d2fcabd0d879121e282196b80042351d5eb3ca0935fa599da1dc51265cc68816ad2bddd2a2de5ea9fdf92adbec7cd34"
} }

View File

@@ -19,7 +19,22 @@ MOXYTOOL is a comprehensive command-line tool for managing Proxmox servers, with
## Installation ## Installation
### Global Installation (Recommended) ### One-Line Installation (Recommended)
```bash
# Download and install MOXYTOOL automatically
curl -sSL https://code.foss.global/serve.zone/moxytool/raw/branch/main/install.sh | sudo bash
```
This will:
- Detect your platform automatically (Linux x64/ARM64, macOS Intel/Apple Silicon, Windows)
- Download the latest binary from Gitea releases (~400-500KB)
- Install to `/usr/local/bin/moxytool`
- Make it available system-wide
### Via npm (Alternative)
Install globally using npm:
```bash ```bash
npm install -g @serve.zone/moxytool npm install -g @serve.zone/moxytool
@@ -31,14 +46,28 @@ or with pnpm:
pnpm install -g @serve.zone/moxytool pnpm install -g @serve.zone/moxytool
``` ```
### Local Installation **Benefits:**
- Automatic platform detection and binary download
```bash - Easy updates via `npm update -g @serve.zone/moxytool`
npm install @serve.zone/moxytool - Version management with npm
``` - Works with Node.js >=14
## Usage ## Usage
### Updating MOXYTOOL
Update to the latest version from the repository:
```bash
moxytool update
```
This command will:
- Check the current version
- Fetch the latest release from Gitea
- Automatically download and install the update if available
- Preserve your existing configuration
### vGPU Setup ### vGPU Setup
Install and configure NVIDIA vGPU support on your Proxmox host: Install and configure NVIDIA vGPU support on your Proxmox host:

View File

@@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@serve.zone/moxytool', name: '@serve.zone/moxytool',
version: '1.2.0', version: '1.3.6',
description: 'Proxmox administration tool for vGPU setup, VM management, and cluster configuration' description: 'Proxmox administration tool for vGPU setup, VM management, and cluster configuration'
} }

View File

@@ -36,6 +36,7 @@ export const runCli = async () => {
logger.log('info', 'Available commands:'); logger.log('info', 'Available commands:');
logger.log('info', '* vgpu-setup - Install and configure Proxmox vGPU support'); logger.log('info', '* vgpu-setup - Install and configure Proxmox vGPU support');
logger.log('info', '* scripts - Manage Proxmox community scripts'); logger.log('info', '* scripts - Manage Proxmox community scripts');
logger.log('info', '* update - Update MOXYTOOL to the latest version');
logger.log('info', ''); logger.log('info', '');
logger.log('info', 'Usage: moxytool <command> [options]'); logger.log('info', 'Usage: moxytool <command> [options]');
}); });
@@ -129,9 +130,81 @@ 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 // Scripts management commands
smartcliInstance.addCommand('scripts').subscribe(async (argvArg) => { smartcliInstance.addCommand('scripts').subscribe(async (argvArg) => {
const subcommand = argvArg._[0]; const subcommand = argvArg._[1]; // _[0] is 'scripts', _[1] is the subcommand
if (!subcommand) { if (!subcommand) {
logger.log('info', 'MOXYTOOL Scripts - Proxmox Community Scripts Management'); logger.log('info', 'MOXYTOOL Scripts - Proxmox Community Scripts Management');
@@ -189,7 +262,7 @@ export const runCli = async () => {
} }
case 'search': { case 'search': {
const query = argvArg._[1]; const query = argvArg._[2]; // _[0]=scripts, _[1]=search, _[2]=query
if (!query) { if (!query) {
logger.log('error', 'Please provide a search query'); logger.log('error', 'Please provide a search query');
@@ -219,7 +292,7 @@ export const runCli = async () => {
} }
case 'info': { case 'info': {
const slug = argvArg._[1]; const slug = argvArg._[2]; // _[0]=scripts, _[1]=info, _[2]=slug
if (!slug) { if (!slug) {
logger.log('error', 'Please provide a script slug'); logger.log('error', 'Please provide a script slug');
@@ -295,7 +368,7 @@ export const runCli = async () => {
} }
case 'run': { case 'run': {
const slug = argvArg._[1]; const slug = argvArg._[2]; // _[0]=scripts, _[1]=run, _[2]=slug
if (!slug) { if (!slug) {
logger.log('error', 'Please provide a script slug'); logger.log('error', 'Please provide a script slug');