
## Planned ahead
 ! Operation center must be able to create scheduled tasks for every operation
 ! Optional repo check before doing retention operations

## 3.0.0
 - 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 snapshots / unlock / forget / prune / dump / stats 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
    - 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
  - GUI: Restore window is now faster
  - Prometheus metrics:
    - Metrics are now created for all types of operation
    - Metrics have npbackup execution 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)
  

## 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)

## 2.2.2 - 14/12/2023 (internal build only)
  - Fixed backup paths of '/' root partitions
  - Properly display repository init errors
  - Logs didn't show proper error status
  - Fixed wrong init detection for S3 backend

## 2.2.1 - 28/08/2023
  - Added snapshot deletion option in GUI
  - Fix ignore_cloud_files parameter did not work on some non systems (still an issue, see https://github.com/restic/restic/issues/4155)
  - Configured default backend connections to 2 for local, 8 for remote when default value '0' is given
  - Fine adjust GOMAXPROCS environment variable (n for 1 core, n-1 for 2-4 cores, n-2 for 5+ cores)
  - Updated internal restic binary to 0.16.0 compiled with go1.20.6
  - Compiled with newer Nuitka 1.7.10 that allows use of Python 3.11
  - Updated python to version 3.11 for Windows x64 targets
  - Basic MacOS X compile support

## 2.2.0 - rtm - 03/06/2023
  - Fix potential deadlock in evaluate variables
  - Fix additionnal parameters should only apply for backup operations
  - Fix unnecessary exclude statements when no exclusions are given
  - Added source types (--files-from, --files-from-verbatim and --files-from-raw equivalent)
  - Add encrypted environment variables support
  - Add SSL certificate verification bypass for prometheus metrics
  - Make sure all multiline entries in config files are processed as lists
  - Add exclude-patterns to GUI (was present in CLI version already)
  - Make sure we always quote exclusions patterns or files
  - Updated internal restic binary to 0.15.2 compiled with go1.20.3
  - *SECURITY* Don't log password command, even in debug mode
  - Compiled with Nuitka commercial 1.5.8

## 2.2.0 - rc12 - 03/05/2023
  - Add grafana dashboard to examples directory
  - Implement password command functionality
  - Compiled with newer Nuitka commercial 1.5.7
  - Added windows executable signature script

## v2.2.0 - rc11 - 24/04/2023
  - Add default 1 minute timeout for init operations
  - Fix auto_upgrade_group wasn't transmitted to server
  - Make sure new binary is set as executable in linux upgrade
  - *SECURITY* Show unencrypted is only allowed on compiled builds where default AES KEY is not used
    - This prevents a password injection from another conf file
  - *SECURITY* Prevent raw password update in config file
  - Fix empty password makes GUI fail
  - Fix empty password makes CLI fail
  - Fix empty data is shown as encrypted
  - Enforce repository and passwords to be strings, also remove trailing and ending spaces
  - Add warning when source and destination are the same path
  - Compiled with newer Nuitka 1.5.6+ that leverages lesser virus detection issues

## v2.2.0 - rc10 - 30/03/2023
  - Add arm/arm64 compilation support
  - Add an option to disable GUI compilation

## v2.2.0 - rc9 - 28/03/2023
  - Allow AES key rotation by keeping old key and updating encryption on config loading
  - Make sure restic binary is executable for Nuitka builds
  - Improve compiler script
  - Add messages when no tcl/tk exists in GUI mode
  - Switch to i18nice fork of python-i18n

## v2.2.0 - rc8 - 22/03/2023
  - Highly optimize tree window creation times (x3.5) by replacing dateutil.parser.parse()
  - Fix missing locale might fail on certain linux builds
  - Don't build NPBackupInstaller on non Windows platforms
  - Add --gui-status parameter and more GUI related info
  - Make translation manager more resilient
  - Add an inline copy of maintained python-i18n to deal with portability issues (see requirements.txt for more)

## v2.2.0 - rc7 - 20/03/2023
  - New look and feel
  - Cosmetic fixes (button sizes)

## v2.2.0 - rc6 - 13/03/2023
  - Fixup bogus restic command line when empty tag lines were given
  - Added missing default value for ignoring cloud files in the example configuration
  - Made sure npbackup can run when no tkinter is installed (headless)

## v2.2.0 - rc5 - 03/03/2023
  - Fixed bogus restic command line when empty tag lines were given
  - Make sure the no config dialog stays on top
  - Make sure upgrade client checks current python arch instead of os arch
  - Make upgrade client catch referrer for /current_version calls
  - Upgrade python-i18n to a maintained version
  - Make sure we get the real IP when client downloads an upgrade and server is behind proxy server

## v2.2.0 - rc4 - 08/02/2023
  - Add gui popup when config cannot be saved
  - Make repo connection messages more clear
  - Remove default backup admin password from config
  - Fix empty restic results will make prometheus metrics fail

## v2.2.0 - rc3 - 07/02/2023
  - Auto minimize console window when run in GUI mode to not distract end user
  - Trigger GUI refresh after configuration changes
  - Main program now loads directly after first time GUI setup
  - A popup is now shown on non-readable repos
  - Various smaller fixes
  - Support for --config-file parameter in upgrade_server
  - Upgrade server now fetches the real client IP if behind a proxy
  - Upgrade server systemd service file example

## v2.2.0 - rc2 - 03/02/2023
  - Upgrade client now sends its hostname, group and version information to server
  - Add variable substitution in configuration
  - Add machine identification in configuration
  - Add variable ${RANDOM}[n] to config file in order to distinguish non unique hostnames
  - Refactor config variable handling
  - Make backup state and upgrade state messages more coherent
  - Fix config fails when restic password is an int
  - Fix empty config files did not show a proper error message
  - Fix various config file malformation will break execution
  - Fix backup hangs when no restic password is given (restic asks for password in backgroud job)
  - Fix error message in logs when repo is not initialized

## v2.2.0 - rc1 - 02/02/2023
  - Added a full auto-upgrade solution
    - Aupgrade client integrated into NPBackup, that can be called manually via --auto-upgrade or automatically run every n backups
    - Upgrade server which servers files and their metadata
  - Added a gui to create a scheduled task under Windows
  - Added a gui to configure backup admin password (was compile time setting before)
  - Improved setup.py to provide launch scripts for both Linux and Windows platforms
  - Made windows cloud file filter optional (enabled by default)
  - Added default configuration settings
  - Rewrite configuration gui into a tabbed gui
  - Updated restic binary to restic 0.15.1 compiled with go1.19.5
  - Changed backup interval unit from seconds to minutes

## v2.1.0 - 29/01/2023
  - Added execution time information
  - Code cleanup
    - Refactor runner into a class
    - Refactor npbackup into package
    - Adding missing typing
    - Code is now formatted with black
    - Code must now pass pylint and flake8
  - Workaround for painfully slow sg.TreeData window.close()
  - Simplify npbackup shortcut
  - Shift default interval from 23H30 to 24H
  - Fixed missing translations for admin password popups

## v2.0.0 - 24/02/2023

  - First open public release
  - Refactor GUI so actions become non-blocking
    - Added loader animation for gui events
    - Added backup window with current state
    - Added internationalization support (currently en and fr)
  - Refactor restic.ls function to return a generator since restic ls command gives chunks of json, which is bad memory wise when parsing each chunk into a big list
  - On Windows, "The cloud operation is not supported on a read-only volume." and "The media is write protected." errors will not make backup fail, see #4155
    - This fix can be removed once #4155 is resolved, see # TEMP-FIX-4155 comment in restic_wrapper package
  - Added Additional backup parameter option
  - Added optional backup tags
  - Added optional prometheus group label and additional labels entries
  - Make sure backend connections number parameter works with all backends
  - Added priority configuration for restic operations, defaults to low priority to not disturb operations
  - Added WindowsApps folder (reparse points) to exclusion list (fix "The file cannot be accessed by the system." error)
  - Fixed backup did use verbose option twice
  - Updated restic binary to restic 0.15.0 compiled with go1.19.5 on windows/amd64
  - Made theme configurable
  - Make sure we exit all subprocesses when exiting npbackup
  - Improve config GUI for supporting elder config files properly
  - Fix restic metrics when 0 bytes of data have been added to the repo
  - Fix restoration must ignore case on Windows
  - Fix backup_job variable substitution in config file
  - Fix for ruamel.yaml global objects being modified out of current scope encrypting current config while saving
  - Fix npbackup could not start when no config file was present
  - Drastically improve ls operation speed by changing command_runner method from poller to monitor (no live output) except for backup operation
  - Compiler
    - Compile python 3.7 and 3.10 targets so we also get to use Windows 7 which can't run python > 3.7
  - Installer
    - Moved task creation process to npbackup so we can recreate tasks on systems where npbackup is already installed

## v1.8.0

  - Implement VSS support for Windows
  - Do not require UAC elevation for npbackup.exe (Still highly recommended, but at least we allow non admin users to backup their data (without VSS))
  - Search restic executable path when not found locally for both Windows and Linux platforms
  - Make exclusion lists always ignore case on Windows systems
  - Highly improve exclusion lists
  - Keep structure and comments in yaml configuration files
  - Simplify configuration file data encryption
  - Fix limit-download parameter not working
  - Fix error when rest_connections was set to 0
  - Add some config gui logging
  - Cosmetic gui fixes
  - Fix never enforce execution timeout on backup operation
  - Fix bogus filename encodings while showing backup contents / usernames
  - Added more restic metrics
  - Fixed bogus restric metrics
  - Allow setting additional prometheus labels
  - Fix gui snapshot contents don't show duplicate parents on Windows when backing up 'c:\foo' and 'C:\bar'
  - Internal code cleanup
  - Installer
    - Make sure we don't overwrite destination configuration file if existing

## v1.5.3
  - First closed public release

## v0.1.0 - 1.5.2
  - Internal development and tests