* feat: dramatically improve automated changelog generation
- Add detailed analysis logging and error handling
- Clean up commit messages by removing prefixes (feat:, fix:, etc.)
- Group changes by type with proper emoji categories
- Include version progression info (v3.25.2 → v3.25.3)
- Add installation instructions and Docker commands
- Filter out technical/automated commits from user-facing changelog
- Provide enhanced fallback using git log if analysis fails
- Include release statistics and change counts
This replaces the generic 'Automated stable release' message with
comprehensive, user-friendly changelogs.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 3.25.2-rc3 for RC release
* fix: improve installer resilience against GitHub API rate limits
Add fallback mechanism in check_release_exists() to verify release existence
by attempting direct tarball download when GitHub API is rate limited.
This prevents installation failures when the API quota is exceeded.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump version to 3.25.2-rc4 for RC release
---------
Co-authored-by: rcourtman <dev@pulse.local>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: GitHub Action <action@github.com>
- Ensure data directory exists before restoration attempts
- Fixed copy operation to properly restore file contents
- Added verification logging to confirm thresholds and acknowledgements restoration
- Better error handling for edge cases during restore process
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added detailed logging of backup contents (file counts, what was found/missing)
- Enhanced backup info file with configuration summary
- Better visibility into custom thresholds, acknowledgements, and webhook configs
- Improved user feedback about what data was preserved during backup/restore
- Backup already captures all user data correctly (data/, .env, config/)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added removal of pulse-monitor.service and pulse-proxmox.service during uninstall
- Fixes false positive "Pulse is installed" detection after removal
- Ensures complete cleanup of all legacy service files
- Prevents orphaned service files from interfering with installation detection
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added backup prompt during Pulse removal with user choice
- Implemented automatic backup detection during fresh installs
- Added interactive restore menu showing available backups with dates/versions
- Comprehensive backup includes: user data, .env config, and config directory
- Seamless restore process with proper file permissions
- Backup location: /tmp/pulse-backup-YYYYMMDD-HHMMSS with info file
- Prevents data loss during removal/reinstallation workflows
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added pkill commands to terminate any remaining Pulse processes during removal
- Prevents port conflicts when reinstalling after removal
- Uses graceful kill first, then force kill after delay
- Fixes issue where orphaned processes prevented service restart
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added setup_systemd_service to "already latest version" path in updates
- Fixes case where service file is missing but version check passes
- Now recreates service file in all update scenarios
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added setup_systemd_service call to perform_update() function
- Fixes issue where service file could be missing after updates
- Now updates will recreate pulse.service if it doesn't exist
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Explicitly set /etc/polkit-1/rules.d permissions to 755
- Handle case where polkit package creates restrictive permissions
- Ensures rule file creation works regardless of polkit install order
- Makes community script integration more robust
- Add policykit-1 package to automatic dependency installation
- Check for pkexec command availability before installing polkit
- Enable sudoless update system to work in LXC environments
- Improve compatibility with community Proxmox VE installation scripts
This ensures that new installations (including via community scripts)
automatically get polkit support for seamless web-based updates
without requiring manual sudo commands.
- Add polkit rule for sudoless service management
- Improve update manager with multi-strategy restart approach
- Fix npm dependency conflicts in update process
- Add comprehensive test suite for update system
- Enhance frontend update progress tracking
- Update install script with automatic polkit setup
Updates installer to use pulse.service and enhances migration logic to handle both pulse-proxmox.service and pulse-monitor.service. This resolves the "No Pulse Installation Found\!" error experienced by existing users during updates.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Backup .env file before removing old installation
- Restore .env file after extracting new version
- Fix both update and migration processes
- Ensure proper ownership and permissions on restored .env file
- Added SHA-based version tracking to avoid GitHub CDN caching issues
- Uses GitHub API to check latest commit SHA for the installer
- Falls back to simple diff check if jq is not available
- Updates embedded SHA when downloading new version
- Much more reliable than simple file comparison
This restores the update method from the original installer that
properly handles GitHub's aggressive CDN caching.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Check for Express version mismatch after extracting tarball
- Reinstall dependencies if Express version is wrong
- Fixes service startup failure due to path-to-regexp error
- Works around issue where GitHub releases have wrong Express version
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added back the self-update check for the installer script
- Installer now checks for updates to itself before running
- Skips update check when running from pipe (curl | bash)
- User is prompted before updating the installer
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Removed npm dependency installation from installer (tarballs include deps)
- Cleaned up output with better icons and formatting
- Simplified installation flow since tarballs are pre-built
- Reduced installer from 590 to 522 lines
- Fixed messaging to be cleaner and more professional
The installer now expects properly built tarballs from create-release.sh
that include all dependencies and pre-built CSS.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Install all dependencies (including dev) initially
- Build CSS with tailwindcss available
- Remove dev dependencies after CSS is built
- Fixes installation failure due to missing tailwindcss
- Check if CSS is already built before attempting to rebuild
- Skip CSS build if tailwindcss is not available (dev dependency)
- Continue installation even if CSS build fails (tarball should have pre-built CSS)
- Fix issue where installation would fail due to missing tailwindcss
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Set should_update_deps=true when Express version mismatch is found
- Previously, the installer would detect the mismatch but still skip npm install
- This was causing the path-to-regexp error to persist even after detection
The installer will now properly update dependencies when it detects
that Express version is not 4.19.2.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove 'local' keyword usage outside of functions
- Variables should_update_deps, current_express_ver, and express_version are now global
- Fixes "./install-pulse.sh: line 2204: local: can only be used in a function" error
This was preventing the dependency update logic from running properly.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed installer to always run npm install on updates, not just fresh installs
- Added Express version check even for tarball installations
- Forces dependency update if Express version doesn't match expected 4.19.2
- Removed manual fix script as it's no longer needed
The issue was that tarball installations include pre-built node_modules,
which prevented dependency updates when package.json changed.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Stop the service before updating dependencies
- Remove node_modules directory to force clean install
- Add Express version verification after install
- This ensures old Express 4.21.x dependencies are completely removed
The service recovery was masking the real issue - old node_modules
were not being updated properly, keeping the problematic Express version.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Switch from npm install to npm ci for clean installs based on package-lock.json
- Add fallback to npm install if npm ci fails
- Remove --unsafe-perm flag and use --omit=dev for production installs
- Show dependency installation output (filtering npm WARN messages)
This ensures that package-lock.json changes are properly applied during updates,
fixing issues where old dependencies remain after updates.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace overly broad npm notice detection with specific checks
- Add detection for actual npm start misconfiguration in ExecStart
- Separate npm errors/warnings from service configuration issues
- Provide clearer troubleshooting guidance for each error type
This prevents false positives when npm notices appear in logs
during normal operation with direct node execution.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace npm execution with direct node server/index.js in systemd service to eliminate npm-related startup failures and update notices. Add improved diagnostics to detect and explain npm execution issues.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add clearer messaging when service recovery succeeds to provide better user feedback during installation process.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changes EnvironmentFile to EnvironmentFile=- in systemd service template, allowing service to start even when .env file doesn't exist during fresh installations.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Prevents "fatal: not a git repository" error when install script falls back to git update on non-git directories.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements comprehensive solution for GitHub issue #80 where PVE backups stored on local node storage weren't appearing in the backup tab. Adds intelligent node discovery system that creates direct connections to access node-local storage while maintaining backward compatibility with shared storage setups.
Key improvements:
- Hybrid discovery approach with automatic node IP detection and connection caching
- Fixed data structure mismatches and key collision issues for duplicate VMIDs across nodes
- Corrected PVE backup filtering logic in summary cards and calendar views
- Enhanced API token permission documentation for storage content access
- Optimized connection handling with reduced timeouts for faster discovery cycles
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added fix_service_paths() function to update service files with old paths
- Migration now automatically updates WorkingDirectory and EnvironmentFile in systemd service
- Handles edge cases where migration occurred but service paths weren't updated
- Prevents "Internal Server Error" issues that users might face after migration
- Service is stopped, updated, and restarted during migration for seamless transition
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed PULSE_DIR from "/opt/pulse-proxmox" to "/opt/pulse" to align with community scripts
- Added automatic migration logic to handle existing installations at old path
- Migration preserves all user configuration and data with backup creation
- Updated remove function to clean up both old and new directories
- Added safety checks and rollback functionality for failed migrations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove automatic .env.example copying that's no longer needed
- Preserve existing .env files to avoid overwriting user configuration
- Update messaging to reflect new web-based setup via settings modal
- Provide clear first-time setup instructions for new installations
- Maintain backward compatibility for existing installations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Simplifies installation by removing all interactive Proxmox configuration prompts.
The script now simply copies .env.example to .env and instructs users to edit it manually.
This approach:
- Eliminates complex interactive prompting logic
- Gives users full control over configuration
- Reduces installation complexity
- Avoids potential input validation issues
Users now need to manually edit /opt/pulse-proxmox/.env after installation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Simplifies install-pulse.sh by removing all branch installation capabilities to reduce script complexity and maintainability burden.
Removed:
- --branch command line argument
- prompt_for_branch_selection() function
- Branch validation and handling logic
- "Test a feature branch" menu options
- Branch-specific installation and update paths
- Branch status reporting
The script now only supports stable version tag installations, making it more focused and easier to maintain.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The script was looking for pulse-3.12.1.tar.gz but the actual release
asset is named pulse-v3.12.1.tar.gz (with 'v' prefix). This caused
404 "Not Found" errors during tarball downloads.
Fixed all download URLs to use the correct filename format that matches
the actual release asset names created by the release script.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added verification to ensure downloaded tarball files are valid gzip
archives before attempting extraction. This will help diagnose issues
where downloads return HTML error pages or corrupt data instead of
the expected tarball.
The script now provides detailed error information including file type
and hex dump of downloaded content when verification fails.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Extended the CSS file recovery logic to fresh tarball installations,
not just updates. The script now attempts to recover missing or
corrupted CSS files during initial installations instead of failing
and falling back to git clone.
This ensures consistent CSS recovery behavior for both new installations
and updates, preventing installation failures due to tarball extraction
issues.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Enhanced the CSS verification to actively recover the CSS file if it's
missing, empty, or corrupted after tarball extraction. The script now
attempts direct extraction of just the CSS file from the release tarball
as a fallback mechanism.
This ensures that even if the main tarball extraction has issues, users
will still get a working CSS file and proper frontend styling.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The install script was downloading from GitHub's source archive
(/archive/refs/tags/) which doesn't include built CSS assets, instead
of the release assets (/releases/download/) which do include the
pre-built output.css file.
This fixes the "CSS file missing or empty" error during tarball
installations by ensuring the script downloads the proper release
tarball that contains all built assets.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Enhance install script to automatically detect corrupted output.css files
that contain HTML error pages instead of CSS content (caused by previous
installation issues). When detected during tarball updates, the script
now automatically restores the CSS from the fresh tarball and verifies
the repair was successful.
This allows users with broken CSS installations to simply re-run the
installer to automatically fix frontend styling issues without manual
intervention.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>