Compare commits

...

223 Commits

Author SHA1 Message Date
Michel Roegl-Brunner
dd17d2cbec feat: Add VM/LXC cloning functionality
- Add CloneCountInputModal component for specifying clone count
- Implement clone handlers and state management in InstalledScriptsTab
- Add clone menu item to ScriptInstallationCard
- Extend StorageSelectionModal to support clone storage selection (rootdir only)
- Add clone terminal support to Terminal component
- Implement startSSHCloneExecution in server.js with sequential ID retrieval
- Add clone-related API endpoints (getClusterNextId, getContainerType, getCloneStorages, generateCloneHostnames, executeClone, addClonedContainerToDatabase)
- Integrate with VM/LXC detection from main branch
- Fix storage fetching to use correct serverId parameter
- Fix clone execution to pass storage parameter correctly
- Remove unused eslint-disable comments
2025-11-29 16:53:58 +01:00
Michel Roegl-Brunner
f3d14c6746 Merge pull request #359 from community-scripts/fix/352
fix: align toggle switches in repository settings
2025-11-29 16:14:07 +01:00
Michel Roegl-Brunner
447332e558 fix: align toggle switches in repository settings
- Remove fixed label width from Toggle component
- Move delete button to left of toggle switches
- Add matching border/padding to 'Enable after adding' section to align with repository items
- Ensure all toggles have consistent right-side alignment
2025-11-29 16:12:20 +01:00
Michel Roegl-Brunner
9bbc19ae44 Merge pull request #358 from community-scripts/fix/357_356
fix: Add dynamic text to container control loading modal
2025-11-29 16:00:49 +01:00
Michel Roegl-Brunner
5564ae0393 fix: add dynamic text to container control loading modal
- Update LoadingModal to display action text (Starting/Stopping LXC/VM)
- Update handleStartStop to include container type (LXC/VM) in action text
- Show clear feedback when starting or stopping containers
2025-11-29 15:58:30 +01:00
Michel Roegl-Brunner
93d7842f6c feat: implement batch container type detection for performance optimization
- Add batchDetectContainerTypes() helper function that uses pct list and qm list to detect all container types in 2 SSH calls per server
- Update getAllInstalledScripts to use batch detection instead of individual isVM() calls per script
- Update getInstalledScriptsByServer to use batch detection for single server
- Update database queries to include lxc_config relation for fallback detection
- Fix isVM() function to properly default to LXC when VM config doesn't exist
- Significantly improves performance: reduces from N SSH calls per script to 2 SSH calls per server
2025-11-29 15:55:43 +01:00
Michel Roegl-Brunner
84c02048bc Fix a false detection as a VM when it is a LXC 2025-11-29 15:41:49 +01:00
github-actions[bot]
66a3bb3203 chore: add VERSION v0.5.0 (#355)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-28 14:04:05 +00:00
Michel Roegl-Brunner
0da802be42 Merge pull request #354 from community-scripts/bugfixing_bumps
Add TypeScript Runtime Support and add Prisma 7 Compatibility
2025-11-28 14:56:43 +01:00
CanbiZ
5bc3933d11 fix gh action runner 2025-11-28 14:48:38 +01:00
CanbiZ
1c6d1ac120 fix gh action 2025-11-28 14:48:06 +01:00
CanbiZ
ba1e6478d7 Update package-lock.json - add tsx to lock file 2025-11-28 14:46:18 +01:00
CanbiZ
e3af248456 Merge main into bugfixing_bumps - keep bugfixing_bumps versions (Prisma 7, tsx support) 2025-11-28 14:43:25 +01:00
CanbiZ
43bafb610f Add initializeRepositories to autoSyncInit.ts 2025-11-28 14:34:28 +01:00
CanbiZ
8e22568efb Add detailed logging for autoSyncInit dynamic import and function checks 2025-11-28 14:33:11 +01:00
CanbiZ
6bb9ed5182 Use dynamic import for autoSyncInit to avoid tsx caching issues 2025-11-28 14:30:43 +01:00
CanbiZ
b6c3954f98 Fix start script to use tsx for Prisma 7 TypeScript support 2025-11-28 14:14:16 +01:00
CanbiZ
f73b303172 Use node --import tsx for better TypeScript support 2025-11-28 14:11:42 +01:00
CanbiZ
50d066669e Fix db.js - add .ts extension for Prisma client import 2025-11-28 14:11:09 +01:00
CanbiZ
68541c0046 Use tsx to run server.js - enables TypeScript imports for Prisma 7 2025-11-28 14:09:25 +01:00
CanbiZ
644222e958 Fix db.js - require index.js explicitly 2025-11-28 14:08:39 +01:00
CanbiZ
31a5fd97d4 Fix db.js - use absolute path to .prisma/client 2025-11-28 14:07:54 +01:00
CanbiZ
b54fbf15f6 Fix db.js - use createRequire to load .prisma/client CJS module 2025-11-28 14:07:22 +01:00
CanbiZ
a787e60e7c Fix db.js - import from .prisma/client runtime location 2025-11-28 14:06:35 +01:00
CanbiZ
1e250306dc Fix db.js - use CommonJS-style import for @prisma/client 2025-11-28 14:05:37 +01:00
CanbiZ
d64a296ebe Fix db.js - import PrismaClient from @prisma/client for Node ESM compatibility 2025-11-28 14:04:58 +01:00
CanbiZ
691b27c924 Fix db.js import - add .js extension for Prisma client 2025-11-28 14:04:05 +01:00
CanbiZ
dbc591aa63 Add JS wrappers for ESM compatibility (repositoryService, githubJsonService) and fix .js import extensions 2025-11-28 14:01:18 +01:00
CanbiZ
5ea6828f8c Fix ESM import in database-prisma.js - add .js extension 2025-11-28 13:58:05 +01:00
CanbiZ
3dabacd055 Revert "Auto-initialize default repositories on first API call"
This reverts commit aebc8a6171.
2025-11-28 13:56:29 +01:00
CanbiZ
e8ee829577 Add explicit type annotations and return types
This commit adds TypeScript type definitions for database entities and updates all methods in DatabaseServicePrisma to use explicit type annotations and return types. This improves type safety, code clarity, and maintainability by ensuring consistent return values and better integration with Prisma-generated types.
2025-11-28 13:50:44 +01:00
CanbiZ
aebc8a6171 Auto-initialize default repositories on first API call 2025-11-28 13:41:21 +01:00
CanbiZ
c5db169441 Fix login race condition: don't call checkAuth after successful login 2025-11-28 13:34:51 +01:00
CanbiZ
bef5bef875 Remove .js extensions from dynamic imports 2025-11-28 13:32:51 +01:00
CanbiZ
3a4f86942f Remove circular import wrapper files (githubJsonService.js, localScripts.js) 2025-11-28 13:30:17 +01:00
CanbiZ
94eb772467 Fix cross-origin cookie issues: use lax SameSite and add CORS headers 2025-11-28 13:28:53 +01:00
CanbiZ
3a2a1b2cd6 Add datasource property to Prisma config for migrate/db push support 2025-11-28 13:25:33 +01:00
CanbiZ
69c10b05ac Ensure recursive creation of ssh-keys directory
Updated the initialization logic to use the 'recursive' option when creating the data/ssh-keys directory, ensuring parent directories are created if they do not exist.
2025-11-28 13:23:31 +01:00
Michel Roegl-Brunner
7833d5d408 Fix type errors 2025-11-28 13:21:37 +01:00
CanbiZ
e0baa79d6b Remove file extensions from import statements
Updated import statements across several server files to omit explicit file extensions. This improves compatibility with module resolution and aligns with common import practices.
2025-11-28 13:21:03 +01:00
CanbiZ
737c9c94f3 Fix repositoryService import extension in autoSyncInit.js 2025-11-28 13:19:53 +01:00
CanbiZ
c57586acae Fix Prisma import path in db.js and update allowedDevOrigins format 2025-11-28 13:18:29 +01:00
CanbiZ
74030b5806 Refactor lint comments and minor code improvements
Removed or updated unnecessary eslint-disable comments across several server and service files to improve code clarity. Fixed import paths and added TypeScript ignore comments where needed for compatibility. Minor formatting adjustments were made for readability.
2025-11-28 13:13:01 +01:00
CanbiZ
cc276ddff3 Improve script downloader and auto-sync services
Added detailed JSDoc comments and type annotations to ScriptDownloaderService for better maintainability and clarity. Refactored initialization logic to always set scriptsDirectory and repoUrl. Enhanced autoSyncService to specify cron job timezone and options. Updated PrismaClient import path for compatibility with generated client structure.
2025-11-28 13:10:20 +01:00
CanbiZ
375c551a3a Update Prisma to v7 and add better-sqlite3 adapter
Upgraded Prisma and related dependencies to version 7.0.1 and added @prisma/adapter-better-sqlite3 and better-sqlite3 to support the new adapter. This enables improved SQLite integration and compatibility with the latest Prisma features.
2025-11-28 13:06:40 +01:00
CanbiZ
e3e4556f83 Add type annotations and improve script services
Enhanced type safety and documentation in several files, including adding explicit type annotations for script objects and function parameters. Improved error handling and code clarity in scriptDownloader.js, and updated autoSyncService.js to remove unnecessary cron job options. Refactored prisma.config.ts for schema configuration and updated server.js to support backup storage and improve parameter defaults.
2025-11-28 13:06:16 +01:00
CanbiZ
7fa132e09c Update Prisma adapter and type annotations
Replaces usage of PrismaBetterSQLite3 with PrismaBetterSqlite3 for consistency and correct casing. Updates type annotations in several components and API router for improved type safety. Also adjusts PrismaClient import paths in db files.
2025-11-28 13:02:34 +01:00
CanbiZ
1a1dbe6975 upgrade betterauthsql 2025-11-28 12:57:56 +01:00
CanbiZ
1a5881c935 Migration to Prisma 7 2025-11-28 12:55:32 +01:00
CanbiZ
2d7176914e Enable JS type checking in tsconfig.json
Set `checkJs` to true to allow type checking for JavaScript files. Updated include/exclude patterns to support JS and CJS files in the project.
2025-11-28 12:51:07 +01:00
CanbiZ
987ac3da1b Fix: Remove .js extensions from TypeScript imports for Next.js bundler 2025-11-28 12:48:10 +01:00
CanbiZ
03e31d66a7 Refactor type usage and improve data normalization
Updated several components to use explicit TypeScript types for better type safety. Normalized appriseUrls to always be an array in auto-sync settings API. Improved handling of optional server_id in BackupsTab and adjusted IP detection logic in InstalledScriptsTab. Removed unnecessary eslint-disable comments and improved code clarity in various places.
2025-11-28 12:47:09 +01:00
CanbiZ
7547dff67d Fix type annotations and module imports
Added explicit type annotations to array mapping functions for better type safety. Updated incorrect TypeScript import extensions from .ts to .js for compatibility. Ensured default values for optional parameters and improved code clarity in API routers.
2025-11-28 12:29:15 +01:00
CanbiZ
1945b14694 Update ESLint config to use FlatCompat and expand ignores
Switched to using FlatCompat for ESLint configuration and extended the ignore list to include 'next-env.d.ts', 'postcss.config.js', and 'prettier.config.js'. This improves compatibility and prevents linting of config and environment files.
2025-11-28 12:23:47 +01:00
CanbiZ
ec23600861 Switch ESLint config to eslint-config-next/core-web-vitals
Replaces @eslint/eslintrc and FlatCompat with eslint-config-next/core-web-vitals for ESLint configuration. Updates linting scripts in package.json to use eslint directly instead of next lint. Removes @eslint/eslintrc from devDependencies.
2025-11-28 12:20:53 +01:00
CanbiZ
41a9c0ae11 Switch to ESLint CLI (Deprecation of ESLint)
Added and updated eslint-disable comments in repositoryService, restoreService, and storageService to cover additional TypeScript rules. Simplified error handling by removing unused variables and catch parameters, and removed unused imports and variables in restoreService for cleaner code.
2025-11-28 12:19:47 +01:00
CanbiZ
c266c4cb3c Refactor InstalledScriptsTab for code style consistency
Updated InstalledScriptsTab.tsx to use double quotes and consistent formatting throughout the file. Improved type annotations, code readability, and standardized state initialization and mutation usage. No functional changes were made; this is a style and maintainability refactor.
2025-11-28 12:16:18 +01:00
CanbiZ
b5bce88398 Refactor InstalledScriptsTab for code style consistency
Standardizes quote usage, formatting, and code style in InstalledScriptsTab.tsx. Improves readability and maintains consistent conventions across the file without changing logic or functionality.
2025-11-28 12:15:27 +01:00
CanbiZ
48cf86a449 Refactor nullish checks and add type safety
Replaces many uses of logical OR (||) with nullish coalescing (??) for more accurate handling of undefined/null values. Adds explicit type annotations and interfaces to improve type safety, especially in API routes and server-side code. Updates SSH connection test handling and config parsing in installedScripts router for better reliability. Minor fixes to deduplication logic, cookie handling, and error reporting.
2025-11-28 12:10:15 +01:00
CanbiZ
d40aeb6c82 Refactor scripts grid and filter handling for robustness
Improves type safety and normalization in filter, repository, and script status handling across multiple components. Refactors ScriptsGrid for better readability, deduplication, and error messaging, and updates UI markup for consistency. Also adds explicit types for auto-sync settings and ensures string conversion for credential fields.
2025-11-28 11:58:38 +01:00
CanbiZ
9c759ba99b fix: ESLint/TypeScript fixes - nullish coalescing, regexp-exec, optional-chain, unescaped-entities, unused-vars, type-safety 2025-11-28 11:53:04 +01:00
root
f467b9ad7b fix vulnerabilities 2025-11-28 11:49:39 +01:00
Michel Roegl-Brunner
7fe2a8b453 Merge pull request #353 from community-scripts/fix/vm_detection
Add VM status check and UI improvements
2025-11-28 11:46:39 +01:00
Michel Roegl-Brunner
5274737ab8 Add VM status check and UI improvements
- Add VM status checking using qm status command
- Hide update button for VMs (only show for LXC containers)
- Hide shell button for VMs (only show for LXC containers)
- Hide LXC Settings option for VMs
- Display VM/LXC indicator badges in table before script names
- Update statistics cards to differentiate between LXC and VMs
- Update container control to support both pct (LXC) and qm (VM) commands
- Improve status parsing to handle both container types
2025-11-28 11:44:58 +01:00
CanbiZ
40805f39f7 Update dependencies and adjust TypeScript JSX setting
Upgraded multiple dependencies and devDependencies in package.json to their latest versions for improved stability and features. Changed the TypeScript 'jsx' compiler option from 'react-jsx' to 'preserve' in tsconfig.json to better align with project requirements.
2025-11-28 11:44:26 +01:00
Michel Roegl-Brunner
f9af7536d0 Update Confirmation modal 2025-11-28 11:27:12 +01:00
Michel Roegl-Brunner
0d39a9bbd0 Update update.sh to inlcude node update 2025-11-26 11:33:26 +01:00
Michel Roegl-Brunner
66f8a84260 Various small fixes (#349)
* Fix script viewer to support vm/ and tools/ scripts

- Update ScriptDetailModal to extract scriptName from any path (ct/, vm/, tools/)
- Refactor TextViewer to use actual script paths from install_methods
- Remove hardcoded path assumptions and use dynamic script paths
- Only show Install Script tab for ct/ scripts that have install scripts
- Rename CT Script tab to Script for better clarity

* Fix downloaded scripts count to include vm/ and tools/ scripts

- Update matching logic to use same robust approach as DownloadedScriptsTab
- Add normalized slug matching to handle filename-based slugs vs JSON slugs
- Add multiple fallback matching strategies for better script detection
- Fixes issue where scripts in vm/ and tools/ directories weren't being counted

* Filter categories to only show those with scripts

- Add filter to exclude categories with count 0 from category sidebar
- Only categories with at least one script will be displayed
- Reduces UI clutter by hiding empty categories

* Fix intermittent page reloads from VersionDisplay reconnect logic

- Add guards to prevent reload when not updating
- Use refs to track isUpdating and isNetworkError state in interval callbacks
- Add hasReloadedRef flag to prevent multiple reloads
- Clear reconnect interval when update completes or component unmounts
- Only start reconnect attempts when actually updating
- Prevents false positive reloads when server responds normally

* Fix Next.js HMR WebSocket and static asset handling

- Add WebSocket upgrade detection to only intercept /ws/script-execution
- Pass all other WebSocket upgrades (including HMR) to Next.js handler
- Ensure _next routes and static assets are properly handled by Next.js
- Fixes 400 errors for Next.js HMR WebSocket connections
- Fixes 403 errors for static assets by ensuring proper routing

* Fix WebSocket upgrade handling to properly route Next.js HMR

- Create WebSocketServer with noServer: true to avoid auto-attaching
- Manually handle upgrade events to route /ws/script-execution to our WebSocketServer
- Route all other WebSocket upgrades (including Next.js HMR) to Next.js handler
- This ensures Next.js HMR WebSocket connections are properly handled
- Fixes 400 errors for /_next/webpack-hmr WebSocket connections

* Revert WebSocket handling to simpler approach

- Go back to attaching WebSocketServer directly with path option
- Remove manual upgrade event handling that was causing errors
- The path option should filter to only /ws/script-execution
- Next.js should handle its own HMR WebSocket upgrades naturally

* Fix WebSocket upgrade handling to preserve Next.js HMR handlers

- Save existing upgrade listeners before adding our own
- Call existing listeners for non-matching paths to allow Next.js HMR
- Only handle /ws/script-execution ourselves
- This ensures Next.js can handle its own WebSocket upgrades for HMR

* Fix random page reloads during normal app usage

- Memoize startReconnectAttempts with useCallback to prevent recreation on every render
- Fix useEffect dependency arrays to include memoized function
- Add stricter guards checking refs before starting reconnect attempts
- Ensure reconnect logic only runs when actually updating (not during normal usage)
- Add early return in fallback useEffect to prevent false triggers
- Add ref guards in ResyncButton to prevent multiple simultaneous sync operations
- Only reload after sync if it was user-initiated

* Fix critical bug: prevent reloads from stale updateLogsData.isComplete

- Add isUpdating guard before processing updateLogsData.isComplete
- Reset shouldSubscribe when update completes or fails
- Prevent stale isComplete data from triggering reloads during normal usage

* Add update confirmation modal with changelog display

- Add UpdateConfirmationModal component that shows changelog before update
- Modify getVersionStatus to include release body (changelog) in response
- Update VersionDisplay to show confirmation modal instead of starting update directly
- Users must review changelog and click 'Proceed with Update' to start update
- Ensures users see potential breaking changes before updating
2025-11-26 10:21:14 +01:00
Michel Roegl-Brunner
2a9921a4e1 Merge pull request #348 from community-scripts/fix/update_script
fix: Detect script changes from remote repository to allow Script updates
2025-11-26 08:43:27 +01:00
Michel Roegl-Brunner
50f657ba00 Update Node.js version to 24.x in workflow 2025-11-26 08:33:50 +01:00
Michel Roegl-Brunner
5d5eba72de fix: detect script changes from remote repository
- Add refetchOnMount and staleTime: 0 to compareScriptContent query to bypass React Query cache
- Add visible refresh button in script detail modal to manually check for updates
- Improve comparison error handling and logging for better debugging
- Display error messages in UI when comparison fails
- Ensure comparison always checks remote repository when modal opens
2025-11-26 08:32:13 +01:00
Michel Roegl-Brunner
577b96518e package-lock.json 2025-11-26 08:19:39 +01:00
Michel Roegl-Brunner
c6c27271d6 Merge pull request #342 from community-scripts/node24_securityfix 2025-11-24 21:34:06 +01:00
ProxmoxVE Developer
72c0246d8c chore(deps): upgrade to Next.js 16, Vitest 4, and Node.js 24
BREAKING CHANGES:
- Upgrade Next.js from 15.1.6 to 16.0.4
- Use Webpack instead of Turbopack for compatibility with server-side modules
- Upgrade Node.js requirement to >=24.0.0

FEATURES:
- Upgrade Vitest to 4.0.13 with improved testing capabilities
- Update all vitest-related packages (@vitest/ui, @vitest/coverage-v8)
- Upgrade react-syntax-highlighter to 16.1.0
- Update node-cron to 4.2.1
- Update lucide-react to 0.554.0

SECURITY:
- Resolve glob command injection vulnerability (CVE) via v10.5.0
- Fix all npm audit vulnerabilities (0 vulnerabilities found)
- Update prisma/client to 6.19.0
- Update all dependencies to latest secure versions

FIXES:
- Configure next.config.js for webpack with proper server-side module handling
- Update tsconfig.json for Next.js 16 compatibility (jsx: react-jsx)
- Add engines field to require Node.js >=24.0.0
- Remove deprecated webpack config in favor of Next.js 16 compatibility
2025-11-24 21:27:38 +01:00
github-actions[bot]
06d4786e0a chore: add VERSION v0.4.13 (#341)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-24 20:08:21 +00:00
CanbiZ
bc31896586 core: remove uv cache clean | remove log rotation (#340)
* core: remove uv cache clean

* Initialize functions on core.func source

Added function initialization call when sourcing core.func
2025-11-24 20:52:31 +01:00
github-actions[bot]
213a606fc0 chore: add VERSION v0.4.12 (#336)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-20 17:59:41 +00:00
CanbiZ
3579f2258e Update supported Proxmox VE versions to include 9.1 (#335)
The pve_check function now allows Proxmox VE 9.1 in addition to 9.0 and 8.x. Error messages and comments have been updated to reflect the expanded support.
2025-11-20 18:57:55 +01:00
Michel Roegl-Brunner
5b861ade05 add missing api.func to FUNCTIONS_FILE_PATH 2025-11-18 09:26:39 +01:00
Michel Roegl-Brunner
553eae6ce7 docs: add LXC Backups section to help modal 2025-11-18 09:22:13 +01:00
Michel Roegl-Brunner
c2ca88f033 Merge pull request #328 from community-scripts/dependabot/npm_and_yarn/types/node-24.10.1
build(deps-dev): Bump @types/node from 24.9.1 to 24.10.1
2025-11-18 09:20:49 +01:00
Michel Roegl-Brunner
67d44a6a5f Merge pull request #329 from community-scripts/dependabot/npm_and_yarn/eslint-9.39.1
build(deps-dev): Bump eslint from 9.38.0 to 9.39.1
2025-11-18 09:20:40 +01:00
Michel Roegl-Brunner
fe6cca5c63 Merge pull request #331 from community-scripts/feat/lxc_backups
feat: Add LXC container backup functionality
2025-11-18 09:20:21 +01:00
Michel Roegl-Brunner
3a8088ded6 chore: add missing migration for backups and pbs_storage_credentials tables 2025-11-18 09:16:31 +01:00
Michel Roegl-Brunner
5d48c7b61c Merge branch 'main' into feat/lxc_backups 2025-11-18 09:15:03 +01:00
Michel Roegl-Brunner
5be88d361f chore: cleanup debug output from backup modals 2025-11-18 09:11:56 +01:00
dependabot[bot]
014e5b69e9 build(deps-dev): Bump eslint from 9.38.0 to 9.39.1
Bumps [eslint](https://github.com/eslint/eslint) from 9.38.0 to 9.39.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.38.0...v9.39.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.39.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-17 19:48:23 +00:00
dependabot[bot]
f37b2cb26f build(deps-dev): Bump @types/node from 24.9.1 to 24.10.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.9.1 to 24.10.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.10.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-17 19:48:15 +00:00
Michel Roegl-Brunner
81c00f5d40 Merge pull request #327 from community-scripts/dependabot/npm_and_yarn/npm_and_yarn-3c67cbb9cd 2025-11-16 23:21:24 +01:00
dependabot[bot]
9bae95d0aa build(deps-dev): Bump js-yaml
Bumps the npm_and_yarn group with 1 update in the / directory: [js-yaml](https://github.com/nodeca/js-yaml).


Updates `js-yaml` from 4.1.0 to 4.1.1
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.1.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-16 10:12:09 +00:00
Michel Roegl-Brunner
088d354fd2 Merge pull request #322 from community-scripts/dependabot/npm_and_yarn/jsdom-27.2.0 2025-11-16 11:11:11 +01:00
Michel Roegl-Brunner
0d47fa5d2a Merge pull request #324 from community-scripts/dependabot/npm_and_yarn/types/react-19.2.4 2025-11-16 11:10:59 +01:00
dependabot[bot]
57fd5f802b build(deps-dev): Bump @types/react from 19.2.2 to 19.2.4
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.2.2 to 19.2.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-14 19:24:46 +00:00
dependabot[bot]
a1825302fa build(deps-dev): Bump jsdom from 27.1.0 to 27.2.0
Bumps [jsdom](https://github.com/jsdom/jsdom) from 27.1.0 to 27.2.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/27.1.0...27.2.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 27.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-14 19:24:26 +00:00
Michel Roegl-Brunner
570eea41b9 Implement real-time restore progress updates with polling
- Add restore.log file writing in restoreService.ts for progress tracking
- Create getRestoreProgress query endpoint for polling restore logs
- Implement polling-based progress updates in BackupsTab (1 second interval)
- Update LoadingModal to display all progress logs with auto-scroll
- Remove console.log debug output from restoreService
- Add static 'Restore in progress' text under spinner
- Show success checkmark when restore completes
- Prevent modal dismissal during restore, allow ESC/X button when complete
- Remove step prefixes from log messages for cleaner output
- Keep success/error modals open until user dismisses manually
2025-11-14 15:43:33 +01:00
Michel Roegl-Brunner
33a5b8e4d0 PBS restore working :) 2025-11-14 15:19:34 +01:00
Michel Roegl-Brunner
63174d2ea1 Fix PBS backup discovery command and authentication
- Fix PBS login to use PBS_PASSWORD environment variable instead of stdin
- Change backup discovery command from 'snapshots host/<CT_ID>' to 'snapshot list ct/<CT_ID>'
- Use full repository string (root@pam@IP:DATASTORE) instead of storage name
- Parse table format output correctly (snapshot | size | files)
- Extract snapshot name, size, and date from table output
- Convert size units (MiB/GiB) to bytes for storage
- Fix TypeScript errors with proper null checks
2025-11-14 13:21:53 +01:00
Michel Roegl-Brunner
eda41e5101 Implement PBS authentication support for backup discovery
- Add PBSStorageCredential model to database schema (fingerprint now required)
- Create PBS credentials API router with CRUD operations
- Add PBS login functionality to backup service before discovery
- Create PBSCredentialsModal component for managing credentials
- Integrate PBS credentials management into ServerStoragesModal
- Update storage service to extract PBS IP and datastore info
- Add helpful hint about finding fingerprint on PBS dashboard
- Auto-accept fingerprint during login using stored credentials
2025-11-14 13:12:39 +01:00
Michel Roegl-Brunner
4a50da4968 Add backup discovery tab with support for local and storage backups
- Add Backup model to Prisma schema with fields for container_id, server_id, hostname, backup info
- Create backupService with discovery methods for local (/var/lib/vz/dump/) and storage (/mnt/pve/<storage>/dump/) backups
- Add database methods for backup CRUD operations and grouping by container
- Create backupsRouter with getAllBackupsGrouped and discoverBackups procedures
- Add BackupsTab component with collapsible cards grouped by CT_ID and hostname
- Integrate backups tab into main page navigation
- Filter storages by node hostname matching to only show applicable storages
- Skip PBS backups discovery (temporarily disabled)
- Add comprehensive logging for backup discovery process
2025-11-14 13:04:59 +01:00
Michel Roegl-Brunner
d50ea55e6d Add LXC container backup functionality
- Add backup capability before updates or as standalone action
- Implement storage service to fetch and parse backup-capable storages from PVE nodes
- Add backup storage selection modal for user choice
- Support backup+update flow with sequential execution
- Add standalone backup option in Actions menu
- Add storage viewer in server section to show available storages
- Parse /etc/pve/storage.cfg to identify backup-capable storages
- Cache storage data for performance
- Handle backup failures gracefully (warn but allow update to proceed)
2025-11-14 10:30:27 +01:00
Michel Roegl-Brunner
f558aa4f43 Fix selectedRepositories undefined error with generic filter validation (#321)
- Create filterUtils.ts with getDefaultFilters() and mergeFiltersWithDefaults()
- Update ScriptsGrid, DownloadedScriptsTab, and FilterBar to use utility functions
- Prevents crashes when loading old saved filters missing new properties
- Future-proof: new filter properties automatically get defaults
- Fixes TypeError: can't access property 'length', selectedRepositories is undefined
2025-11-14 09:37:13 +01:00
Michel Roegl-Brunner
4ea49be97d Initial for Backup function 2025-11-14 08:44:33 +01:00
github-actions[bot]
e8c27077fd chore: add VERSION v0.4.11 (#319)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-13 14:45:10 +00:00
Michel Roegl-Brunner
e21d1a6eb6 Merge pull request #318 from community-scripts/feat/add_repo
feat: Add multi-repository support with repository filtering
2025-11-13 15:42:18 +01:00
Michel Roegl-Brunner
9608affcf6 Change Position of text 2025-11-13 15:37:20 +01:00
Michel Roegl-Brunner
ac23d015e0 Add helper Text 2025-11-13 15:32:18 +01:00
Michel Roegl-Brunner
5cb7bc95fa Add filter Buttons 2025-11-13 15:26:49 +01:00
Michel Roegl-Brunner
955d0e72d7 refactor: consolidate scriptDownloader to single JavaScript implementation
- Updated scriptDownloader.js to support multi-repository downloads using repository_url from script metadata
- Added getScriptDiff() and generateDiff() methods to JavaScript version
- Updated scripts.ts router to explicitly import .js version
- Removed duplicate TypeScript version (scriptDownloader.ts)
- All functionality now consolidated in single JavaScript file used by both Next.js API routes and Node.js server-side code
2025-11-13 14:31:45 +01:00
Michel Roegl-Brunner
498249a25b fix: Update import extension for repositoryService in githubJsonService 2025-11-13 14:12:44 +01:00
Michel Roegl-Brunner
72ffc5597f feat: Add multi-repository support for script synchronization
- Add Repository model to Prisma schema with migration
- Create repositoryService for managing repositories
- Add repositories API router with CRUD operations
- Update GitHubJsonService to support multiple repositories
- Update ScriptDownloaderService to use repository URL from scripts
- Add repository_url field to Script and ScriptCard types
- Add repository management UI tab to GeneralSettingsModal
- Display repository source on script cards and detail modal
- Implement repository deletion with JSON file cleanup
- Initialize default repositories (main and dev) on server startup
2025-11-13 14:12:01 +01:00
github-actions[bot]
4a00d43d82 chore: add VERSION v0.4.10.3 (#317)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-13 12:56:34 +00:00
Michel Roegl-Brunner
2a0738e102 Merge pull request #316 from community-scripts/fix/310
Fix script slug matching to prevent false positives
2025-11-13 13:46:37 +01:00
Michel Roegl-Brunner
a45f9ae5e6 Fix script slug matching to prevent false positives
- Remove normalized slug/name matching fallback that caused false matches
- Use exact slug-to-slug matching as primary method
- Only use install basename matching for edge cases
- Prevents 'docker-vm' from appearing when only 'docker' is downloaded
2025-11-13 13:37:50 +01:00
Michel Roegl-Brunner
dab2da4b70 Merge pull request #305 from community-scripts/dependabot/npm_and_yarn/jsdom-27.1.0
build(deps-dev): Bump jsdom from 27.0.1 to 27.1.0
2025-11-13 13:27:32 +01:00
Michel Roegl-Brunner
fe00be2e16 Merge pull request #309 from community-scripts/dependabot/npm_and_yarn/tailwindcss-4.1.17
build(deps-dev): Bump tailwindcss from 4.1.16 to 4.1.17
2025-11-13 13:27:24 +01:00
Michel Roegl-Brunner
f88479f6f6 Merge pull request #315 from community-scripts/MickLesk-patch-2
Bump tools.func - includes refactor: deb822 | new functions: setup_mariadb_db, setup_postgresql_db | fixes: setup_uv output, setup_rust (update-handling), setup_java (output bugfix)
2025-11-13 13:26:56 +01:00
Michel Roegl-Brunner
4692c84f7e Merge pull request #314 from community-scripts/MickLesk-patch-1
core.func: push changes from upstream
2025-11-13 13:26:27 +01:00
CanbiZ
36033add28 Bump tools.func: include:
Refactor service stopping logic to handle failures and improve readability. Update repository setup function to streamline parameter validation and cleanup.
2025-11-13 11:44:19 +01:00
CanbiZ
f092de2934 Update core.func 2025-11-13 09:41:42 +01:00
CanbiZ
c92c737c2b core.func: push changes from upstream
Added cleanup_lxc function to manage cache and temporary files for various package managers and programming environments.
2025-11-13 09:41:02 +01:00
dependabot[bot]
70314fdb6d build(deps-dev): Bump tailwindcss from 4.1.16 to 4.1.17
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.1.16 to 4.1.17.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.17/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.1.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-10 19:38:24 +00:00
dependabot[bot]
735b3dcfa0 build(deps-dev): Bump jsdom from 27.0.1 to 27.1.0
Bumps [jsdom](https://github.com/jsdom/jsdom) from 27.0.1 to 27.1.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/27.0.1...27.1.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 27.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-10 19:37:27 +00:00
Michel Roegl-Brunner
815024fbc0 Merge pull request #304 from community-scripts/fix/275
fix: support IPv6 link-local addresses with zone identifiers
2025-11-10 15:42:30 +01:00
Michel Roegl-Brunner
03fd7bd1e2 fix: support IPv6 link-local addresses with zone identifiers in server settings
- Updated validateServerAddress to handle IPv6 addresses with zone identifiers (e.g., fe80::...%eth0)
- Added validation for zone identifier (interface name)
- Updated placeholder text to include link-local address example
- Fixes issue where link-local addresses like fe80::be24:11ff:fe28:30db%eth0 were rejected
2025-11-10 15:39:31 +01:00
Michel Roegl-Brunner
09868ba651 Merge pull request #303 from community-scripts/fix/289
fix: Add 'Delete only from DB' option for duplicate detected scripts
2025-11-10 15:37:12 +01:00
Michel Roegl-Brunner
b192c46d8d fix: Add 'Delete only from DB' option for duplicate detected scripts
- Add 'Delete only from DB' option in Actions dropdown for SSH scripts with container_id
- Place option after 'Destroy' with separator to distinguish from destructive action
- Update handleDeleteScript to use confirmation modal for SSH scripts
- Modal clearly states it only deletes database record, container remains intact
- Allows users to clean up duplicate script entries without destroying containers
- Fixes issue where duplicates could only be removed by destroying the host
2025-11-10 15:34:59 +01:00
github-actions[bot]
8c474785a0 chore: add VERSION v0.4.10.2 (#302)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 13:03:08 +00:00
github-actions[bot]
7bf67091b7 chore: add VERSION v0.4.10.2 (#301)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 13:01:48 +00:00
Michel Roegl-Brunner
c28e1d8dae Update update.sh to not exclude files in srcipts/core from update 2025-11-10 14:00:23 +01:00
Michel Roegl-Brunner
e0a7a44470 Merge pull request #299 from community-scripts/fix/bump_build.func
Fix/bump build.func
2025-11-10 13:50:34 +01:00
Michel Roegl-Brunner
430355aa4b Fix dependencies 2025-11-10 13:49:11 +01:00
Michel Roegl-Brunner
baedcf8581 Fix dependencie issue 2025-11-10 13:36:08 +01:00
Michel Roegl-Brunner
2735d7ecc9 Add missing api.func 2025-11-10 13:32:10 +01:00
Michel Roegl-Brunner
e478a66c75 Hotfix: upload corrected build.func 2025-11-10 13:29:59 +01:00
dependabot[bot]
a9f23f2d28 build(deps-dev): Bump @vitest/coverage-v8 from 3.2.4 to 4.0.8 (#291)
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 3.2.4 to 4.0.8.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.8/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.0.8
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-10 12:27:21 +01:00
dependabot[bot]
3ec045de25 build(deps): Bump next from 15.5.6 to 16.0.1 (#293)
Bumps [next](https://github.com/vercel/next.js) from 15.5.6 to 16.0.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v15.5.6...v16.0.1)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-10 12:27:12 +01:00
github-actions[bot]
d9ceac03a2 chore: add VERSION v0.4.10.1 (#298)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-10 11:10:00 +00:00
Michel Roegl-Brunner
fbc59d8964 Merge pull request #297 from community-scripts/fix/auth
Fix auth cookie secure flag for HTTP in production
2025-11-10 12:07:46 +01:00
Michel Roegl-Brunner
8c27eacff7 Fix auth cookie secure flag for HTTP in production
- Changed cookie secure flag to check actual request protocol instead of NODE_ENV
- Cookies now work correctly in production when accessing over HTTP
- Fixes authentication redirect issue in production mode
2025-11-10 12:05:47 +01:00
Michel Roegl-Brunner
86056c984d Fix auth loop 2025-11-10 11:57:18 +01:00
Michel Roegl-Brunner
8af011a191 Merge pull request #292 from community-scripts/dependabot/npm_and_yarn/eslint-config-next-16.0.1
build(deps-dev): Bump eslint-config-next from 16.0.0 to 16.0.1
2025-11-10 11:11:01 +01:00
Michel Roegl-Brunner
1dcf4159d6 Merge pull request #294 from community-scripts/dependabot/npm_and_yarn/prisma-6.19.0
build(deps-dev): Bump prisma from 6.18.0 to 6.19.0
2025-11-10 11:10:51 +01:00
Michel Roegl-Brunner
84f664af96 Merge pull request #295 from community-scripts/dependabot/npm_and_yarn/lucide-react-0.553.0
build(deps): Bump lucide-react from 0.548.0 to 0.553.0
2025-11-10 11:10:40 +01:00
dependabot[bot]
5bb10145ad build(deps): Bump lucide-react from 0.548.0 to 0.553.0
Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.548.0 to 0.553.0.
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.553.0/packages/lucide-react)

---
updated-dependencies:
- dependency-name: lucide-react
  dependency-version: 0.553.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-07 19:24:34 +00:00
dependabot[bot]
08fe6a7843 build(deps-dev): Bump prisma from 6.18.0 to 6.19.0
Bumps [prisma](https://github.com/prisma/prisma/tree/HEAD/packages/cli) from 6.18.0 to 6.19.0.
- [Release notes](https://github.com/prisma/prisma/releases)
- [Commits](https://github.com/prisma/prisma/commits/6.19.0/packages/cli)

---
updated-dependencies:
- dependency-name: prisma
  dependency-version: 6.19.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-07 19:24:24 +00:00
dependabot[bot]
ed3b4c7b19 build(deps-dev): Bump eslint-config-next from 16.0.0 to 16.0.1
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 16.0.0 to 16.0.1.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.0.1/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 16.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-07 19:23:42 +00:00
github-actions[bot]
930254d4cb chore: add VERSION v0.4.10 (#288)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-11-07 14:00:20 +00:00
Michel Roegl-Brunner
9e450ecbd1 Merge pull request #287 from community-scripts/feat/250_chose_version
feat: Add alpine variant support for LXC scripts
2025-11-07 14:55:21 +01:00
Michel Roegl-Brunner
cf3f9a5479 feat: Add version toggle in TextViewer for default/alpine variants
- Add version selection toggle (Default/Alpine) in TextViewer component
- Load both default and alpine versions of CT and install scripts
- Display correct script content based on selected version
- Pass script object to TextViewer to detect alpine variants
- Show toggle buttons only when alpine variant exists
2025-11-07 14:51:12 +01:00
Michel Roegl-Brunner
6ad18e185e feat: Add alpine variant support for LXC scripts
- Download alpine install scripts (alpine-{slug}-install.sh) when alpine variant exists
- Add ScriptVersionModal component for version selection (default/alpine)
- Update ScriptDetailModal to show version selection before server selection
- Update script execution to use selected version type
- Support downloading both default and alpine variants of scripts
2025-11-07 14:44:34 +01:00
Michel Roegl-Brunner
42fbdc87da Merge pull request #286 from community-scripts/feat/252_sessions
feat: Add persistent session authentication with configurable duration
2025-11-07 13:35:26 +01:00
Michel Roegl-Brunner
8e2286d847 feat: Add persistent session authentication with configurable duration
- Implement persistent session authentication with httpOnly cookies
- Add configurable session duration (1-365 days) in settings
- Add session expiration display in settings modal
- Add logout button next to theme toggle
- Enhance token verification to return expiration time
- Add retry logic for failed auth checks
- Add comprehensive authentication documentation to help modal
- Improve session restoration on page load
2025-11-07 13:31:16 +01:00
Michel Roegl-Brunner
73776ec6ac Merge pull request #285 from community-scripts/feat/allow_fdqn_and_ipv6_for_servers
feat: Add support for FQDN, IPv4, and IPv6 addresses in server settings
2025-11-07 13:20:15 +01:00
Michel Roegl-Brunner
596887d19c feat: Add support for FQDN, IPv4, and IPv6 addresses in server settings
- Replace IPv4-only validation with comprehensive address validation
- Support IPv4 addresses (e.g., 192.168.1.1)
- Support IPv6 addresses including compressed format (e.g., ::1, 2001:db8::1)
- Support FQDN/hostnames (e.g., server.example.com, localhost)
- Update UI label from 'IP Address' to 'Host/IP Address'
- Update placeholder text with examples for all supported formats
- Update error messages to reflect new validation capabilities
2025-11-07 13:17:42 +01:00
Michel Roegl-Brunner
0676772992 Merge pull request #283 from community-scripts/feat/delete_downloaded_scripts
Add delete script functionality
2025-11-07 13:12:38 +01:00
Michel Roegl-Brunner
72a9ea52b0 Merge pull request #284 from community-scripts/bump/tools.func
Bump tools.func - update helper functions and package management utilities
2025-11-07 13:12:27 +01:00
Michel Roegl-Brunner
826ee26cdf Bump tools.func - update helper functions and package management utilities 2025-11-07 13:11:47 +01:00
Michel Roegl-Brunner
82d14f1fb1 Add delete script functionality
- Add deleteScript method to ScriptDownloaderService (both .ts and .js)
- Add deleteScript API endpoint to scripts router
- Add delete button to ScriptDetailModal with confirmation modal
- Use ConfirmationModal component instead of plain window.confirm
- Delete button only shows when script files exist locally
- Includes proper error handling and success/error messages
2025-11-07 13:10:37 +01:00
Michel Roegl-Brunner
220b610466 Merge pull request #282 from community-scripts/fix/273
Fix x button vertical centering in filter scripts search bar
2025-11-07 13:04:45 +01:00
Michel Roegl-Brunner
e460a05f91 Fix x button vertical centering in filter scripts search bar
- Removed size='icon' constraint that limited button height
- Changed positioning to use inset-y-0 with h-full to match input field height
- Added flex items-center justify-center for proper icon centering
- Fixes hover background height mismatch between light and dark themes
2025-11-07 13:03:22 +01:00
Michel Roegl-Brunner
21f723bff6 Merge pull request #281 from community-scripts/fix/270
Add minimize buttons to FilterBar and Newest Scripts sections
2025-11-07 13:00:20 +01:00
Michel Roegl-Brunner
45ba67c827 Add minimize buttons to FilterBar and Newest Scripts sections
- Add minimize/collapse functionality to FilterBar component
- Add minimize/collapse functionality to Newest Scripts section
- Hide Newest Scripts section when user is searching, filtering, or viewing a category
- Both sections can now be minimized to save screen space
2025-11-07 12:58:22 +01:00
Michel Roegl-Brunner
61904f2936 Merge pull request #280 from community-scripts/fix/269
Add Interface Port display to script detail modal header
2025-11-07 12:55:47 +01:00
Michel Roegl-Brunner
237aee9c46 Add Interface Port display to script detail modal header
- Display port in header next to script name for better visibility
- Position port close to name/logo section
- Keep port display in Basic Information section as well
- Style port with badge-like appearance for prominence
2025-11-07 12:53:54 +01:00
Michel Roegl-Brunner
6bd402abea Merge pull request #279 from community-scripts/fix/262
Fix stale LXC entries and improve orphaned script cleanup
2025-11-07 12:50:35 +01:00
Michel Roegl-Brunner
bd3ca74175 Fix stale LXC entries and improve orphaned script cleanup
- Improved cleanupOrphanedScripts to use pct list for more reliable container verification
- Added batch processing by server for better efficiency
- Added double-check with config file existence before deletion
- Added manual cleanup button in Installed Scripts tab for on-demand cleanup
- Improved error handling and logging throughout cleanup process
- Fixes issue where deleted containers (like Planka) were still showing in the UI
2025-11-07 12:47:19 +01:00
Michel Roegl-Brunner
9fc61bb416 Merge pull request #278 from community-scripts/fix/253
Fix: Include 'New' scripts in Download All Filtered when no filters are active
2025-11-07 12:44:32 +01:00
Michel Roegl-Brunner
75d52c771f Fix: Include 'New' scripts in Download All Filtered when no filters are active
- Modified handleDownloadAllFiltered to combine filteredScripts and newestScripts when no filters are active
- Ensures all scripts including those in the 'Newest Scripts' carousel are downloaded
- Maintains existing behavior when filters are active
- Fixes issue where 'New' scripts were excluded from downloads
2025-11-07 12:42:57 +01:00
Michel Roegl-Brunner
c868b008c5 Merge pull request #277 from community-scripts/fix/251
Fix Install button not appearing for VM and tools scripts
2025-11-07 12:41:34 +01:00
Michel Roegl-Brunner
7f1ef91db9 Fix vitest dependency version mismatch
- Downgrade @vitest/coverage-v8 from ^4.0.4 to ^3.2.4 to match vitest@^3.2.4
- Resolves npm ci dependency conflict error
2025-11-07 12:39:46 +01:00
Michel Roegl-Brunner
2ee5f73117 Fix Install button not appearing for VM and tools scripts
- Update checkScriptExists to preserve subdirectory structure for tools and VM scripts
- Set ctExists=true for tools and VM scripts when files exist (not just CT scripts)
- Add missing compareScriptContent method to JavaScript version
- Remove all VW script references as they don't exist
- Fixes issue where Install button only showed Load Script button after downloading VM/tools scripts
2025-11-07 12:36:43 +01:00
dependabot[bot]
881456e74e build(deps): Bump @prisma/client from 6.17.1 to 6.18.0 (#256)
Bumps [@prisma/client](https://github.com/prisma/prisma/tree/HEAD/packages/client) from 6.17.1 to 6.18.0.
- [Release notes](https://github.com/prisma/prisma/releases)
- [Commits](https://github.com/prisma/prisma/commits/6.18.0/packages/client)

---
updated-dependencies:
- dependency-name: "@prisma/client"
  dependency-version: 6.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 13:16:36 -07:00
dependabot[bot]
650afd5872 build(deps-dev): Bump @vitest/coverage-v8 from 4.0.3 to 4.0.4 (#255)
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.4/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 13:16:27 -07:00
dependabot[bot]
f0dc393358 build(deps-dev): Bump @vitest/coverage-v8 from 3.2.4 to 4.0.3 (#243)
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 3.2.4 to 4.0.3.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.3/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.0.3
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-24 22:11:55 -07:00
Michel Roegl-Brunner
db72fea774 Merge pull request #241 from community-scripts/dependabot/npm_and_yarn/lucide-react-0.548.0 2025-10-24 23:48:47 +02:00
Michel Roegl-Brunner
24896f9c0d Merge pull request #245 from community-scripts/dependabot/npm_and_yarn/tailwindcss/postcss-4.1.16 2025-10-24 23:48:28 +02:00
Michel Roegl-Brunner
bf434e3b39 Merge pull request #242 from community-scripts/dependabot/npm_and_yarn/vitejs/plugin-react-5.1.0 2025-10-24 23:48:15 +02:00
github-actions[bot]
7699858a35 chore: add VERSION v0.4.9 (#248)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 20:39:11 +00:00
Michel Roegl-Brunner
68b6fc81bd Merge pull request #247 from community-scripts/fix/script-card-click-issues
Fix: Autosync disable functionality and multiple instance issues
2025-10-24 22:36:37 +02:00
Michel Roegl-Brunner
16947cedf5 Remove debug logs from autosync service
- Remove excessive debug logging from scheduleAutoSync and stopAutoSync
- Keep essential logging for troubleshooting
- Clean up console output for production use
2025-10-24 22:30:26 +02:00
Michel Roegl-Brunner
eca0cb57f9 Fix TypeScript linting errors in autoSyncService
- Add JSDoc type definitions for settings object
- Fix appriseUrls undefined checks
- Fix null assignment for lastAutoSyncError
- Add proper type annotations for error fields

All TypeScript linting errors are now resolved.
2025-10-24 22:30:15 +02:00
Michel Roegl-Brunner
011cbd23b2 Fix autosync continuing to run after being disabled
- Add destroy() method to properly stop cron jobs
- Add additional safety checks in cron job execution
- Add debugging logs to track cron job lifecycle
- Ensure isRunning is set to false even when no cron job exists
- Add null check for cronJob before execution

This should prevent autosync from continuing to run after being disabled.
2025-10-24 22:29:37 +02:00
Michel Roegl-Brunner
19e18b4ebf Fix multiple autosync instances running simultaneously
- Add global lock to prevent multiple autosync instances from running
- Add initialization check to prevent multiple service creation
- Add global lock checks in cron job execution
- Prevent multiple notifications from being sent
- Fix TypeScript errors with error field types

This fixes the issue where 6+ autosync instances were running simultaneously,
causing multiple notifications and rate limit issues.
2025-10-24 22:27:40 +02:00
Michel Roegl-Brunner
ffef6313d4 Add error reporting for GitHub rate limit errors
- Add specific error handling for GitHub API rate limit (403) errors
- Create RateLimitError with proper error name for identification
- Store last sync error and error time in settings for UI display
- Add error status display in autosync settings modal
- Show user-friendly error messages with GitHub token suggestion
- Clear error status on successful sync
- Update both GitHubJsonService and GitHubService with rate limit error handling

This provides better user feedback when GitHub API rate limits are exceeded
and guides users to set up a GitHub token for higher rate limits.
2025-10-24 22:23:59 +02:00
Michel Roegl-Brunner
7b4daf8754 Fix autosync continuing to run after being disabled
- Add defensive check in cron job execution to stop if autosync is disabled
- Ensure isRunning flag is set to false when stopping autosync
- Add logging to show when autosync is disabled and not scheduling
- Fix both API route and TRPC router to properly stop service
- Prevent multiple cron jobs from running simultaneously

This fixes the issue where autosync would continue running even after
being disabled in the GUI, causing rate limit errors and unwanted syncs.
2025-10-24 22:20:13 +02:00
Michel Roegl-Brunner
fdeda6c77a Add GitHub token authentication to sync services
- Add GitHub token authentication to GitHubJsonService for API calls
- Add GitHub token authentication to GitHubService for API calls
- Update fetchFromGitHub methods to use GITHUB_TOKEN from .env
- Update downloadJsonFile methods to use GitHub token for raw file downloads
- Add proper error handling for rate limit exceeded (403) errors
- Add console logging to show when token is/isn't being used
- Improve error messages to suggest setting GITHUB_TOKEN for higher rate limits

This ensures that when a GitHub token is specified in .env, it will be used
for all GitHub API calls during sync operations, providing higher rate limits
and better reliability.
2025-10-24 22:16:31 +02:00
Michel Roegl-Brunner
5acaf144fb Fix autosync toggle disable functionality
- Fix service instance management to use global instance for stopping autosync
- Add automatic saving when toggle is changed (no manual save required)
- Fix validation issue where custom sync type without cron expression caused 400 error
- Add comprehensive debugging and error handling
- Ensure .env file is properly updated with AUTO_SYNC_ENABLED value
- Improve service lifecycle management with proper state cleanup
- Add fallback logic for invalid sync interval configurations

Resolves issue where disabling autosync in GUI didn't update .env file or stop service
2025-10-24 22:15:24 +02:00
Michel Roegl-Brunner
926032e83b Fix auto-sync service not stopping when disabled
- Use global auto-sync service instance instead of creating new instances
- This ensures stopAutoSync() is called on the actual running service
- Fix .env file parsing to handle comments and empty lines properly
- Update both TRPC and REST API endpoints to use global instance
- Auto-sync service will now properly stop when disabled in settings
2025-10-24 22:09:16 +02:00
Michel Roegl-Brunner
8fc9b27f55 Fix missing access import in scriptDownloader.js
- Add missing 'access' import from 'fs/promises'
- This was causing checkScriptExists method to fail with 'access is not defined' error
- Now properly detects when script files exist locally
- Fixes issue where UI shows 'Load Script' instead of 'Install' button for downloaded scripts
2025-10-24 22:07:46 +02:00
Michel Roegl-Brunner
9a8cff3227 Add missing checkScriptExists method to scriptDownloader.js
- Add checkScriptExists method that was missing from JavaScript implementation
- This method is required by the checkScriptFiles API endpoint
- Method checks if CT script and install script files exist locally
- Returns ctExists, installExists, and files array
- Fixes issue where UI shows 'Load Script' instead of 'Install' button for downloaded scripts
2025-10-24 22:06:34 +02:00
Michel Roegl-Brunner
e40bd1f6a3 Fix CT script source line replacement
- Implement modifyScriptContent method to replace GitHub source line with local source
- Replace 'source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)'
  with 'SCRIPT_DIR="." \nsource "/../core/build.func"'
- This ensures CT scripts use local build.func instead of downloading from GitHub
- Applied to all CT scripts during download process
- Tested with 2fauth script - replacement works correctly
2025-10-24 22:04:23 +02:00
Michel Roegl-Brunner
6c982050da Fix notification to show script names grouped by category
- Store full script objects instead of just names in results.newScripts and results.updatedScripts
- This allows groupScriptsByCategory to properly group scripts by their categories
- Notification will now show actual script names grouped by category instead of 'undefined synced, undefined up to date'
- Script objects contain name, slug, and categories fields needed for proper grouping
2025-10-24 22:02:56 +02:00
Michel Roegl-Brunner
b40f5b788c Fix script downloader placeholder files issue
- Delete stub scriptDownloader.js that contained placeholder implementation
- Implement real JavaScript script downloader with GitHub fetch functionality
- Fix incremental JSON sync to only process newly synced files
- Add proper error handling and file structure management
- Support all script types (ct/, tools/, vm/, vw/) with directory preservation
- Download install scripts for CT scripts
- Re-enable auto-sync service to use real implementation

Scripts now download real content from GitHub instead of placeholders.
2025-10-24 21:58:35 +02:00
dependabot[bot]
962a3b9908 build(deps-dev): Bump @tailwindcss/postcss from 4.1.15 to 4.1.16
Bumps [@tailwindcss/postcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss) from 4.1.15 to 4.1.16.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.16/packages/@tailwindcss-postcss)

---
updated-dependencies:
- dependency-name: "@tailwindcss/postcss"
  dependency-version: 4.1.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-24 19:38:29 +00:00
dependabot[bot]
a1fe386efd build(deps-dev): Bump @vitejs/plugin-react from 5.0.4 to 5.1.0
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 5.0.4 to 5.1.0.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@5.1.0/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 5.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-24 19:37:55 +00:00
dependabot[bot]
aa76e17e25 build(deps): Bump lucide-react from 0.546.0 to 0.548.0
Bumps [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react) from 0.546.0 to 0.548.0.
- [Release notes](https://github.com/lucide-icons/lucide/releases)
- [Commits](https://github.com/lucide-icons/lucide/commits/0.548.0/packages/lucide-react)

---
updated-dependencies:
- dependency-name: lucide-react
  dependency-version: 0.548.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-24 19:37:40 +00:00
Michel Roegl-Brunner
2c3fdf5544 Fix script card click issues and missing Install button
- Fix type signature mismatch in handleCardClick functions
  - Updated ScriptsGrid.tsx and DownloadedScriptsTab.tsx to accept ScriptCardType instead of { slug: string }
  - This resolves the modal not opening when clicking script cards

- Fix server-side import issues
  - Updated autoSyncService.js to import from githubJsonService.ts instead of .js
  - Fixed path aliases in githubJsonService.ts to use relative imports
  - Updated scripts.ts to import from TypeScript service files directly

- Fix missing Install button
  - Resolved scriptDownloaderService.checkScriptExists method not being available
  - Install button now appears when script files exist locally

- Remove debug logging
  - Cleaned up temporary console.log statements and debug UI elements

All script card interactions now work properly:
- Cards open detail modal when clicked
- Install button appears when appropriate
- Server-side API calls work correctly
2025-10-24 21:22:46 +02:00
github-actions[bot]
74dd29b87b chore: add VERSION v0.4.8 (#239)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-24 11:00:54 +00:00
Michel Roegl-Brunner
8a07fb781c Remove sync upstream JSONs step from publish_release.yml
Removed the sync upstream JSONs step from the workflow.
2025-10-24 12:59:53 +02:00
Michel Roegl-Brunner
79f17236db Merge pull request #238 from community-scripts/feat/auto_sync_lxc
feat: Add comprehensive auto-sync functionality
2025-10-24 12:58:56 +02:00
Michel Roegl-Brunner
83ab60ec2d Merge pull request #233 from community-scripts/dependabot/npm_and_yarn/tailwindcss-4.1.16
build(deps-dev): Bump tailwindcss from 4.1.15 to 4.1.16
2025-10-24 12:57:25 +02:00
Michel Roegl-Brunner
cd2b00b704 fix: Resolve linter errors in autoSyncService.js
- Added @ts-ignore comment for scriptDownloaderService.initializeConfig() call
- Added explicit JSDoc type annotations for forEach callback parameters
- Fixed 'implicitly has an any type' errors for catId and scriptName parameters
- All linter errors resolved while maintaining functionality

The categorization feature is now fully functional with clean, type-safe code.
2025-10-24 12:57:08 +02:00
Michel Roegl-Brunner
7817ce3d8e feat: Add script categorization to auto-sync notifications
- Added loadCategories() method to load category definitions from metadata.json
- Added groupScriptsByCategory() method to group scripts by their categories
- Modified scriptDownloaderService to return full script objects instead of just names
- Updated notification format to show scripts grouped by category with proper formatting
- Scripts are now displayed as:
  **Category Name:**
  • Script Name 1
  • Script Name 2

This provides much better organization in notifications, making it easier to
see what types of scripts were downloaded or updated.
2025-10-24 12:53:07 +02:00
Michel Roegl-Brunner
82b2012f50 fix: Import Buffer explicitly for ES module compatibility
- Added import { Buffer } from 'buffer' to githubJsonService.js
- Fixed 'require is not defined' error when using Buffer.from() in ES modules
- Auto-sync now works correctly through both direct execution and web API

The Buffer global is not available in ES module context, so it needs to be
explicitly imported. This fixes the sync errors that were occurring when
the auto-sync service was called through the web interface.
2025-10-24 12:48:22 +02:00
Michel Roegl-Brunner
bb4eb2964b fix: Remove CommonJS require() calls in ES module context
- Fixed 'require is not defined' error in githubJsonService.js
- Imported utimesSync from fs module instead of using require('fs').utimesSync
- Auto-sync now works without ES module errors

The JSON sync now completes successfully without any require() errors.
2025-10-24 12:46:50 +02:00
Michel Roegl-Brunner
a6a02a15fe fix: Auto-sync file detection and script downloader initialization
- Fixed statSync import in githubJsonService.js
- Added proper initialization of scriptDownloaderService before use
- Fixed local file detection - now correctly finds 411 local files instead of 0
- Auto-sync now properly shows 'Files to sync: 0, Up-to-date: 404' instead of downloading all
- Added debugging output to track file detection process

The auto-sync now correctly detects existing files and only syncs what's actually new or changed.
2025-10-24 12:43:50 +02:00
Michel Roegl-Brunner
bf5b602fd1 fix: Custom cron input and auto-sync rescheduling
- Fixed custom cron input field to be properly editable with autoFocus
- Added helpful cron examples and better validation feedback
- Fixed cron validation to work with 5-field expressions (node-cron format)
- Added auto-sync rescheduling when settings are saved via API route
- Improved user experience with better error handling and examples

The custom cron input now works properly and auto-sync will reschedule
immediately when settings are saved, including custom cron expressions.
2025-10-24 12:41:24 +02:00
Michel Roegl-Brunner
4d12a51b05 fix: Auto-sync now only downloads truly new scripts
- Fixed isScriptDownloaded logic to check ALL script files before considering a script downloaded
- Modified auto-sync to filter and only process scripts that haven't been downloaded before
- Added proper logging to show how many new scripts were found vs total scripts
- Made isScriptDownloaded method public in TypeScript version

This ensures auto-sync only downloads scripts that are actually new,
not re-downloading existing scripts or processing unchanged content.
2025-10-24 12:33:00 +02:00
Michel Roegl-Brunner
e0bea6c6e0 feat: Add comprehensive auto-sync functionality
 New Features:
- Auto-sync service with configurable intervals (15min, 30min, 1hour, 6hours, 12hours, 24hours, custom cron)
- Automatic JSON file synchronization from GitHub repositories
- Auto-download new scripts when JSON files are updated
- Auto-update existing scripts when newer versions are available
- Apprise notification service integration for sync status updates
- Comprehensive error handling and logging

🔧 Technical Implementation:
- AutoSyncService: Core scheduling and execution logic
- GitHubJsonService: Handles JSON file synchronization from GitHub
- AppriseService: Sends notifications via multiple channels (Discord, Telegram, Email, Slack, etc.)
- ScriptDownloaderService: Manages automatic script downloads and updates
- Settings API: RESTful endpoints for auto-sync configuration
- UI Integration: Settings modal with auto-sync configuration options

📋 Configuration Options:
- Enable/disable auto-sync functionality
- Flexible scheduling (predefined intervals or custom cron expressions)
- Selective script processing (new downloads, updates, or both)
- Notification settings with multiple Apprise URL support
- Environment-based configuration with .env file persistence

🎯 Benefits:
- Keeps script repository automatically synchronized
- Reduces manual maintenance overhead
- Provides real-time notifications of sync status
- Supports multiple notification channels
- Configurable to match different deployment needs

This feature significantly enhances the automation capabilities of PVE Scripts Local,
making it a truly hands-off solution for script management.
2025-10-24 12:28:44 +02:00
dependabot[bot]
2f1b738164 build(deps-dev): Bump tailwindcss from 4.1.15 to 4.1.16
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.1.15 to 4.1.16.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.16/packages/tailwindcss)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-version: 4.1.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-24 10:28:06 +00:00
Michel Roegl-Brunner
3639dd231a Merge pull request #234 from community-scripts/dependabot/npm_and_yarn/prisma-6.18.0
build(deps-dev): Bump prisma from 6.17.1 to 6.18.0
2025-10-24 12:26:46 +02:00
Michel Roegl-Brunner
86f55069e6 Merge pull request #237 from community-scripts/update/tools.func
fix: Container ID display not showing after whiptail input and update tools.func
2025-10-24 09:21:51 +02:00
Michel Roegl-Brunner
5faa7f3646 remove debian 2025-10-24 09:20:00 +02:00
Michel Roegl-Brunner
bc52256301 fix: Container ID display not showing after whiptail input
- Move echo statement outside whiptail output capture block
- Fix output redirection interference with Container ID display
- Ensure Container ID is properly displayed regardless of user input
- Consolidate duplicate echo statements into single display
2025-10-24 09:19:34 +02:00
Michel Roegl-Brunner
9e66cdd7ea Cleanup 2025-10-24 08:51:05 +02:00
dependabot[bot]
931c9cedf1 build(deps-dev): Bump prisma from 6.17.1 to 6.18.0
Bumps [prisma](https://github.com/prisma/prisma/tree/HEAD/packages/cli) from 6.17.1 to 6.18.0.
- [Release notes](https://github.com/prisma/prisma/releases)
- [Commits](https://github.com/prisma/prisma/commits/6.18.0/packages/cli)

---
updated-dependencies:
- dependency-name: prisma
  dependency-version: 6.18.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-23 19:26:58 +00:00
Michel Roegl-Brunner
83a51db265 Merge pull request #230 from community-scripts/dependabot/npm_and_yarn/eslint-config-next-16.0.0 2025-10-23 13:39:24 +02:00
Michel Roegl-Brunner
1b09d1494e Merge pull request #231 from community-scripts/dependabot/npm_and_yarn/superjson-2.2.3 2025-10-23 13:38:56 +02:00
dependabot[bot]
02fe842995 build(deps): Bump superjson from 2.2.2 to 2.2.3
Bumps [superjson](https://github.com/blitz-js/superjson) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/blitz-js/superjson/releases)
- [Commits](https://github.com/blitz-js/superjson/commits)

---
updated-dependencies:
- dependency-name: superjson
  dependency-version: 2.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-22 19:27:06 +00:00
dependabot[bot]
a464c845c2 build(deps-dev): Bump eslint-config-next from 15.5.6 to 16.0.0
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 15.5.6 to 16.0.0.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v16.0.0/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-version: 16.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-22 19:27:00 +00:00
Michel Roegl-Brunner
5a69f58770 Merge pull request #226 from community-scripts/dependabot/npm_and_yarn/types/node-24.9.1 2025-10-21 21:54:35 +02:00
dependabot[bot]
48c243f624 build(deps-dev): Bump @types/node from 24.9.0 to 24.9.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.9.0 to 24.9.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.9.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-21 19:28:07 +00:00
github-actions[bot]
7af0717b1b chore: add VERSION v0.4.7 (#225)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-21 14:34:32 +00:00
504 changed files with 28822 additions and 10580 deletions

View File

@@ -27,3 +27,12 @@ AUTH_ENABLED=false
AUTH_SETUP_COMPLETED=false AUTH_SETUP_COMPLETED=false
JWT_SECRET= JWT_SECRET=
DATABASE_URL="file:/opt/ProxmoxVE-Local/data/settings.db" DATABASE_URL="file:/opt/ProxmoxVE-Local/data/settings.db"
AUTO_SYNC_ENABLED=false
SYNC_INTERVAL_TYPE=
SYNC_INTERVAL_PREDEFINED=
AUTO_DOWNLOAD_NEW=
AUTO_UPDATE_EXISTING=
NOTIFICATION_ENABLED=
APPRISE_URLS=
LAST_AUTO_SYNC=
SYNC_INTERVAL_CRON=

View File

@@ -16,7 +16,7 @@ jobs:
strategy: strategy:
matrix: matrix:
node-version: [22.x] node-version: [24.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps: steps:

View File

@@ -46,35 +46,6 @@ jobs:
git config user.email "github-actions[bot]@users.noreply.github.com" git config user.email "github-actions[bot]@users.noreply.github.com"
git commit -m "chore: add VERSION $version" --allow-empty git commit -m "chore: add VERSION $version" --allow-empty
- name: Sync upstream JSONs
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
tmp_dir=$(mktemp -d)
api_url="https://api.github.com/repos/community-scripts/ProxmoxVE/contents/frontend/public/json"
# Fetch file list (no subfolders)
curl -sSL -H "Authorization: token $GH_TOKEN" "$api_url" \
| jq -r '.[] | select(.type=="file") | .name' > "$tmp_dir/files.txt"
# Download each file
while IFS= read -r name; do
curl -sSL -H "Authorization: token $GH_TOKEN" \
"https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/frontend/public/json/$name" \
-o "$tmp_dir/$name"
done < "$tmp_dir/files.txt"
mkdir -p json
rsync -a --delete "$tmp_dir/" json/
# Stage and amend commit to include JSON updates (and VERSION)
git add json VERSION
if ! git diff --cached --quiet; then
git commit --amend --no-edit
fi
- name: Push changes - name: Push changes
run: | run: |
git push --force-with-lease --set-upstream origin "update-version-${{ steps.draft.outputs.tag_name }}" git push --force-with-lease --set-upstream origin "update-version-${{ steps.draft.outputs.tag_name }}"

6
.gitignore vendored
View File

@@ -16,6 +16,9 @@
db.sqlite db.sqlite
data/settings.db data/settings.db
# prisma generated client
/prisma/generated/
# ssh keys (sensitive) # ssh keys (sensitive)
data/ssh-keys/ data/ssh-keys/
@@ -37,6 +40,9 @@ yarn-debug.log*
yarn-error.log* yarn-error.log*
.pnpm-debug.log* .pnpm-debug.log*
update.log
server.log
# local env files # local env files
# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables # do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables
.env .env

View File

@@ -1 +1 @@
0.4.6 0.5.0

View File

@@ -1,15 +1,23 @@
import { FlatCompat } from "@eslint/eslintrc"; import eslintPluginNext from "@next/eslint-plugin-next";
import tseslint from "typescript-eslint"; import tseslint from "typescript-eslint";
import reactPlugin from "eslint-plugin-react";
const compat = new FlatCompat({ import reactHooksPlugin from "eslint-plugin-react-hooks";
baseDirectory: import.meta.dirname,
});
export default tseslint.config( export default tseslint.config(
{ {
ignores: [".next"], ignores: [".next", "next-env.d.ts", "postcss.config.js", "prettier.config.js"],
},
{
plugins: {
"@next/next": eslintPluginNext,
"react": reactPlugin,
"react-hooks": reactHooksPlugin,
},
rules: {
...eslintPluginNext.configs.recommended.rules,
...eslintPluginNext.configs["core-web-vitals"].rules,
},
}, },
...compat.extends("next/core-web-vitals"),
{ {
files: ["**/*.ts", "**/*.tsx"], files: ["**/*.ts", "**/*.tsx"],
extends: [ extends: [

View File

@@ -1,44 +0,0 @@
{
"name": "Frigate",
"slug": "frigate",
"categories": [
15
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": true,
"interface_port": 5000,
"documentation": "https://docs.frigate.video/",
"website": "https://frigate.video/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/frigate.webp",
"config_path": "",
"description": "Frigate is an open source NVR built around real-time AI object detection. All processing is performed locally on your own hardware, and your camera feeds never leave your home.",
"install_methods": [
{
"type": "default",
"script": "ct/frigate.sh",
"resources": {
"cpu": 4,
"ram": 4096,
"hdd": 20,
"os": "debian",
"version": "11"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Discussions (explore more advanced methods): `https://github.com/tteck/Proxmox/discussions/2711`",
"type": "info"
},
{
"text": "go2rtc Interface port:`1984`",
"type": "info"
}
]
}

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.openarchiver.com/", "documentation": "https://docs.openarchiver.com/",
"config_path": "/opt/openarchiver/.env", "config_path": "/opt/openarchiver/.env",
"website": "https://openarchiver.com/", "website": "https://openarchiver.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/OpenArchiver.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/open-archiver.webp",
"description": "Open Archiver is a secure, self-hosted email archiving solution, and it's completely open source. Get an email archiver that enables full-text search across email and attachments. Create a permanent, searchable, and compliant mail archive from Google Workspace, Microsoft 35, and any IMAP server.", "description": "Open Archiver is a secure, self-hosted email archiving solution, and it's completely open source. Get an email archiver that enables full-text search across email and attachments. Create a permanent, searchable, and compliant mail archive from Google Workspace, Microsoft 35, and any IMAP server.",
"install_methods": [ "install_methods": [
{ {

View File

@@ -1,14 +1,89 @@
[ [
{
"name": "apache/cassandra",
"version": "5.0.6-tentative",
"date": "2025-10-21T11:42:35Z"
},
{
"name": "evcc-io/evcc",
"version": "0.209.3",
"date": "2025-10-21T10:53:07Z"
},
{
"name": "grafana/grafana",
"version": "v11.5.10",
"date": "2025-10-21T10:46:47Z"
},
{
"name": "zabbix/zabbix",
"version": "7.0.20rc1",
"date": "2025-10-21T09:14:14Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.115.3",
"date": "2025-10-14T14:40:17Z"
},
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.128.0",
"date": "2025-10-21T08:30:52Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.1",
"date": "2025-10-15T10:44:03Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0.ignore-embedding-failures-2",
"date": "2025-10-21T07:36:22Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.166",
"date": "2025-10-21T05:54:33Z"
},
{
"name": "openobserve/openobserve",
"version": "v0.16.0-rc1",
"date": "2025-10-21T00:37:47Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-10-21T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{
"name": "documenso/documenso",
"version": "v1.13.0",
"date": "2025-10-21T00:21:04Z"
},
{ {
"name": "goauthentik/authentik", "name": "goauthentik/authentik",
"version": "version/2025.10.0-rc1", "version": "version/2025.10.0-rc2",
"date": "2025-10-20T23:43:29Z" "date": "2025-10-21T00:19:36Z"
},
{
"name": "TwiN/gatus",
"version": "v5.27.1",
"date": "2025-10-21T00:01:36Z"
}, },
{ {
"name": "henrygd/beszel", "name": "henrygd/beszel",
"version": "v0.14.1", "version": "v0.14.1",
"date": "2025-10-20T22:10:56Z" "date": "2025-10-20T22:10:56Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.4.1",
"date": "2025-10-16T07:21:53Z"
},
{ {
"name": "booklore-app/booklore", "name": "booklore-app/booklore",
"version": "v1.8.1", "version": "v1.8.1",
@@ -44,11 +119,6 @@
"version": "v1.91.0-pre", "version": "v1.91.0-pre",
"date": "2025-10-20T16:18:51Z" "date": "2025-10-20T16:18:51Z"
}, },
{
"name": "meilisearch/meilisearch",
"version": "prototype-v1.24.0.ignore-embedding-failures-1",
"date": "2025-10-20T16:17:45Z"
},
{ {
"name": "louislam/uptime-kuma", "name": "louislam/uptime-kuma",
"version": "2.0.1", "version": "2.0.1",
@@ -69,16 +139,6 @@
"version": "v1.71.2", "version": "v1.71.2",
"date": "2025-10-20T15:25:52Z" "date": "2025-10-20T15:25:52Z"
}, },
{
"name": "openobserve/openobserve",
"version": "v0.16.0-rc1",
"date": "2025-10-20T13:16:20Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.7.1",
"date": "2025-10-15T10:44:03Z"
},
{ {
"name": "Graylog2/graylog2-server", "name": "Graylog2/graylog2-server",
"version": "7.0.0-rc.1", "version": "7.0.0-rc.1",
@@ -94,21 +154,11 @@
"version": "v2025.10.4", "version": "v2025.10.4",
"date": "2025-10-20T10:45:54Z" "date": "2025-10-20T10:45:54Z"
}, },
{
"name": "apache/cassandra",
"version": "cassandra-4.0.19",
"date": "2025-10-20T09:08:49Z"
},
{ {
"name": "jupyter/notebook", "name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-beta.1", "version": "@jupyter-notebook/ui-components@7.5.0-beta.1",
"date": "2025-10-20T07:01:38Z" "date": "2025-10-20T07:01:38Z"
}, },
{
"name": "Jackett/Jackett",
"version": "v0.24.159",
"date": "2025-10-20T05:53:23Z"
},
{ {
"name": "inventree/InvenTree", "name": "inventree/InvenTree",
"version": "1.0.7", "version": "1.0.7",
@@ -134,16 +184,6 @@
"version": "v1.0.0-beta27", "version": "v1.0.0-beta27",
"date": "2025-10-20T00:38:13Z" "date": "2025-10-20T00:38:13Z"
}, },
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-10-20T00:27:05Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v4.0.1",
"date": "2025-10-15T16:53:55Z"
},
{ {
"name": "seriousm4x/UpSnap", "name": "seriousm4x/UpSnap",
"version": "5.2.3", "version": "5.2.3",
@@ -259,11 +299,6 @@
"version": "v25.4", "version": "v25.4",
"date": "2025-10-09T10:27:01Z" "date": "2025-10-09T10:27:01Z"
}, },
{
"name": "TwiN/gatus",
"version": "v5.27.0",
"date": "2025-10-18T02:44:26Z"
},
{ {
"name": "9001/copyparty", "name": "9001/copyparty",
"version": "v1.19.17", "version": "v1.19.17",
@@ -284,11 +319,6 @@
"version": "v13.0.1", "version": "v13.0.1",
"date": "2025-10-17T18:54:16Z" "date": "2025-10-17T18:54:16Z"
}, },
{
"name": "keycloak/keycloak",
"version": "26.4.1",
"date": "2025-10-16T07:21:53Z"
},
{ {
"name": "grokability/snipe-it", "name": "grokability/snipe-it",
"version": "v8.3.4", "version": "v8.3.4",
@@ -459,11 +489,6 @@
"version": "2025.10.0", "version": "2025.10.0",
"date": "2025-10-14T19:07:37Z" "date": "2025-10-14T19:07:37Z"
}, },
{
"name": "evcc-io/evcc",
"version": "0.209.2",
"date": "2025-10-14T18:55:44Z"
},
{ {
"name": "crafty-controller/crafty-4", "name": "crafty-controller/crafty-4",
"version": "v4.5.5", "version": "v4.5.5",
@@ -484,11 +509,6 @@
"version": "v1.140.0", "version": "v1.140.0",
"date": "2025-10-14T15:57:12Z" "date": "2025-10-14T15:57:12Z"
}, },
{
"name": "n8n-io/n8n",
"version": "n8n@1.115.3",
"date": "2025-10-14T14:40:17Z"
},
{ {
"name": "rogerfar/rdt-client", "name": "rogerfar/rdt-client",
"version": "v2.0.119", "version": "v2.0.119",
@@ -619,11 +639,6 @@
"version": "11.0.1", "version": "11.0.1",
"date": "2025-10-09T12:34:15Z" "date": "2025-10-09T12:34:15Z"
}, },
{
"name": "documenso/documenso",
"version": "v1.12.10",
"date": "2025-10-09T04:32:35Z"
},
{ {
"name": "rabbitmq/rabbitmq-server", "name": "rabbitmq/rabbitmq-server",
"version": "v4.1.4", "version": "v4.1.4",
@@ -674,11 +689,6 @@
"version": "v0.15.1", "version": "v0.15.1",
"date": "2025-10-07T20:30:56Z" "date": "2025-10-07T20:30:56Z"
}, },
{
"name": "VictoriaMetrics/VictoriaMetrics",
"version": "pmm-6401-v1.127.0",
"date": "2025-10-07T14:31:32Z"
},
{ {
"name": "thecfu/scraparr", "name": "thecfu/scraparr",
"version": "v2.2.5", "version": "v2.2.5",
@@ -769,11 +779,6 @@
"version": "v5.41.4", "version": "v5.41.4",
"date": "2025-09-30T22:26:11Z" "date": "2025-09-30T22:26:11Z"
}, },
{
"name": "zabbix/zabbix",
"version": "7.4.3",
"date": "2025-09-30T21:49:53Z"
},
{ {
"name": "mongodb/mongo", "name": "mongodb/mongo",
"version": "r8.2.1", "version": "r8.2.1",
@@ -884,11 +889,6 @@
"version": "v2.0.10", "version": "v2.0.10",
"date": "2025-09-24T08:33:37Z" "date": "2025-09-24T08:33:37Z"
}, },
{
"name": "grafana/grafana",
"version": "v12.2.0",
"date": "2025-09-23T23:47:02Z"
},
{ {
"name": "postgres/postgres", "name": "postgres/postgres",
"version": "REL_18_0", "version": "REL_18_0",

View File

@@ -18,31 +18,25 @@ const config = {
}, },
], ],
}, },
// Allow cross-origin requests from local network ranges // Allow cross-origin requests from local network in dev mode
allowedDevOrigins: [ // Note: In Next.js 16, we disable this check entirely for dev
'http://localhost:3000', async headers() {
'http://127.0.0.1:3000', return [
'http://[::1]:3000', {
'http://10.*', source: '/:path*',
'http://172.16.*', headers: [
'http://172.17.*', { key: 'Access-Control-Allow-Origin', value: '*' },
'http://172.18.*', { key: 'Access-Control-Allow-Methods', value: 'GET,POST,PUT,DELETE,OPTIONS' },
'http://172.19.*', { key: 'Access-Control-Allow-Headers', value: 'Content-Type, Authorization' },
'http://172.20.*',
'http://172.21.*',
'http://172.22.*',
'http://172.23.*',
'http://172.24.*',
'http://172.25.*',
'http://172.26.*',
'http://172.27.*',
'http://172.28.*',
'http://172.29.*',
'http://172.30.*',
'http://172.31.*',
'http://192.168.*',
], ],
},
];
},
turbopack: {
// Disable Turbopack and use Webpack instead for compatibility
// This is necessary for server-side code that uses child_process
},
webpack: (config, { dev, isServer }) => { webpack: (config, { dev, isServer }) => {
if (dev && !isServer) { if (dev && !isServer) {
config.watchOptions = { config.watchOptions = {
@@ -50,8 +44,19 @@ const config = {
aggregateTimeout: 300, aggregateTimeout: 300,
}; };
} }
// Handle server-side modules
if (isServer) {
config.externals = config.externals || [];
if (!config.externals.includes('child_process')) {
config.externals.push('child_process');
}
}
return config; return config;
}, },
// TypeScript errors will fail the build
typescript: {
ignoreBuildErrors: false,
},
}; };
export default config; export default config;

3993
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,17 +4,20 @@
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {
"build": "next build", "build": "prisma generate && next build --webpack",
"check": "next lint && tsc --noEmit", "check": "eslint . && tsc --noEmit",
"dev": "next dev", "dev": "next dev --webpack",
"dev:server": "node server.js", "dev:server": "node --import tsx server.js",
"dev:next": "next dev --turbo", "dev:next": "next dev --webpack",
"format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,mdx}\" --cache", "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,mdx}\" --cache",
"format:write": "prettier --write \"**/*.{ts,tsx,js,jsx,mdx}\" --cache", "format:write": "prettier --write \"**/*.{ts,tsx,js,jsx,mdx}\" --cache",
"lint": "next lint", "generate": "prisma generate",
"lint:fix": "next lint --fix", "lint": "eslint .",
"lint:fix": "eslint --fix .",
"migrate": "prisma migrate dev",
"preview": "next build && next start", "preview": "next build && next start",
"start": "node server.js", "postinstall": "prisma generate",
"start": "node --import tsx server.js",
"test": "vitest", "test": "vitest",
"test:ui": "vitest --ui", "test:ui": "vitest --ui",
"test:run": "vitest run", "test:run": "vitest run",
@@ -22,71 +25,82 @@
"typecheck": "tsc --noEmit" "typecheck": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@prisma/client": "^6.17.1", "@prisma/adapter-better-sqlite3": "^7.0.1",
"@prisma/client": "^7.0.1",
"@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-slot": "^1.2.4",
"@t3-oss/env-nextjs": "^0.13.8", "@t3-oss/env-nextjs": "^0.13.8",
"@tailwindcss/typography": "^0.5.19", "@tailwindcss/typography": "^0.5.19",
"@tanstack/react-query": "^5.90.5", "@tanstack/react-query": "^5.90.11",
"@trpc/client": "^11.6.0", "@trpc/client": "^11.7.2",
"@trpc/react-query": "^11.6.0", "@trpc/react-query": "^11.7.2",
"@trpc/server": "^11.6.0", "@trpc/server": "^11.7.2",
"@types/react-syntax-highlighter": "^15.5.13", "@types/react-syntax-highlighter": "^15.5.13",
"@types/ws": "^8.18.1", "@types/ws": "^8.18.1",
"@xterm/addon-fit": "^0.10.0", "@xterm/addon-fit": "^0.10.0",
"@xterm/addon-web-links": "^0.11.0", "@xterm/addon-web-links": "^0.11.0",
"@xterm/xterm": "^5.5.0", "@xterm/xterm": "^5.5.0",
"bcryptjs": "^3.0.2", "axios": "^1.13.2",
"bcryptjs": "^3.0.3",
"better-sqlite3": "^12.4.6",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cron-validator": "^1.4.0",
"dotenv": "^17.2.3",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"lucide-react": "^0.546.0", "lucide-react": "^0.555.0",
"next": "^15.5.6", "next": "^16.0.5",
"node-cron": "^4.2.1",
"node-pty": "^1.0.0", "node-pty": "^1.0.0",
"react": "^19.0.0", "react": "^19.2.0",
"react-dom": "^19.0.0", "react-dom": "^19.2.0",
"react-markdown": "^10.1.0", "react-markdown": "^10.1.0",
"react-syntax-highlighter": "^15.6.6", "react-syntax-highlighter": "^16.1.0",
"refractor": "^5.0.0", "refractor": "^5.0.0",
"remark-gfm": "^4.0.1", "remark-gfm": "^4.0.1",
"server-only": "^0.0.1", "server-only": "^0.0.1",
"strip-ansi": "^7.1.2", "strip-ansi": "^7.1.2",
"superjson": "^2.2.1", "superjson": "^2.2.6",
"tailwind-merge": "^3.3.1", "tailwind-merge": "^3.4.0",
"ws": "^8.18.3", "ws": "^8.18.3",
"zod": "^4.1.12" "zod": "^4.1.13"
}, },
"devDependencies": { "devDependencies": {
"@eslint/eslintrc": "^3.3.1", "@tailwindcss/postcss": "^4.1.17",
"@tailwindcss/postcss": "^4.1.15",
"@testing-library/jest-dom": "^6.9.1", "@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0", "@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1", "@testing-library/user-event": "^14.6.1",
"@types/bcryptjs": "^3.0.0", "@types/bcryptjs": "^3.0.0",
"@types/better-sqlite3": "^7.6.8", "@types/better-sqlite3": "^7.6.13",
"@types/jsonwebtoken": "^9.0.10", "@types/jsonwebtoken": "^9.0.10",
"@types/node": "^24.9.0", "@types/node": "^24.10.1",
"@types/react": "^19.0.0", "@types/node-cron": "^3.0.11",
"@types/react-dom": "^19.2.2", "@types/react": "^19.2.7",
"@vitejs/plugin-react": "^5.0.2", "@types/react-dom": "^19.2.3",
"@vitest/coverage-v8": "^3.2.4", "@vitejs/plugin-react": "^5.1.1",
"@vitest/ui": "^3.2.4", "@vitest/coverage-v8": "^4.0.14",
"eslint": "^9.38.0", "@vitest/ui": "^4.0.14",
"eslint-config-next": "^15.5.6", "baseline-browser-mapping": "^2.8.32",
"jsdom": "^27.0.1", "eslint": "^9.39.1",
"postcss": "^8.5.3", "eslint-config-next": "^16.0.5",
"prettier": "^3.5.3", "jsdom": "^27.2.0",
"postcss": "^8.5.6",
"prettier": "^3.7.1",
"prettier-plugin-tailwindcss": "^0.7.1", "prettier-plugin-tailwindcss": "^0.7.1",
"prisma": "^6.17.1", "prisma": "^7.0.1",
"tailwindcss": "^4.1.15", "tailwindcss": "^4.1.17",
"typescript": "^5.8.2", "tsx": "^4.19.4",
"typescript-eslint": "^8.46.2", "typescript": "^5.9.3",
"vitest": "^3.2.4" "typescript-eslint": "^8.48.0",
"vitest": "^4.0.14"
}, },
"ct3aMetadata": { "ct3aMetadata": {
"initVersion": "7.39.3" "initVersion": "7.39.3"
}, },
"packageManager": "npm@10.9.3", "packageManager": "npm@10.9.3",
"engines": {
"node": ">=24.0.0"
},
"overrides": { "overrides": {
"prismjs": "^1.30.0" "prismjs": "^1.30.0"
} }

20
prisma.config.ts Normal file
View File

@@ -0,0 +1,20 @@
import 'dotenv/config'
import path from 'path'
import { defineConfig } from 'prisma/config'
// Resolve database path
const dbPath = process.env.DATABASE_URL ?? `file:${path.join(process.cwd(), 'data', 'pve-scripts.db')}`
export default defineConfig({
schema: 'prisma/schema.prisma',
datasource: {
url: dbPath,
},
// @ts-expect-error - Prisma 7 config types are incomplete
studio: {
adapter: async () => {
const { PrismaBetterSqlite3 } = await import('@prisma/adapter-better-sqlite3')
return new PrismaBetterSqlite3({ url: dbPath })
},
},
})

View File

@@ -0,0 +1,14 @@
-- CreateTable
CREATE TABLE "repositories" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"url" TEXT NOT NULL,
"enabled" BOOLEAN NOT NULL DEFAULT true,
"is_default" BOOLEAN NOT NULL DEFAULT false,
"is_removable" BOOLEAN NOT NULL DEFAULT true,
"priority" INTEGER NOT NULL DEFAULT 0,
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" DATETIME NOT NULL
);
-- CreateIndex
CREATE UNIQUE INDEX "repositories_url_key" ON "repositories"("url");

View File

@@ -0,0 +1,41 @@
-- CreateTable
CREATE TABLE IF NOT EXISTS "backups" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"container_id" TEXT NOT NULL,
"server_id" INTEGER NOT NULL,
"hostname" TEXT NOT NULL,
"backup_name" TEXT NOT NULL,
"backup_path" TEXT NOT NULL,
"size" BIGINT,
"created_at" DATETIME,
"storage_name" TEXT NOT NULL,
"storage_type" TEXT NOT NULL,
"discovered_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "backups_server_id_fkey" FOREIGN KEY ("server_id") REFERENCES "servers" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- CreateTable
CREATE TABLE IF NOT EXISTS "pbs_storage_credentials" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"server_id" INTEGER NOT NULL,
"storage_name" TEXT NOT NULL,
"pbs_ip" TEXT NOT NULL,
"pbs_datastore" TEXT NOT NULL,
"pbs_password" TEXT NOT NULL,
"pbs_fingerprint" TEXT NOT NULL,
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" DATETIME NOT NULL,
CONSTRAINT "pbs_storage_credentials_server_id_fkey" FOREIGN KEY ("server_id") REFERENCES "servers" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- CreateIndex
CREATE INDEX IF NOT EXISTS "backups_container_id_idx" ON "backups"("container_id");
-- CreateIndex
CREATE INDEX IF NOT EXISTS "backups_server_id_idx" ON "backups"("server_id");
-- CreateIndex
CREATE INDEX IF NOT EXISTS "pbs_storage_credentials_server_id_idx" ON "pbs_storage_credentials"("server_id");
-- CreateIndex
CREATE UNIQUE INDEX IF NOT EXISTS "pbs_storage_credentials_server_id_storage_name_key" ON "pbs_storage_credentials"("server_id", "storage_name");

View File

@@ -1,10 +1,10 @@
generator client { generator client {
provider = "prisma-client-js" provider = "prisma-client"
output = "./generated/prisma"
} }
datasource db { datasource db {
provider = "sqlite" provider = "sqlite"
url = env("DATABASE_URL")
} }
model InstalledScript { model InstalledScript {
@@ -41,6 +41,8 @@ model Server {
ssh_key_path String? ssh_key_path String?
key_generated Boolean? @default(false) key_generated Boolean? @default(false)
installed_scripts InstalledScript[] installed_scripts InstalledScript[]
backups Backup[]
pbs_credentials PBSStorageCredential[]
@@map("servers") @@map("servers")
} }
@@ -95,3 +97,52 @@ model LXCConfig {
@@map("lxc_configs") @@map("lxc_configs")
} }
model Backup {
id Int @id @default(autoincrement())
container_id String
server_id Int
hostname String
backup_name String
backup_path String
size BigInt?
created_at DateTime?
storage_name String
storage_type String // 'local', 'storage', or 'pbs'
discovered_at DateTime @default(now())
server Server @relation(fields: [server_id], references: [id], onDelete: Cascade)
@@index([container_id])
@@index([server_id])
@@map("backups")
}
model PBSStorageCredential {
id Int @id @default(autoincrement())
server_id Int
storage_name String
pbs_ip String
pbs_datastore String
pbs_password String
pbs_fingerprint String
created_at DateTime @default(now())
updated_at DateTime @updatedAt
server Server @relation(fields: [server_id], references: [id], onDelete: Cascade)
@@unique([server_id, storage_name])
@@index([server_id])
@@map("pbs_storage_credentials")
}
model Repository {
id Int @id @default(autoincrement())
url String @unique
enabled Boolean @default(true)
is_default Boolean @default(false)
is_removable Boolean @default(true)
priority Int @default(0)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("repositories")
}

10
restore.log Normal file
View File

@@ -0,0 +1,10 @@
Starting restore...
Reading container configuration...
Stopping container...
Destroying container...
Logging into PBS...
Downloading backup from PBS...
Packing backup folder...
Restoring container...
Cleaning up temporary files...
Restore completed successfully

132
scripts/core/api.func Normal file
View File

@@ -0,0 +1,132 @@
# Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner
# License: MIT | https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/LICENSE
post_to_api() {
if ! command -v curl &>/dev/null; then
return
fi
if [ "$DIAGNOSTICS" = "no" ]; then
return
fi
if [ -z "$RANDOM_UUID" ]; then
return
fi
local API_URL="http://api.community-scripts.org/upload"
local pve_version="not found"
pve_version=$(pveversion | awk -F'[/ ]' '{print $2}')
JSON_PAYLOAD=$(
cat <<EOF
{
"ct_type": $CT_TYPE,
"type":"lxc",
"disk_size": $DISK_SIZE,
"core_count": $CORE_COUNT,
"ram_size": $RAM_SIZE,
"os_type": "$var_os",
"os_version": "$var_version",
"disableip6": "",
"nsapp": "$NSAPP",
"method": "$METHOD(PVE-Local)",
"pve_version": "$pve_version",
"status": "installing",
"random_id": "$RANDOM_UUID"
}
EOF
)
if [[ "$DIAGNOSTICS" == "yes" ]]; then
RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD") || true
fi
}
post_to_api_vm() {
if [[ ! -f /usr/local/community-scripts/diagnostics ]]; then
return
fi
DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics | awk -F'=' '{print $2}')
if ! command -v curl &>/dev/null; then
return
fi
if [ "$DIAGNOSTICS" = "no" ]; then
return
fi
if [ -z "$RANDOM_UUID" ]; then
return
fi
local API_URL="http://api.community-scripts.org/upload"
local pve_version="not found"
pve_version=$(pveversion | awk -F'[/ ]' '{print $2}')
DISK_SIZE_API=${DISK_SIZE%G}
JSON_PAYLOAD=$(
cat <<EOF
{
"ct_type": 2,
"type":"vm",
"disk_size": $DISK_SIZE_API,
"core_count": $CORE_COUNT,
"ram_size": $RAM_SIZE,
"os_type": "$var_os",
"os_version": "$var_version",
"disableip6": "",
"nsapp": "$NSAPP",
"method": "$METHOD(PVE-Local)",
"pve_version": "$pve_version",
"status": "installing",
"random_id": "$RANDOM_UUID"
}
EOF
)
if [[ "$DIAGNOSTICS" == "yes" ]]; then
RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD") || true
fi
}
POST_UPDATE_DONE=false
post_update_to_api() {
if ! command -v curl &>/dev/null; then
return
fi
if [ "$POST_UPDATE_DONE" = true ]; then
return 0
fi
local API_URL="http://api.community-scripts.org/upload/updatestatus"
local status="${1:-failed}"
local error="${2:-No error message}"
JSON_PAYLOAD=$(
cat <<EOF
{
"status": "$status",
"error": "$error",
"random_id": "$RANDOM_UUID"
}
EOF
)
if [[ "$DIAGNOSTICS" == "yes" ]]; then
RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD") || true
fi
POST_UPDATE_DONE=true
}

View File

@@ -17,9 +17,9 @@ variables() {
# Get absolute path to core directory # Get absolute path to core directory
CORE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CORE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$CORE_DIR/api.func"
source "$CORE_DIR/core.func" source "$CORE_DIR/core.func"
load_functions
# This function enables error handling in the script by setting options and defining a trap for the ERR signal. # This function enables error handling in the script by setting options and defining a trap for the ERR signal.
catch_errors() { catch_errors() {
set -Eeo pipefail set -Eeo pipefail
@@ -33,15 +33,15 @@ error_handler() {
local line_number="$1" local line_number="$1"
local command="$2" local command="$2"
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}" local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
post_update_to_api "failed" "${command}"
echo -e "\n$error_message\n" echo -e "\n$error_message\n"
} }
# Check if the shell is using bash # Check if the current shell is using bash
shell_check() { shell_check() {
if [[ "$(basename "$SHELL")" != "bash" ]]; then if [[ "$(ps -p $$ -o comm=)" != "bash" ]]; then
clear clear
msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell." msg_error "Your default shell is not bash. Please report this to our github issues or discord."
echo -e "\nExiting..." echo -e "\nExiting..."
sleep 2 sleep 2
exit exit
@@ -60,7 +60,7 @@ root_check() {
} }
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported. # This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
# Supported: Proxmox VE 8.0.x 8.9.x and 9.0 (NOT 9.1+) # Supported: Proxmox VE 8.0.x 8.9.x, 9.0 and 9.1
pve_check() { pve_check() {
local PVE_VER local PVE_VER
PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')" PVE_VER="$(pveversion | awk -F'/' '{print $2}' | awk -F'-' '{print $1}')"
@@ -76,12 +76,12 @@ pve_check() {
return 0 return 0
fi fi
# Check for Proxmox VE 9.x: allow ONLY 9.0 # Check for Proxmox VE 9.x: allow 9.0 and 9.1
if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then if [[ "$PVE_VER" =~ ^9\.([0-9]+) ]]; then
local MINOR="${BASH_REMATCH[1]}" local MINOR="${BASH_REMATCH[1]}"
if ((MINOR != 0)); then if ((MINOR < 0 || MINOR > 1)); then
msg_error "This version of Proxmox VE is not yet supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported: Proxmox VE version 9.0" msg_error "Supported: Proxmox VE version 9.0 9.1"
exit 1 exit 1
fi fi
return 0 return 0
@@ -89,7 +89,7 @@ pve_check() {
# All other unsupported versions # All other unsupported versions
msg_error "This version of Proxmox VE is not supported." msg_error "This version of Proxmox VE is not supported."
msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0" msg_error "Supported versions: Proxmox VE 8.0 8.x or 9.0 9.1"
exit 1 exit 1
} }
@@ -914,6 +914,7 @@ install_script() {
shell_check shell_check
root_check root_check
arch_check arch_check
#ssh_check
maxkeys_check maxkeys_check
diagnostics_check diagnostics_check
@@ -1048,7 +1049,6 @@ start() {
source "$CORE_DIR/tools.func" source "$CORE_DIR/tools.func"
if command -v pveversion >/dev/null 2>&1; then if command -v pveversion >/dev/null 2>&1; then
install_script install_script
else else
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Update/Setting" --menu \ CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "${APP} LXC Update/Setting" --menu \
"Support/Update functions for ${APP} LXC. Choose an option:" \ "Support/Update functions for ${APP} LXC. Choose an option:" \
@@ -1078,7 +1078,6 @@ start() {
# This function collects user settings and integrates all the collected information. # This function collects user settings and integrates all the collected information.
build_container() { build_container() {
# if [ "$VERBOSE" == "yes" ]; then set -x; fi # if [ "$VERBOSE" == "yes" ]; then set -x; fi
NET_STRING="-net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN$MTU" NET_STRING="-net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN$MTU"
@@ -1102,18 +1101,12 @@ build_container() {
fi fi
if [[ $DIAGNOSTICS == "yes" ]]; then if [[ $DIAGNOSTICS == "yes" ]]; then
echo "Diagnostics enabled (post_to_api function not available)" post_to_api
fi fi
TEMP_DIR=$(mktemp -d) TEMP_DIR=$(mktemp -d)
pushd "$TEMP_DIR" >/dev/null pushd "$TEMP_DIR" >/dev/null
# CORE_DIR is already defined at the top of the file
if [ "$var_os" == "alpine" ]; then
export FUNCTIONS_FILE_PATH="$(cat "$CORE_DIR/core.func" && echo && cat "$CORE_DIR/tools.func" && echo && cat "$CORE_DIR/alpine-install.func")"
else
export FUNCTIONS_FILE_PATH="$(cat "$CORE_DIR/core.func" && echo && cat "$CORE_DIR/tools.func" && echo && cat "$CORE_DIR/install.func")"
fi
export DIAGNOSTICS="$DIAGNOSTICS" export DIAGNOSTICS="$DIAGNOSTICS"
export RANDOM_UUID="$RANDOM_UUID" export RANDOM_UUID="$RANDOM_UUID"
@@ -1133,21 +1126,10 @@ build_container() {
export PCT_OSTYPE="$var_os" export PCT_OSTYPE="$var_os"
export PCT_OSVERSION="$var_version" export PCT_OSVERSION="$var_version"
export PCT_DISK_SIZE="$DISK_SIZE" export PCT_DISK_SIZE="$DISK_SIZE"
export PCT_OPTIONS=" export PCT_OPTIONS="-features $FEATURES -hostname $HN -tags $TAGS $SD $NS $NET_STRING -onboot 1 -cores $CORE_COUNT -memory $RAM_SIZE -unprivileged $CT_TYPE $PW"
-features $FEATURES
-hostname $HN
-tags $TAGS
$SD
$NS
$NET_STRING
-onboot 1
-cores $CORE_COUNT
-memory $RAM_SIZE
-unprivileged $CT_TYPE
$PW
"
# This executes create_lxc.sh and creates the container and .conf file # This executes create_lxc.sh and creates the container and .conf file
bash "$CORE_DIR/create_lxc.sh" $? bash "$CORE_DIR/create_lxc.sh"
LXC_CONFIG="/etc/pve/lxc/${CTID}.conf" LXC_CONFIG="/etc/pve/lxc/${CTID}.conf"
@@ -1340,8 +1322,64 @@ EOF'
fi fi
msg_ok "Customized LXC Container" msg_ok "Customized LXC Container"
if [ "$var_os" == "alpine" ]; then
FUNCTIONS_FILE_PATH="$(cat "$CORE_DIR/core.func" && echo && cat "$CORE_DIR/tools.func" && echo && cat "$CORE_DIR/api.func" && echo && cat "$CORE_DIR/alpine-install.func")"
else
FUNCTIONS_FILE_PATH="$(cat "$CORE_DIR/core.func" && echo && cat "$CORE_DIR/tools.func" && echo && cat "$CORE_DIR/api.func" && echo && cat "$CORE_DIR/install.func")"
fi
lxc-attach -n "$CTID" -- bash -c "$(cat "$(dirname "$CORE_DIR")/install/${var_install}.sh")" FUNCTIONS_FILE="/tmp/functions.sh"
echo "$FUNCTIONS_FILE_PATH" | pct exec "$CTID" -- bash -c "cat > $FUNCTIONS_FILE"
pct exec "$CTID" -- test -f "$FUNCTIONS_FILE" || {
msg_error "Failed to write functions file to container"
exit 1
}
INSTALL_SCRIPT_PATH="$(dirname "$CORE_DIR")/install/${var_install}.sh"
INSTALL_SCRIPT_CONTENT=$(cat "$INSTALL_SCRIPT_PATH")
# Replace the old pattern: source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
# with direct file source: source "/tmp/functions.sh"
# Use sed with a simpler pattern that matches the exact line
MODIFIED_INSTALL_SCRIPT=$(echo "$INSTALL_SCRIPT_CONTENT" | \
sed "s|source /dev/stdin <<<\"\$FUNCTIONS_FILE_PATH\"|source \"$FUNCTIONS_FILE\"|")
# Verify replacement worked - if not, force add the source line
if ! echo "$MODIFIED_INSTALL_SCRIPT" | grep -q "source \"$FUNCTIONS_FILE\""; then
# If replacement didn't work, add source line after the last comment
MODIFIED_INSTALL_SCRIPT=$(echo "$MODIFIED_INSTALL_SCRIPT" | \
awk -v func_file="$FUNCTIONS_FILE" '
BEGIN { replaced = 0 }
{
if (/source.*dev\/stdin/ || /source.*FUNCTIONS_FILE_PATH/) {
print "source \"" func_file "\""
replaced = 1
next
}
if (!replaced && /^#/ && !/^#!/) {
print
next
}
if (!replaced && !/^#!/ && !/^#/) {
print "source \"" func_file "\""
replaced = 1
}
print
}
END {
if (!replaced) {
print "source \"" func_file "\""
}
}')
fi
# Write the modified script to a file in the container and execute it
INSTALL_SCRIPT_FILE="/tmp/install_script.sh"
echo "$MODIFIED_INSTALL_SCRIPT" | pct exec "$CTID" -- bash -c "cat > $INSTALL_SCRIPT_FILE"
pct exec "$CTID" -- chmod +x "$INSTALL_SCRIPT_FILE"
lxc-attach -n "$CTID" -- bash "$INSTALL_SCRIPT_FILE"
} }
# This function sets the description of the container. # This function sets the description of the container.
@@ -1386,6 +1424,37 @@ EOF
if [[ -f /etc/systemd/system/ping-instances.service ]]; then if [[ -f /etc/systemd/system/ping-instances.service ]]; then
systemctl start ping-instances.service systemctl start ping-instances.service
fi fi
post_update_to_api "done" "none"
} }
api_exit_script() {
exit_code=$? # Capture the exit status of the last executed command
#200 exit codes indicate error in create_lxc.sh
#100 exit codes indicate error in install.func
if [ $exit_code -ne 0 ]; then
case $exit_code in
100) post_update_to_api "failed" "100: Unexpected error in create_lxc.sh" ;;
101) post_update_to_api "failed" "101: No network connection detected in create_lxc.sh" ;;
200) post_update_to_api "failed" "200: LXC creation failed in create_lxc.sh" ;;
201) post_update_to_api "failed" "201: Invalid Storage class in create_lxc.sh" ;;
202) post_update_to_api "failed" "202: User aborted menu in create_lxc.sh" ;;
203) post_update_to_api "failed" "203: CTID not set in create_lxc.sh" ;;
204) post_update_to_api "failed" "204: PCT_OSTYPE not set in create_lxc.sh" ;;
205) post_update_to_api "failed" "205: CTID cannot be less than 100 in create_lxc.sh" ;;
206) post_update_to_api "failed" "206: CTID already in use in create_lxc.sh" ;;
207) post_update_to_api "failed" "207: Template not found in create_lxc.sh" ;;
208) post_update_to_api "failed" "208: Error downloading template in create_lxc.sh" ;;
209) post_update_to_api "failed" "209: Container creation failed, but template is intact in create_lxc.sh" ;;
*) post_update_to_api "failed" "Unknown error, exit code: $exit_code in create_lxc.sh" ;;
esac
fi
}
if command -v pveversion >/dev/null 2>&1; then
trap 'api_exit_script' EXIT
fi
trap 'post_update_to_api "failed" "$BASH_COMMAND"' ERR
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM

View File

@@ -368,6 +368,51 @@ run_container_safe() {
" || __handle_general_error "lxc-attach to CT $ct" " || __handle_general_error "lxc-attach to CT $ct"
} }
cleanup_lxc() {
msg_info "Cleaning up"
if is_alpine; then
$STD apk cache clean || true
rm -rf /var/cache/apk/*
else
$STD apt -y autoremove || true
$STD apt -y autoclean || true
$STD apt -y clean || true
fi
# Clear temp artifacts (keep sockets/FIFOs; ignore errors)
find /tmp /var/tmp -type f -name 'tmp*' -delete 2>/dev/null || true
find /tmp /var/tmp -type f -name 'tempfile*' -delete 2>/dev/null || true
# Truncate writable log files silently (permission errors ignored)
if command -v truncate >/dev/null 2>&1; then
find /var/log -type f -writable -print0 2>/dev/null |
xargs -0 -n1 truncate -s 0 2>/dev/null || true
fi
# Python pip
if command -v pip &>/dev/null; then $STD pip cache purge || true; fi
# Node.js npm
if command -v npm &>/dev/null; then $STD npm cache clean --force || true; fi
# Node.js yarn
if command -v yarn &>/dev/null; then $STD yarn cache clean || true; fi
# Node.js pnpm
if command -v pnpm &>/dev/null; then $STD pnpm store prune || true; fi
# Go
if command -v go &>/dev/null; then $STD go clean -cache -modcache || true; fi
# Rust cargo
if command -v cargo &>/dev/null; then $STD cargo clean || true; fi
# Ruby gem
if command -v gem &>/dev/null; then $STD gem cleanup || true; fi
# Composer (PHP)
if command -v composer &>/dev/null; then $STD composer clear-cache || true; fi
if command -v journalctl &>/dev/null; then
$STD journalctl --vacuum-time=10m || true
fi
msg_ok "Cleaned"
}
check_or_create_swap() { check_or_create_swap() {
msg_info "Checking for active swap" msg_info "Checking for active swap"

File diff suppressed because it is too large Load Diff

View File

@@ -1,44 +0,0 @@
{
"name": "2FAuth",
"slug": "2fauth",
"categories": [
6
],
"date_created": "2024-12-20",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://docs.2fauth.app/",
"website": "https://2fauth.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/2fauth.webp",
"config_path": "cat /opt/2fauth/.env",
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
"install_methods": [
{
"type": "default",
"script": "ct/2fauth.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Database credentials: `cat ~/2FAuth.creds`",
"type": "info"
},
{
"text": "The very first account created is automatically set up as an administrator account.",
"type": "info"
}
]
}

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -48,5 +48,6 @@
"text": "You can execute the ip tool manually with `iptag-run`", "text": "You can execute the ip tool manually with `iptag-run`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -44,5 +44,6 @@
"text": "The script only works in Debian/Ubuntu, not in Alpine!", "text": "The script only works in Debian/Ubuntu, not in Alpine!",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -40,5 +40,6 @@
"text": "Execute within the Proxmox host shell", "text": "Execute within the Proxmox host shell",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -47,5 +47,6 @@
"text": "AdGuard Home can only be updated via the user interface.", "text": "AdGuard Home can only be updated via the user interface.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -40,5 +40,6 @@
"text": "Use `cat ~/adventurelog.creds` to see login credentials.", "text": "Use `cat ~/adventurelog.creds` to see login credentials.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Resource and network settings are adjustable post LXC creation.", "text": "Resource and network settings are adjustable post LXC creation.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -42,5 +42,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -47,5 +47,6 @@
"text": "The default credentials are located in `/opt/tinyauth/credentials.txt`.", "text": "The default credentials are located in `/opt/tinyauth/credentials.txt`.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "To Update Alpine: `apk -U upgrade`", "text": "To Update Alpine: `apk -U upgrade`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Show Login Credentials: `cat CouchDB.creds`", "text": "Show Login Credentials: `cat CouchDB.creds`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": "guacadmin", "username": "guacadmin",
"password": "guacadmin" "password": "guacadmin"
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Configuration file is not created at install time. Example is at: `https://cwiki.apache.org/confluence/display/TIKA/TikaServer+in+Tika+2.x`", "text": "Configuration file is not created at install time. Example is at: `https://cwiki.apache.org/confluence/display/TIKA/TikaServer+in+Tika+2.x`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "User can select which Adoptium JDK should be used for the selected Tomcat version (9, 10.1 or 11). ", "text": "User can select which Adoptium JDK should be used for the selected Tomcat version (9, 10.1 or 11). ",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": "archivebox", "username": "archivebox",
"password": "helper-scripts.com" "password": "helper-scripts.com"
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "doesnt work with lvm and lvmthin disks!", "text": "doesnt work with lvm and lvmthin disks!",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Within the LXC console, run `cat rpc.secret` to display the rpc-secret. Copy this token and paste it into the Aria2 RPC Secret Token box within the AriaNG Settings. Then, click the reload AriaNG button.", "text": "Within the LXC console, run `cat rpc.secret` to display the rpc-secret. Copy this token and paste it into the Aria2 RPC Secret Token box within the AriaNG Settings. Then, click the reload AriaNG button.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "During installation, you will have to input your domain (ex. domain.com). Authelia will use auth.domain.com", "text": "During installation, you will have to input your domain (ex. domain.com). Authelia will use auth.domain.com",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": "admin", "username": "admin",
"password": "admin123" "password": "admin123"
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "for private SSL setup visit: `https://github.com/babybuddy/babybuddy/blob/master/docs/setup/ssl.md`", "text": "for private SSL setup visit: `https://github.com/babybuddy/babybuddy/blob/master/docs/setup/ssl.md`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"type": "info", "type": "info",
"text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server." "text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": "Admin", "username": "Admin",
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "After install enable the option \"Use Redis cache\" on the settings page.", "text": "After install enable the option \"Use Redis cache\" on the settings page.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -23,7 +23,7 @@
"ram": 1024, "ram": 1024,
"hdd": 4, "hdd": 4,
"os": "debian", "os": "debian",
"version": "12" "version": "13"
} }
} }
], ],
@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -47,5 +47,6 @@
"text": "During installation you will be asked to enter your TMDB API key, if you wanna use it. Make sure you have it ready.", "text": "During installation you will be asked to enter your TMDB API key, if you wanna use it. Make sure you have it ready.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Starting Booklore (Web UI) may take up to 2 minutes after a restart or fresh installation.", "text": "Starting Booklore (Web UI) may take up to 2 minutes after a restart or fresh installation.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Bookstack works only with static ip. If you Change the IP of your LXC, you Need to edit the .env File `nano /opt/bookstack/.env`", "text": "Bookstack works only with static ip. If you Change the IP of your LXC, you Need to edit the .env File `nano /opt/bookstack/.env`",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -12,7 +12,7 @@
"documentation": "https://docs.bunkerweb.io/latest/", "documentation": "https://docs.bunkerweb.io/latest/",
"website": "https://www.bunkerweb.io/", "website": "https://www.bunkerweb.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp", "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp",
"config_path": "/opt/bunkerweb/variables.env", "config_path": "/etc/bunkerweb/variables.env",
"description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.", "description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
"install_methods": [ "install_methods": [
{ {
@@ -36,5 +36,6 @@
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -55,5 +55,6 @@
"text": "if you need an external module run: `xcaddy build --with github.com/caddy-dns/cloudflare`", "text": "if you need an external module run: `xcaddy build --with github.com/caddy-dns/cloudflare`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -40,5 +40,6 @@
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.", "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Login Credentials : `cat ~/checkmk.creds`", "text": "Login Credentials : `cat ~/checkmk.creds`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Execute within the Proxmox shell", "text": "Execute within the Proxmox shell",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Execute within the Proxmox shell", "text": "Execute within the Proxmox shell",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -40,5 +40,6 @@
"text": "To update the configuration edit `/etc/systemd/system/cloudflare-ddns.service`. After edit please restart with `systemctl restart cloudflare-ddns`", "text": "To update the configuration edit `/etc/systemd/system/cloudflare-ddns.service`. After edit please restart with `systemctl restart cloudflare-ddns`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "With an option to configure cloudflared as a DNS-over-HTTPS (DoH) proxy", "text": "With an option to configure cloudflared as a DNS-over-HTTPS (DoH) proxy",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "After Installation: Register your user -> Login -> Dashboard -> Accept Primary URL.", "text": "After Installation: Register your user -> Login -> Dashboard -> Accept Primary URL.",
"type": "warn" "type": "warn"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -33,8 +33,13 @@
}, },
"notes": [ "notes": [
{ {
"text": "Set a root password if using autologin. This will be the Cockpit password.`sudo passwd root`", "text": "Set a root password if using autologin. This will be the Cockpit password. To set root password run `sudo passwd root`",
"type": "info" "type": "info"
},
{
"text": "If you plan on using 45Drives extension with NFS, you must setup LXC as privileged. Some features of 45Drives don't work on Debian 13, so Debian 12 must be used.",
"type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -38,5 +38,6 @@
"text": "Execute within an existing LXC Console", "text": "Execute within an existing LXC Console",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": "admin", "username": "admin",
"password": "admin" "password": "admin"
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "change secrets file /opt/configarr/secrets.yml", "text": "change secrets file /opt/configarr/secrets.yml",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Complete setup via the web interface at http://<container-ip>:3000. Create and secure the admin account immediately.", "text": "Complete setup via the web interface at http://<container-ip>:3000. Create and secure the admin account immediately.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Execute within the Proxmox shell or in LXC", "text": "Execute within the Proxmox shell or in LXC",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -37,5 +37,6 @@
"type": "info", "type": "info",
"text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself." "text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Show password: `cat ~/crafty-controller.creds`", "text": "Show password: `cat ~/crafty-controller.creds`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -40,5 +40,6 @@
"text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/update-lxcs-cron.sh)\" -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`", "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/update-lxcs-cron.sh)\" -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -28,13 +28,14 @@
} }
], ],
"default_credentials": { "default_credentials": {
"username": null, "username": "admin",
"password": null "password": "admin"
}, },
"notes": [ "notes": [
{ {
"text": "Primary and Worker Private Keys Must Match in the config file", "text": "Primary and Worker Private Keys Must Match in the config file",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "After the installation cross-seed will fail to start with an empty configuration. To fix this, edit the config file to properly configure cross-seed, then restart by running `systemctl restart cross-seed`.", "text": "After the installation cross-seed will fail to start with an empty configuration. To fix this, edit the config file to properly configure cross-seed, then restart by running `systemctl restart cross-seed`.",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Execute within an existing LXC Console. Debian only!", "text": "Execute within an existing LXC Console. Debian only!",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "After installation finishes, `systemctl status cryptpad.service` to get token URL which you can use to create admin account", "text": "After installation finishes, `systemctl status cryptpad.service` to get token URL which you can use to create admin account",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -44,5 +44,6 @@
"text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´", "text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -40,5 +40,6 @@
"text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands", "text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": null, "username": null,
"password": "deluge" "password": "deluge"
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -41,5 +41,6 @@
"text": "This Script works on amd64 and arm64 Architecture.", "text": "This Script works on amd64 and arm64 Architecture.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -55,5 +55,6 @@
"text": "Options to Install Portainer and/or Docker Compose V2", "text": "Options to Install Portainer and/or Docker Compose V2",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -40,5 +40,6 @@
"text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.", "text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
"type": "warning" "type": "warning"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Use `cat ~/docmost.creds` to see database credentials.", "text": "Use `cat ~/docmost.creds` to see database credentials.",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -31,5 +31,6 @@
"username": "helper-scripts@local.com", "username": "helper-scripts@local.com",
"password": "helper-scripts" "password": "helper-scripts"
}, },
"notes": [] "notes": [],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "Database credentials: `cat ~/dolibarr.creds`", "text": "Database credentials: `cat ~/dolibarr.creds`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

View File

@@ -36,5 +36,6 @@
"text": "FTP server credentials: `cat ~/ftp.creds`", "text": "FTP server credentials: `cat ~/ftp.creds`",
"type": "info" "type": "info"
} }
] ],
"repository_url": "https://github.com/community-scripts/ProxmoxVE"
} }

Some files were not shown because too many files have changed in this diff Show More