- This is a major rewrite that allows using multiple repositories, adds repository groups and implements repository settings inheritance from group settings
Features
- New viewer mode allowing to browse/restore restic repositories without any NPBackup configuation
- Allows setting repository via environment variables, config file or directly in GUI
- Multi repository support
- Group settings for repositories
- Operation center
- GUI operation center allowing to mass execute actions on repos / groups
- CLI operation center via `--group-operation --repo-group=somegroup`
- Implemented retention policies
- Optional time server update to make sure we don't drift before doing retention operations
- Operation planifier allows to create scheduled tasks for operations
- Implemented repo quick check / full check / repair index / repair packs /repair snapshots / recover / unlock / forget / prune / dump / stats commands
- Implemented new housekeeping command which is a shorthand for check, forget and prune commands
- Added per repo permission management
- Repos now have backup, restore and full privileges, optionally allowing to restrict access for end users
- Added snapshot tag to snapshot list on main window
- Split npbackup into separate CLI and GUI programs (GUI can also act as CLI)
- Status window has been refactored so GUI now has full stdout / stderr returns from runner and backend
- Implemented file size based exclusion
- CLI can now fully operate in API compatible mode via --json parameter
- Parses non json compliant restic output
- Always returns a result boolean and a reason when failing
- CLI now accepts --stdin parameter to backup streams sent to CLI
- Added minimum backup size upon which we declare that backup has failed
- All bytes units now have automatic conversion of units (K/M/G/T/P bits/bytes or IEC bytes)
- Refactored GUI and overall UX of configuration
- New option --show-config to show inheritance in CLI mode (GUI has visual indicators)
- Allow using external restic binary via --external-backend-binary parameter in CLI mode
- Implemented stdin_from_command backup process which can now get exit codes of programs which output is backed up (ex: mysqldump)
- GUI: Restore window
- Restore window now also shows symlinks and irregular files
- Restore window now uses 40% less memory
- Restore window showing up 60% faster
- Symlinks and irregular files are now shown properly
- Prometheus metrics:
- Metrics are now created for all types of operation
- Metrics have npbackup execution state
- Metrics now include auto upgrade state
- Dry mode now works for all operations where restic supports dry-mode
- Implemented scheduled task creator for Windows & Unix
- Added --no-cache option to disable cache for restic operations (neeeded on RO systems)
- Added CRC32 logging for config files in order to know when a file was modified
- Missing exclude files will now search in current binary directory for a excludes directory
- Splitted releases between legacy and non legacy
- Updated legacy tcl8.6.13 to tc8.6.15
- Updated legacy Python 3.7 to Python 3.11 (with openssl 3.1.3)
Fixes
- Default exit code is now worst log level called unless specific errors are triggered
- Fix deletion failed message for en lang
- Fix Google cloud storage backend detection in repository uri
- Backup admin password is now stored in a more secure way
- GUI: Restore window now closes correctly when using the window control button
- GUI: Show anonymized repo uri in GUI
- GUI: Exec error should always stay on top
Misc
- Current backup state now shows more precise backup state, including last backup date when relevant
- Concurrency checks (pidfile checks) are now directly part of the runner
- Allow a 30 seconds grace period for child processes to close before asking them nicely, and than not nicely to quit
- Fully refactored prometheus metrics parser to be able to read restic standard or json outputs
- Reimplmented auto upgrade after CLI/GUI split
- Added initial tests
- Exclude lists have been updated
- Removed Windows installer from the project. We need to come up with a better solution
- Added manual --init command (already executed by first backup)
- Updated internal restic binary to restic 0.17.1 compiled with go1.23.1
- Added heartbeat log for long commands