Compare commits

...

1,118 commits

Author SHA1 Message Date
730350b31a Fix incorrect option name within schema description. 2025-01-25 08:04:13 -08:00
203e1f4e99 Bump version for release. 2025-01-25 08:01:34 -08:00
4c35a564ef Fix root patterns so they don't have an invalid "sh:" prefix before getting passed to Borg (#979). 2025-01-25 07:59:53 -08:00
7551810ea6 Clarify/correct documentation about dumping databases when using containers (#978). 2025-01-24 14:31:38 -08:00
ce523eeed6 Add a blurb about recent contributors. 2025-01-23 15:11:54 -08:00
3c0def6d6d Expand the recent contributors documentation section to ticket submitters. 2025-01-23 14:41:26 -08:00
f08014e3be Code formatting. 2025-01-23 12:11:27 -08:00
86ad93676d Bump version for release. 2025-01-23 12:09:20 -08:00
e1825d2bcb Add #977 to NEWS. 2025-01-23 12:08:34 -08:00
92b8c0230e Fix exclude patterns parsing to support pattern styles (#977).
Reviewed-on: borgmatic-collective/borgmatic#976
2025-01-23 20:06:11 +00:00
Pavel Andreev
73c196aa70 Fix according to review comments 2025-01-23 19:49:10 +00:00
Pavel Andreev
5d390d7953 Fix patterns parsing 2025-01-23 15:58:43 +00:00
ffb342780b Link to Sentry's DSN documentation (#855). 2025-01-21 17:28:32 -08:00
9871267f97 Add a Sentry monitoring hook (#855). 2025-01-21 17:23:56 -08:00
914c2b17e9 Add a Sentry monitoring hook (#855). 2025-01-21 17:23:18 -08:00
804455ac9f Fix for "exclude_from" files being completely ignored (#971). 2025-01-19 10:27:13 -08:00
4fe0fd1576 Fix version number in NEWS. 2025-01-18 09:55:03 -08:00
e3d40125cb Fix for a "spot" check error when a filename in the most recent archive contains a newline (#968). 2025-01-18 09:54:30 -08:00
e66df22a6e Fix for an error when a blank line occurs in the configured patterns or excludes (#970). 2025-01-18 09:25:29 -08:00
e789de0851 Bump version for release. 2025-01-17 13:50:22 -08:00
f1cac95b9c Fix the "restore" action to work on database dumps without a port when a default port is configured (#969). 2025-01-17 13:46:18 -08:00
f183800009 For the LVM hook, add support for nested logical volumes (#962). 2025-01-17 09:38:49 -08:00
b7362bfbac Apply snapshot path rewriting to excludes and patterns, not just source directories (#962).
Reviewed-on: borgmatic-collective/borgmatic#964
2025-01-17 03:23:41 +00:00
2467518d4e Add even more missing test coverage (#962). 2025-01-16 15:11:59 -08:00
3bda843139 Fix the "spot" check to have a nicer error when there are no source paths to compare. 2025-01-15 19:48:08 -08:00
44efca2be9 Update patterns schema comment (#962). 2025-01-15 12:37:44 -08:00
cfeeb87bbe Fix pattern expansion/normalization bug with working directory (#962). 2025-01-15 11:26:26 -08:00
bb2e986c9d Fix end-to-end tests (#962). 2025-01-15 10:52:09 -08:00
67ac70354b Merge branch 'main' into snapshot-excludes-and-patterns 2025-01-15 10:37:36 -08:00
8c1d5dbfe1 Revert end-to-end script change. 2025-01-15 10:37:04 -08:00
a3aeb36159 Merge branch 'main' into snapshot-excludes-and-patterns 2025-01-15 10:35:45 -08:00
c702a988bd Add a basic end-to-end test for patterns (#962). 2025-01-15 10:33:38 -08:00
bbf1c3d55e Add test coverage for new code. 2025-01-14 23:01:39 -08:00
0b17fb2d3f Get all existing tests passing (#962). 2025-01-14 13:48:20 -08:00
ca54da1067 Getting additional tests passing (#962). 2025-01-13 20:51:27 -08:00
661041da04 Fix check tests (#962). 2025-01-13 10:22:32 -08:00
ad14ff3ee5 Fix tests for remaining hooks (#962). 2025-01-13 10:07:25 -08:00
b72b9aaf13 Fix several tests (#962). 2025-01-12 22:42:58 -08:00
a70fd30cb1 Merge branch 'main' into snapshot-excludes-and-patterns 2025-01-12 11:38:50 -08:00
5560f30aa6 Fix a borgmatic runtime directory error when running the "spot" check with a database hook enabled (#965). 2025-01-12 09:36:24 -08:00
256ed4170b Minor comment clarifications (#962). 2025-01-10 22:20:49 -08:00
071d8d945a Strip comments from patterns (#962). 2025-01-10 12:33:25 -08:00
926c26315a Add documentation for patterns and snapshot hooks (#962). 2025-01-10 12:22:37 -08:00
120a29ab4d Initial work on applying snapshot path rewriting to excludes and patterns (#962). 2025-01-10 10:38:27 -08:00
8573660ff0 Clarify error message to mention patterns, not just excludes (#947). 2025-01-10 08:41:56 -08:00
0b9f3ae8a1 Fix comment typo. 2025-01-04 20:18:18 -08:00
2c70ad81ec Fix the "spot" check to support relative source directory paths (#960). Fix the "spot" check to no longer consider pipe files within an archive for file comparisons. Fix auto-excluding of special files (when databases are configured) to support relative source directory paths. 2025-01-01 15:00:36 -08:00
d6c3ec05aa Reduce duplication (#960). 2024-12-29 22:00:25 -08:00
a4954cc7a3 Fix for archives storing relative source directory paths such that they contain the working directory (#960). 2024-12-29 20:09:13 -08:00
a6b6dd32c1 Upgrade dependencies and containers for end-to-end tests. 2024-12-29 09:33:25 -08:00
d3409df84c Fix an error in the Btrfs hook when a "/" subvolume is configured in borgmatic's source directories (#959). 2024-12-28 09:57:33 -08:00
87e77ff2b7 Bump version for release. 2024-12-27 08:54:53 -08:00
3517d9d4f3 Indentation tweak. 2024-12-26 19:11:45 -08:00
d3c7279dad Backup and restore databases that have the same name but with different ports, hostnames, or hooks (#418).
Reviewed-on: borgmatic-collective/borgmatic#952
2024-12-26 23:17:58 +00:00
a99c48c115 Documentation / CLI help clarifications around "--original-port" (#418). 2024-12-26 15:16:29 -08:00
94cedd4cf8 Merge branch 'main' into same-named-databases 2024-12-25 23:04:45 -08:00
a4baf4623b Drop colorama as a library dependency (#958). 2024-12-25 23:02:38 -08:00
77df425bd1 Minor edits and clarifying comments (#418). 2024-12-25 21:59:10 -08:00
69476a4fab Documentation clarifications (#418). 2024-12-24 23:25:26 -08:00
be6b865a81 Add even more missing test coverage (#418). 2024-12-24 23:09:44 -08:00
b58a52e03f Merge branch 'main' into same-named-databases 2024-12-24 15:25:57 -08:00
9b85c5bc61 Add missing restore test coverage (#418). 2024-12-24 15:24:09 -08:00
b8041f5c39 Fix end-to-end tests broken by new database config checks during restore (#418). 2024-12-24 09:13:42 -08:00
d9d6d3f7f2 Simplify logic to get configured data sources during restoration (#418). 2024-12-23 22:12:47 -08:00
0844cd0d4f Fix the printing of a color reset code at exit even when color is disabled (#956). 2024-12-23 19:53:57 -08:00
d4705602fa Handle more edge cases by erroring (#418). 2024-12-22 22:02:53 -08:00
5174a78109 Get existing tests passing (#418). 2024-12-21 13:35:00 -08:00
3db79b4352 Simplified dump metadata comparison logic and got a few tests passing (#418). 2024-12-20 22:40:20 -08:00
d6732d9abb Merge branch 'main' into same-named-databases 2024-12-19 21:07:44 -08:00
267af5b372 To avoid a hang in the database hooks, error and exit when the borgmatic runtime directory overlaps with the configured excludes (#947). 2024-12-19 20:59:57 -08:00
d53ea09adb In tests, account for some function renames (#418). 2024-12-17 16:28:59 -08:00
8696cbfa22 Clarify some comments (#418). 2024-12-17 12:02:31 -08:00
48dca28c74 When the ZFS, Btrfs, or LVM hooks aren't configured, don't try to cleanup snapshots for them. 2024-12-17 11:00:19 -08:00
36bcbd0592 Documentation about restoring datebases with the same name (#418). 2024-12-17 08:51:04 -08:00
ebb3bca4b3 Fix findmnt command error in the Btrfs hook by switching to parsing JSON output (#954). 2024-12-12 11:58:18 -08:00
b1e343f15c Initial work on supporting same-named database with different ports, hosts, or hooks (#418). 2024-12-09 08:48:34 -08:00
cb7f98192c Updates to out-of-date documentation on database dumps. 2024-12-07 12:25:39 -08:00
3ceb4f554f Fix out-of-date schema comments about databases and one_file_system. 2024-12-07 11:42:41 -08:00
4b18c0bc81 Make LVM snapshots read-only. 2024-12-07 09:41:50 -08:00
2ce09dbf82 Snapshot documentation clarifications. 2024-12-07 09:10:52 -08:00
8a4f3b8f1a Add word missing from docs (#80). 2024-12-06 20:39:50 -08:00
81cd03cbbf Bump version for release. 2024-12-06 20:29:16 -08:00
f2455527fc Fix spelling in comment (#80). 2024-12-06 20:22:45 -08:00
62d67cde0a LVM snapshots + ZFS and Btrfs improvements (#80).
Reviewed-on: borgmatic-collective/borgmatic#949
2024-12-07 04:21:22 +00:00
ae8a9db27d Fix flake issues (#80). 2024-12-06 16:12:01 -08:00
8979f8918d Organize imports (#80). 2024-12-06 16:05:46 -08:00
eb97708092 Completed tests for LVM (#80). 2024-12-06 16:02:33 -08:00
f2d93b85b4 Lots of LVM unit tests + code formatting (#80). 2024-12-06 13:59:38 -08:00
b999d2dc4d Add some missing test coverage (#80). 2024-12-06 10:27:47 -08:00
7f2e38d061 Fix file permissions (#80). 2024-12-06 09:40:32 -08:00
140fc248b6 Fix LVM end-to-end tests (#80). 2024-12-06 09:39:24 -08:00
ec9e1a8223 LVM hook end-to-end tests, not quite working yet (#80). 2024-12-05 22:46:50 -08:00
03bbe77dd9 Add an end-to-end test for the Btrfs hook using a fake Btrfs binary (#80). 2024-12-05 17:35:44 -08:00
f1c5f11422 Add an end-to-end test for the ZFS hook using a fake ZFS binary (#80). 2024-12-05 11:18:53 -08:00
f8df06fb92 Remove divison by zero (#80). 2024-12-04 20:33:59 -08:00
d95707ff9b Get existing tests passing (#80). 2024-12-04 20:22:59 -08:00
51a7f50e3a Add ZFS snapshot unmount error fix to NEWS (#950). 2024-12-04 15:43:05 -08:00
49b8b693af Don't try to unmount a ZFS snapshot if it's already deleted (#80). 2024-12-04 15:39:04 -08:00
d0e92493f6 Fix broken ZFS tests (#80). 2024-12-04 14:48:13 -08:00
9afdaca985 Before unmounting, remove the snapshot mount path instead of the parent snapshot directory (#80). 2024-12-03 19:19:22 -08:00
cc11ed78e0 Put LVM snapshots into a data structure for convenience (#80). 2024-12-03 19:12:41 -08:00
87f3746881 Fix a ZFS edge case in which the hook tries to unmounted a non-mounted directory (#80). 2024-12-03 15:56:03 -08:00
347a4c3dd5 Fix breakage of ZFS user property auto-backup (#80). 2024-12-03 15:43:50 -08:00
399bb6ef68 Add recent LVM and ZFS work to NEWS (#80). 2024-12-03 12:22:43 -08:00
9b9ecad299 Port the parent directory discovery logic from LVM to Btrfs (#80). 2024-12-03 12:15:34 -08:00
8c4b899a13 Use a namedtuple for logical volume metadata (#80). 2024-12-03 11:12:27 -08:00
9b77de3d66 Port the parent directory discovery logic from LVM to ZFS (#80). 2024-12-03 11:05:45 -08:00
bfeea5d394 Code formatting (#80). 2024-12-03 08:52:05 -08:00
8a6225b7c2 Factor out logic for finding contained source directories in a parent directory (#80). 2024-12-03 08:51:10 -08:00
9aaa3c925f Code formatting (#80). 2024-12-02 21:01:34 -08:00
88fd1ae454 Discover parent/grandparent/etc. logical volumes of source directories (#80). 2024-12-02 20:58:50 -08:00
27305ec2bf Clarify the path rewriting for LVM (but also ZFS + Btrfs) (#80). 2024-12-02 12:01:04 -08:00
4453c2d49c Add LVM logo to integrations docs. 2024-12-02 11:28:57 -08:00
6367a00013 Add snapshot_size option (#80). 2024-12-02 11:09:07 -08:00
cd654cbb57 Fix a few docstring typos (#80). 2024-12-01 21:00:11 -08:00
1e8f73779f Fix typo in schema comment (#80). 2024-12-01 20:25:16 -08:00
27d167b071 LVM snapshots WIP (#80). 2024-12-01 20:13:02 -08:00
cfff6c6855 Btrfs snapshotting (#251).
Reviewed-on: borgmatic-collective/borgmatic#946
2024-11-30 19:19:09 +00:00
37efaeae88 Warn if Btrfs is configured but there are no Btrfs subvolumes detected (#251). 2024-11-30 10:55:30 -08:00
0978c669ad A little more Btrfs error handling (#251). 2024-11-30 10:25:01 -08:00
1366269586 Add a couple of missing tests (#251). 2024-11-30 09:44:55 -08:00
a9a0910817 Add Btrfs logo to integrations docs (#251). 2024-11-30 09:36:52 -08:00
5bcc7b60c8 Tests for Btrfs (#251). 2024-11-30 09:32:50 -08:00
84a0552277 Improve Btrfs hook factoring/organization (#251). 2024-11-29 09:36:46 -08:00
d4a02f73b5 Create Btrfs snapshots as read-only (#251). 2024-11-28 22:18:44 -08:00
3f901c0a52 Btrfs hook documentation (#251). 2024-11-28 20:32:12 -08:00
b5b5c1fafa Initial work on a Btrfs hook (#251). 2024-11-28 18:47:15 -08:00
86e5085acc Fix incorrect documentation links to source. 2024-11-27 08:54:19 -08:00
08a5e8717b Merge branch 'main' of ssh://projects.torsion.org:3022/borgmatic-collective/borgmatic 2024-11-27 08:51:00 -08:00
6b2f2b2ac4 Reorganize data source and monitoring hooks to make developing new hooks easier. 2024-11-27 08:50:34 -08:00
a07cf9e699 Revert temporary reversion of 1.9.4.dev0.
revert Temporary revert of 1.9.4.dev0 changeset so we can re-build 1.9.3 (which never actually got built).

revert Fix library error when running within a PyInstaller bundle (#926).
2024-11-26 16:20:06 +00:00
bf40b01077 Temporary revert of 1.9.4.dev0 changeset so we can re-build 1.9.3 (which never actually got built).
revert Fix library error when running within a PyInstaller bundle (#926).
2024-11-26 16:13:39 +00:00
a5c6a2fe1c Fix library error when running within a PyInstaller bundle (#926). 2024-11-25 20:14:18 -08:00
82141fe981 Bump version for release. 2024-11-25 07:49:11 -08:00
228a83978d Check docs clarifications. 2024-11-24 19:40:00 -08:00
638db3770b Clarify how frequent default checks run. 2024-11-24 19:38:20 -08:00
98df5c3af2 Fix docs about the relative speeds of different checks (#945).
Reviewed-on: borgmatic-collective/borgmatic#945
2024-11-25 03:23:39 +00:00
b0e906c0e7 NEWS clarifications. 2024-11-24 19:05:11 -08:00
e8dccbf1c1 Promote the "spot" check from a beta feature to stable. 2024-11-24 19:03:05 -08:00
4a997bc234 Add rclone to the integrations. 2024-11-24 18:59:21 -08:00
3197178b3d Fix flake errors. 2024-11-24 16:32:48 -08:00
5e618154d0 Clarify error message. 2024-11-24 16:18:29 -08:00
84f611ae4f Require the runtime directory to be an absolute path. 2024-11-24 16:15:19 -08:00
5dc8450c8e Adding missing bootstrap files. 2024-11-24 16:15:12 -08:00
689643e5fa Move bootstrap manifest file creation into a hook so it can actually clean up after itself. 2024-11-24 16:00:33 -08:00
0a3d87eaea
docs: repository check means full CRC check -> slow
Ref: https://borgbackup.readthedocs.io/en/stable/usage/check.html#description
2024-11-24 18:04:58 +01:00
b45b62cd38 Don't recursively snapshot ZFS datasets, since we're not mounting them recursively (#261). 2024-11-23 22:37:46 -08:00
8de7094691 ZFS snapshots (#261).
Reviewed-on: borgmatic-collective/borgmatic#944
2024-11-24 04:42:19 +00:00
8c7e68305e A few clarifications to the ZFS docs (#261). 2024-11-23 20:41:43 -08:00
65a323433c Add comment (#261). 2024-11-23 20:12:40 -08:00
b5a3589471 A little more error handling (#261). 2024-11-23 18:09:59 -08:00
f4a736bdfe Deduplicate directories again after hooks have their way with them (#261). 2024-11-23 14:33:41 -08:00
eab0ec15ef Expand ZFS NEWS entry (#261). 2024-11-23 11:46:39 -08:00
c65aa24001 Add test coverage for ZFS hook (#261). 2024-11-23 10:50:58 -08:00
5a24bf2037 Get tests passing (#261). 2024-11-22 20:16:18 -08:00
324dbc3a79 Swallow temporary directory removal errors (#261). 2024-11-22 10:56:07 -08:00
9fe7db320a Consider ZFS hook as a beta feature (#261). 2024-11-22 09:53:46 -08:00
4d19596616 Add ZFS documentation (#261). 2024-11-22 08:33:24 -08:00
5cec2bf3d9 Don't unmount directories that don't exist. 2024-11-21 22:16:05 -08:00
06e0f98fd8 More refactoring for better organization of ZFS hook (#261). 2024-11-21 22:09:18 -08:00
87f36caf8d Factoring out some utility functions (#261). 2024-11-21 20:17:57 -08:00
ab7acceff6 Unmount and remove mounted snapshot directories, not just for the current process but for previous borgmatic runs as well (#261). 2024-11-21 19:09:30 -08:00
1b2b0c3020 Update out-of-date ZFS hook comments (#261). 2024-11-21 16:49:25 -08:00
289d178581 Also support discovery of ZFS datasets tagged with a borgmatic-specific user property (#261). 2024-11-21 16:45:44 -08:00
1e7f6d9f41 ZFS hook support for borgmatic's --dry-run (#261). 2024-11-21 11:55:45 -08:00
d0c90389fb Remove ZFS "enabled" option and fix override command options. 2024-11-21 10:52:00 -08:00
f9e920dce9 Prevent ZFS snapshots from ending up in the Borg archive twice (#261). 2024-11-21 10:23:27 -08:00
0ed52bbc4a Proceed gracefully in ZFS data source removal if ZFS isn't installed (#261). 2024-11-21 08:59:59 -08:00
da8278b566 Use os.path.normpath() instead of custom list comprehension (#261). 2024-11-21 08:36:15 -08:00
2af3522902 Fix broken check action (#261). 2024-11-21 08:32:02 -08:00
5e4784991a Comment tweaks and additional TODOs (#261). 2024-11-20 22:33:23 -08:00
ab43ef00ce ZFS snapshots WIP (#261). 2024-11-20 22:21:27 -08:00
47a8a95b29 Test path fix for finding schema file. 2024-11-20 08:18:06 -08:00
7c90c04ce0 Add a "--deleted" flag to the "repo-list" action (Borg 2 only). 2024-11-19 22:33:15 -08:00
97305cc3ce Fix broken tests when NO_COLOR=1 is set (#943). 2024-11-19 08:48:21 -08:00
4985b805b4 Bump version for release. 2024-11-18 20:40:51 -08:00
d09b4c72a9 Fix a few remaining Pushover issues from the PR. 2024-11-18 20:32:17 -08:00
9807549f88
Add a Pushover monitoring hook.
Merge pull request #86 from tony1661/pushover-branch.
2024-11-18 20:17:28 -08:00
30c821120e Fix borgmatic ignoring the "BORG_RELOCATED_REPO_ACCESS_IS_OK" and "BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK" environment variables (#939). 2024-11-18 09:46:52 -08:00
13884bd448 Apply the "umask" option to all relevant actions, not just some of them (#441). 2024-11-18 09:07:29 -08:00
6bce4c4a0d changed version release to 1.9.2 2024-11-18 07:56:00 -05:00
25572c98d7 better fuction name 2024-11-18 07:52:19 -05:00
dab0dfcb32 added test for value error 2024-11-18 07:49:53 -05:00
851c454ef0 Remove the restriction that the "extract" and "mount" actions must match a single repository (#722). 2024-11-17 21:39:59 -08:00
c7a0cebaf7 Add a documentation link to NEWS (#934). 2024-11-17 12:46:58 -08:00
76cfeda290 Update the logic that probes for the borgmatic runtime directory to support more platforms and use cases (#934).
Reviewed-on: borgmatic-collective/borgmatic#937
2024-11-17 19:57:09 +00:00
afdf831c59 Fix broken restore/bootstrap when using Borg 1.2 and a randomly named temporary directory (#934). 2024-11-17 11:55:10 -08:00
9ac3087304 Before creating a temp file in a directory, make sure the directory exists (#934). 2024-11-17 10:30:17 -08:00
7cca83b698 Log the path of the borgmatic runtime directory used (#934). 2024-11-17 10:15:58 -08:00
4b5df7117a Fix documentation type (#934). 2024-11-17 09:01:58 -08:00
57decfa4db Document the fact that the config bootstrap feature writes to the runtime directory (#934). 2024-11-16 16:45:49 -08:00
b80f60a731 Create the borgmatic runtime directory if it doesn't exist (#934). 2024-11-16 16:03:18 -08:00
8f5ea95348 Fix use of borgmatic runtime directory in the restore action (#934). 2024-11-16 12:19:20 -08:00
b0cad58d6c Add a dash to the prefix of the randomly named temporary directory to improve readability (#937). 2024-11-16 11:26:24 -08:00
073d6bddf6 Fix outdated comment (#934). 2024-11-16 07:26:23 -08:00
810b65589f Documentation for runtime/state directory changes (#934). 2024-11-15 22:23:49 -08:00
295bfb0c57 Update the logic that probes for the borgmatic streaming database dump, bootstrap metadata, and check state directories to support more platforms and use cases (#934). 2024-11-15 18:15:32 -08:00
5f3d4f9b03 final fix for true/false and 1/0 2024-11-13 15:27:25 -05:00
5321301708 fix for true/false to 1/0 2024-11-13 15:23:47 -05:00
a939a66fb4 raise ValueError on priprity 2 with retry or expire 2024-11-13 15:20:52 -05:00
c0721a8cad Fix misleading example for user_runtime_directory. 2024-11-13 11:17:40 -08:00
ea47704d86 added missing tests to get 100% test coverage 2024-11-13 12:09:25 -05:00
61e4eeff6c converted html to a boolean and updated documentation and schema 2024-11-13 11:52:08 -05:00
3ab4b45041 added test for early exit when state is not in config 2024-11-13 09:07:47 -05:00
4e1f256b48 added dryrun test case with minimum config 2024-11-12 10:15:19 -05:00
96bb402837 fix test 2 2024-11-12 10:10:13 -05:00
97949266b3 fix test 2024-11-12 10:09:23 -05:00
e69d2385fc better name for test 2024-11-12 10:08:13 -05:00
6d9340ebb2 better comment blocks 2024-11-12 10:05:57 -05:00
0441e79b41 "fail" -> "fails" 2024-11-12 10:00:34 -05:00
b1af304125 better data dict creation 2024-11-12 09:59:02 -05:00
eb8f7e0329 better description for expire and retry 2024-11-12 09:55:07 -05:00
bf978f2db4 Fix missing build backend setting in pyproject.toml to allow Fedora builds (#932). 2024-11-10 17:09:10 -08:00
22776b123d Bump version for release. 2024-11-10 08:13:18 -08:00
ef66349674 small fixed for some failing tests 2024-11-08 20:02:29 -05:00
51b885e7db added global constant for priority 2024-11-08 19:49:23 -05:00
1781787305 better schema description for retry and expire 2024-11-08 19:43:40 -05:00
46ebb0cebb removed redundant code 2024-11-08 18:45:46 -05:00
3e0fa57860 removed tests that are not needed 2024-11-08 17:44:27 -05:00
59f8722e05 better spacing for comments 2024-11-08 17:42:46 -05:00
4ba42e8905 better wording. Added 'by default' 2024-11-08 17:41:18 -05:00
3b79482b24 better wording 2024-11-08 17:38:58 -05:00
7eb19cb0a7 added period 2024-11-08 17:38:20 -05:00
a4fabb8521 fix version 2024-11-08 17:37:26 -05:00
85ea8f4f45 fix 10min in seconds 2024-11-08 15:03:38 -05:00
290559116d better logic for priority 2024-11-08 15:01:28 -05:00
72b27b0858 better message description in schema 2024-11-08 14:57:44 -05:00
0fdee067c7 double space fix 2024-11-08 14:45:36 -05:00
0dca5eeafc fix title wordwrap 2024-11-08 14:09:03 -05:00
02ce3ba190 fix url_title word wrap 2024-11-08 14:07:49 -05:00
dc78bf4d6b fix TTL wordwrap 2024-11-08 14:06:39 -05:00
4b7fbce291 fix sound word wrap 2024-11-08 14:05:27 -05:00
1817b9a9ea fix wordwrap for html 2024-11-08 13:50:22 -05:00
009055c61a device description rewrap 2024-11-08 13:48:21 -05:00
54884da8fa priority word wrap 2024-11-08 13:46:19 -05:00
1177385e08 fix expire description 2024-11-08 13:44:12 -05:00
a45ba8553c removed duplicate type:object 2024-11-08 13:42:19 -05:00
d7d6e30178 moved checks from hook to schema 2024-11-08 13:40:23 -05:00
56304fdcad Add NEWS entry for multiple system credentials fix (#930). 2024-11-07 20:20:41 -08:00
3f75e9931f Only support a single systemd credential by default (#930).
Reviewed-on: borgmatic-collective/borgmatic#930
Reviewed-by: Dan Helfman <witten@torsion.org>
2024-11-08 04:18:56 +00:00
227f475e17 Fix an error when implicitly upgrading the check state directory across filesystems (#931). 2024-11-07 19:19:56 -08:00
467ddd0e93 creds: Only support single credential by default 2024-11-08 00:36:24 +01:00
be08e889f0 Fix the user runtime directory location on macOS (and possibly Cygwin) (#928). 2024-11-03 21:44:11 -08:00
94c8a56373 Reorder NEWS items. 2024-11-03 13:58:04 -08:00
cecf04aa69 Bump version for release. 2024-11-03 13:23:57 -08:00
814cdb4b87 Deprecate the "borgmatic_source_directory" option in favor of "user_runtime_directory" and "user_state_directory" (#562). Move the default borgmatic streaming database dump and bootstrap metadata location on disk (#562). With Borg 1.4+, store database dumps and bootstrap metadata in a "/borgmatic" directory within a backup archive (#838). Add "--local-path", "--remote-path", and "--user-runtime-directory" flags to the "config bootstrap" action. 2024-11-03 13:14:05 -08:00
13878be254 Move the default check state directory (#562, #638). Deprecate the "borgmatic_source_directory" option in favor of "borgmatic_runtime_directory" and "borgmatic_state_directory" (#562). 2024-10-30 22:36:43 -07:00
94db527500 finalized support for Pushover 2024-10-30 15:43:06 -04:00
2849f54932 initial pushover commit 2024-10-30 11:25:26 -04:00
129f3e753c Flesh out the Zabbix monitoring hook tests, add a logo to the documentation, etc. 2024-10-29 10:33:19 -07:00
c85bf46ad9
Add Zabbix monitoring hook.
Merge pull request #85 from tony1661/zabbix-hook
2024-10-29 09:01:15 -07:00
fa6a4734d4 added auth tests with item id 2024-10-29 09:00:06 -04:00
e52e29444f added user/pass auth test 2024-10-29 08:54:25 -04:00
f713f1df7e better function names and comments 2024-10-29 08:21:52 -04:00
87d824553d converted constants to capitals 2024-10-29 08:05:05 -04:00
52fbf8cb24 capital 2024-10-28 09:54:07 -04:00
f758374772 adjustment in docs to reflect changes in 385ef2d 2024-10-28 09:52:20 -04:00
60c5949c23 adjusted to accept integers and strings 2024-10-28 09:51:08 -04:00
d11c517f67 better schema descriptions 2024-10-28 09:41:34 -04:00
237999cc81 fix word-wrap 2024-10-28 09:40:14 -04:00
d060f8d77a fix log for dry_run_label 2024-10-28 09:38:17 -04:00
385ef2d012 fixes and first unit test attempt 2024-10-28 09:36:30 -04:00
02a2e77315 Add Documentation=... to sample systemd service files. 2024-10-27 16:31:08 -07:00
9b623a8a8e Move docs exporting to a separate script in the hopes it'll actually work there. 2024-10-27 14:48:17 -07:00
e1f60e4b09 Fix podman create command to use correct image name. 2024-10-27 14:33:58 -07:00
269c00b240 Yet another attempt at making a docs tarball from a container image. 2024-10-27 14:26:00 -07:00
48f008d720 Fix image name of docs export. 2024-10-27 13:51:12 -07:00
53d9ffd1d3 Attempt to make a borgmatic docs tarball package in CI. 2024-10-27 13:26:41 -07:00
d7323e08ac Fix isort invocation referring to gone setup.cfg file (#922). 2024-10-26 20:44:14 -07:00
fc7a2852e0 Code formatting. 2024-10-26 20:34:48 -07:00
f8c9d985e8 Add pyproject.toml transitin to NEWS. 2024-10-26 16:40:15 -07:00
c7ca9bf844 Replace setup.py with pyproject.toml.
Reviewed-on: borgmatic-collective/borgmatic#922
2024-10-26 23:38:34 +00:00
7a117d5cc9 Add support for Borg 2's "sftp://" repository URLs. 2024-10-26 11:58:26 -07:00
bd9751586c Merge blake8 conf to tox.ini 2024-10-26 20:11:39 +02:00
fe0fe27c36 Adjust for Borg 2's change from "rclone://" repository URLs to just "rclone:". 2024-10-26 09:41:01 -07:00
1426859e1c Mention required borgmatic version in docs about Borg 2.x series changes. 2024-10-25 22:33:22 -07:00
ffb431e3ab minor improvement 2024-10-25 17:34:33 -04:00
11fee81486 converted string to dictionary as requested 2024-10-25 17:28:02 -04:00
83bc737185 Borg 2 changes: Default the "archive_name_format" option to just "{hostname}". Update the "--match-archives"/"--archive" flags to support series names / archive hashes. Add a "--match-archives" flag to the "prune" action. 2024-10-25 14:26:31 -07:00
cda83310c8 fixed version number 2024-10-25 08:10:25 -04:00
90ccbecf07 better documatation description 2024-10-25 08:08:38 -04:00
ccbf668bea fix for if logic 2024-10-24 09:01:10 -04:00
f18219a768 changes made with 'tox - e isort' 2024-10-24 08:00:14 -04:00
9ba8ca24eb changes made with 'tox -e black' 2024-10-24 07:52:32 -04:00
b42793a2dc convert concat to fstring 2024-10-23 18:26:22 -04:00
2877c1ad0d added spaces after commas 2024-10-23 18:10:58 -04:00
1b9f95ca47 better description in schema for server 2024-10-23 18:04:28 -04:00
7aff22536d better itemid description in schema 2024-10-23 17:53:07 -04:00
d6e1cc3e12 better wording 2024-10-23 17:43:54 -04:00
c1a08edca2 subheader formatting 2024-10-23 17:42:11 -04:00
02a219fac2 it will 2024-10-23 17:40:24 -04:00
78f81c7b73 changed verison to 1.9 - zabbix hook 2024-10-23 17:39:36 -04:00
8edb40a8e9 added dryrun check 2024-10-23 17:38:24 -04:00
f2d7687ca3 removed unused variable 2024-10-23 17:34:21 -04:00
b5fb0c8247 added returns when expected values are not provided 2024-10-23 17:33:09 -04:00
9b2ac961d7 capitalized Zabbix in logging 2024-10-23 17:30:28 -04:00
38ce98771b removed spaces before logging 2024-10-23 17:28:54 -04:00
f616284ffb better description for server string 2024-10-23 17:24:20 -04:00
5da898003f removed unnecessary parentheses here and below 2024-10-23 17:21:30 -04:00
5a464b3186 better logic for run_states 2024-10-23 17:19:51 -04:00
42fb8c38e0 better comments and logging 2024-10-23 17:15:55 -04:00
80839566d6 better wording for API key 2024-10-23 17:12:18 -04:00
702e55e6f7 formatting fix for key 2024-10-23 17:08:37 -04:00
1a8e8835c1 added quotes and period for host description 2024-10-23 17:00:31 -04:00
9abc5c60d4 its 2024-10-23 16:53:18 -04:00
fc87b74ab0 capital fixed 2024-10-23 16:52:45 -04:00
ad21eb41ae Add support for Borg 2's "rclone://" repository URLs. 2024-10-23 11:10:40 -07:00
601e393ec7 Fixed package discovery in pyproject.toml 2024-10-22 22:04:33 +02:00
e391fd196d Add loading of systemd credentials to NEWS (#902). 2024-10-22 09:01:18 -07:00
5f387b3991 Fix documentation URL in YAML (#902). 2024-10-22 08:59:13 -07:00
ed957a940a Load systemd encrypted credentials (#902).
Reviewed-on: borgmatic-collective/borgmatic#902
Reviewed-by: Dan Helfman <witten@torsion.org>
2024-10-22 15:58:41 +00:00
bd4c672382 Apply the "working_directory" option to all actions, not just "create". Also fix the glob expansion of "source_directories" values to respect the "working_directory" option (#609). 2024-10-20 16:04:41 -07:00
c71da46963 Fix change-passphrase to actually prompt for a new passphrase when an old one is configured (#911). 2024-10-19 09:58:32 -07:00
3da7471fe6 added note about zabbix 7.0+ 2024-10-18 18:00:14 -04:00
b874e7e66f zabbix hook added 2024-10-18 17:57:37 -04:00
b029d1cb67 Add codespell to pyproject.toml 2024-10-15 12:52:05 +02:00
33b1101ce1 Add isort to pyproject.toml 2024-10-15 12:51:33 +02:00
d96c5f79fb Add pytest to pyproject.toml 2024-10-14 18:30:39 +02:00
9e29ce788f Fixed release script 2024-10-14 18:17:22 +02:00
4658c5d1cb Moving to pyproject.toml 2024-10-14 18:17:14 +02:00
5280de86ff Load encrypted systemd credentials 2024-10-13 15:42:07 +02:00
29d5b36a78 Change soft failure command hooks to skip only the current repository (#921). 2024-10-06 17:39:02 -07:00
29f214a269 Change borgmatic 1.8.15 (unreleased) to 1.9.0 due to breaking changes. 2024-10-06 16:07:14 -07:00
6fdce2a4a6 Fix a confusing apparent hang when when the repository location changes, and instead show a helpful error message (#914). 2024-10-03 16:48:34 -07:00
a4b65cf710 Update Borg 2 beta links. 2024-10-03 08:03:47 -07:00
79725d2ff7 Document a policy for versioning and breaking changes (#919). 2024-10-02 09:10:12 -07:00
f7e8a2c1d1 Clarify the command-line help for the "--config" flag (#919). 2024-10-02 08:47:52 -07:00
f54d566edc Fixes to make the inclusive language linter happy. 2024-10-01 13:37:31 -07:00
b7efa0d3f0 When databases are configured, don't auto-enable the "one_file_system" option (#918). 2024-10-01 10:16:30 -07:00
88b945dcb9 Add missing test (#911). 2024-10-01 09:31:03 -07:00
34305d686c Revert "Add missing test (#911)" which accidentally included unrelated changes.
This reverts commit bf1e8bc44e.
2024-10-01 09:28:39 -07:00
bf1e8bc44e Add missing test (#911). 2024-10-01 09:26:00 -07:00
fd4f69f6c3 Rename repository actions for compatibility with recent Borg 2 changes (#915). 2024-09-09 10:05:32 -07:00
1fe6ae83a8 Add a "key change-passphrase" action to change the passphrase protecting a repository key (#911). 2024-09-01 11:13:39 -07:00
1197d6d0f6 Bump version for release. 2024-08-29 17:41:02 -07:00
288a4bf243 : Add documentation details for how to run custom database dump commands using binaries from running containers (#906). 2024-08-20 15:03:49 -07:00
1fb943e5f1 Documentation and config schema update about ~/.borgmatic volume mount (#906).
Reviewed-on: borgmatic-collective/borgmatic#907
2024-08-20 21:51:51 +00:00
e0298685a1 Fix the "source_directories_must_exist" option to work with relative "source_directories" paths when a "working_directory" is set (#905). 2024-08-20 13:52:06 -07:00
c5633227bf Add glob ("*") support to the "--repository" flag (#898). 2024-08-20 12:49:50 -07:00
Jonathan Brockhaus
6087c12e09 docs: typo 2024-08-16 14:36:28 +02:00
Jonathan Brockhaus
9d83f02e24 fix(config/schema.yaml): Add note about mounting .borgmatic folder inside container db backups 2024-08-16 14:25:11 +02:00
Jonathan Brockhaus
b6ccde6757 fix(docs): Add note about mounting .borgmatic folder inside container db backups 2024-08-16 14:23:59 +02:00
548aceb3d5 Fix config validation broken by schema change (#904). 2024-08-12 23:09:55 -07:00
2bd63bbdd2 Clarify the configuration reference about the "spot" check options (#904). 2024-08-12 22:50:58 -07:00
9b4fed64a6 Upgrade run-full-tests dependencies. 2024-08-11 20:41:43 -07:00
ff1001a5f5 Fix NEWS typo. 2024-08-11 20:38:38 -07:00
e7f1c3eda5 Add "color" option regression fix to NEWS. 2024-08-11 20:35:54 -07:00
21e343a948
Fix broken color configuration option.
Merge pull request #83 from TheoBrigitte/main
2024-08-11 20:32:43 -07:00
Theo Brigitte
4c4fd92013
update logger unit tests
* update color config structure
  * add check for color: True in config
  * ensure interactive_console is called wherever it should
2024-08-09 00:07:46 +02:00
Theo Brigitte
37735e464c
Fix color configuration directive 2024-08-05 16:38:49 +02:00
424cc6b66c Fix for a "bad character" Borg error in which the "spot" check fed Borg an invalid pattern (#899). 2024-07-25 11:34:09 -07:00
e128a3e0a9 Add a ticket number onto the traceback fix in NEWS. 2024-07-19 22:22:19 -07:00
27e7ece2f5 More fix for a potential traceback (TypeError) during the handling of another error. 2024-07-15 14:45:21 -07:00
d44dc93509 Fix for a potential traceback (TypeError) during the handling of another error. 2024-07-14 10:07:15 -07:00
31778fd3bf Fix error in borgmatic rcreate/init on empty repository directory with Borg 1.4 (#896). 2024-07-08 11:24:48 -07:00
4313f90dd8 Add a couple of more code style guidelines. 2024-07-07 20:49:27 -07:00
1f82ea2798 Attempt to fix documentation build. 2024-07-06 10:23:10 -07:00
148536d867 Upgrade certifi in test requirements. 2024-07-06 10:17:53 -07:00
197f0a521d Add a recent contributors section to the documentation. 2024-07-06 10:15:16 -07:00
0d8e352033 Update documentation link to Borg 1.4.0 exit codes. 2024-07-04 20:21:40 -07:00
20a3995977 Bump version for release. 2024-07-04 08:54:09 -07:00
66aa953371 Add additional tests (#298). 2024-07-04 08:42:05 -07:00
ba053de8f7 Add delete and rdelete actions (#298).
Reviewed-on: borgmatic-collective/borgmatic#893
2024-07-04 06:07:30 +00:00
2f844d65d5 Automated tests complete (#298). 2024-07-02 23:11:58 -07:00
2dca5e1834 Initial automated tests for delete action (#298). 2024-07-02 20:26:29 -07:00
36197ce027 Dry run support for delete/rdelete actions (#298). 2024-06-28 20:56:42 -07:00
e9a0226ee0 Initial work on delete/rdelete actions (#298). 2024-06-28 16:20:10 -07:00
fc3b4a653e Add a development documentation note about using fully qualified imports. 2024-06-28 15:00:25 -07:00
3673abb01e Update documentation links that link to beta versions of Borg docs. 2024-06-27 14:42:53 -07:00
ac4277d36c Add "new in version" label to Uptime Kuma documentation (#885). 2024-06-27 09:29:53 -07:00
21cbc99d9e Fix uptime_kuma monitor not being called after name change (#891).
Reviewed-on: borgmatic-collective/borgmatic#891
2024-06-27 16:27:07 +00:00
Paul Wilde
d080bf2ae9 [bugfix] uptime_kuma monitor is not called after name change 2024-06-27 12:49:07 +01:00
2a1c790655 Minor reorganization of borgmatic source code reference. 2024-06-26 19:39:32 -07:00
410204a70d Formatting, whitespace, and minor fixes for Uptime Kuma hook (#885). 2024-06-26 16:09:14 -07:00
4a0c167c1c Add Uptime Kuma monitoring hook (#885).
Reviewed-on: borgmatic-collective/borgmatic#885
Reviewed-by: Dan Helfman <witten@torsion.org>
2024-06-26 22:50:11 +00:00
593c956d33 Add an "only_run_on" option to consistency checks so you can limit a check to running on particular days of the week (#785). 2024-06-26 14:57:59 -07:00
d18cb89493 Merge branch 'main' into main 2024-06-26 19:58:56 +00:00
Paul Wilde
067c79c606 renamed push_monitor back to ping_monitor in uptime kuma hook 2024-06-26 20:57:37 +01:00
ebde88ccaa Fix the Healthchecks ping body size limit, restoring it to the documented 100,000 bytes (#889). 2024-06-25 12:45:44 -07:00
cc402487d9 Minor development documentation clarifications. 2024-06-24 10:48:13 -07:00
d108e6102b some minor corrections in how to uptime kuma docs 2024-06-24 12:00:22 +01:00
3e60043632 some minor corrections in how to uptime kuma docs 2024-06-24 11:57:12 +01:00
a8d691169a some minor corrections in how to uptime kuma docs 2024-06-24 11:54:34 +01:00
939c2f6718 some minor corrections in how to uptime kuma docs 2024-06-24 11:54:12 +01:00
0837059e21 some minor corrections in how to uptime kuma docs 2024-06-24 11:51:41 +01:00
0ee166fdf0 added Uptime Kuma how-to docs 2024-06-24 11:46:38 +01:00
b50996b864 change uptimekuma method names to 'push_*' instead of 'ping' 2024-06-24 11:07:09 +01:00
8f423c7293 black formatting on uptimekuma hook 2024-06-24 10:46:04 +01:00
14ce88e04b black formatting on test_uptimekuma.py 2024-06-24 10:37:44 +01:00
f97968b72d variable renaming 2024-06-24 10:34:52 +01:00
612f867ea8 Merge remote-tracking branch 'upstream/main' 2024-06-24 10:28:02 +01:00
303d6609e4 removed unecessary tests for 'default urls' as these would never really be used anyway 2024-06-24 10:27:23 +01:00
bf7b163ccd added early out for dry run 2024-06-24 10:25:08 +01:00
4bd798f0ad alpha ordered dispatch monitor hook names (including loki) 2024-06-24 10:22:27 +01:00
52aa7c5d21 switched to using full 'push_url' instead of separate 'server' and 'push_code' 2024-06-24 10:21:31 +01:00
f5a1dd31c8 Fix PagerDuty hook traceback with Python < 3.10 (#886). 2024-06-23 18:28:41 -07:00
c41000a4b1 Bump version for release. 2024-06-23 17:02:13 -07:00
c3f8b05a68 Fix test warning in PagerDuty hook. 2024-06-23 17:01:54 -07:00
f4fcf92bd6 Add an "upload_buffer_size" option to set the size of the upload buffer used in "create" action (#865). 2024-06-23 16:26:22 -07:00
a2c139245d Add a "--max-duration" flag to the "check" action and a "max_duration" option to the repository check configuration (#817). 2024-06-22 16:19:06 -07:00
Paul Wilde
a509cdedd5 Added Uptime Kuma tests 2024-06-22 10:46:17 +01:00
Paul Wilde
dcbc30b164 WIP add uptime kuma tests 2024-06-22 10:19:34 +01:00
Paul Wilde
5ab99b4cc0 Added Uptime Kuma image to readme 2024-06-21 21:21:04 +01:00
Paul Wilde
27c90b7cf1 Added Uptime Kuma hook 2024-06-21 21:10:14 +01:00
Paul Wilde
6eb76454bb WIP added some schema info for uptime kuma 2024-06-21 17:00:44 +01:00
Paul Wilde
83bcea98dc WIP added some schema info for uptime kuma 2024-06-21 16:57:20 +01:00
Paul Wilde
4db09a73b3 WIP implement Uptime Kuma hook 2024-06-21 16:47:51 +01:00
45a9e3bfc3 Document that "borgmatic borg create" bypasses monitoring hooks (#882). 2024-06-20 14:25:20 -07:00
bd40015e1c Added missing word to NEWS entry (#881). 2024-06-20 13:33:34 -07:00
7894600408 Fix "Unrecognized argument" error when the same value is with different command-line flags (#881). 2024-06-20 11:53:52 -07:00
df4668754d Fix "Argument list too long" error in the "spot" check when checking 100k+ files (#866). 2024-06-09 22:53:56 -07:00
08d6f83b2e In the "spot" check, don't try to hash symlinked directories. 2024-06-09 15:58:16 -07:00
c58f510054 Minor spot check documentation clarification (#868). 2024-06-09 15:28:28 -07:00
c2879d054a Alpha ordering in docs (#874). 2024-06-05 14:58:43 -07:00
f821d2c909 Calling interpolated variable "repository_label" instead of "label" for clarity (#874). 2024-06-05 14:56:21 -07:00
1ef2218919 Remove obsolute "version:" from Docker Compose files. 2024-06-05 14:50:52 -07:00
177c958572 Add configured repository "label" to the interpolated variables passed to command hooks (#874). 2024-06-05 14:47:37 -07:00
b5ab1ff0cd Use (current) default action order whenever actions are mentioned (#873). 2024-06-05 11:21:51 -07:00
70a978b83d Upgrade test requirements. 2024-05-21 13:57:06 -07:00
2037810c6b Avoid requiring network in test_healthchecks.py (#869).
Reviewed-on: borgmatic-collective/borgmatic#869
2024-05-21 20:33:21 +00:00
de304f83de
Avoid requiring network in test_healthchecks.py
Some test environments (e.g., the one of the Nix build system) don't
allow network requests while building and testing.
2024-05-16 16:11:40 +02:00
5752373009 When color output is disabled (explicitly or implicitly), don't prefix each log line with the log level (#863). 2024-05-11 22:40:13 -07:00
fecae39fcd To avoid duplicate install, update docs to uninstall borgmatic before re-installing with Apprise (#862). 2024-05-03 16:48:35 -07:00
38bc4fbfe2 Fix interaction between environment variable interpolation in constants and shell escaping (#860). 2024-04-30 09:36:26 -07:00
92ed7573d4 Fix NEWS formatting. 2024-04-29 09:39:40 -07:00
80f0e92462 Bump version for release. 2024-04-29 09:38:02 -07:00
5f10b1b2ca Clarify database limitations. 2024-04-28 16:55:24 -07:00
4f83b1e6b3 [Documentation] Add compression level explanation and example.
Reviewed-on: borgmatic-collective/borgmatic#859
2024-04-28 16:50:09 +00:00
15d5a687fb
make parenthetical its own sentence 2024-04-28 18:41:05 +02:00
eb1fce3787
documentation: add compression level explanation and example 2024-04-28 18:24:23 +02:00
7f735cbe59 Fix a traceback with "check --only spot" when the "spot" check is unconfigured (#857). 2024-04-24 16:12:58 -07:00
a690ea4016 Add Healtchecks auto-provisioning to NEWS (#815). 2024-04-23 09:25:29 -07:00
7a110c7acd Add Healthchecks auto-provisionning (#815).
Reviewed-on: borgmatic-collective/borgmatic#852
Reviewed-by: Dan Helfman <witten@torsion.org>
2024-04-23 16:23:26 +00:00
407bb33359 Fix schema.yaml to comply with maximum line length 2024-04-22 20:47:03 +02:00
4b7f7bba04 Issue warning if using UUID URL scheme with create_slug 2024-04-22 20:45:36 +02:00
cfdc0a1f2a Fix Healthchecks UUID regex 2024-04-22 20:44:31 +02:00
f926055e67 Fix a traceback when the "data" consistency check is used (#854). 2024-04-21 14:55:02 -07:00
058af95d70 Document limitation about using database hooks and "one_file_system" (#853). 2024-04-20 14:53:41 -07:00
54facdc391 Clarify Apprise states configuration. 2024-04-20 08:26:06 -07:00
2e4c0cc7e7 Support for healthchecks auto provisionning 2024-04-19 10:43:45 +02:00
cb2fd7c5e8 Fix lack of file extraction when using "extract --strip-components all" on a path with a leading slash (#851). 2024-04-17 16:50:09 -07:00
94133cc8b1 Add note about running spot check on a separate schedule (#656). 2024-04-16 10:57:34 -07:00
dcec89be90 Wording tweak (#656). 2024-04-16 10:52:56 -07:00
fefd5d1d0e Wording tweak (#656). 2024-04-16 10:50:37 -07:00
163c37d77f Bump version for release. 2024-04-16 10:43:35 -07:00
b0e49ebce0 When "--match-archives *" is used with "check" action, don't skip Borg's orphaned objects check (#779). 2024-04-16 10:38:14 -07:00
7e51c41ebf Mask the password when logging a MongoDB dump or restore command (#848). 2024-04-16 10:20:15 -07:00
f9182514d8 Add spot consistency check (#656).
Reviewed-on: borgmatic-collective/borgmatic#849
2024-04-15 21:25:50 +00:00
7700b87b60 Test requirements security upgrade. 2024-04-15 14:21:01 -07:00
75bdbe6087 Spot check documentation and edge case tweaks (#656). 2024-04-15 14:18:42 -07:00
d243a8c836 Add spot check documentation (#656). 2024-04-15 12:51:07 -07:00
4c2eb2bfe3 Spot check basically complete other than docs (#656). 2024-04-15 11:02:05 -07:00
89ce060dbd Merge branch 'main' into spot-check 2024-04-05 12:25:50 -07:00
ad7dcb4615 Fix "--json" error when Borg includes non-JSON warnings in JSON output (#847). 2024-04-05 12:23:50 -07:00
6680aece5a Split out (most of) command construction from create_archive() in preparation for reuse in spot check (#656). 2024-04-04 14:23:56 -07:00
57eb93760f Merge branch 'main' into spot-check 2024-03-22 11:27:24 -07:00
f21a2c06e3 Add documentation link to Loki dashboard for borgmatic (#843). 2024-03-22 11:25:33 -07:00
2212539cb0 Merge branch 'main' into spot-check. 2024-03-20 12:01:52 -07:00
36d10fecb1 Upgrade black in test requirements. 2024-03-20 12:01:24 -07:00
3ecd0e731e Initial work on spot check schema and preparatory refactoring (#656). 2024-03-20 11:58:59 -07:00
ecf5a7e294 When a command hook exits with a soft failure, ping the log and finish states for any configured monitoring hooks (#842). 2024-03-18 23:15:28 -07:00
893fbcf9ff Add documentation about backing up containerized databases by configuring borgmatic to exec into a container to run a dump command. 2024-03-14 18:00:52 -07:00
f8f6560502 Fix handling of the NO_COLOR environment variable to ignore an empty value (#835). 2024-03-13 09:35:19 -07:00
8c301ba688 Bump version for release. 2024-03-11 13:27:08 -07:00
035e96156a Add an "access_token" option to the ntfy monitoring hook for authenticating without username/password (#811). 2024-03-11 12:48:58 -07:00
a08c7fc77a When running the "rcreate" action and the repository already exists but with a different encryption mode than requested, error (#840). 2024-03-11 11:24:36 -07:00
cf9e387811 Document a potentially breaking shell quoting edge case within error hooks (#839). 2024-03-11 10:42:51 -07:00
e37224606a Clarify dev-CI parity. 2024-03-10 19:14:18 -07:00
9647301b99 Add log sending for the Apprise logging hook, enabled by default. 2024-03-10 16:18:49 -07:00
a0e5dbff96 Remove list of command in Bash script. 2024-03-06 21:24:44 -08:00
86117edccf Remove build.torsion.org references from documentation. 2024-03-06 20:01:32 -08:00
440f3eeb63 Remove Drone configuration/tests. 2024-03-06 19:04:29 -08:00
181051eae1 Add new build server to NEWS. 2024-03-06 18:52:27 -08:00
ec0ee971ed Attempt to use secrets. 2024-03-06 18:38:45 -08:00
b83ffa0cf6 Attempt to fix trigger. 2024-03-06 16:53:41 -08:00
cf88665d37 Fix typo. 2024-03-06 16:52:33 -08:00
b233adba63 Fix build? 2024-03-06 16:51:49 -08:00
018f5e3315 Merge workflows, since Gitea doesn't yet support workflow_run. 2024-03-06 16:49:50 -08:00
284f26b49d Only run tests on pushes to main branch. 2024-03-06 16:40:39 -08:00
11b437794e Attempt to build documentation. 2024-03-06 16:38:34 -08:00
0665b50d57 Fixed debugging. 2024-03-06 16:17:12 -08:00
0586b80e5b More debugging. 2024-03-06 15:53:30 -08:00
272a7b4866 Actually kill other containers after tests finish. 2024-03-06 15:41:03 -08:00
98d4a59459 Another iteration. 2024-03-06 15:29:56 -08:00
744139cf97 Disable progress. 2024-03-06 15:21:45 -08:00
1339509e9b Flag order apparently matters to Docker Compose. 2024-03-06 14:55:55 -08:00
e14f61415b Fix spew in test script. 2024-03-06 14:54:53 -08:00
98cf8f7e20 Another try at exiting tests properly. 2024-03-06 14:42:06 -08:00
5f16b64639 Attempt to exit test containers on tests exit while also showing test output. 2024-03-06 14:39:23 -08:00
fe62a81151 Add missing service name to test scrits. 2024-03-06 14:32:26 -08:00
585b1573ae Attempt to make containers stop after tests run. 2024-03-06 14:30:49 -08:00
141ba2771d Attempt to fix and debug read-only filesystem issue at build. 2024-03-06 11:10:20 -08:00
a527f76d08 Add back checkout now that NodeJS is installed on the host. 2024-03-06 08:49:53 -08:00
a97c68b4c8 Debugging ls. 2024-03-06 08:35:50 -08:00
ef07005a75 Remove duplicative(?) checkout step. 2024-03-06 08:35:05 -08:00
43c7c3b6be First attempt at using Gitea Actions to run tests. 2024-03-06 08:32:55 -08:00
2f6ad9d173 Add NO_COLOR support to NEWS (#835). 2024-03-04 13:49:54 -08:00
16bc0de3fb
Support for NO_COLOR environment variable (#835).
Merge pull request #82 from shivansh02/feature/support-no-color-env-var
2024-03-04 13:46:09 -08:00
458d157e62 NO_COLOR set to any value returns false 2024-03-05 00:15:52 +05:30
40c3a28620 support for NO_COLOR env var 2024-03-04 18:21:28 +05:30
60107f1ee8 Add custom dump/restore command options for MySQL and MariaDB (#311). 2024-03-03 14:32:49 -08:00
a1153a21fa
Custom dump command options for MySQL and MariaDB.
Merge pull request #81 from shivansh02/feature/custom-dump-restore-commands-mysql
2024-03-03 14:27:14 -08:00
b6cb7da98e custom dump commands for mariadb 2024-03-04 00:24:22 +05:30
9e3d19a406 custom commands escaped 2024-03-03 23:31:02 +05:30
2b755d8ade custom show command for mysql and schema description 2024-03-03 23:15:07 +05:30
925f99cfef custom dump command for mysql 2024-03-03 03:47:02 +05:30
c9f20eb260 Fix "--override" values containing deprecated section headers not actually overriding configuration options under deprecated section headers (#829). 2024-02-15 21:12:42 -08:00
f4744826fe When the "--json" flag is given, suppress console escape codes so as not to interfere with JSON output (#827). 2024-02-11 17:44:43 -08:00
5586aab967 Clarify documentation about restoring a database: borgmatic does not create the database upon restore. 2024-02-09 15:35:29 -08:00
6fa5dff79b Fix broken escaping logic for "pg_dump_command" (#822) + bonus shell injection fixes. 2024-01-31 10:53:32 -08:00
75d11aa9cd Pass the PostgreSQL "PGSSLMODE" environment variable through to Borg (#370). 2024-01-25 14:18:01 -08:00
ad1d104d65 Fix broken repository detection in the "rcreate" action with Borg 1.4 (#820). 2024-01-24 15:45:51 -08:00
009062128d Remove Python 3.8+ restriction, as only Python 3.8+ is supported. 2024-01-22 09:41:43 -08:00
e9813d2539 Allow the "--repository" flag to match across multiple configuration files (#818). 2024-01-21 18:25:44 -08:00
f9998b50e8 Rephrase documentation and link to docs on exit codes feature (#798). 2024-01-21 14:47:21 -08:00
5f921a7f80 Add documentation heading (#798). 2024-01-21 11:48:23 -08:00
abf2b3a8c7 Elevate specific Borg warnings to errors or squash errors to warnings (#798). 2024-01-21 11:34:40 -08:00
34f3c2bb16 Clarify "--override" command-line help (#814) 2024-01-19 11:55:00 -08:00
4d79f582df Fix a traceback when providing an invalid "--override" value for a list option (#814). 2024-01-18 10:39:40 -08:00
63198088c4 Store included configuration files within each backup archive in support of the "config bootstrap" action (#736). 2024-01-09 13:47:20 -08:00
3c22a8ec16 Prevent various shell injection attacks (#810). 2024-01-07 10:21:49 -08:00
ca49109ce7 Bump version for release. 2024-01-03 10:08:05 -08:00
6a7f71f92f Clarify prune action help concerning running compact afterwards (#808). 2024-01-03 10:03:35 -08:00
5f3dc1cfb0 Stream SQLite databases directly to Borg instead of dumping to an intermediate file (#807). 2023-12-31 11:07:59 -08:00
f2023aed22 Fix typo. 2023-12-30 15:48:55 -08:00
a03c2744e5 Update docs/how-to/provide-your-passwords.md (#805).
Reviewed-on: borgmatic-collective/borgmatic#805
Reviewed-by: Dan Helfman <witten@torsion.org>
2023-12-30 23:48:32 +00:00
axel simon
4176532317 Update docs/how-to/provide-your-passwords.md
Provide an explanation of encryption_passcommand.
Also, adjust headers for consistency.
2023-12-30 23:45:56 +00:00
9d6025e902 Validate the configured action names in the "skip_actions" option (#804). 2023-12-28 20:07:57 -08:00
cf739bc997 The "check --force" flag now runs checks even if "check" is in "skip_actions" (#802). 2023-12-28 10:22:48 -08:00
84823dfb91 Clarify constants/placeholders interaction and improve examples (#763). 2023-12-24 11:18:17 -08:00
20cf0f7089 Add an "--ssh-command" flag to the "config bootstrap" action (#767). 2023-12-24 10:33:55 -08:00
67af0f5734 Document limitation with constant interpolation at the start of a value (#741). 2023-12-22 21:39:44 -08:00
e80e0a253c Add configured repository labels to the JSON output for all actions (#800). 2023-12-20 09:17:41 -08:00
72587a3b72 Merge branch 'main' of ssh://projects.torsion.org:3022/borgmatic-collective/borgmatic 2023-12-04 11:17:59 -08:00
8b49a59aff Fix a traceback when the "repositories" option contains both strings and key/value pairs (#794). 2023-12-04 11:17:13 -08:00
e120dff9ff Add debug message that logs borg version for every config (#714).
Reviewed-on: borgmatic-collective/borgmatic#792
2023-11-25 03:59:40 +00:00
257678b66f Fixed borg -> Borg 2023-11-24 18:47:37 +01:00
422c5e32f4 Added debug message that logs borg version for every config 2023-11-23 11:46:10 +01:00
c34ad7dde7 Update documentation about configuration includes and constants (#745). 2023-11-19 21:22:10 -08:00
fdb353d358 Bump version for release. 2023-11-19 21:14:56 -08:00
3b99f7c75a Constants support includes and command-line overrides (#745, #782) 2023-11-19 21:13:35 -08:00
8b9abc6cf8 Documentation clarifications (#791). 2023-11-15 09:05:52 -08:00
da034c316a Add another mention of "skip_actions" to the docs (#701). 2023-11-08 18:22:17 -08:00
08d01d8bcd Documentation formatting. 2023-11-08 17:57:31 -08:00
eef69e23ee Document the possible units of times for a configured check frequency. 2023-11-08 17:53:59 -08:00
26bb54a9dd Remove broken link in documentation (#786). 2023-11-08 10:26:09 -08:00
715e2ac127 Add test support for Python 3.12. 2023-11-07 10:17:55 -08:00
f39cea4abf Remove additional Python 3.7-isms (#784). 2023-11-07 10:17:16 -08:00
22101bdd49 Drop support for Python 3.7, which has been end-of-lifed (#784). 2023-11-07 10:11:29 -08:00
13cf863d89 Fix tests (#783). 2023-11-07 10:09:31 -08:00
dcf25fa041 Upgrade ruamel.yaml dependency to support version 0.18.x (#783). 2023-11-07 10:00:13 -08:00
12b75f9075 Update documentation about logging changes from version 1.8.3 (#665). 2023-11-06 21:13:46 -08:00
9baf06a2f7
Fix typo.
Typo
2023-11-04 08:56:39 -07:00
tdltdc
56302e22cd
Typo 2023-11-04 15:05:19 +01:00
6cc93c4eb9 Fix environment variable interpolation within configured repository paths (#782). 2023-11-03 21:16:04 -07:00
2da43239f6 Fix docs: minor typos (#781).
Reviewed-on: borgmatic-collective/borgmatic#781
2023-11-03 00:59:29 +00:00
4beef36d3c Update docs/how-to/inspect-your-backups.md 2023-11-02 23:14:31 +00:00
eacfbd742b Typo 2023-11-02 23:13:45 +00:00
82a85986b6 Typo 2023-11-02 22:57:46 +00:00
ef448e2dd1 Add a "skip_actions" option to skip running particular actions (#701). 2023-10-31 21:54:41 -07:00
c3efe1b90e Only parse "--override" values as complex data types when they're for options of those types (#779). 2023-10-29 19:02:28 -07:00
d85c1ee216 Correct changelog addition (#779). 2023-10-29 16:25:40 -07:00
b47088067c Add a "--match-archives" flag to the "check" action (#779). 2023-10-29 16:22:39 -07:00
c5732aa4fc Fix home page CSS layout to prevent overflow at certain window widths (#777). 2023-10-27 14:12:35 -07:00
a0323d9d6c Bump version for release. 2023-10-26 22:20:26 -07:00
8ad7b473f1 When an archive filter causes no matching archives for the "rlist" or "info" actions, warn (#748). 2023-10-26 22:12:13 -07:00
895a0ccb3c Upgrade to tox 4. (Now a minimum requirement.) 2023-10-23 17:39:27 -07:00
257ab77bea Disallow the "--dry-run" flag with the "borg" action (#774). 2023-10-23 17:23:04 -07:00
dccaa4014b
Update systemd service example with better filesystem protection options.
Merge pull request #78 from Alphix/update-systemd-service
2023-10-15 08:59:39 -07:00
David Härdeman
2f3c0bec5b Update systemd .service example
First, ProtectSystem=strict will make the entire file system hierarchy (except
/dev, /proc/ and /sys) read-only, so separate ReadOnlyPaths= is not necessary.

Second, ProtectHome=tmpfs will not just mount an empty tmpfs on /root, but also
on /home and /run/user. As it's likely quite common to want to backup /home,
this seems like a footgun.

Finally, it's quite likely that borgbackup will want access to root's SSH keys
in order to connect to remote backup servers.

Note that all these options are commented out by default, so this is more of
a documentation change than any real change in functionality.
2023-10-15 11:30:11 +02:00
487d8ffd32 Fix normalization of deprecated sections to support empty sections without erroring (#771). 2023-10-14 13:04:18 -07:00
30523a7c89 Update home page example of Healthchecks configuration not to use deprecated config. 2023-10-11 12:56:21 -07:00
77b1907d03 Update Healthchecks deprecation warning message for clarity. 2023-10-11 12:17:57 -07:00
09594c85bf Be more explicit in documentation that you don't have to use an environment variable for passphrases. 2023-10-10 09:34:55 -07:00
e07efdf68f Add documentation note about using includes for specifying passphrases (#769). 2023-10-10 09:16:58 -07:00
1fed44f905 Add documentation note about sudo and sudoers "secure_path" option (#757). 2023-10-09 14:15:54 -07:00
c687dafdd2 Fix a traceback when an invalid command-line flag or action is used (#768). 2023-10-06 21:00:23 -07:00
3eff2c4248 Add Grafana Loki badge to integrations documentation. 2023-10-05 09:06:06 -07:00
d94fdb6faf Add apprise logo to integrations in readme (#715).
Reviewed-on: borgmatic-collective/borgmatic#765
2023-10-05 15:51:04 +00:00
a83282faf0 add apprise logo to integrations in readme 2023-10-05 15:38:32 +02:00
e7169f6fb2 Upgrade certifi test dependency to fix security alert. 2023-10-04 22:59:15 -07:00
9587fc2366 Update Apprise documentation to use sudo for pipx install (#715). 2023-10-04 22:54:11 -07:00
5f06884d5a Fix Apprise/PyYAML end-to-end test breakage (#715). 2023-10-04 22:51:05 -07:00
f011431463 Apprise hook documentation (#715). 2023-10-04 19:23:53 -07:00
9e14f209f1 Merge branch 'main' of ssh://projects.torsion.org:3022/borgmatic-collective/borgmatic 2023-10-04 14:58:48 -07:00
9d34d2eec5 Support for Apprise (#759).
Reviewed-on: borgmatic-collective/borgmatic#759
2023-10-04 21:58:20 +00:00
7a9625cd44 fix PR comments 2023-10-04 13:19:40 +02:00
4763c323d0 add unit tests for apprise hook 2023-10-01 16:59:59 +00:00
eaa22be3db fix PR comments 2023-10-01 16:59:59 +00:00
a587e207f9 pin Apprise dependencies for test requirements 2023-10-01 16:59:59 +00:00
db8079b699 fix typo in setup.py
handle if apprise cannot be imported
2023-10-01 16:59:59 +00:00
5a989826a1 convert map to list for apprise function call
fix apprise config schema
remove apprise from required dependencies
2023-10-01 16:59:59 +00:00
21f4266273 incorporate PR review comments 2023-10-01 16:59:59 +00:00
e7252c7545 remove comments about tags 2023-10-01 16:59:59 +00:00
86011c8418 default apprise notify type per borgmatic state 2023-10-01 16:59:59 +00:00
f3295ccb4a add support for apprise 2023-10-01 16:59:59 +00:00
cacb81f086 Bump version for release. 2023-09-30 13:37:10 -07:00
06c2154e6a Build docs regardless of Drone "event" (push, etc.). 2023-09-29 19:49:09 -07:00
ac1e1a9407 Simplify logging logic (#665). 2023-09-29 14:16:47 -07:00
10933fd55b Fix for borgmatic not stopping Borg immediately when the user presses ctrl-C (#761). 2023-09-27 08:52:00 -07:00
af422ad705 Add documentation note about upgrading multiple pipx installations of borgmatic. 2023-09-18 13:46:41 -07:00
d9d35491fb Fix tense typo. 2023-09-17 23:25:57 -07:00
b540e63c0e Updated documentation so "sudo borgmatic" works for pipx borgmatic installations (#757). 2023-09-17 22:46:33 -07:00
5a56208922 Fix documentation typo. 2023-09-15 10:18:35 -07:00
5912769273 Fix error handling to log command output as one record per line (#754). 2023-09-14 21:10:52 -07:00
bac2aabe66 Attempt to unbreak ticket filing. 2023-09-12 09:50:38 -07:00
9f3328781b When "archive_name_format" is not set, filter archives using the default archive name format (#753). 2023-09-06 23:13:40 -07:00
0205748db8 Update documentation to recommend installing/upgrading borgmatic with pipx instead of pip. 2023-09-04 16:25:10 -07:00
d0a8251ad2 Add borgmatic version introducing Loki hook to docs (#743). 2023-08-27 20:30:13 -07:00
32019ea8f3 Add documentation for Grafana Loki hook (#743). 2023-08-25 10:52:00 -07:00
fa9a061033 Merge branch 'main' of ssh://projects.torsion.org:3022/borgmatic-collective/borgmatic 2023-08-25 09:29:02 -07:00
b3d2560563 Added support for grafana loki (#743).
Reviewed-on: borgmatic-collective/borgmatic#747
2023-08-25 16:28:19 +00:00
4b4f56da42 Fix another database -> data source instance (#685). 2023-08-24 14:00:29 -07:00
b96d1898f7 Prep work for eventual container-dumping hooks: Generalize internal database hook "API" (#685). 2023-08-24 13:50:10 -07:00
099a712e53 Added more documentation to the test
Split tests to integration tests
2023-08-24 13:17:42 +02:00
9e2674ea5a Added unit tests
Removed useless dry run check
2023-08-23 17:17:23 +02:00
7e419ec995 Fixed spelling errors
Added documentation
Added log messages for dry run
2023-08-22 23:03:14 +02:00
a3edf757ee Added changes of formatting tools 2023-08-22 13:40:05 +02:00
e576403b64 Added support for grafana loki 2023-08-22 03:13:39 +02:00
7313430178 Make warning about sections a little more explicit (#721). 2023-08-19 22:51:20 -07:00
962daaa8b9 Bump version for release. 2023-08-14 12:54:38 -07:00
cd51e9c1ea Fix for database "restore" action not actually restore anything (#738). 2023-08-14 12:43:21 -07:00
6dca7c1c15 Add "key export" action to export a copy of the repository key (#345). 2023-08-07 12:28:39 -07:00
fd8c56c6be Add brief source code reference documentation. 2023-08-06 23:44:31 -07:00
065057c966
Fix typos.
Merge pull request #77 from hop/main
2023-08-05 17:19:57 -07:00
c04517f843 Fix typos. 2023-08-06 02:16:31 +02:00
5d80c366fb Fix "borg create" flags/argument interleaving. 2023-08-04 20:02:09 -07:00
193dd93de2 Fork a MariaDB database hook from the MySQL database hook (#727). 2023-08-04 13:22:44 -07:00
8a94b9e2f1 Mention "store_config_files" in docs (#725). 2023-08-03 22:11:02 -07:00
3c8f6040e2 Bump version for release. 2023-08-03 21:56:26 -07:00
14e2a6b89d Omit "--glob-archives" or "--match-archives" Borg flag when its value would be "*" (#734). 2023-08-02 10:23:22 -07:00
e607de7df1 Include multiple configuration files with a single "!include" (#732).
Reviewed-on: borgmatic-collective/borgmatic#737
2023-08-02 04:46:33 +00:00
e9bd5f4e1d Add documentation and NEWS link (#732). 2023-08-01 21:12:49 -07:00
175003ff9b Additional test coverage (#732). 2023-08-01 19:45:01 -07:00
b8d349d048 Additional test coverage (#732). 2023-08-01 16:27:53 -07:00
f6f06551f0 Multiple configuration includes with a single "!include" (#732). 2023-08-01 14:12:35 -07:00
69771fe7ce Add "store_config_files" option to NEWS (#725). 2023-07-31 14:04:00 -07:00
c5c3e2e0ce Code formatting (#725). 2023-07-31 14:01:20 -07:00
8491b2c416
Feat: optionally disable config bootstrap (#725).
Merge pull request #75 from diivi/feat/disable-config-bootstrap
2023-07-31 14:00:00 -07:00
962267b3c5 add test for checking manifest creation 2023-08-01 02:26:36 +05:30
562f4a281b add test 2023-08-01 02:01:15 +05:30
6b09ca8022 exclude configs too and not just the manifest 2023-08-01 01:51:37 +05:30
f2ce2f387f feat: optionally disable config bootstrap 2023-08-01 01:32:06 +05:30
782a9bb70a Add new documentation to NEWS (#326, #697). 2023-07-31 12:19:19 -07:00
88adb5b3de
Add docs for database restore params and config bootstrap (#326, #697).
Merge pull request #74 from diivi/docs/database-restore-params-and-config-bootstrap
2023-07-31 11:56:32 -07:00
59465b256d
Apply suggestions from code review 2023-07-31 23:50:46 +05:30
adfb89ee65 improve docs - wittens suggestions 2023-07-29 00:16:04 +05:30
c11dcdef0a Fix some "borgmatic" capitalization issues. 2023-07-26 23:38:08 -07:00
8a2514915c Fix for Borg's interactive prompt on the "check --repair" action automatically getting answered "NO" (#730). 2023-07-22 15:25:55 -07:00
4d7a2876a5 Fix for "prune" action error when using the "keep_exclude_tags" option in configuration (#728). 2023-07-22 10:26:52 -07:00
309f67e860 Fix documentation comma grammar issues. 2023-07-18 23:27:45 -07:00
0ad7b4f408 Bump version for release. 2023-07-18 22:50:09 -07:00
1f415a24b8 add docs for database restore params and config bootstrap 2023-07-15 12:27:54 +05:30
5c941600a6 Clarify database version description. 2023-07-14 22:25:45 -07:00
5e0283b391 Remove broken markdown item. 2023-07-14 22:24:21 -07:00
ac0b23901b Satisfy Gitea validation. 2023-07-14 22:23:41 -07:00
cde50a75e9 Attempt to add some vertical whitespace for clarity. 2023-07-14 22:23:06 -07:00
521c0eb600 Fix text areas in issue templates. 2023-07-14 22:17:39 -07:00
bc5dc2253c Convert issue templates from Markdown to YAML to take advantage of forms. 2023-07-14 22:16:04 -07:00
973ab01afb Disable submitting issues without a template. 2023-07-14 20:10:20 -07:00
9413a19eca Try out multiple Gitea templates. 2023-07-14 20:06:22 -07:00
0055de08a4 Merge branch 'main' of ssh://projects.torsion.org:3022/borgmatic-collective/borgmatic 2023-07-13 20:21:42 -07:00
04fb351a11 Order documentation navigation sections. 2023-07-13 20:20:48 -07:00
e913cddcd1 Remove configuration sections (#723).
Reviewed-on: borgmatic-collective/borgmatic#723
2023-07-14 03:10:51 +00:00
da78929415 To prevent argument parsing errors on ambiguous commands, drop support for multiple consecutive flag values. 2023-07-13 19:25:14 -07:00
18b3b569d0 Fix broken bootstrap action (#721). 2023-07-12 09:39:45 -07:00
054bd52482 Fix incorrect merge from main that broke tests (#721). 2023-07-11 22:16:42 -07:00
2453ecad42 More documentation updates based on section removal (#721). 2023-07-11 22:10:57 -07:00
cedf562a7e Merge branch 'main' into remove-sections 2023-07-11 20:05:16 -07:00
5b991b88dd Rewrite documentation navigation URLs when being run locally. 2023-07-11 19:58:49 -07:00
d2fa205476 Update documentation for section removal (#721). 2023-07-11 19:42:14 -07:00
ecd9e62147 Fix last end-to-end database test (#721). 2023-07-11 00:37:36 -07:00
003d4eac93 Remove extra argument (#721). 2023-07-10 11:41:43 -07:00
e8dbca9d68 Truncate long command output without assuming an encoded byte string. 2023-07-10 11:16:18 -07:00
bd9d592560 Truncate long command error output. 2023-07-10 10:20:51 -07:00
196a226a7e Add "check_i_know_what_i_am_doing" option to NEWS (#724). 2023-07-10 09:44:00 -07:00
a3f47a6418 Remove some sections from tests (#721). 2023-07-10 09:38:28 -07:00
d29667ca3c Add a config entry for BORG_CHECK_I_KNOW_WHAT_I_AM_DOING env var (#724).
Reviewed-on: borgmatic-collective/borgmatic#724
2023-07-10 16:38:09 +00:00
7d18f59079 Add a config entry for BORG_CHECK_I_KNOW_WHAT_I_AM_DOING env var 2023-07-10 10:36:56 +02:00
ab351548d2 Fix (some) end-to-end tests (#721). 2023-07-09 17:40:02 -07:00
48b6a1679a Remove sections (#721). 2023-07-08 23:14:30 -07:00
9cafc16052 For "borgmatic borg", pass the repository to Borg via a Borg-supported environment variable (#575). 2023-07-03 00:08:54 -07:00
fbbfc684ce Add referral link for Hetzner. 2023-07-02 22:14:36 -07:00
13a37a1d9b Reddit is dead. 2023-06-30 22:55:47 -07:00
9cf27fa4ba Deprecated configuration options warning logging. 2023-06-29 10:03:36 -07:00
e2c95327fb Fix an error when dumping a MySQL database and the "exclude_nodump" option is set (#720). 2023-06-28 09:15:11 -07:00
f60e97d5bf When merging two configuration files, error gracefully if the two files do not adhere to the same format. 2023-06-26 16:46:09 -07:00
44f9ab95f9 Fix typos (#575). 2023-06-26 14:37:23 -07:00
bb6004fc4f Revamp "borg" action to support REPOSITORY and ARCHIVE env vars instead of implicitly injecting repository/archive into the Borg command (#575). 2023-06-26 14:35:07 -07:00
b242078f54 Fix an error when running "borg key export" through borgmatic (#719). 2023-06-26 09:30:46 -07:00
c3004c6090 Some brief documentation on running only checks (#364). 2023-06-25 22:49:36 -07:00
b9a11e860d Remove legacy configuration parsing code, no longer needed with upgrade-borgmatic-config gone (#529). 2023-06-25 15:36:25 -07:00
37a0a0c421 Bump version for release. 2023-06-24 22:23:01 -07:00
325b561296 Switch from "init" to "rcreate" for creating repos in end-to-end tests. 2023-06-24 15:52:20 -07:00
b62017be4b Fix edge case in which "--config somepath.yaml" followed by an action alias (e.g. init for rcreate) wasn't parsed correctly (#716). 2023-06-24 15:35:10 -07:00
8debcbeaba Remove duplicated tests (#716). 2023-06-24 14:28:50 -07:00
35a11559ac Fix error parsing arguments with multiple verbosity flags (#716). 2023-06-24 14:10:47 -07:00
e4e455ee45 Deprecate validate-borgmatic-config in favor of new "config validate" action (#529). 2023-06-23 10:11:41 -07:00
23809e9060 More Docker build fun (#326). 2023-06-22 15:11:49 -07:00
bb0dd14f69 Attempt to fix CI test failures (#326). 2023-06-22 14:55:32 -07:00
308c96aeb5 Add comment describing need for dev-CI parity test. 2023-06-22 14:37:08 -07:00
62a2f5a1d0 Code formatting. 2023-06-22 14:25:26 -07:00
e8c862659c Add missing services to build service configuration and add a test to catch this in the future (#326). 2023-06-22 14:20:42 -07:00
69611681e2 Add database restore overrides to NEWS, add a test, and move some tests (#326). 2023-06-22 12:40:57 -07:00
9e0df595c8 Merge branch 'main' of github.com:borgmatic-collective/borgmatic 2023-06-22 12:29:32 -07:00
68d90e1e40
feat: allow restoring to different port/host/username (#326).
Merge pull request #73 from diivi/feat/restore-with-different-hostname-port-username
2023-06-22 12:28:34 -07:00
248500c7be Accidentally a word. 2023-06-22 09:21:06 -07:00
3addb60fb8 Actually link to the most recent version. 2023-06-22 09:13:45 -07:00
01fffab898 Clarify that references docs are only for the most recent version of borgmatic. 2023-06-22 09:12:06 -07:00
bc93401a70 Codespell fixes. 2023-06-21 13:14:54 -07:00
1b90da5bf1 Deprecate generate-borgmatic-config in favor if new "config generate" action (#529). 2023-06-21 12:19:49 -07:00
803fc25848 Add a test for another edge case (#712). 2023-06-21 10:47:53 -07:00
248f82d6f6 Fix for another subaction argument-parsing edge case (#712). 2023-06-21 10:41:32 -07:00
87c6e5b349 make sure restore params in config aren't used when cli args are supplied 2023-06-21 00:03:07 +05:30
147516ae3f Remove additional upgrade-borgmatic-config code (#529). 2023-06-20 09:41:26 -07:00
b10aee3070 Remove upgrade-borgmatic-config command for upgrading borgmatic 1.1.0 INI-style configuration (#529). 2023-06-19 23:17:59 -07:00
6098005f5d Fix an error when "data" check time files are accessed without getting upgraded first (#711, #713). 2023-06-19 23:07:57 -07:00
7b8be800a4 Refactor arguments parsing to fix bootstrap action CLI issues (#712). 2023-06-19 16:18:47 -07:00
1a21eb03cd add tests for all databases 2023-06-20 00:52:01 +05:30
e2d82e9bba actually test port restores 2023-06-19 01:10:01 +05:30
384182172a add unit tests for cases when cli/config restore args are used 2023-06-18 06:29:11 +05:30
9016dcc418 all e2e tests 2023-06-18 05:47:35 +05:30
e53dd3da87 fix witten reported mysql error 2023-06-17 22:58:59 +05:30
6c87608548 add tests for password logic 2023-06-17 00:47:15 +05:30
ee2ebb79b8 Find sub-actions for an action without an isinstance() check. 2023-06-16 10:57:01 -07:00
89602d1614 pass all existing tests (and formatting) 2023-06-16 15:14:00 +05:30
c294e78715 Use absolute paths when storing configuration files in an archive for later bootstrapping (#697). 2023-06-15 21:45:43 -07:00
9152fed249 Add a documentation troubleshooting note for MySQL/MariaDB authentication errors (#399). 2023-06-15 14:55:57 -07:00
8389851f2f fix bug where port becomes truthy when none is converted to str 2023-06-15 23:34:50 +05:30
bbc7f0596c Fix Bash completion for sub-actions like "borgmatic config bootstrap" (#697 follow-on work). 2023-06-15 10:55:31 -07:00
82d851d891 add argument for restore path 2023-06-15 23:05:53 +05:30
62b6f13299 add restore-path support for sqlite 2023-06-15 23:02:09 +05:30
b7423c488e refactor password assignment logic 2023-06-15 22:54:06 +05:30
1d7c7eaaa7 Add sample systemd user serivce for running borgmatic as a non-root user (#669). 2023-06-14 14:57:57 -07:00
a9386b7a87 add mongodb support, and sqlite restore path (config option only) 2023-06-15 02:18:24 +05:30
205e5b1524 mysql support 2023-06-15 01:47:46 +05:30
67f4d43aec witten review 2023-06-15 01:37:18 +05:30
e15bec30e6 Mention some hang edge cases in database limitations (#710). 2023-06-13 23:34:58 -07:00
230cf6adc4 support command line args for hostname port username password 2023-06-14 00:11:19 +05:30
8e8e64d920 add no-owner and refactor 2023-06-13 23:42:50 +05:30
f558cb3156 feat: allow restoring to different port/host/username 2023-06-12 21:54:39 +05:30
41924f2400 A little activism. 2023-06-11 09:50:57 -07:00
670bdffb3c Code formatting. 2023-06-10 19:25:49 -07:00
691d4f887a Fix incorrect log message (#697). 2023-06-10 16:02:03 -07:00
beb899d6fb Make user-facing manifest loading error messages a little friendlier (#697). 2023-06-10 15:50:11 -07:00
0f9756e739 Fix failing test and add "bootstrap" action to CLI reference docs (#697). 2023-06-10 15:17:18 -07:00
d84f1ec616 Add bootstrap action to NEWS and make post-PR tweaks (#697). 2023-06-10 14:52:00 -07:00
ef409ad23c
Store configs used to create an archive in the archive and add borgmatic bootstrap (#697).
Merge pull request #71 from diivi/feat/store-config-in-archive
2023-06-10 14:39:53 -07:00
d370ff958d mock expand directories thrice 2023-06-10 01:05:34 +05:30
197920d9ef improve tests and some docstrings. 2023-06-09 17:31:57 +05:30
425f260a22 test parser merging 2023-06-09 04:15:18 +05:30
3315555d06 cleaner test 2023-06-09 00:21:41 +05:30
6475345a8f attempt to test parse_subparser_arguments 2023-06-08 01:02:43 +05:30
f90d30e0e1 remove duplicate comments 2023-06-08 00:08:39 +05:30
8384eaefb1 reformat 2023-06-08 00:07:36 +05:30
dcb90bba50 some tests remaining 2023-06-07 23:56:02 +05:30
dc56fd33a0 formatting 2023-06-07 01:47:16 +05:30
2d761dd86b coverage at 100 2023-06-07 01:43:01 +05:30
f82631e3bb tests for arguments.py 2023-06-07 00:56:19 +05:30
4b024daae0 pass all tests with wittens recommendation 2023-06-06 23:37:09 +05:30
6a1d1a2e59 fix indentation error that caused too many test failures 2023-06-05 20:31:09 +05:30
206a9c9607 edit schema comments and work on witten review 2023-06-05 20:05:10 +05:30
a6425b8867 Fix moved Arch Linux borgmatic URL. 2023-06-04 22:21:16 -07:00
b5d9398910 Stop uploading GPG signatures to pypi since it no longer supports them. 2023-06-03 22:37:46 -07:00
a185eb73b0 Fix GitHub release script now that "master" has been renamed to "main". 2023-06-03 22:26:49 -07:00
e80f27f922 Bump version for release. 2023-06-03 22:14:21 -07:00
1a5b3c9e4e Add Fedora schema loading fix to NEWS (#703). 2023-06-03 22:07:24 -07:00
b3f70434df Fix error loading configuration schema on Fedora Linux (#703).
Reviewed-on: borgmatic-collective/borgmatic#702
2023-06-04 05:04:41 +00:00
c61d63b235 Use open() to test for file existance and readability
Signed-off-by: Felix Kaechele <felix@kaechele.ca>
2023-06-04 00:54:29 -04:00
ba0899660d Verify that schema path exists before returning it
Signed-off-by: Felix Kaechele <felix@kaechele.ca>
2023-06-03 23:42:20 -04:00
15cabb93ca Drop importlib_metadata entirely
The fallback option using the dirname of the config module location
seems to be more robust in a number of cases.

Signed-off-by: Felix Kaechele <felix@kaechele.ca>
2023-06-03 23:42:20 -04:00
ce6daff12f Fix importlib.metadata.files workaround
Some distributions, such as Fedora, do not install the RECORDS file as
part of a package's dist-info. As a result importlib.metadata.files will
return None.

Use the workaround for these cases as well.

Signed-off-by: Felix Kaechele <felix@kaechele.ca>
2023-06-03 23:42:20 -04:00
caf654366c Document work-around for colons in YAML strings (#708). 2023-06-03 10:19:34 -07:00
bb60b25399 merge subparsers and refactor 2023-06-02 02:04:35 +05:30
74aa28e027 support more flags 2023-06-01 16:53:34 +05:30
4f49b345af NEWS wording fix for clarity (#706). 2023-05-30 23:21:55 -07:00
1784ca5910 Fix "check" action error when repository and archive checks are configured but the archive check gets skipped due to the configured frequency (#704). 2023-05-30 23:19:33 -07:00
8f4cce5fa5 Make dev docs message stand out a little more. 2023-05-30 22:30:06 -07:00
518aeabb2a Document verbosity levels (#484). 2023-05-30 22:25:27 -07:00
341bd4118d Fix "--archive latest" on "list" and "info" actions only working on the first of multiple configured repositories (#706). 2023-05-30 16:53:55 -07:00
b222f6a60b Mention new verbosity level to NEWS (#484). 2023-05-30 15:52:49 -07:00
c0aaba6891 Add option to disable syslog output (#484).
Reviewed-on: borgmatic-collective/borgmatic#675
2023-05-30 20:03:56 +00:00
a7f81d538d nit changes
- help strings in borgmatic commands
- test fixes in test_logger and test_borgmatic

Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-29 01:09:00 +05:30
4c60bf84d7 extract config files 2023-05-28 01:36:32 +05:30
dbb778a4d6 finish parsing and add error for empty config subcommand 2023-05-26 22:44:31 +05:30
f4a169fdf3
Merge pull request #2 from witten/feat/store-config-in-archive 2023-05-26 21:29:18 +05:30
3d41ed3a34 add test to check that log_file is disabled
if logging is disabled

Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 09:58:53 +05:30
0283f9ae2a fix help string
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
d556a23f97 update borgmatic tests
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
f98d07e8d8 fix logger test
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
09f59ad97d disable monitoring hooks if monitoring_log_level is set to DISABLED
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
24be6272ed add test for logger
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
5a9bb4b97f update help strings
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
6a2eb1f157 make value of disabled level higher
so that no other log has higher priority

Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
99473c30a8 disable sending logs in Healthchecks
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
f512d1e460 add verbosity level -2
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-05-26 08:57:12 +05:30
96adee444b Potential fix for nested subparsers not parsing correctly. 2023-05-25 15:03:15 -07:00
8b7996dfda removed parents and used reversed remaining_args 2023-05-26 01:07:11 +05:30
2241de11c0 start work on borgmatic config bootstrap command 2023-05-26 00:26:13 +05:30
84c21b062f Fix incorrect argument ordering (#659). 2023-05-23 16:55:40 -07:00
76138faaf3 Add integration test for mount action (#659). 2023-05-23 14:49:04 -07:00
9299841a5b Add date-based matching flags to NEWS (#659). 2023-05-23 14:30:16 -07:00
35b5c62ca6 Add Borg 2 date-based matching flags for archive selection (#659).
Reviewed-on: borgmatic-collective/borgmatic#661
2023-05-23 21:26:17 +00:00
05b989347c Upgrade requests test requirement (security). 2023-05-23 08:43:45 -07:00
00e9bb011a test should mock out make_flags_from_arguments
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-05-20 09:23:09 -04:00
833796d1c4 Add archive check probing logic tweak to NEWS (#688). 2023-05-17 08:48:54 -07:00
ee32b076eb update tests and formatting 2023-05-16 23:17:35 +05:30
e3425f48be Instead of taking the first check time found, take the maximum value (#688) 2023-05-16 10:20:52 -07:00
79b094d035 Bump version for release. 2023-05-16 09:59:09 -07:00
b45e45f161 Partial conversion of showing repository labels in logs instead of paths (part of #635). 2023-05-16 09:36:50 -07:00
b10148844b change config_paths var name to used_config_paths to avoid collisions 2023-05-16 14:00:23 +05:30
ba845d4008 Codespell saves the day. 2023-05-15 23:25:13 -07:00
645d29b040 Fix archive checks being skipped even when particular archives haven't been checked recently (#688). 2023-05-15 23:17:45 -07:00
49b4d371ce create and add content to borgmatic-manifest.json 2023-05-16 00:24:19 +05:30
1bc7bb4971 feat: store configs used to create an archive in the archive 2023-05-15 23:04:42 +05:30
e66e449c3b Merge branch 'main' of ssh://projects.torsion.org:3022/borgmatic-collective/borgmatic 2023-05-14 12:51:23 -07:00
8eb05b840a Log a warning when "borgmatic borg" is run with an action that borgmatic natively supports (#694). 2023-05-14 09:59:28 -07:00
f0fc638284 Docs: add Gentoo Linux to other ways to install (#696).
Reviewed-on: borgmatic-collective/borgmatic#696
2023-05-13 16:33:11 +00:00
c6126a9226 Docs: add Gentoo Linux to other ways to install 2023-05-13 11:22:47 +00:00
62b11ba16b Docs: add Gentoo Linux to other ways to install 2023-05-13 11:20:47 +00:00
403ae0f698 Clarify configuration comment about source_directories also accepting files (#693). 2023-05-09 10:14:03 -07:00
92a2230a07 Add support for logging each log line as a JSON object via global "--log-json" flag (#680). 2023-05-08 23:00:49 -07:00
b3b08ee6d7 Fix error in "borgmatic restore" action when the configured repository path is relative (#691). 2023-05-07 21:21:35 -07:00
15ef37d89f Add test coverage for exact_options_completion() raising (#686). 2023-05-06 16:25:26 -07:00
e84bac29e5 Remove value type for compatibility with Python 3.8 (#686). 2023-05-06 16:18:37 -07:00
1a956e8b05 Add fish shell completions to NEWS (#686). 2023-05-06 16:04:15 -07:00
4aae7968b8
Add fish shell completions support (#686).
Merge pull request #70 from isaec/feat/fish-completions
2023-05-06 16:00:25 -07:00
66964f613c
formatting! 2023-05-06 15:56:50 -07:00
614c1bf2e4
rename test to make function under test clearer 2023-05-06 15:52:42 -07:00
aa770b98f9
follow unit test module convention 2023-05-06 15:50:37 -07:00
453b78c852
drop messages 2023-05-06 15:49:07 -07:00
0657106893
clarify dedent test name 2023-05-06 15:46:15 -07:00
43c532bc57
add test for dedent strip 2023-05-06 11:51:35 -07:00
efb81fc2c1
rename last arg helper function to current arg for clarity 2023-05-06 11:42:32 -07:00
c8f4344f89
add more justification to checks 2023-05-06 11:39:02 -07:00
a047f856a1
tweak docstring, add comment 2023-05-06 11:37:38 -07:00
d732059979
fix rotted comments 2023-05-06 11:32:10 -07:00
ccfdd6806f
test the value of completions 2023-05-06 11:29:14 -07:00
aa564ac5fe
fix the error thrown, unit test for it, and add string explanations 2023-05-06 11:25:15 -07:00
77dbb5c499
create way for test cases to be shared 2023-05-06 11:16:45 -07:00
e623f401b9
write more unit tests 2023-05-06 10:56:54 -07:00
372622fbb1
add more doccomments, drop a check 2023-05-06 10:46:27 -07:00
469e0ccace
create doccomments, start writing unit tests 2023-05-06 10:42:06 -07:00
59a6ce1462
replace double quotes with single quotes 2023-05-05 00:03:43 -07:00
5a7a1747f2
add safety check to avoid infinite cat hang 2023-05-05 00:01:45 -07:00
b557d635fd
async validity check 2023-05-04 23:57:37 -07:00
d59b9b817f
support required actions 2023-05-04 23:44:54 -07:00
16ac4824a5
handle typed without default params 2023-05-04 23:42:04 -07:00
3592ec3ddf
dont show deprecated options 2023-05-04 23:32:09 -07:00
8f3039be23
handle the expanding filters better 2023-05-04 23:23:29 -07:00
b4a38d8be9
fix flag showing up for paths 2023-05-04 23:06:11 -07:00
d962376a9d
refactor to only show specific options if possible 2023-05-04 21:58:30 -07:00
193731a017
rename function 2023-05-04 21:14:48 -07:00
bbc3e9d717
show possible choices 2023-05-04 21:12:24 -07:00
639e88262e
create working file completion 2023-05-04 20:17:26 -07:00
f12a10d888
start work on conditional file completion 2023-05-04 19:50:49 -07:00
28efc85660
rearrange to improve legability of the file 2023-05-04 18:11:13 -07:00
f1fd2e88dd
drop blank completion 2023-05-04 13:49:29 -07:00
700f8e9d9c
replace .format with fstring 2023-05-04 13:39:48 -07:00
f04036e4a7
use fstring to produce completion lines 2023-05-04 13:33:21 -07:00
062453af51
replace actionStr with action_name 2023-05-04 13:29:25 -07:00
b7fe2a5031
lowercase fish in docs 2023-05-04 13:27:57 -07:00
ca689505e5
add e2e fish test 2023-05-04 13:27:00 -07:00
9ff5ea5240
add a unit test, fix isort and black 2023-05-04 13:22:09 -07:00
359afe5318 Error if --list is used with --json for create action (#680). 2023-05-03 17:16:36 -07:00
0b397a5bf9 Fix borgmatic error when not finding the configuration schema for certain "pip install --editable" development installs (#687). 2023-04-30 16:24:10 -07:00
a60d7fd173 Run "borgmatic borg" action without capturing output so interactive prompts and flags like "--progress" still work. 2023-04-30 15:43:41 -07:00
f7e4024fca
add to readme 2023-04-28 14:02:06 -07:00
98e3a81fcf
allow file completions as applicable 2023-04-28 12:42:26 -07:00
9c77ebb016
continue deduping 2023-04-28 12:15:01 -07:00
23f478ce74
use less completion lines 2023-04-28 12:13:08 -07:00
d265b6ed6f
add comments in generated files 2023-04-28 11:57:16 -07:00
77c3161c77 Fix canonical home link in README. 2023-04-28 08:36:03 -07:00
2e658cfa56
only allow one parser 2023-04-27 21:57:50 -07:00
412d18f218
show sub options 2023-04-27 21:31:53 -07:00
8060586d8b
fix the script and drop unneeded options 2023-04-27 20:05:17 -07:00
25b3db72a0
make more precise, fix the version check fn 2023-04-27 19:58:22 -07:00
5678f3a96e
basic working version 2023-04-27 19:44:11 -07:00
28b152aedd
make upgrade message a template 2023-04-27 19:31:42 -07:00
0009471f67
start work on completion 2023-04-27 18:46:13 -07:00
a62ac42cca Merge branch 'main' into borg2-archive-flags 2023-04-27 16:57:29 +00:00
68ee9687f5 Added tests for all subcommands and used black formatter
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-04-27 22:27:23 +05:30
32395e47f9 Added duplicate flags test for prune
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-04-24 20:49:41 +05:30
8aaba9bb0a Added new flags to prune test for review
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-04-24 20:43:34 +05:30
96aca4f446 Updated existing tests to use new parameters
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-04-24 20:24:41 +05:30
22b84a2fea Switch to Docker Compose for dev-docs script, so podman-docker is no longer needed for Podman users. 2023-04-22 10:07:40 -07:00
5962fd473e Another try. Backing out psql error changes (#678). 2023-04-21 10:34:50 -07:00
7e64f415ba Attempt to fix failing end-to-end database test that only fails in CI. 2023-04-21 10:03:29 -07:00
ae12ccd8e6 And fixing again... 2023-04-21 09:31:37 -07:00
3cefeaa229 Fix end-to-end test command-line syntax. 2023-04-21 09:30:08 -07:00
71b75800cd Get more verbose in the end-to-end test restore. 2023-04-20 23:32:57 -07:00
9ca31530a0 Add missing test for check_all_source_directories_exist() raising. 2023-04-20 23:15:22 -07:00
b555fcb956 Add "source_directories_must_exist" expansion fix to NEWS (#682). 2023-04-20 23:08:21 -07:00
5829196b70 Expand source directories when checking for existence (#682).
Reviewed-on: borgmatic-collective/borgmatic#683
2023-04-21 06:05:59 +00:00
a14870ce48 Expand source directories when checking for existence (#682). 2023-04-21 05:52:04 +00:00
ee5c25f3bd Add additional tests for PostgreSQL hook fixes (#678). 2023-04-20 21:44:42 -07:00
da0f5a34f2 Fix multiple bugs in PostgreSQL hook (#678).
Reviewed-on: borgmatic-collective/borgmatic#677
2023-04-21 04:05:22 +00:00
065be1d9d4 More inclusive language. 2023-04-20 14:28:04 -07:00
f2f6fb537a !!! 2023-04-20 14:19:34 -07:00
7ff994a964 🤦 2023-04-20 13:56:12 -07:00
08edecacae WTF?! 2023-04-20 13:55:37 -07:00
1e03046d9a *Seriously?* 2023-04-20 13:50:26 -07:00
c9bf52ee45 Sigh again. 2023-04-20 13:46:49 -07:00
f947525fca ? 2023-04-20 13:45:26 -07:00
7f7b89d79c Trying a different approach: Ditching Podman-in-Podman. 2023-04-20 12:03:51 -07:00
499e42df35 😭 2023-04-20 11:58:06 -07:00
4302a07c9b WTF. 2023-04-20 11:53:52 -07:00
1721c05d2e Yet more. 2023-04-20 11:52:23 -07:00
8a31c27078 To see what sticks. 2023-04-20 11:50:25 -07:00
d6e1cef356 Throwing stuff at the wall. 2023-04-20 11:49:43 -07:00
f82bf619ff More. 2023-04-20 11:41:35 -07:00
02eeca1fc2 Hmm. 2023-04-20 11:36:30 -07:00
4e78cf1b95 ಠ_ಠ 2023-04-20 11:33:15 -07:00
9e9a7c50e5 😊🔫 2023-04-20 11:30:30 -07:00
51bc53e5ca Whee. 2023-04-20 11:24:59 -07:00
b85538c54c Double sigh. 2023-04-20 11:11:49 -07:00
bb5028e484 Sigh. 2023-04-20 11:11:08 -07:00
53ee0fcfad Another attempt at Podman-in-Podman incantations. 2023-04-20 11:06:15 -07:00
5f8c79dd16 Attempt to get Podman-in-Podman builds working. 2023-04-20 10:50:44 -07:00
0a6f5452f4 Fix broken Podman image name. 2023-04-19 23:16:15 -07:00
269fac074b Attempt to use Podman-in-Podman for building docs instead of Docker-in-Podman. 2023-04-19 23:14:51 -07:00
3b21ce4ce8 Rename "master" development branch to "main" to use more inclusive language (#684). 2023-04-19 21:43:08 -07:00
8bb7631f50 Fix missing mock in unit test. 2023-04-19 21:22:51 -07:00
9f5769f87b Make docs/schema a little more container agnostic / less Docker specific. 2023-04-16 15:41:17 -07:00
991e08f16d Add Unraid borgmatic installation link to docs. 2023-04-15 09:13:13 -07:00
1ee56805f1 Merge remote-tracking branch 'upstream/master' into borg2-archive-flags 2023-04-15 17:29:20 +05:30
25506b8d2c Backing out upgrade of end-to-end test packages, because apparently we can't have nice things. 2023-04-14 23:47:51 -07:00
28e62d824b Upgrade end-to-end test packages. 2023-04-14 23:28:07 -07:00
7ee37a890e Fix broken end-to-end tests by no longer using an editable package there, a work-around for https://github.com/pypa/packaging-problems/issues/609 2023-04-14 23:22:07 -07:00
8cb5a42a9e Drop deprecated pkg_resources in favor of importlib.metadata and packaging. 2023-04-14 21:21:25 -07:00
5dbb71709c Upgrade test requirements and code style requirements. Auto-reformat code accordingly. 2023-04-14 19:35:24 -07:00
1c67db5d62 Add documentation for "borgmatic restore --schema" (#375). 2023-04-14 16:40:58 -07:00
96d4a8ee45 Add "borgmatic restore --schema" flag to NEWS (#375). 2023-04-14 16:33:06 -07:00
81e167959b
feat: restore specific schemas (#375).
Merge pull request #67 from diivi/feat/restore-specific-schemas
2023-04-14 16:26:25 -07:00
f273e82d74 add tests 2023-04-15 02:57:51 +05:30
17f122bfe5 Use psql instead of pg_restore when format is "plain"
pg_restore: error: input file appears to be a text format dump. Please use psql.
2023-04-14 17:38:19 +02:00
f0f43174c6 Swap if-else in restore_database_dump in postgresql hook for cleanliness 2023-04-14 17:38:19 +02:00
dfccc1b94a Exit on error when restoring all PostgreSQL databases
"--set ON_ERROR_STOP=on" is equivalent to "--exit-on-error" in
pg_restore.
2023-04-14 17:38:18 +02:00
195024e505 Fix psql_command and pg_restore_command to accept command with arguments
These commands are executed without `shell=True`, so the subprocess
module treats e.g. "docker exec my_pg_container psql" as a single command
(resulting in Errno 2 "No such file or directory") instead of a command
with arguments.
2023-04-14 17:37:38 +02:00
19a00371f5 Run "psql" with "--no-psqlrc"
Some settings in user's .psqlrc, e.g. "linestyle unicode", may break the
CSV output. "--no-psqlrc" tells psql to not read startup file.

This is not necessary for the analyze_command and restore_command (with
all_databases), but it's generally recommended when running psql from a
script.
2023-04-14 17:37:37 +02:00
874fba7672 Fix PostgreSQL hook not using "psql_command" for list when dumping "all" 2023-04-14 15:13:49 +02:00
50b0a9ce38 Remove newline at end of file. 2023-04-13 19:13:50 -07:00
8802f6888e Fix "TypeError: 'module' object is not callable" in test_commands.py' (#676).
Reviewed-on: borgmatic-collective/borgmatic#676
2023-04-14 02:12:58 +00:00
ebe5c5e839 Fix "TypeError: 'module' object is not callable" in test_commands.py 2023-04-14 01:01:31 +00:00
613f6c602c Bump version for release. 2023-04-13 15:12:19 -07:00
4a94c2c9bf Selectively omit list values when including configuration files (#672). 2023-04-13 14:39:36 -07:00
08843d51d9 Replace "sequence" with "list" in docs for consistency. 2023-04-12 10:30:23 -07:00
ea9213cb03 Spelling. 2023-04-11 22:12:57 -07:00
1ea4433aa9 Selectively shallow merge certain mappings or sequences when including configuration files (#672). 2023-04-11 21:49:10 -07:00
2fea429d78 collection restore for mongodb 2023-04-12 09:34:19 +05:30
264cebd2b1 complete psql multi schema backup 2023-04-11 23:19:49 +05:30
4c0e2cab78 View the results of configuration file merging via "validate-borgmatic-config --show" flag (#673). 2023-04-11 10:49:09 -07:00
31a2ac914a Add optional support for running end-to-end tests and building documentation with rootless Podman instead of Docker. 2023-04-10 14:26:54 -07:00
d6ef0df50d Mention #670 being fixed in NEWS. 2023-04-09 10:01:08 -07:00
cc60a71210 Clarify "log_file" NEWS (#413). 2023-04-06 14:12:12 -07:00
4cd7556a34 Add "log_file" command hook context to NEWS and docs (#413). 2023-04-06 13:58:37 -07:00
b4b1fa939d
feat: add logfile name to hook context for interpolation
Merge pull request #68 from diivi/feat/add-log-filename-to-hook-context
2023-04-06 13:46:45 -07:00
16d7131fb7 refactor tests 2023-04-07 01:00:38 +05:30
091d60c226 refactor and improve tests 2023-04-06 12:36:10 +05:30
0fbdf8d860 feat: add logfile name to hook context for interpolation 2023-04-06 09:31:24 +05:30
192bfe46a9 Fix error when running the "prune" action with both "archive_name_format" and "prefix" options set (#668). 2023-04-05 14:58:05 -07:00
080c3afa0d Fix documentation referring to "archive_name_format" in wrong configuration section. 2023-04-05 14:00:21 -07:00
9bc2322f9a feat: restore specific schemas 2023-04-06 02:10:36 +05:30
a9a65ebe54 Fix integration tests to actually assert (#666). 2023-04-04 22:11:36 -07:00
616eb6b6da Fix error with "info --match-archives" and fix "--match-archives" overriding logic (#666). 2023-04-04 21:25:10 -07:00
00d1dea94e Bump version for release. 2023-04-03 16:11:25 -07:00
127ad1dd1f
Add favicon to documentation.
Merge pull request #66 from diivi/add-favicon
2023-04-03 10:22:12 -07:00
fc58ba5763 add favicon to documentation 2023-04-03 17:36:24 +05:30
7e6bee84b0 Add "--log-file-format" flag for customizing the log message format (#658). 2023-04-02 23:06:36 -07:00
01811e03ba Tagged the auto-matching archive behavior as breaking in NEWS. 2023-04-02 14:38:35 -07:00
9712d00680 Add "match_archives" option (#588). 2023-04-01 23:57:55 -07:00
275e99d0b9 Add codespell link to documentation. 2023-04-01 14:38:52 -07:00
b9328e6d42 Add spellchecking of source code to NEWS. 2023-04-01 14:09:48 -07:00
2934d0902c Code spell checking on every test run! 2023-04-01 11:03:59 -07:00
1ad43ad4b5
Fix: run typos to fix various typos in source code.
Merge pull request #65 from diivi/fix/run-typos
2023-04-01 10:44:11 -07:00
32ab17fa46 merge 2023-04-01 22:12:41 +05:30
6054ced931 fix: run typos 2023-04-01 22:10:32 +05:30
1412038ed3
Fix randomly failing test: test_log_outputs_kills_other_processes_when_one_errors (#635).
Merge pull request #64 from kxxt/master
2023-03-31 23:19:57 -07:00
kxxt
fa8bc285c8 Fix randomly failing test. 2023-04-01 14:02:30 +08:00
f256908b27 Document wording tweaks (#479). 2023-03-31 15:36:59 -07:00
3f78ac4085 Automatically use the "archive_name_format" option to filter which archives get used for borgmatic actions that operate on multiple archives (#479). 2023-03-31 15:21:08 -07:00
5f595f7ac3 Fix regression in which the "transfer" action produced a traceback (#663). 2023-03-30 23:21:20 -07:00
b27e625a77 Update schema comment for check_repositories to mention labels (#635). 2023-03-28 15:44:38 -07:00
fc2c181b74 Add missing Docker Compose depends. 2023-03-28 15:31:37 -07:00
010b82d6d8 Remove unnecessary cd in dev documentation. 2023-03-28 12:45:39 -07:00
aaf3462d17 Fix Drone intentation. 2023-03-28 12:03:12 -07:00
f709125110 Error out if run-full-tests is run not inside a test container. 2023-03-28 12:02:07 -07:00
3512191f3e Add check_repositories regression fix to NEWS (#662). 2023-03-28 11:45:55 -07:00
06b5d81baa Merge branch 'master' of github.com:borgmatic-collective/borgmatic 2023-03-28 11:15:31 -07:00
9d71bf916e
fix: make check repositories work with dict and str repositories (#662).
Merge pull request #63 from diivi/fix/check-repositories-by-label
2023-03-28 11:15:01 -07:00
59fe01b56d Update script comment. 2023-03-28 11:09:25 -07:00
08e358e27f add and update tests 2023-03-28 22:51:35 +05:30
ce22d2d302 reformat 2023-03-28 22:29:21 +05:30
2d08a63e60 fix: make check repositories work with dict and str repositories 2023-03-28 22:14:50 +05:30
98c6aa6443 Use Square brackets to denote version specific flag
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-03-28 18:15:49 +05:30
edd79ed86c removed individual action parameters, and used make_flags_from_arguments
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-03-28 18:10:42 +05:30
d96f2239c1 Update OpenBSD borgmatic link. 2023-03-27 23:43:39 -07:00
67a349ae44 I had one job... (#461). 2023-03-27 23:28:36 -07:00
dcefded0fa Document that most command-line flags are not config-file-able (#461). 2023-03-27 23:21:14 -07:00
1bcdebd1cc Fix multiple repositories example. 2023-03-27 23:16:44 -07:00
7a8e0e89dd Mention prior versions of borgmatic in repositories schema. 2023-03-27 21:54:01 -07:00
489ae080e5 Update docs with a few more "path:" repositories references (#635). 2023-03-27 21:49:31 -07:00
0e3da7be63 Fix repository schema description. 2023-03-27 16:15:24 -07:00
c5ffb76dfa Bump version for release. 2023-03-27 15:56:49 -07:00
61c7b8f13c Add optional repository labels so you can select a repository via "--repository yourlabel" at the command-line (#635). 2023-03-27 15:54:55 -07:00
3e8e38011b
Labels for repositories (#635).
Merge pull request #57 from diivi/feat/tag-repos
2023-03-27 15:46:22 -07:00
4fa4fccab7 Use make_flags_from_arguments on mount; Pending test fixes
Signed-off-by: Chirag Aggarwal <thechiragaggarwal@gmail.com>
2023-03-27 23:24:17 +05:30
d0d3a39833 When a database command errors, display and log the error message instead of swallowing it (#396). 2023-03-27 10:36:39 -07:00
8bef1c698b add feature to docs 2023-03-27 22:16:39 +05:30
acbbd6670a Removing debugging command output. 2023-03-26 21:26:35 -07:00
b336b9bedf add tests for repo labels 2023-03-27 00:19:23 +05:30
ec9def4e71 rename repository arg to repository_path in all borg actions 2023-03-26 23:52:25 +05:30
a136fda92d check all tests 2023-03-26 23:35:47 +05:30
b511e679ae remove optional label for repos from tests 2023-03-26 16:59:29 +05:30
f56fdab7a9 Add troubleshooting documentation on PostgreSQL/MySQL authentication errors. 2023-03-25 17:08:17 -07:00
ff1f4dc09c minor fixes to prune argument help text 2023-03-26 02:06:46 +05:30
141474ff07 Added TIMESPAN flags to match archive in various commands (Borg2 feature)
Signed-off-by: jetchirag <thechiragaggarwal@gmail.com>
2023-03-26 01:58:03 +05:30
8c0eea7229 Add additional documentation link to environment variable feature. Rename constants section. 2023-03-25 08:56:25 -07:00
19e95628c3 Add documentation and NEWS for custom constants feature (#612). 2023-03-24 23:47:05 -07:00
4d01e53414
Fix: replace primitive values in config without quotes (#612).
Merge pull request #62 from diivi/fix/config-json-replacement
2023-03-24 23:45:36 -07:00
a082cb87cb fix: replace primitive values in config without quotes 2023-03-25 12:12:56 +05:30
1c51a8e229
Allow defining custom variables in config file (#612).
Merge pull request #60 from diivi/feat/constants-support
2023-03-24 22:50:57 -07:00
d14a8df71a Hide obnoxious ruamel.yaml warnings during test runs. 2023-03-24 22:43:10 -07:00
739a58fe47 Rename scripts/run-full-dev-tests to scripts/run-end-to-end-dev-tests and make it run end-to-end tests only. 2023-03-24 16:24:00 -07:00
af3431d6ae
fix: docs cli reference create spelling
Merge pull request #61 from diivi/docs/cli-reference
2023-03-24 16:09:50 -07:00
9851abc2e1 Add documentation on backing up a database running in a container (#649). 2023-03-24 15:18:49 -07:00
61ce6f0473 fix: docs cli reference create spelling 2023-03-25 02:44:56 +05:30
78e8bb6c8c reformat 2023-03-25 02:08:52 +05:30
af95134cd2 add test for complex constant 2023-03-25 02:03:36 +05:30
d6dfb8753a reformat 2023-03-25 01:50:47 +05:30
1bc003560a Merge branch 'master' of https://github.com/diivi/borgmatic into feat/tag-repos 2023-03-25 01:39:26 +05:30
aeaf69f49e pass all tests 2023-03-25 01:34:03 +05:30
e83ad9e1e4 use repository["path"] instead of repository 2023-03-25 01:04:57 +05:30
f42890430c Add code style plugins to enforce use of Python f-strings and prevent single-letter variables. 2023-03-23 23:11:14 -07:00
6f300b0079 feat: constants support 2023-03-24 02:39:37 +05:30
9bec029b4f
Fix: remove extra links from docs css.
Merge pull request #59 from diivi/fix/remove-extra-links-from-css
2023-03-23 12:57:55 -07:00
08afad5d81 end with newline 2023-03-24 01:25:15 +05:30
a01dc62468 fix: remove extra links from docs css 2023-03-24 01:23:40 +05:30
8b61225b13
Copy to clipboard support in documentation.
Merge pull request #58 from diivi/docs/copy-to-clipboard-support
2023-03-23 12:39:41 -07:00
66d2f49f18 docs: copy to clipboard support 2023-03-23 14:45:23 +05:30
0a72c67c6c Add missing source directory error fix to NEWS (#655). 2023-03-22 13:02:22 -07:00
ab64b7ef67
Fix error when a source directory doesn't exist and databases are configured (#655).
Merge pull request #56 from diivi/fix/no-error-on-database-backup-without-source-dirs
2023-03-22 12:59:01 -07:00
1e3a3bf1e7 review 2023-03-23 01:18:06 +05:30
7a2f287918 reformat base 2023-03-23 01:08:30 +05:30
8a63c49498 feat: tag repos 2023-03-23 01:01:26 +05:30
3b5ede8044 remove extra parameter from function call 2023-03-22 23:11:44 +05:30
bd235f0426 use exit_code_indicates_error and modify it to accept a command 2023-03-22 16:23:53 +05:30
09183464cd fix: no error on database backups without source dirs 2023-03-22 09:41:39 +05:30
ca6fd6b061 Add confusing error message fix to NEWS (#623). 2023-03-21 14:25:20 -07:00
dd9a64f4b6
Fix confusing message when an error occurs running actions for a configuration file (#623).
Merge pull request #55 from diivi/fix/rephrase-error-message
2023-03-21 14:23:09 -07:00
23e7f27ee4 fix: rephrase error when running from config
to avoid confusion, as the user might think the problem is with their config file
2023-03-22 02:22:43 +05:30
f9ef52f9a5 Remove unused module and outdated test expectations (#576). 2023-03-21 10:29:17 -07:00
3f17c355ca Add "file://" paths to NEWS (#576). 2023-03-21 10:24:51 -07:00
c83fae5e5b
Support file:// paths for repositories (#576).
Merge pull request #54 from diivi/feat/file-urls-support
2023-03-21 10:22:39 -07:00
39ad8f64c4 add tests and remove magic number 2023-03-21 17:06:03 +05:30
e86d223bbf Merge branch 'master' of https://github.com/diivi/borgmatic into feat/file-urls-support 2023-03-21 16:55:05 +05:30
86587ab2dc send repo directly to extract and export_tar 2023-03-20 21:51:45 +05:30
58c95d8015 feat: file:// URLs support 2023-03-20 02:43:23 +05:30
6351747da5 Add NixOS package link to installation docs. 2023-03-19 09:02:47 -07:00
55c153409e Add "source_directories_must_exist" option to NEWS (#501). 2023-03-18 14:07:38 -07:00
b115fb2fbe Merge branch 'master' of github.com:borgmatic-collective/borgmatic 2023-03-18 14:01:52 -07:00
31d04d9ee3
Optionally error if a source directory does not exist.
feat: add optional check for existence of source directories
2023-03-18 13:59:20 -07:00
f803836416 reformat 2023-03-18 17:27:33 +05:30
997f60b3e6 add tests 2023-03-18 17:24:21 +05:30
c84b26499b Add "borg_files_cache_ttl" option to NEWS. 2023-03-17 19:29:10 -07:00
214ae81cbb Add option to set borg_files_cache_ttl in config (#618).
Reviewed-on: borgmatic-collective/borgmatic#654
2023-03-18 02:24:41 +00:00
d17b2c74db feat: add optional check for existence of source directories 2023-03-18 04:35:55 +05:30
fb9677230b add test to ensure integers are converted to string
before setting them up to be environment variable values

Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-18 02:57:56 +05:30
0db137efdf add option to set borg_files_cache_ttl in config
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-18 01:48:24 +05:30
e6605c868d Clarify check frequency default behavior (#653). 2023-03-17 10:09:36 -07:00
bdfe4b61eb Bump version for release. 2023-03-16 13:42:15 -07:00
ca4461820d Add support for Python 3.11. 2023-03-16 13:29:37 -07:00
7605838bfe Add "--repository" flag to all actions where it makes sense (#564). 2023-03-16 13:27:08 -07:00
7a784b8eba Add "--repository" flag to common actions (where it makes sense) (#652).
Reviewed-on: borgmatic-collective/borgmatic#652
2023-03-16 20:21:40 +00:00
Nain
3e22414613 Update tests
Make them more explicit. Also formatting.
2023-03-16 14:01:29 -04:00
Nain
5f87ea3ec5 Add "--repository" flag to the "create" action 2023-03-16 13:15:49 -04:00
Nain
a8aeace5b5 Add "--repository" flag to the "compact" action 2023-03-16 11:13:45 -04:00
Nain
480addd7ce Add "--repository" flag to the "check" action 2023-03-16 10:41:13 -04:00
Nain
ce0ce4cd1c Merge mostly repetetive tests 2023-03-16 08:23:21 -04:00
Nain
7de9260b0d Remove test now that --repository isn't expected to error
As discussed #652#issuecomment-5579
2023-03-15 14:59:12 -04:00
Nain
cdbe6cdf3a Add "--repository" flag to the "prune" action
part of ticket #564
2023-03-15 14:43:17 -04:00
95dcc20d5f Better indicate position of additional docs on page (#651).
Reviewed-on: borgmatic-collective/borgmatic#651
2023-03-15 18:13:27 +00:00
49e0494924 Fix --editable (mode) option given --user as arg (#648).
Reviewed-on: borgmatic-collective/borgmatic#650
2023-03-15 18:06:46 +00:00
Nain
5fad2bd408 Better indicate position of additional docs on page
On wide screens, the position of the documentation (how-to and reference guide)
is at same level as #it's-your-data.-keep-it-that-way.

So the jump due to anchor link makes it seem like we're taken to top aka
main content. Indicate that links are to the left so reader doesn't recurse.
2023-03-15 07:54:49 -04:00
c6829782a3 Fix --editable (mode) option given --user as arg
--user option should be before, or after `--editable .` not in between.
Before seems better.
2023-03-15 06:50:47 -04:00
8cec7c74d8 Add "--strip-components all" on the "extract" action to remove leading path components (#647). 2023-03-09 10:09:16 -08:00
d3086788eb Document how to list database dumps in an archive. 2023-03-08 16:09:41 -08:00
8d860ea02c
Enhanced docs with info on fetching mysql database size
Merge pull request #46 from Jelle-SamsonIT/patch-3
2023-03-08 15:52:28 -08:00
b343363bb8 Change the default action order to: "create", "prune", "compact", "check" (#304). 2023-03-08 14:05:06 -08:00
9db31bd1e9 Run any command-line actions in the order specified instead of using a fixed ordering (#304). 2023-03-08 13:19:41 -08:00
d88bcc8be9 Add Healthchecks "log" state feature to NEWS. 2023-03-07 15:45:23 -08:00
332f7c4bb6 Add support for healthchecks "log" feature (#628).
Reviewed-on: borgmatic-collective/borgmatic#645
2023-03-07 22:21:30 +00:00
5d19d86e4a Add flake8-quotes to complain about incorrect quoting so I don't have to! 2023-03-07 14:08:35 -08:00
044ae7869a fix tests
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-08 03:30:12 +05:30
62ae82f2c0 Mention searching for files in the extract a backup guide. 2023-03-06 22:59:34 -08:00
66194b7304 Update dates in documentation examples. 2023-03-06 22:41:43 -08:00
98e429594e added tests to make sure unsupported log states are detected
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-06 20:31:00 +05:30
4fcfddbe08 return early if unsupported state is passed
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-06 19:58:57 +05:30
f442aeae9c fix logs_monitor_start_error()
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-06 05:21:56 +05:30
e211863cba update test_borgmatic.py
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-06 05:12:24 +05:30
45256ae33f add test for healthchecks
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-06 03:38:08 +05:30
1573d68fe2 update schema.yaml description
also add monitor.State.LOG to cronitor.

Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-05 21:57:13 +05:30
69f6695253 Add support for healthchecks "log" feature #628
Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
2023-03-05 19:27:32 +05:30
a7c055264d
Fix incorrect documentation TOC background by removing extra dark mode styles.
Merge pull request #52 from diivi/fix/remove-special-dark-mode-attributes
2023-03-04 16:18:04 -08:00
db18364a73 fix: remove extra dark mode styles 2023-03-05 03:16:46 +05:30
22498ebd4c In the documentation, mention what version of borgmatic introduced SQLite support. 2023-03-04 10:50:28 -08:00
e1f02d9fa5 Add SQLite feature to NEWS and also integrations. 2023-03-04 09:59:16 -08:00
9ec220c600
Add SQLite database dump/restore hook (#295).
feat: add dump-restore support for sqlite databases
2023-03-04 09:47:21 -08:00
cf0275a3ed remove test path 2023-03-04 23:00:57 +05:30
c71eb60cd2 mock os.remove instead of actually removing a file 2023-03-04 13:08:30 +05:30
675e54ba9f use os.remove and improve tests 2023-03-04 12:43:07 +05:30
1793ad74bd add sqlite for e2e tests 2023-03-04 02:41:14 +05:30
767a7d900b e2e tests schema update 2023-03-04 01:29:01 +05:30
903507bd03 code review 2023-03-04 01:27:07 +05:30
3aa88085ed formatting fix 2023-03-03 00:01:52 +05:30
af1cc27988 feat: add dump-restore support for sqlite databases 2023-03-02 23:55:16 +05:30
Jelle @ Samson-IT
3720f22234
reworded and added 'all' caveat 2022-07-13 22:03:51 +02:00
Jelle @ Samson-IT
1fdec480d6
Added some info about fetching mysql database size 2022-07-13 13:29:45 +02:00
336 changed files with 43755 additions and 13643 deletions

View file

@ -1,56 +0,0 @@
kind: pipeline
name: python-3-8-alpine-3-13
services:
- name: postgresql
image: postgres:13.1-alpine
environment:
POSTGRES_PASSWORD: test
POSTGRES_DB: test
- name: mysql
image: mariadb:10.5
environment:
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test
- name: mongodb
image: mongo:5.0.5
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: test
clone:
skip_verify: true
steps:
- name: build
image: alpine:3.13
pull: always
commands:
- scripts/run-full-tests
---
kind: pipeline
name: documentation
clone:
skip_verify: true
steps:
- name: build
image: plugins/docker
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
registry: projects.torsion.org
repo: projects.torsion.org/borgmatic-collective/borgmatic
tags: docs
dockerfile: docs/Dockerfile
trigger:
repo:
- borgmatic-collective/borgmatic
branch:
- master
event:
- push

View file

@ -1,4 +1,5 @@
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
const codeClipboard = require("eleventy-plugin-code-clipboard");
const inclusiveLangPlugin = require("@11ty/eleventy-plugin-inclusive-language");
const navigationPlugin = require("@11ty/eleventy-navigation");
@ -6,6 +7,7 @@ module.exports = function(eleventyConfig) {
eleventyConfig.addPlugin(pluginSyntaxHighlight);
eleventyConfig.addPlugin(inclusiveLangPlugin);
eleventyConfig.addPlugin(navigationPlugin);
eleventyConfig.addPlugin(codeClipboard);
let markdownIt = require("markdown-it");
let markdownItAnchor = require("markdown-it-anchor");
@ -31,6 +33,7 @@ module.exports = function(eleventyConfig) {
markdownIt(markdownItOptions)
.use(markdownItAnchor, markdownItAnchorOptions)
.use(markdownItReplaceLink)
.use(codeClipboard.markdownItCopyButton)
);
eleventyConfig.addPassthroughCopy({"docs/static": "static"});

View file

@ -1,35 +0,0 @@
#### What I'm trying to do and why
#### Steps to reproduce (if a bug)
Include (sanitized) borgmatic configuration files if applicable.
#### Actual behavior (if a bug)
Include (sanitized) `--verbosity 2` output if applicable.
#### Expected behavior (if a bug)
#### Other notes / implementation ideas
#### Environment
**borgmatic version:** [version here]
Use `sudo borgmatic --version` or `sudo pip show borgmatic | grep ^Version`
**borgmatic installation method:** [e.g., Debian package, Docker container, etc.]
**Borg version:** [version here]
Use `sudo borg --version`
**Python version:** [version here]
Use `python3 --version`
**Database version (if applicable):** [version here]
Use `psql --version` or `mysql --version` on client and server.
**operating system and version:** [OS here]

View file

@ -0,0 +1,77 @@
name: "Bug or question/support"
about: "For filing a bug or getting support"
body:
- type: textarea
id: problem
attributes:
label: What I'm trying to do and why
validations:
required: true
- type: textarea
id: repro_steps
attributes:
label: Steps to reproduce
description: Include (sanitized) borgmatic configuration files if applicable.
validations:
required: false
- type: textarea
id: actual_behavior
attributes:
label: Actual behavior
description: Include (sanitized) `--verbosity 2` output if applicable.
validations:
required: false
- type: textarea
id: expected_behavior
attributes:
label: Expected behavior
validations:
required: false
- type: textarea
id: notes
attributes:
label: Other notes / implementation ideas
validations:
required: false
- type: input
id: borgmatic_version
attributes:
label: borgmatic version
description: Use `sudo borgmatic --version` or `sudo pip show borgmatic | grep ^Version`
validations:
required: false
- type: input
id: borgmatic_install_method
attributes:
label: borgmatic installation method
description: e.g., pip install, Debian package, container, etc.
validations:
required: false
- type: input
id: borg_version
attributes:
label: Borg version
description: Use `sudo borg --version`
validations:
required: false
- type: input
id: python_version
attributes:
label: Python version
description: Use `python3 --version`
validations:
required: false
- type: input
id: database_version
attributes:
label: Database version (if applicable)
description: Use `psql --version` / `mysql --version` / `mongodump --version` / `sqlite3 --version`
validations:
required: false
- type: input
id: operating_system_version
attributes:
label: Operating system and version
description: On Linux, use `cat /etc/os-release`
validations:
required: false

View file

@ -0,0 +1 @@
blank_issues_enabled: true

View file

@ -0,0 +1,15 @@
name: "Feature"
about: "For filing a feature request or idea"
body:
- type: textarea
id: request
attributes:
label: What I'd like to do and why
validations:
required: true
- type: textarea
id: notes
attributes:
label: Other notes / implementation ideas
validations:
required: false

View file

@ -0,0 +1,30 @@
name: build
run-name: ${{ gitea.actor }} is building
on:
push:
branches: [main]
jobs:
test:
runs-on: host
steps:
- uses: actions/checkout@v4
- run: scripts/run-end-to-end-tests
docs:
needs: [test]
runs-on: host
env:
IMAGE_NAME: projects.torsion.org/borgmatic-collective/borgmatic:docs
steps:
- uses: actions/checkout@v4
- run: podman login --username "$USERNAME" --password "$PASSWORD" projects.torsion.org
env:
USERNAME: "${{ secrets.REGISTRY_USERNAME }}"
PASSWORD: "${{ secrets.REGISTRY_PASSWORD }}"
- run: podman build --tag "$IMAGE_NAME" --file docs/Dockerfile --storage-opt "overlay.mount_program=/usr/bin/fuse-overlayfs" .
- run: podman push "$IMAGE_NAME"
- run: scripts/export-docs-from-image
- run: curl --user "${{ secrets.REGISTRY_USERNAME }}:${{ secrets.REGISTRY_PASSWORD }}" --upload-file borgmatic-docs.tar.gz https://projects.torsion.org/api/packages/borgmatic-collective/generic/borgmatic-docs/$(head --lines=1 NEWS)/borgmatic-docs.tar.gz

516
NEWS
View file

@ -1,3 +1,511 @@
1.9.8
* #979: Fix root patterns so they don't have an invalid "sh:" prefix before getting passed to Borg.
* Expand the recent contributors documentation section to include ticket submitters—not just code
contributors—because there are multiple ways to contribute to the project! See:
https://torsion.org/borgmatic/#recent-contributors
1.9.7
* #855: Add a Sentry monitoring hook. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#sentry-hook
* #968: Fix for a "spot" check error when a filename in the most recent archive contains a newline.
* #970: Fix for an error when there's a blank line in the configured patterns or excludes.
* #971: Fix for "exclude_from" files being completely ignored.
* #977: Fix for "exclude_patterns" and "exclude_from" not supporting explicit pattern styles (e.g.,
"sh:" or "re:").
1.9.6
* #959: Fix an error in the Btrfs hook when a subvolume mounted at "/" is configured in borgmatic's
source directories.
* #960: Fix for archives storing relative source directory paths such that they contain the working
directory.
* #960: Fix the "spot" check to support relative source directory paths.
* #962: For the ZFS, Btrfs, and LVM hooks, perform path rewriting for excludes and patterns in
addition to the existing source directories rewriting.
* #962: Under the hood, merge all configured source directories, excludes, and patterns into a
unified temporary patterns file for passing to Borg. The borgmatic configuration options remain
unchanged.
* #962: For the LVM hook, add support for nested logical volumes.
* #965: Fix a borgmatic runtime directory error when running the "spot" check with a database hook
enabled.
* #969: Fix the "restore" action to work on database dumps without a port when a default port is
present in configuration.
* Fix the "spot" check to no longer consider pipe files within an archive for file comparisons.
* Fix the "spot" check to have a nicer error when there are no source paths to compare.
* Fix auto-excluding of special files (when databases are configured) to support relative source
directory paths.
* Drop support for Python 3.8, which has been end-of-lifed.
1.9.5
* #418: Backup and restore databases that have the same name but with different ports, hostnames,
or hooks.
* #947: To avoid a hang in the database hooks, error and exit when the borgmatic runtime
directory overlaps with the configured excludes.
* #954: Fix a findmnt command error in the Btrfs hook by switching to parsing JSON output.
* #956: Fix the printing of a color reset code even when color is disabled.
* #958: Drop colorama as a library dependency.
* When the ZFS, Btrfs, or LVM hooks aren't configured, don't try to cleanup snapshots for them.
1.9.4
* #80 (beta): Add an LVM hook for snapshotting and backing up LVM logical volumes. See the
documentation for more information:
https://torsion.org/borgmatic/docs/how-to/snapshot-your-filesystems/
* #251 (beta): Add a Btrfs hook for snapshotting and backing up Btrfs subvolumes. See the
documentation for more information:
https://torsion.org/borgmatic/docs/how-to/snapshot-your-filesystems/
* #926: Fix a library error when running within a PyInstaller bundle.
* #950: Fix a snapshot unmount error in the ZFS hook when using nested datasets.
* Update the ZFS hook to discover and snapshot ZFS datasets even if they are parent/grandparent
directories of your source directories.
* Reorganize data source and monitoring hooks to make developing new hooks easier.
1.9.3
* #261 (beta): Add a ZFS hook for snapshotting and backing up ZFS datasets. See the documentation
for more information: https://torsion.org/borgmatic/docs/how-to/snapshot-your-filesystems/
* Remove any temporary copies of the manifest file created in support of the "bootstrap" action.
* Deprecate the "store_config_files" option at the global scope and move it under the "bootstrap"
hook. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/extract-a-backup/#extract-the-configuration-files-used-to-create-an-archive
* Require the runtime directory to be an absolute path.
* Add a "--deleted" flag to the "repo-list" action for listing deleted archives that haven't
yet been compacted (Borg 2 only).
* Promote the "spot" check from a beta feature to stable.
1.9.2
* #441: Apply the "umask" option to all relevant actions, not just some of them.
* #722: Remove the restriction that the "extract" and "mount" actions must match a single
repository. Now they work more like other actions, where each repository is applied in turn.
* #932: Fix the missing build backend setting in pyproject.toml to allow Fedora builds.
* #934: Update the logic that probes for the borgmatic streaming database dump, bootstrap
metadata, and check state directories to support more platforms and use cases. See the
documentation for more information:
https://torsion.org/borgmatic/docs/how-to/backup-your-databases/#runtime-directory
* #934: Add the "RuntimeDirectory" and "StateDirectory" options to the sample systemd service
file to support the new runtime and state directory logic.
* #939: Fix borgmatic ignoring the "BORG_RELOCATED_REPO_ACCESS_IS_OK" and
"BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK" environment variables.
* Add a Pushover monitoring hook. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#pushover-hook
1.9.1
* #928: Fix the user runtime directory location on macOS (and possibly Cygwin).
* #930: Fix an error with the sample systemd service when no credentials are configured.
* #931: Fix an error when implicitly upgrading the check state directory from ~/.borgmatic to
~/.local/state/borgmatic across filesystems.
1.9.0
* #609: Fix the glob expansion of "source_directories" values to respect the "working_directory"
option.
* #609: BREAKING: Apply the "working_directory" option to all actions, not just "create". This
includes repository paths, destination paths, mount points, etc.
* #562: Deprecate the "borgmatic_source_directory" option in favor of "user_runtime_directory"
and "user_state_directory".
* #562: BREAKING: Move the default borgmatic streaming database dump and bootstrap metadata
directory from ~/.borgmatic to /run/user/$UID/borgmatic, which is more XDG-compliant. You can
override this location with the new "user_runtime_directory" option. Existing archives with
database dumps at the old location are still restorable.
* #562, #638: Move the default check state directory from ~/.borgmatic to
~/.local/state/borgmatic. This is more XDG-compliant and also prevents these state files from
getting backed up (unless you explicitly include them). You can override this location with the
new "user_state_directory" option. After the first time you run the "check" action with borgmatic
1.9.0, you can safely delete the ~/.borgmatic directory.
* #838: BREAKING: With Borg 1.4+, store database dumps and bootstrap metadata in a "/borgmatic"
directory within a backup archive, so the path doesn't depend on the current user. This means
that you can now backup as one user and restore or bootstrap as another user, among other use
cases.
* #902: Add loading of encrypted systemd credentials. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/provide-your-passwords/#using-systemd-service-credentials
* #911: Add a "key change-passphrase" action to change the passphrase protecting a repository key.
* #914: Fix a confusing apparent hang when when the repository location changes, and instead
show a helpful error message.
* #915: BREAKING: Rename repository actions like "rcreate" to more explicit names like
"repo-create" for compatibility with recent changes in Borg 2.0.0b10.
* #918: BREAKING: When databases are configured, don't auto-enable the "one_file_system" option,
as existing auto-excludes of special files should be sufficient to prevent Borg from hanging on
them. But if this change causes problems for you, you can always enable "one_file_system"
explicitly.
* #919: Clarify the command-line help for the "--config" flag.
* #919: Document a policy for versioning and breaking changes:
https://torsion.org/borgmatic/docs/how-to/upgrade/#versioning-and-breaking-changes
* #921: BREAKING: Change soft failure command hooks to skip only the current repository rather than
all repositories in the configuration file.
* #922: Replace setup.py (Python packaging metadata) with the more modern pyproject.toml.
* When using Borg 2, default the "archive_name_format" option to just "{hostname}", as Borg 2 does
not require unique archive names; identical archive names form a common "series" that can be
targeted together. See the Borg 2 documentation for more information:
https://borgbackup.readthedocs.io/en/2.0.0b13/changes.html#borg-1-2-x-1-4-x-to-borg-2-0
* Add support for Borg 2's "rclone:" repository URLs, so you can backup to 70+ cloud storage
services whether or not they support Borg explicitly.
* Add support for Borg 2's "sftp://" repository URLs.
* Update the "--match-archives" and "--archive" flags to support Borg 2 series names or archive
hashes.
* Add a "--match-archives" flag to the "prune" action.
* Add "--local-path" and "--remote-path" flags to the "config bootstrap" action for setting the
Borg executable paths used for bootstrapping.
* Add a "--user-runtime-directory" flag to the "config bootstrap" action for helping borgmatic
locate the bootstrap metadata stored in an archive.
* Add a Zabbix monitoring hook. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#zabbix-hook
* Add a tarball of borgmatic's HTML documentation to the packages on the project page.
1.8.14
* #896: Fix an error in borgmatic rcreate/init on an empty repository directory with Borg 1.4.
* #898: Add glob ("*") support to the "--repository" flag. Just quote any values containing
globs so your shell doesn't interpret them.
* #899: Fix for a "bad character" Borg error in which the "spot" check fed Borg an invalid pattern.
* #900: Fix for a potential traceback (TypeError) during the handling of another error.
* #904: Clarify the configuration reference about the "spot" check options:
https://torsion.org/borgmatic/docs/reference/configuration/
* #905: Fix the "source_directories_must_exist" option to work with relative "source_directories"
paths when a "working_directory" is set.
* #906: Add documentation details for how to run custom database dump commands using binaries from
running containers:
https://torsion.org/borgmatic/docs/how-to/backup-your-databases/#containers
* Fix a regression in which the "color" option had no effect.
* Add a recent contributors section to the documentation, because credit where credit's due! See:
https://torsion.org/borgmatic/#recent-contributors
1.8.13
* #298: Add "delete" and "rdelete" actions to delete archives or entire repositories.
* #785: Add an "only_run_on" option to consistency checks so you can limit a check to running on
particular days of the week. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/deal-with-very-large-backups/#check-days
* #885: Add an Uptime Kuma monitoring hook. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#uptime-kuma-hook
* #886: Fix a PagerDuty hook traceback with Python < 3.10.
* #889: Fix the Healthchecks ping body size limit, restoring it to the documented 100,000 bytes.
1.8.12
* #817: Add a "--max-duration" flag to the "check" action and a "max_duration" option to the
repository check configuration. This tells Borg to interrupt a repository check after a certain
duration.
* #860: Fix interaction between environment variable interpolation in constants and shell escaping.
* #863: When color output is disabled (explicitly or implicitly), don't prefix each log line with
the log level.
* #865: Add an "upload_buffer_size" option to set the size of the upload buffer used in "create"
action.
* #866: Fix "Argument list too long" error in the "spot" check when checking hundreds of thousands
of files at once.
* #874: Add the configured repository label as "repository_label" to the interpolated variables
passed to before/after command hooks.
* #881: Fix "Unrecognized argument" error when the same value is used with different command-line
flags.
* In the "spot" check, don't try to hash symlinked directories.
1.8.11
* #815: Add optional Healthchecks auto-provisioning via "create_slug" option.
* #851: Fix lack of file extraction when using "extract --strip-components all" on a path with a
leading slash.
* #854: Fix a traceback when the "data" consistency check is used.
* #857: Fix a traceback with "check --only spot" when the "spot" check is unconfigured.
1.8.10
* #656 (beta): Add a "spot" consistency check that compares file counts and contents between your
source files and the latest archive, ensuring they fall within configured tolerances. This can
catch problems like incorrect excludes, inadvertent deletes, files changed by malware, etc. See
the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/deal-with-very-large-backups/#spot-check
* #779: When "--match-archives *" is used with "check" action, don't skip Borg's orphaned objects
check.
* #842: When a command hook exits with a soft failure, ping the log and finish states for any
configured monitoring hooks.
* #843: Add documentation link to Loki dashboard for borgmatic:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#loki-hook
* #847: Fix "--json" error when Borg includes non-JSON warnings in JSON output.
* #848: SECURITY: Mask the password when logging a MongoDB dump or restore command.
* Fix handling of the NO_COLOR environment variable to ignore an empty value.
* Add documentation about backing up containerized databases by configuring borgmatic to exec into
a container to run a dump command:
https://torsion.org/borgmatic/docs/how-to/backup-your-databases/#containers
1.8.9
* #311: Add custom dump/restore command options for MySQL and MariaDB.
* #811: Add an "access_token" option to the ntfy monitoring hook for authenticating
without username/password.
* #827: When the "--json" flag is given, suppress console escape codes so as not to
interfere with JSON output.
* #829: Fix "--override" values containing deprecated section headers not actually overriding
configuration options under deprecated section headers.
* #835: Add support for the NO_COLOR environment variable. See the documentation for more
information:
https://torsion.org/borgmatic/docs/how-to/set-up-backups/#colored-output
* #839: Add log sending for the Apprise logging hook, enabled by default. See the documentation for
more information:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#apprise-hook
* #839: Document a potentially breaking shell quoting edge case within error hooks:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#error-hooks
* #840: When running the "rcreate" action and the repository already exists but with a different
encryption mode than requested, error.
* Switch from Drone to Gitea Actions for continuous integration.
* Rename scripts/run-end-to-end-dev-tests to scripts/run-end-to-end-tests and use it in both dev
and CI for better dev-CI parity.
* Clarify documentation about restoring a database: borgmatic does not create the database upon
restore.
1.8.8
* #370: For the PostgreSQL hook, pass the "PGSSLMODE" environment variable through to Borg when the
database's configuration omits the "ssl_mode" option.
* #818: Allow the "--repository" flag to match across multiple configuration files.
* #820: Fix broken repository detection in the "rcreate" action with Borg 1.4. The issue did not
occur with other versions of Borg.
* #822: Fix broken escaping logic in the PostgreSQL hook's "pg_dump_command" option.
* SECURITY: Prevent additional shell injection attacks within the PostgreSQL hook.
1.8.7
* #736: Store included configuration files within each backup archive in support of the "config
bootstrap" action. Previously, only top-level configuration files were stored.
* #798: Elevate specific Borg warnings to errors or squash errors to
* warnings. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/customize-warnings-and-errors/
* #810: SECURITY: Prevent shell injection attacks within the PostgreSQL hook, the MongoDB hook, the
SQLite hook, the "borgmatic borg" action, and command hook variable/constant interpolation.
* #814: Fix a traceback when providing an invalid "--override" value for a list option.
1.8.6
* #767: Add an "--ssh-command" flag to the "config bootstrap" action for setting a custom SSH
command, as no configuration is available (including the "ssh_command" option) until
bootstrapping completes.
* #794: Fix a traceback when the "repositories" option contains both strings and key/value pairs.
* #800: Add configured repository labels to the JSON output for all actions.
* #802: The "check --force" flag now runs checks even if "check" is in "skip_actions".
* #804: Validate the configured action names in the "skip_actions" option.
* #807: Stream SQLite databases directly to Borg instead of dumping to an intermediate file.
* When logging commands that borgmatic executes, log the environment variables that
borgmatic sets for those commands. (But don't log their values, since they often contain
passwords.)
1.8.5
* #701: Add a "skip_actions" option to skip running particular actions, handy for append-only or
checkless configurations. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/set-up-backups/#skipping-actions
* #701: Deprecate the "disabled" value for the "checks" option in favor of the new "skip_actions"
option.
* #745: Constants now apply to included configuration, not just the file doing the includes. As a
side effect of this change, constants no longer apply to option names and only substitute into
configuration values.
* #779: Add a "--match-archives" flag to the "check" action for selecting the archives to check,
overriding the existing "archive_name_format" and "match_archives" options in configuration.
* #779: Only parse "--override" values as complex data types when they're for options of those
types.
* #782: Fix environment variable interpolation within configured repository paths.
* #782: Add configuration constant overriding via the existing "--override" flag.
* #783: Upgrade ruamel.yaml dependency to support version 0.18.x.
* #784: Drop support for Python 3.7, which has been end-of-lifed.
1.8.4
* #715: Add a monitoring hook for sending backup status to a variety of monitoring services via the
Apprise library. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#apprise-hook
* #748: When an archive filter causes no matching archives for the "rlist" or "info"
actions, warn the user and suggest how to remove the filter.
* #768: Fix a traceback when an invalid command-line flag or action is used.
* #771: Fix normalization of deprecated sections ("location:", "storage:", "hooks:", etc.) to
support empty sections without erroring.
* #774: Disallow the "--dry-run" flag with the "borg" action, as borgmatic can't guarantee the Borg
command won't have side effects.
1.8.3
* #665: BREAKING: Simplify logging logic as follows: Syslog verbosity is now disabled by
default, but setting the "--syslog-verbosity" flag enables it regardless of whether you're at an
interactive console. Additionally, "--log-file-verbosity" and "--monitoring-verbosity" now
default to 1 (info about steps borgmatic is taking) instead of 0. And both syslog logging and
file logging can be enabled simultaneously.
* #743: Add a monitoring hook for sending backup status and logs to Grafana Loki. See the
documentation for more information:
https://torsion.org/borgmatic/docs/how-to/monitor-your-backups/#loki-hook
* #753: When "archive_name_format" is not set, filter archives using the default archive name
format.
* #754: Fix error handling to log command output as one record per line instead of truncating
too-long output and swallowing the end of some Borg error messages.
* #757: Update documentation so "sudo borgmatic" works for pipx borgmatic installations.
* #761: Fix for borgmatic not stopping Borg immediately when the user presses ctrl-C.
* Update documentation to recommend installing/upgrading borgmatic with pipx instead of pip. See the
documentation for more information:
https://torsion.org/borgmatic/docs/how-to/set-up-backups/#installation
https://torsion.org/borgmatic/docs/how-to/upgrade/#upgrading-borgmatic
1.8.2
* #345: Add "key export" action to export a copy of the repository key for safekeeping in case
the original goes missing or gets damaged.
* #727: Add a MariaDB database hook that uses native MariaDB commands instead of the deprecated
MySQL ones. Be aware though that any existing backups made with the "mysql_databases:" hook are
only restorable with a "mysql_databases:" configuration.
* #738: Fix for potential data loss (data not getting restored) in which the database "restore"
action didn't actually restore anything and indicated success anyway.
* Remove the deprecated use of the MongoDB hook's "--db" flag for database restoration.
* Add source code reference documentation for getting oriented with the borgmatic code as a
developer: https://torsion.org/borgmatic/docs/reference/source-code/
1.8.1
* #326: Add documentation for restoring a database to an alternate host:
https://torsion.org/borgmatic/docs/how-to/backup-your-databases/#restore-to-an-alternate-host
* #697: Add documentation for "bootstrap" action:
https://torsion.org/borgmatic/docs/how-to/extract-a-backup/#extract-the-configuration-files-used-to-create-an-archive
* #725: Add "store_config_files" option for disabling the automatic backup of configuration files
used by the "config bootstrap" action.
* #728: Fix for "prune" action error when using the "keep_exclude_tags" option.
* #730: Fix for Borg's interactive prompt on the "check --repair" action automatically getting
answered "NO" even when the "check_i_know_what_i_am_doing" option isn't set.
* #732: Include multiple configuration files with a single "!include". See the documentation for
more information:
https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/#multiple-merge-includes
* #734: Omit "--glob-archives" or "--match-archives" Borg flag when its value would be "*" (meaning
all archives).
1.8.0
* #575: BREAKING: For the "borgmatic borg" action, instead of implicitly injecting
repository/archive into the resulting Borg command-line, pass repository to Borg via an
environment variable and make archive available for explicit use in your commands. See the
documentation for more information:
https://torsion.org/borgmatic/docs/how-to/run-arbitrary-borg-commands/
* #719: Fix an error when running "borg key export" through borgmatic.
* #720: Fix an error when dumping a database and the "exclude_nodump" option is set.
* #724: Add "check_i_know_what_i_am_doing" option to bypass Borg confirmation prompt when running
"check --repair".
* When merging two configuration files, error gracefully if the two files do not adhere to the same
format.
* #721: Remove configuration sections ("location:", "storage:", "hooks:", etc.), while still
keeping deprecated support for them. Now, all options are at the same level, and you don't need
to worry about commenting/uncommenting section headers when you change an option (if you remove
your sections first).
* #721: BREAKING: The retention prefix and the consistency prefix can no longer have different
values (unless one is not set).
* #721: BREAKING: The storage umask and the hooks umask can no longer have different values (unless
one is not set).
* BREAKING: Flags like "--config" that previously took multiple values now need to be given once
per value, e.g. "--config first.yaml --config second.yaml" instead of "--config first.yaml
second.yaml". This prevents argument parsing errors on ambiguous commands.
* BREAKING: Remove the deprecated (and silently ignored) "--successful" flag on the "list" action,
as newer versions of Borg list successful (non-checkpoint) archives by default.
* All deprecated configuration option values now generate warning logs.
* Remove the deprecated (and non-functional) "--excludes" flag in favor of excludes within
configuration.
* Fix an error when logging too-long command output during error handling. Now, long command output
is truncated before logging.
1.7.15
* #326: Add configuration options and command-line flags for backing up a database from one
location while restoring it somewhere else.
* #399: Add a documentation troubleshooting note for MySQL/MariaDB authentication errors.
* #529: Remove upgrade-borgmatic-config command for upgrading borgmatic 1.1.0 INI-style
configuration.
* #529: Deprecate generate-borgmatic-config in favor of new "config generate" action.
* #529: Deprecate validate-borgmatic-config in favor of new "config validate" action.
* #697, #712, #716: Extract borgmatic configuration from backup via new "config bootstrap"
action—even when borgmatic has no configuration yet!
* #669: Add sample systemd user service for running borgmatic as a non-root user.
* #711, #713: Fix an error when "data" check time files are accessed without getting upgraded
first.
1.7.14
* #484: Add a new verbosity level (-2) to disable output entirely (for console, syslog, log file,
or monitoring), so not even errors are shown.
* #688: Tweak archive check probing logic to use the newest timestamp found when multiple exist.
* #659: Add Borg 2 date-based matching flags to various actions for archive selection.
* #703: Fix an error when loading the configuration schema on Fedora Linux.
* #704: Fix "check" action error when repository and archive checks are configured but the archive
check gets skipped due to the configured frequency.
* #706: Fix "--archive latest" on "list" and "info" actions that only worked on the first of
multiple configured repositories.
1.7.13
* #375: Restore particular PostgreSQL schemas from a database dump via "borgmatic restore --schema"
flag. See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/backup-your-databases/#restore-particular-schemas
* #678: Fix error from PostgreSQL when dumping a database with a "format" of "plain".
* #678: Fix PostgreSQL hook to support "psql_command" and "pg_restore_command" options containing
commands with arguments.
* #678: Fix calls to psql in PostgreSQL hook to ignore "~/.psqlrc", whose settings can break
database dumping.
* #680: Add support for logging each log line as a JSON object via global "--log-json" flag.
* #682: Fix "source_directories_must_exist" option to expand globs and tildes in source directories.
* #684: Rename "master" development branch to "main" to use more inclusive language. You'll need to
update your development checkouts accordingly.
* #686: Add fish shell completion script so you can tab-complete on the borgmatic command-line. See
the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/set-up-backups/#shell-completion
* #687: Fix borgmatic error when not finding the configuration schema for certain "pip install
--editable" development installs.
* #688: Fix archive checks being skipped even when particular archives haven't been checked
recently. This occurred when using multiple borgmatic configuration files with different
"archive_name_format"s, for instance.
* #691: Fix error in "borgmatic restore" action when the configured repository path is relative
instead of absolute.
* #694: Run "borgmatic borg" action without capturing output so interactive prompts and flags like
"--progress" still work.
1.7.12
* #413: Add "log_file" context to command hooks so your scripts can consume the borgmatic log file.
See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/add-preparation-and-cleanup-steps-to-backups/
* #666, #670: Fix error when running the "info" action with the "--match-archives" or "--archive"
flags. Also fix the "--match-archives"/"--archive" flags to correctly override the
"match_archives" configuration option for the "transfer", "list", "rlist", and "info" actions.
* #668: Fix error when running the "prune" action with both "archive_name_format" and "prefix"
options set.
* #672: Selectively shallow merge certain mappings or sequences when including configuration files.
See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/#shallow-merge
* #672: Selectively omit list values when including configuration files. See the documentation for
more information:
https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/#list-merge
* #673: View the results of configuration file merging via "validate-borgmatic-config --show" flag.
See the documentation for more information:
https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/#debugging-includes
* Add optional support for running end-to-end tests and building documentation with rootless Podman
instead of Docker.
1.7.11
* #479, #588: BREAKING: Automatically use the "archive_name_format" option to filter which archives
get used for borgmatic actions that operate on multiple archives. Override this behavior with the
new "match_archives" option in the storage section. This change is "breaking" in that it silently
changes which archives get considered for "rlist", "prune", "check", etc. See the documentation
for more information:
https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/#archive-naming
* #479, #588: The "prefix" options have been deprecated in favor of the new "archive_name_format"
auto-matching behavior and the "match_archives" option.
* #658: Add "--log-file-format" flag for customizing the log message format. See the documentation
for more information:
https://torsion.org/borgmatic/docs/how-to/inspect-your-backups/#logging-to-file
* #662: Fix regression in which the "check_repositories" option failed to match repositories.
* #663: Fix regression in which the "transfer" action produced a traceback.
* Add spellchecking of source code during test runs.
1.7.10
* #396: When a database command errors, display and log the error message instead of swallowing it.
* #501: Optionally error if a source directory does not exist via "source_directories_must_exist"
option in borgmatic's location configuration.
* #576: Add support for "file://" paths within "repositories" option.
* #612: Define and use custom constants in borgmatic configuration files. See the documentation for
more information:
https://torsion.org/borgmatic/docs/how-to/make-per-application-backups/#constant-interpolation
* #618: Add support for BORG_FILES_CACHE_TTL environment variable via "borg_files_cache_ttl" option
in borgmatic's storage configuration.
* #623: Fix confusing message when an error occurs running actions for a configuration file.
* #635: Add optional repository labels so you can select a repository via "--repository yourlabel"
at the command-line. See the configuration reference for more information:
https://torsion.org/borgmatic/docs/reference/configuration/
* #649: Add documentation on backing up a database running in a container:
https://torsion.org/borgmatic/docs/how-to/backup-your-databases/#containers
* #655: Fix error when databases are configured and a source directory doesn't exist.
* Add code style plugins to enforce use of Python f-strings and prevent single-letter variables.
To join in the pedantry, refresh your test environment with "tox --recreate".
* Rename scripts/run-full-dev-tests to scripts/run-end-to-end-dev-tests and make it run end-to-end
tests only. Continue using tox to run unit and integration tests.
1.7.9
* #295: Add a SQLite database dump/restore hook.
* #304: Change the default action order when no actions are specified on the command-line to:
"create", "prune", "compact", "check". If you'd like to retain the old ordering ("prune" and
"compact" first), then specify actions explicitly on the command-line.
* #304: Run any command-line actions in the order specified instead of using a fixed ordering.
* #564: Add "--repository" flag to all actions where it makes sense, so you can run borgmatic on
a single configured repository instead of all of them.
* #628: Add a Healthchecks "log" state to send borgmatic logs to Healthchecks without signalling
success or failure.
* #647: Add "--strip-components all" feature on the "extract" action to remove leading path
components of files you extract. Must be used with the "--path" flag.
* Add support for Python 3.11.
1.7.8
* #620: With the "create" action and the "--list" ("--files") flag, only show excluded files at
verbosity 2.
@ -289,7 +797,7 @@
* #398: Clarify canonical home of borgmatic in documentation.
* #406: Clarify that spaces in path names should not be backslashed in path names.
* #423: Fix error handling to error loudly when Borg gets killed due to running out of memory!
* Fix build so as not to attempt to build and push documentation for a non-master branch.
* Fix build so as not to attempt to build and push documentation for a non-main branch.
* "Fix" build failure with Alpine Edge by switching from Edge to Alpine 3.13.
* Move #borgmatic IRC channel from Freenode to Libera Chat due to Freenode takeover drama.
IRC connection info: https://torsion.org/borgmatic/#issues
@ -352,7 +860,7 @@
configuration schema descriptions.
1.5.6
* #292: Allow before_backup and similiar hooks to exit with a soft failure without altering the
* #292: Allow before_backup and similar hooks to exit with a soft failure without altering the
monitoring status on Healthchecks or other providers. Support this by waiting to ping monitoring
services with a "start" status until after before_* hooks finish. Failures in before_* hooks
still trigger a monitoring "fail" status.
@ -421,7 +929,7 @@
* For "list" and "info" actions, show repository names even at verbosity 0.
1.4.22
* #276, #285: Disable colored output when "--json" flag is used, so as to produce valid JSON ouput.
* #276, #285: Disable colored output when "--json" flag is used, so as to produce valid JSON output.
* After a backup of a database dump in directory format, properly remove the dump directory.
* In "borgmatic --help", don't expand $HOME in listing of default "--config" paths.
@ -793,7 +1301,7 @@
* #77: Skip non-"*.yaml" config filenames in /etc/borgmatic.d/ so as not to parse backup files,
editor swap files, etc.
* #81: Document user-defined hooks run before/after backup, or on error.
* Add code style guidelines to the documention.
* Add code style guidelines to the documentation.
1.2.0
* #61: Support for Borg --list option via borgmatic command-line to list all archives.

121
README.md
View file

@ -11,68 +11,72 @@ borgmatic is simple, configuration-driven backup software for servers and
workstations. Protect your files with client-side encryption. Backup your
databases too. Monitor it all with integrated third-party services.
The canonical home of borgmatic is at <a href="https://torsion.org/borgmatic">https://torsion.org/borgmatic</a>.
The canonical home of borgmatic is at <a href="https://torsion.org/borgmatic">https://torsion.org/borgmatic/</a>
Here's an example configuration file:
```yaml
location:
# List of source directories to backup.
source_directories:
- /home
- /etc
# List of source directories to backup.
source_directories:
- /home
- /etc
# Paths of local or remote repositories to backup to.
repositories:
- ssh://1234@usw-s001.rsync.net/./backups.borg
- ssh://k8pDxu32@k8pDxu32.repo.borgbase.com/./repo
- /var/lib/backups/local.borg
# Paths of local or remote repositories to backup to.
repositories:
- path: ssh://k8pDxu32@k8pDxu32.repo.borgbase.com/./repo
label: borgbase
- path: /var/lib/backups/local.borg
label: local
retention:
# Retention policy for how many backups to keep.
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
# Retention policy for how many backups to keep.
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
consistency:
# List of checks to run to validate your backups.
checks:
- name: repository
- name: archives
frequency: 2 weeks
# List of checks to run to validate your backups.
checks:
- name: repository
- name: archives
frequency: 2 weeks
hooks:
# Custom preparation scripts to run.
before_backup:
- prepare-for-backup.sh
# Custom preparation scripts to run.
before_backup:
- prepare-for-backup.sh
# Databases to dump and include in backups.
postgresql_databases:
- name: users
# Databases to dump and include in backups.
postgresql_databases:
- name: users
# Third-party services to notify you if backups aren't happening.
healthchecks: https://hc-ping.com/be067061-cf96-4412-8eae-62b0c50d6a8c
# Third-party services to notify you if backups aren't happening.
healthchecks:
ping_url: https://hc-ping.com/be067061-cf96-4412-8eae-62b0c50d6a8c
```
Want to see borgmatic in action? Check out the <a
href="https://asciinema.org/a/203761?autoplay=1" target="_blank">screencast</a>.
<a href="https://asciinema.org/a/203761?autoplay=1" target="_blank"><img src="https://asciinema.org/a/203761.png" width="480"></a>
borgmatic is powered by [Borg Backup](https://www.borgbackup.org/).
## Integrations
<a href="https://www.postgresql.org/"><img src="docs/static/postgresql.png" alt="PostgreSQL" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.mysql.com/"><img src="docs/static/mysql.png" alt="MySQL" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://mariadb.com/"><img src="docs/static/mariadb.png" alt="MariaDB" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.mongodb.com/"><img src="docs/static/mongodb.png" alt="MongoDB" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://healthchecks.io/"><img src="docs/static/healthchecks.png" alt="Healthchecks" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://cronitor.io/"><img src="docs/static/cronitor.png" alt="Cronitor" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://cronhub.io/"><img src="docs/static/cronhub.png" alt="Cronhub" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.pagerduty.com/"><img src="docs/static/pagerduty.png" alt="PagerDuty" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://ntfy.sh/"><img src="docs/static/ntfy.png" alt="ntfy" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.borgbase.com/?utm_source=borgmatic"><img src="docs/static/borgbase.png" alt="BorgBase" height="60px" style="margin-bottom:20px;"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.postgresql.org/"><img src="docs/static/postgresql.png" alt="PostgreSQL" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://www.mysql.com/"><img src="docs/static/mysql.png" alt="MySQL" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://mariadb.com/"><img src="docs/static/mariadb.png" alt="MariaDB" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://www.mongodb.com/"><img src="docs/static/mongodb.png" alt="MongoDB" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://sqlite.org/"><img src="docs/static/sqlite.png" alt="SQLite" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://openzfs.org/"><img src="docs/static/openzfs.png" alt="OpenZFS" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://btrfs.readthedocs.io/"><img src="docs/static/btrfs.png" alt="Btrfs" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://sourceware.org/lvm2/"><img src="docs/static/lvm.png" alt="LVM" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://rclone.org"><img src="docs/static/rclone.png" alt="rclone" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://healthchecks.io/"><img src="docs/static/healthchecks.png" alt="Healthchecks" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://uptime.kuma.pet/"><img src="docs/static/uptimekuma.png" alt="Uptime Kuma" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://cronitor.io/"><img src="docs/static/cronitor.png" alt="Cronitor" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://cronhub.io/"><img src="docs/static/cronhub.png" alt="Cronhub" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://www.pagerduty.com/"><img src="docs/static/pagerduty.png" alt="PagerDuty" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://www.pushover.net/"><img src="docs/static/pushover.png" alt="Pushover" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://ntfy.sh/"><img src="docs/static/ntfy.png" alt="ntfy" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://grafana.com/oss/loki/"><img src="docs/static/loki.png" alt="Loki" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://github.com/caronc/apprise/wiki"><img src="docs/static/apprise.png" alt="Apprise" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://www.zabbix.com/"><img src="docs/static/zabbix.png" alt="Zabbix" height="40px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://sentry.io/"><img src="docs/static/sentry.png" alt="Sentry" height="40px" style="margin-bottom:20px; margin-right:20px;"></a>
<a href="https://www.borgbase.com/?utm_source=borgmatic"><img src="docs/static/borgbase.png" alt="BorgBase" height="60px" style="margin-bottom:20px; margin-right:20px;"></a>
## Getting started
@ -80,8 +84,8 @@ borgmatic is powered by [Borg Backup](https://www.borgbackup.org/).
Your first step is to [install and configure
borgmatic](https://torsion.org/borgmatic/docs/how-to/set-up-backups/).
For additional documentation, check out the links above for <a
href="https://torsion.org/borgmatic/#documentation">borgmatic how-to and
For additional documentation, check out the links above (left panel on wide screens)
for <a href="https://torsion.org/borgmatic/#documentation">borgmatic how-to and
reference guides</a>.
@ -89,16 +93,15 @@ reference guides</a>.
Need somewhere to store your encrypted off-site backups? The following hosting
providers include specific support for Borg/borgmatic—and fund borgmatic
development and hosting when you use these links to sign up. (These are
referral links, but without any tracking scripts or cookies.)
development and hosting when you use these referral links to sign up:
<ul>
<li class="referral"><a href="https://www.borgbase.com/?utm_source=borgmatic">BorgBase</a>: Borg hosting service with support for monitoring, 2FA, and append-only repos</li>
<li class="referral"><a href="https://hetzner.cloud/?ref=v9dOJ98Ic9I8">Hetzner</a>: A "storage box" that includes support for Borg</li>
</ul>
Additionally, [rsync.net](https://www.rsync.net/products/borg.html) and
[Hetzner](https://www.hetzner.com/storage/storage-box) have compatible storage
offerings, but do not currently fund borgmatic development or hosting.
Additionally, rsync.net has a compatible storage offering, but does not fund
borgmatic development or hosting.
## Support and contributing
@ -119,10 +122,7 @@ issues.
### Social
Check out the [Borg subreddit](https://www.reddit.com/r/BorgBackup/) for
general Borg and borgmatic discussion and support.
Also follow [borgmatic on Mastodon](https://fosstodon.org/@borgmatic).
Follow [borgmatic on Mastodon](https://fosstodon.org/@borgmatic).
### Chat
@ -163,5 +163,10 @@ Also, please check out the [borgmatic development
how-to](https://torsion.org/borgmatic/docs/how-to/develop-on-borgmatic/) for
info on cloning source code, running tests, etc.
<a href="https://build.torsion.org/borgmatic-collective/borgmatic" alt="build status">![Build Status](https://build.torsion.org/api/badges/borgmatic-collective/borgmatic/status.svg?ref=refs/heads/master)</a>
### Recent contributors
Thanks to all borgmatic contributors! There are multiple ways to contribute to
this project, so the following includes those who have fixed bugs, contributed
features, *or* filed tickets.
{% include borgmatic/contributors.html %}

View file

@ -7,8 +7,8 @@ permalink: security-policy/index.html
While we want to hear about security vulnerabilities in all versions of
borgmatic, security fixes are only made to the most recently released version.
It's simply not practical for our small volunteer effort to maintain multiple
release branches and put out separate security patches for each.
It's not practical for our small volunteer effort to maintain multiple release
branches and put out separate security patches for each.
## Reporting a vulnerability

View file

@ -0,0 +1,9 @@
import argparse
def update_arguments(arguments, **updates):
'''
Given an argparse.Namespace instance of command-line arguments and one or more keyword argument
updates to perform, return a copy of the arguments with those updates applied.
'''
return argparse.Namespace(**dict(vars(arguments), **updates))

View file

@ -1,14 +1,20 @@
import logging
import borgmatic.borg.borg
import borgmatic.borg.rlist
import borgmatic.borg.repo_list
import borgmatic.config.validate
logger = logging.getLogger(__name__)
def run_borg(
repository, storage, local_borg_version, borg_arguments, local_path, remote_path,
repository,
config,
local_borg_version,
borg_arguments,
global_arguments,
local_path,
remote_path,
):
'''
Run the "borg" action for the given repository.
@ -16,18 +22,21 @@ def run_borg(
if borg_arguments.repository is None or borgmatic.config.validate.repositories_match(
repository, borg_arguments.repository
):
logger.info('{}: Running arbitrary Borg command'.format(repository))
archive_name = borgmatic.borg.rlist.resolve_archive_name(
repository,
logger.info(
f'{repository.get("label", repository["path"])}: Running arbitrary Borg command'
)
archive_name = borgmatic.borg.repo_list.resolve_archive_name(
repository['path'],
borg_arguments.archive,
storage,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
)
borgmatic.borg.borg.run_arbitrary_borg(
repository,
storage,
repository['path'],
config,
local_borg_version,
options=borg_arguments.options,
archive=archive_name,

View file

@ -7,7 +7,13 @@ logger = logging.getLogger(__name__)
def run_break_lock(
repository, storage, local_borg_version, break_lock_arguments, local_path, remote_path,
repository,
config,
local_borg_version,
break_lock_arguments,
global_arguments,
local_path,
remote_path,
):
'''
Run the "break-lock" action for the given repository.
@ -15,7 +21,14 @@ def run_break_lock(
if break_lock_arguments.repository is None or borgmatic.config.validate.repositories_match(
repository, break_lock_arguments.repository
):
logger.info(f'{repository}: Breaking repository and cache locks')
borgmatic.borg.break_lock.break_lock(
repository, storage, local_borg_version, local_path=local_path, remote_path=remote_path,
logger.info(
f'{repository.get("label", repository["path"])}: Breaking repository and cache locks'
)
borgmatic.borg.break_lock.break_lock(
repository['path'],
config,
local_borg_version,
global_arguments,
local_path=local_path,
remote_path=remote_path,
)

View file

@ -0,0 +1,38 @@
import logging
import borgmatic.borg.change_passphrase
import borgmatic.config.validate
logger = logging.getLogger(__name__)
def run_change_passphrase(
repository,
config,
local_borg_version,
change_passphrase_arguments,
global_arguments,
local_path,
remote_path,
):
'''
Run the "key change-passprhase" action for the given repository.
'''
if (
change_passphrase_arguments.repository is None
or borgmatic.config.validate.repositories_match(
repository, change_passphrase_arguments.repository
)
):
logger.info(
f'{repository.get("label", repository["path"])}: Changing repository passphrase'
)
borgmatic.borg.change_passphrase.change_passphrase(
repository['path'],
config,
local_borg_version,
change_passphrase_arguments,
global_arguments,
local_path=local_path,
remote_path=remote_path,
)

View file

@ -1,18 +1,692 @@
import calendar
import datetime
import hashlib
import itertools
import logging
import os
import pathlib
import random
import shutil
import borgmatic.actions.create
import borgmatic.borg.check
import borgmatic.borg.create
import borgmatic.borg.environment
import borgmatic.borg.extract
import borgmatic.borg.list
import borgmatic.borg.repo_list
import borgmatic.borg.state
import borgmatic.config.paths
import borgmatic.config.validate
import borgmatic.execute
import borgmatic.hooks.command
DEFAULT_CHECKS = (
{'name': 'repository', 'frequency': '1 month'},
{'name': 'archives', 'frequency': '1 month'},
)
logger = logging.getLogger(__name__)
def parse_checks(config, only_checks=None):
'''
Given a configuration dict with a "checks" sequence of dicts and an optional list of override
checks, return a tuple of named checks to run.
For example, given a config of:
{'checks': ({'name': 'repository'}, {'name': 'archives'})}
This will be returned as:
('repository', 'archives')
If no "checks" option is present in the config, return the DEFAULT_CHECKS. If a checks value
has a name of "disabled", return an empty tuple, meaning that no checks should be run.
'''
checks = only_checks or tuple(
check_config['name'] for check_config in (config.get('checks', None) or DEFAULT_CHECKS)
)
checks = tuple(check.lower() for check in checks)
if 'disabled' in checks:
logger.warning(
'The "disabled" value for the "checks" option is deprecated and will be removed from a future release; use "skip_actions" instead'
)
if len(checks) > 1:
logger.warning(
'Multiple checks are configured, but one of them is "disabled"; not running any checks'
)
return ()
return checks
def parse_frequency(frequency):
'''
Given a frequency string with a number and a unit of time, return a corresponding
datetime.timedelta instance or None if the frequency is None or "always".
For instance, given "3 weeks", return datetime.timedelta(weeks=3)
Raise ValueError if the given frequency cannot be parsed.
'''
if not frequency:
return None
frequency = frequency.strip().lower()
if frequency == 'always':
return None
try:
number, time_unit = frequency.split(' ')
number = int(number)
except ValueError:
raise ValueError(f"Could not parse consistency check frequency '{frequency}'")
if not time_unit.endswith('s'):
time_unit += 's'
if time_unit == 'months':
number *= 30
time_unit = 'days'
elif time_unit == 'years':
number *= 365
time_unit = 'days'
try:
return datetime.timedelta(**{time_unit: number})
except TypeError:
raise ValueError(f"Could not parse consistency check frequency '{frequency}'")
WEEKDAY_DAYS = calendar.day_name[0:5]
WEEKEND_DAYS = calendar.day_name[5:7]
def filter_checks_on_frequency(
config,
borg_repository_id,
checks,
force,
archives_check_id=None,
datetime_now=datetime.datetime.now,
):
'''
Given a configuration dict with a "checks" sequence of dicts, a Borg repository ID, a sequence
of checks, whether to force checks to run, and an ID for the archives check potentially being
run (if any), filter down those checks based on the configured "frequency" for each check as
compared to its check time file.
In other words, a check whose check time file's timestamp is too new (based on the configured
frequency) will get cut from the returned sequence of checks. Example:
config = {
'checks': [
{
'name': 'archives',
'frequency': '2 weeks',
},
]
}
When this function is called with that config and "archives" in checks, "archives" will get
filtered out of the returned result if its check time file is newer than 2 weeks old, indicating
that it's not yet time to run that check again.
Raise ValueError if a frequency cannot be parsed.
'''
if not checks:
return checks
filtered_checks = list(checks)
if force:
return tuple(filtered_checks)
for check_config in config.get('checks', DEFAULT_CHECKS):
check = check_config['name']
if checks and check not in checks:
continue
only_run_on = check_config.get('only_run_on')
if only_run_on:
# Use a dict instead of a set to preserve ordering.
days = dict.fromkeys(only_run_on)
if 'weekday' in days:
days = {
**dict.fromkeys(day for day in days if day != 'weekday'),
**dict.fromkeys(WEEKDAY_DAYS),
}
if 'weekend' in days:
days = {
**dict.fromkeys(day for day in days if day != 'weekend'),
**dict.fromkeys(WEEKEND_DAYS),
}
if calendar.day_name[datetime_now().weekday()] not in days:
logger.info(
f"Skipping {check} check due to day of the week; check only runs on {'/'.join(days)} (use --force to check anyway)"
)
filtered_checks.remove(check)
continue
frequency_delta = parse_frequency(check_config.get('frequency'))
if not frequency_delta:
continue
check_time = probe_for_check_time(config, borg_repository_id, check, archives_check_id)
if not check_time:
continue
# If we've not yet reached the time when the frequency dictates we're ready for another
# check, skip this check.
if datetime_now() < check_time + frequency_delta:
remaining = check_time + frequency_delta - datetime_now()
logger.info(
f'Skipping {check} check due to configured frequency; {remaining} until next check (use --force to check anyway)'
)
filtered_checks.remove(check)
return tuple(filtered_checks)
def make_archives_check_id(archive_filter_flags):
'''
Given a sequence of flags to filter archives, return a unique hash corresponding to those
particular flags. If there are no flags, return None.
'''
if not archive_filter_flags:
return None
return hashlib.sha256(' '.join(archive_filter_flags).encode()).hexdigest()
def make_check_time_path(config, borg_repository_id, check_type, archives_check_id=None):
'''
Given a configuration dict, a Borg repository ID, the name of a check type ("repository",
"archives", etc.), and a unique hash of the archives filter flags, return a path for recording
that check's time (the time of that check last occurring).
'''
borgmatic_state_directory = borgmatic.config.paths.get_borgmatic_state_directory(config)
if check_type in ('archives', 'data'):
return os.path.join(
borgmatic_state_directory,
'checks',
borg_repository_id,
check_type,
archives_check_id if archives_check_id else 'all',
)
return os.path.join(
borgmatic_state_directory,
'checks',
borg_repository_id,
check_type,
)
def write_check_time(path): # pragma: no cover
'''
Record a check time of now as the modification time of the given path.
'''
logger.debug(f'Writing check time at {path}')
os.makedirs(os.path.dirname(path), mode=0o700, exist_ok=True)
pathlib.Path(path, mode=0o600).touch()
def read_check_time(path):
'''
Return the check time based on the modification time of the given path. Return None if the path
doesn't exist.
'''
logger.debug(f'Reading check time from {path}')
try:
return datetime.datetime.fromtimestamp(os.stat(path).st_mtime)
except FileNotFoundError:
return None
def probe_for_check_time(config, borg_repository_id, check, archives_check_id):
'''
Given a configuration dict, a Borg repository ID, the name of a check type ("repository",
"archives", etc.), and a unique hash of the archives filter flags, return the corresponding
check time or None if such a check time does not exist.
When the check type is "archives" or "data", this function probes two different paths to find
the check time, e.g.:
~/.borgmatic/checks/1234567890/archives/9876543210
~/.borgmatic/checks/1234567890/archives/all
... and returns the maximum modification time of the files found (if any). The first path
represents a more specific archives check time (a check on a subset of archives), and the second
is a fallback to the last "all" archives check.
For other check types, this function reads from a single check time path, e.g.:
~/.borgmatic/checks/1234567890/repository
'''
check_times = (
read_check_time(group[0])
for group in itertools.groupby(
(
make_check_time_path(config, borg_repository_id, check, archives_check_id),
make_check_time_path(config, borg_repository_id, check),
)
)
)
try:
return max(check_time for check_time in check_times if check_time)
except ValueError:
return None
def upgrade_check_times(config, borg_repository_id):
'''
Given a configuration dict and a Borg repository ID, upgrade any corresponding check times on
disk from old-style paths to new-style paths.
One upgrade performed is moving the checks directory from:
{borgmatic_source_directory}/checks (e.g., ~/.borgmatic/checks)
to:
{borgmatic_state_directory}/checks (e.g. ~/.local/state/borgmatic)
Another upgrade is renaming an archive or data check path that looks like:
{borgmatic_state_directory}/checks/1234567890/archives
to:
{borgmatic_state_directory}/checks/1234567890/archives/all
'''
borgmatic_source_checks_path = os.path.join(
borgmatic.config.paths.get_borgmatic_source_directory(config), 'checks'
)
borgmatic_state_path = borgmatic.config.paths.get_borgmatic_state_directory(config)
borgmatic_state_checks_path = os.path.join(borgmatic_state_path, 'checks')
if os.path.exists(borgmatic_source_checks_path) and not os.path.exists(
borgmatic_state_checks_path
):
logger.debug(
f'Upgrading archives check times directory from {borgmatic_source_checks_path} to {borgmatic_state_checks_path}'
)
os.makedirs(borgmatic_state_path, mode=0o700, exist_ok=True)
shutil.move(borgmatic_source_checks_path, borgmatic_state_checks_path)
for check_type in ('archives', 'data'):
new_path = make_check_time_path(config, borg_repository_id, check_type, 'all')
old_path = os.path.dirname(new_path)
temporary_path = f'{old_path}.temp'
if not os.path.isfile(old_path) and not os.path.isfile(temporary_path):
continue
logger.debug(f'Upgrading archives check time file from {old_path} to {new_path}')
try:
shutil.move(old_path, temporary_path)
except FileNotFoundError:
pass
os.mkdir(old_path)
shutil.move(temporary_path, new_path)
def collect_spot_check_source_paths(
repository,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
borgmatic_runtime_directory,
):
'''
Given a repository configuration dict, a configuration dict, the local Borg version, global
arguments as an argparse.Namespace instance, the local Borg path, and the remote Borg path,
collect the source paths that Borg would use in an actual create (but only include files).
'''
stream_processes = any(
borgmatic.hooks.dispatch.call_hooks(
'use_streaming',
config,
repository['path'],
borgmatic.hooks.dispatch.Hook_type.DATA_SOURCE,
).values()
)
working_directory = borgmatic.config.paths.get_working_directory(config)
(create_flags, create_positional_arguments, pattern_file) = (
borgmatic.borg.create.make_base_create_command(
dry_run=True,
repository_path=repository['path'],
config=config,
patterns=borgmatic.actions.create.process_patterns(
borgmatic.actions.create.collect_patterns(config),
working_directory,
),
local_borg_version=local_borg_version,
global_arguments=global_arguments,
borgmatic_runtime_directory=borgmatic_runtime_directory,
local_path=local_path,
remote_path=remote_path,
list_files=True,
stream_processes=stream_processes,
)
)
borg_environment = borgmatic.borg.environment.make_environment(config)
working_directory = borgmatic.config.paths.get_working_directory(config)
paths_output = borgmatic.execute.execute_command_and_capture_output(
create_flags + create_positional_arguments,
capture_stderr=True,
extra_environment=borg_environment,
working_directory=working_directory,
borg_local_path=local_path,
borg_exit_codes=config.get('borg_exit_codes'),
)
paths = tuple(
path_line.split(' ', 1)[1]
for path_line in paths_output.splitlines()
if path_line and path_line.startswith('- ') or path_line.startswith('+ ')
)
return tuple(
path for path in paths if os.path.isfile(os.path.join(working_directory or '', path))
)
BORG_DIRECTORY_FILE_TYPE = 'd'
BORG_PIPE_FILE_TYPE = 'p'
def collect_spot_check_archive_paths(
repository,
archive,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
borgmatic_runtime_directory,
):
'''
Given a repository configuration dict, the name of the latest archive, a configuration dict, the
local Borg version, global arguments as an argparse.Namespace instance, the local Borg path, the
remote Borg path, and the borgmatic runtime directory, collect the paths from the given archive
(but only include files and symlinks and exclude borgmatic runtime directories).
These paths do not have a leading slash, as that's how Borg stores them. As a result, we don't
know whether they came from absolute or relative source directories.
'''
borgmatic_source_directory = borgmatic.config.paths.get_borgmatic_source_directory(config)
return tuple(
path
for line in borgmatic.borg.list.capture_archive_listing(
repository['path'],
archive,
config,
local_borg_version,
global_arguments,
path_format='{type} {path}{NL}', # noqa: FS003
local_path=local_path,
remote_path=remote_path,
)
for (file_type, path) in (line.split(' ', 1),)
if file_type not in (BORG_DIRECTORY_FILE_TYPE, BORG_PIPE_FILE_TYPE)
if pathlib.Path('borgmatic') not in pathlib.Path(path).parents
if pathlib.Path(borgmatic_source_directory.lstrip(os.path.sep))
not in pathlib.Path(path).parents
if pathlib.Path(borgmatic_runtime_directory.lstrip(os.path.sep))
not in pathlib.Path(path).parents
)
SAMPLE_PATHS_SUBSET_COUNT = 10000
def compare_spot_check_hashes(
repository,
archive,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
log_prefix,
source_paths,
):
'''
Given a repository configuration dict, the name of the latest archive, a configuration dict, the
local Borg version, global arguments as an argparse.Namespace instance, the local Borg path, the
remote Borg path, a log label, and spot check source paths, compare the hashes for a sampling of
the source paths with hashes from corresponding paths in the given archive. Return a sequence of
the paths that fail that hash comparison.
'''
# Based on the configured sample percentage, come up with a list of random sample files from the
# source directories.
spot_check_config = next(check for check in config['checks'] if check['name'] == 'spot')
sample_count = max(
int(len(source_paths) * (min(spot_check_config['data_sample_percentage'], 100) / 100)), 1
)
source_sample_paths = tuple(random.sample(source_paths, sample_count))
working_directory = borgmatic.config.paths.get_working_directory(config)
existing_source_sample_paths = {
source_path
for source_path in source_sample_paths
if os.path.exists(os.path.join(working_directory or '', source_path))
}
logger.debug(
f'{log_prefix}: Sampling {sample_count} source paths (~{spot_check_config["data_sample_percentage"]}%) for spot check'
)
source_sample_paths_iterator = iter(source_sample_paths)
source_hashes = {}
archive_hashes = {}
# Only hash a few thousand files at a time (a subset of the total paths) to avoid an "Argument
# list too long" shell error.
while True:
# Hash each file in the sample paths (if it exists).
source_sample_paths_subset = tuple(
itertools.islice(source_sample_paths_iterator, SAMPLE_PATHS_SUBSET_COUNT)
)
if not source_sample_paths_subset:
break
hash_output = borgmatic.execute.execute_command_and_capture_output(
(spot_check_config.get('xxh64sum_command', 'xxh64sum'),)
+ tuple(
path for path in source_sample_paths_subset if path in existing_source_sample_paths
),
working_directory=working_directory,
)
source_hashes.update(
**dict(
(reversed(line.split(' ', 1)) for line in hash_output.splitlines()),
# Represent non-existent files as having empty hashes so the comparison below still works.
**{
path: ''
for path in source_sample_paths_subset
if path not in existing_source_sample_paths
},
)
)
# Get the hash for each file in the archive.
archive_hashes.update(
**dict(
reversed(line.split(' ', 1))
for line in borgmatic.borg.list.capture_archive_listing(
repository['path'],
archive,
config,
local_borg_version,
global_arguments,
list_paths=source_sample_paths_subset,
path_format='{xxh64} {path}{NL}', # noqa: FS003
local_path=local_path,
remote_path=remote_path,
)
if line
)
)
# Compare the source hashes with the archive hashes to see how many match.
failing_paths = []
for path, source_hash in source_hashes.items():
archive_hash = archive_hashes.get(path.lstrip(os.path.sep))
if archive_hash is not None and archive_hash == source_hash:
continue
failing_paths.append(path)
return tuple(failing_paths)
def spot_check(
repository,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
borgmatic_runtime_directory,
):
'''
Given a repository dict, a loaded configuration dict, the local Borg version, global arguments
as an argparse.Namespace instance, the local Borg path, the remote Borg path, and the borgmatic
runtime directory, perform a spot check for the latest archive in the given repository.
A spot check compares file counts and also the hashes for a random sampling of source files on
disk to those stored in the latest archive. If any differences are beyond configured tolerances,
then the check fails.
'''
log_prefix = f'{repository.get("label", repository["path"])}'
logger.debug(f'{log_prefix}: Running spot check')
try:
spot_check_config = next(
check for check in config.get('checks', ()) if check.get('name') == 'spot'
)
except StopIteration:
raise ValueError('Cannot run spot check because it is unconfigured')
if spot_check_config['data_tolerance_percentage'] > spot_check_config['data_sample_percentage']:
raise ValueError(
'The data_tolerance_percentage must be less than or equal to the data_sample_percentage'
)
source_paths = collect_spot_check_source_paths(
repository,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
borgmatic_runtime_directory,
)
logger.debug(f'{log_prefix}: {len(source_paths)} total source paths for spot check')
archive = borgmatic.borg.repo_list.resolve_archive_name(
repository['path'],
'latest',
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
)
logger.debug(f'{log_prefix}: Using archive {archive} for spot check')
archive_paths = collect_spot_check_archive_paths(
repository,
archive,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
borgmatic_runtime_directory,
)
logger.debug(f'{log_prefix}: {len(archive_paths)} total archive paths for spot check')
if len(source_paths) == 0:
logger.debug(
f'{log_prefix}: Paths in latest archive but not source paths: {", ".join(set(archive_paths)) or "none"}'
)
raise ValueError(
'Spot check failed: There are no source paths to compare against the archive'
)
# Calculate the percentage delta between the source paths count and the archive paths count, and
# compare that delta to the configured count tolerance percentage.
count_delta_percentage = abs(len(source_paths) - len(archive_paths)) / len(source_paths) * 100
if count_delta_percentage > spot_check_config['count_tolerance_percentage']:
rootless_source_paths = set(path.lstrip(os.path.sep) for path in source_paths)
logger.debug(
f'{log_prefix}: Paths in source paths but not latest archive: {", ".join(rootless_source_paths - set(archive_paths)) or "none"}'
)
logger.debug(
f'{log_prefix}: Paths in latest archive but not source paths: {", ".join(set(archive_paths) - rootless_source_paths) or "none"}'
)
raise ValueError(
f'Spot check failed: {count_delta_percentage:.2f}% file count delta between source paths and latest archive (tolerance is {spot_check_config["count_tolerance_percentage"]}%)'
)
failing_paths = compare_spot_check_hashes(
repository,
archive,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
log_prefix,
source_paths,
)
# Error if the percentage of failing hashes exceeds the configured tolerance percentage.
logger.debug(f'{log_prefix}: {len(failing_paths)} non-matching spot check hashes')
data_tolerance_percentage = spot_check_config['data_tolerance_percentage']
failing_percentage = (len(failing_paths) / len(source_paths)) * 100
if failing_percentage > data_tolerance_percentage:
logger.debug(
f'{log_prefix}: Source paths with data not matching the latest archive: {", ".join(failing_paths)}'
)
raise ValueError(
f'Spot check failed: {failing_percentage:.2f}% of source paths with data not matching the latest archive (tolerance is {data_tolerance_percentage}%)'
)
logger.info(
f'{log_prefix}: Spot check passed with a {count_delta_percentage:.2f}% file count delta and a {failing_percentage:.2f}% file data delta'
)
def run_check(
config_filename,
repository,
location,
storage,
consistency,
hooks,
config,
hook_context,
local_borg_version,
check_arguments,
@ -22,32 +696,94 @@ def run_check(
):
'''
Run the "check" action for the given repository.
Raise ValueError if the Borg repository ID cannot be determined.
'''
if check_arguments.repository and not borgmatic.config.validate.repositories_match(
repository, check_arguments.repository
):
return
borgmatic.hooks.command.execute_hook(
hooks.get('before_check'),
hooks.get('umask'),
config.get('before_check'),
config.get('umask'),
config_filename,
'pre-check',
global_arguments.dry_run,
**hook_context,
)
logger.info('{}: Running consistency checks'.format(repository))
borgmatic.borg.check.check_archives(
repository,
location,
storage,
consistency,
log_prefix = repository.get('label', repository['path'])
logger.info(f'{log_prefix}: Running consistency checks')
repository_id = borgmatic.borg.check.get_repository_id(
repository['path'],
config,
local_borg_version,
global_arguments,
local_path=local_path,
remote_path=remote_path,
progress=check_arguments.progress,
repair=check_arguments.repair,
only_checks=check_arguments.only,
force=check_arguments.force,
)
upgrade_check_times(config, repository_id)
configured_checks = parse_checks(config, check_arguments.only_checks)
archive_filter_flags = borgmatic.borg.check.make_archive_filter_flags(
local_borg_version, config, configured_checks, check_arguments
)
archives_check_id = make_archives_check_id(archive_filter_flags)
checks = filter_checks_on_frequency(
config,
repository_id,
configured_checks,
check_arguments.force,
archives_check_id,
)
borg_specific_checks = set(checks).intersection({'repository', 'archives', 'data'})
if borg_specific_checks:
borgmatic.borg.check.check_archives(
repository['path'],
config,
local_borg_version,
check_arguments,
global_arguments,
borg_specific_checks,
archive_filter_flags,
local_path=local_path,
remote_path=remote_path,
)
for check in borg_specific_checks:
write_check_time(make_check_time_path(config, repository_id, check, archives_check_id))
if 'extract' in checks:
borgmatic.borg.extract.extract_last_archive_dry_run(
config,
local_borg_version,
global_arguments,
repository['path'],
config.get('lock_wait'),
local_path,
remote_path,
)
write_check_time(make_check_time_path(config, repository_id, 'extract'))
if 'spot' in checks:
with borgmatic.config.paths.Runtime_directory(
config, log_prefix
) as borgmatic_runtime_directory:
spot_check(
repository,
config,
local_borg_version,
global_arguments,
local_path,
remote_path,
borgmatic_runtime_directory,
)
write_check_time(make_check_time_path(config, repository_id, 'spot'))
borgmatic.hooks.command.execute_hook(
hooks.get('after_check'),
hooks.get('umask'),
config.get('after_check'),
config.get('umask'),
config_filename,
'post-check',
global_arguments.dry_run,

View file

@ -2,6 +2,7 @@ import logging
import borgmatic.borg.compact
import borgmatic.borg.feature
import borgmatic.config.validate
import borgmatic.hooks.command
logger = logging.getLogger(__name__)
@ -10,9 +11,7 @@ logger = logging.getLogger(__name__)
def run_compact(
config_filename,
repository,
storage,
retention,
hooks,
config,
hook_context,
local_borg_version,
compact_arguments,
@ -24,21 +23,29 @@ def run_compact(
'''
Run the "compact" action for the given repository.
'''
if compact_arguments.repository and not borgmatic.config.validate.repositories_match(
repository, compact_arguments.repository
):
return
borgmatic.hooks.command.execute_hook(
hooks.get('before_compact'),
hooks.get('umask'),
config.get('before_compact'),
config.get('umask'),
config_filename,
'pre-compact',
global_arguments.dry_run,
**hook_context,
)
if borgmatic.borg.feature.available(borgmatic.borg.feature.Feature.COMPACT, local_borg_version):
logger.info('{}: Compacting segments{}'.format(repository, dry_run_label))
logger.info(
f'{repository.get("label", repository["path"])}: Compacting segments{dry_run_label}'
)
borgmatic.borg.compact.compact_segments(
global_arguments.dry_run,
repository,
storage,
repository['path'],
config,
local_borg_version,
global_arguments,
local_path=local_path,
remote_path=remote_path,
progress=compact_arguments.progress,
@ -46,10 +53,12 @@ def run_compact(
threshold=compact_arguments.threshold,
)
else: # pragma: nocover
logger.info('{}: Skipping compact (only available/needed in Borg 1.2+)'.format(repository))
logger.info(
f'{repository.get("label", repository["path"])}: Skipping compact (only available/needed in Borg 1.2+)'
)
borgmatic.hooks.command.execute_hook(
hooks.get('after_compact'),
hooks.get('umask'),
config.get('after_compact'),
config.get('umask'),
config_filename,
'post-compact',
global_arguments.dry_run,

View file

View file

@ -0,0 +1,132 @@
import json
import logging
import os
import borgmatic.borg.extract
import borgmatic.borg.repo_list
import borgmatic.config.paths
import borgmatic.config.validate
import borgmatic.hooks.command
logger = logging.getLogger(__name__)
def make_bootstrap_config(bootstrap_arguments):
'''
Given the bootstrap arguments as an argparse.Namespace, return a corresponding config dict.
'''
return {
'ssh_command': bootstrap_arguments.ssh_command,
# In case the repo has been moved or is accessed from a different path at the point of
# bootstrapping.
'relocated_repo_access_is_ok': True,
}
def get_config_paths(archive_name, bootstrap_arguments, global_arguments, local_borg_version):
'''
Given an archive name, the bootstrap arguments as an argparse.Namespace (containing the
repository and archive name, Borg local path, Borg remote path, borgmatic runtime directory,
borgmatic source directory, destination directory, and whether to strip components), the global
arguments as an argparse.Namespace (containing the dry run flag and the local borg version),
return the config paths from the manifest.json file in the borgmatic source directory or runtime
directory after extracting it from the repository archive.
Raise ValueError if the manifest JSON is missing, can't be decoded, or doesn't contain the
expected configuration path data.
'''
borgmatic_source_directory = borgmatic.config.paths.get_borgmatic_source_directory(
{'borgmatic_source_directory': bootstrap_arguments.borgmatic_source_directory}
)
config = make_bootstrap_config(bootstrap_arguments)
# Probe for the manifest file in multiple locations, as the default location has moved to the
# borgmatic runtime directory (which gets stored as just "/borgmatic" with Borg 1.4+). But we
# still want to support reading the manifest from previously created archives as well.
with borgmatic.config.paths.Runtime_directory(
{'user_runtime_directory': bootstrap_arguments.user_runtime_directory},
bootstrap_arguments.repository,
) as borgmatic_runtime_directory:
for base_directory in (
'borgmatic',
borgmatic.config.paths.make_runtime_directory_glob(borgmatic_runtime_directory),
borgmatic_source_directory,
):
borgmatic_manifest_path = 'sh:' + os.path.join(
base_directory, 'bootstrap', 'manifest.json'
)
extract_process = borgmatic.borg.extract.extract_archive(
global_arguments.dry_run,
bootstrap_arguments.repository,
archive_name,
[borgmatic_manifest_path],
config,
local_borg_version,
global_arguments,
local_path=bootstrap_arguments.local_path,
remote_path=bootstrap_arguments.remote_path,
extract_to_stdout=True,
)
manifest_json = extract_process.stdout.read()
if manifest_json:
break
else:
raise ValueError(
'Cannot read configuration paths from archive due to missing bootstrap manifest'
)
try:
manifest_data = json.loads(manifest_json)
except json.JSONDecodeError as error:
raise ValueError(
f'Cannot read configuration paths from archive due to invalid bootstrap manifest JSON: {error}'
)
try:
return manifest_data['config_paths']
except KeyError:
raise ValueError(
'Cannot read configuration paths from archive due to invalid bootstrap manifest'
)
def run_bootstrap(bootstrap_arguments, global_arguments, local_borg_version):
'''
Run the "bootstrap" action for the given repository.
Raise ValueError if the bootstrap configuration could not be loaded.
Raise CalledProcessError or OSError if Borg could not be run.
'''
config = make_bootstrap_config(bootstrap_arguments)
archive_name = borgmatic.borg.repo_list.resolve_archive_name(
bootstrap_arguments.repository,
bootstrap_arguments.archive,
config,
local_borg_version,
global_arguments,
local_path=bootstrap_arguments.local_path,
remote_path=bootstrap_arguments.remote_path,
)
manifest_config_paths = get_config_paths(
archive_name, bootstrap_arguments, global_arguments, local_borg_version
)
logger.info(f"Bootstrapping config paths: {', '.join(manifest_config_paths)}")
borgmatic.borg.extract.extract_archive(
global_arguments.dry_run,
bootstrap_arguments.repository,
archive_name,
[config_path.lstrip(os.path.sep) for config_path in manifest_config_paths],
config,
local_borg_version,
global_arguments,
local_path=bootstrap_arguments.local_path,
remote_path=bootstrap_arguments.remote_path,
extract_to_stdout=False,
destination_path=bootstrap_arguments.destination,
strip_components=bootstrap_arguments.strip_components,
progress=bootstrap_arguments.progress,
)

View file

@ -0,0 +1,48 @@
import logging
import borgmatic.config.generate
import borgmatic.config.validate
import borgmatic.logger
logger = logging.getLogger(__name__)
def run_generate(generate_arguments, global_arguments):
'''
Given the generate arguments and the global arguments, each as an argparse.Namespace instance,
run the "generate" action.
Raise FileExistsError if a file already exists at the destination path and the generate
arguments do not have overwrite set.
'''
borgmatic.logger.add_custom_log_levels()
dry_run_label = ' (dry run; not actually writing anything)' if global_arguments.dry_run else ''
logger.answer(
f'Generating a configuration file at: {generate_arguments.destination_filename}{dry_run_label}'
)
borgmatic.config.generate.generate_sample_configuration(
global_arguments.dry_run,
generate_arguments.source_filename,
generate_arguments.destination_filename,
borgmatic.config.validate.schema_filename(),
overwrite=generate_arguments.overwrite,
)
if generate_arguments.source_filename:
logger.answer(
f'''
Merged in the contents of configuration file at: {generate_arguments.source_filename}
To review the changes made, run:
diff --unified {generate_arguments.source_filename} {generate_arguments.destination_filename}'''
)
logger.answer(
'''
This includes all available configuration options with example values, the few
required options as indicated. Please edit the file to suit your needs.
If you ever need help: https://torsion.org/borgmatic/#issues'''
)

View file

@ -0,0 +1,25 @@
import logging
import borgmatic.config.generate
import borgmatic.logger
logger = logging.getLogger(__name__)
def run_validate(validate_arguments, configs):
'''
Given the validate arguments as an argparse.Namespace instance and a dict of configuration
filename to corresponding parsed configuration, run the "validate" action.
Most of the validation is actually performed implicitly by the standard borgmatic configuration
loading machinery prior to here, so this function mainly exists to support additional validate
flags like "--show".
'''
borgmatic.logger.add_custom_log_levels()
if validate_arguments.show:
for config_path, config in configs.items():
if len(configs) > 1:
logger.answer('---')
logger.answer(borgmatic.config.generate.render_configuration(config))

View file

@ -1,20 +1,261 @@
import json
import glob
import itertools
import logging
import os
import pathlib
import borgmatic.actions.json
import borgmatic.borg.create