Commit Graph

75 Commits

Author SHA1 Message Date
Nicolas Meienberger
d70ec84baa fix: adapt for new restic 0.19.0 behavior 2026-06-11 20:01:27 +02:00
Nico
fd48ff9ce9 fix(backups): reduce low-cpu backup UI contention (#963)
* fix(backups): reduce low-cpu backup UI contention

* chore: remove un-used import

* refactor: start polling for backup updates on start event

* fix: skip ionice automatically if it fails to schedule
2026-06-10 19:36:56 +02:00
Nico
d0b6844435 fix(backups): skip warning messages on exit code 0 (#965) 2026-06-10 18:33:52 +02:00
Nico
5dabe9dec5 refactor: buffer backup / restore progress (#956) 2026-06-08 17:36:20 +02:00
Nico
ef6b68490b docs: performance tuning (#952)
* docs: performance tuning

* chore: pr feedback
2026-06-07 10:28:55 +02:00
Nicolas Meienberger
4bba2c2493 refactor: remove repository lock diagnostics logs 2026-06-04 19:58:02 +02:00
Nicolas Meienberger
edab1b231b fix(restic): validate lock diagnostics object IDs 2026-06-03 18:47:04 +02:00
Nico
333c11986d feat: enforce protocol version between agent and controller (#938)
* feat: enforce protocol version between agent and controller

* chore: add logging for protocol rejected message
2026-06-03 18:29:36 +02:00
Nicolas Meienberger
62cdf5dcca fix(backup-config): throw if include patterns have un-supported characters 2026-06-01 20:14:12 +02:00
Nico
00d1dac515 fix(backup-config): throw if include patterns have un-supported chars (#931) 2026-06-01 20:02:07 +02:00
Nico
8fedeef4d1 feat: add restore agent RPC foundation (#929)
* feat: add restore agent RPC foundation

* chore: temp event handlers

* refactor: export restore progress from dto file
2026-05-31 19:39:20 +02:00
Nico
0a2c6bca0c refactor(restic): auto try to unlock and remove stale locks (#926) 2026-05-30 13:21:22 +02:00
Nico
d4436b0cdc refactor(restic): all commands return effects (#924)
* refactor(restic): all commands are effects

* fix(restic): preserve effect failure errors

* chore: pr feedbacks
2026-05-30 10:10:54 +02:00
Nicolas Meienberger
d502b96509 test: fix webhook mocks 2026-05-29 20:45:16 +02:00
Nico
7b5c53bb7d fix(sftp): allow legacy ssh rsa to add support for older servers (#921)
* refactor(e2e): use more stable assertion

* feat(sftp): add legacy ssh-rsa option
2026-05-27 21:19:23 +02:00
Nico
20d202c20e fix(core): enforce webhook timeout (#920) 2026-05-27 20:35:01 +02:00
Nico
11dacd7c71 refactor(agent): store SFTP volume keys in tmp (#888)
* refactor(agent): store SFTP volume keys in tmp

* refactor: store temp keys in /run/zerobyte subfolders

* fix(restic): clean temp secrets dir on env setup failure

* fix: one secrets temp dir per env building
2026-05-17 18:19:09 +02:00
Nico
19a0781667 test: backend integration (#889)
* test: backend integration

* docs: mounted shares acls

* feat: smb expose real ACLs when available

* fix: re-init repo on setup

* chore: add missing @hono/standard-validator package

* chore: add happy-dom dev dep
2026-05-17 15:18:56 +02:00
renovate[bot]
0dccd00539 fix(deps): update bun minor and patch dependencies (#867)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-17 13:54:02 +02:00
Nico
a58fe82d48 refactor: move backup path resolution into agent contract (#872) 2026-05-10 21:46:03 +02:00
Nico
aa7da321ba refactor: dedpulicate volume schemas across packages (#864) 2026-05-09 15:36:25 +02:00
Nico
df4b668560 feat(agent): add volume operation RPC (#861) 2026-05-07 18:11:57 +02:00
renovate[bot]
5e4742488f fix(deps): update bun minor and patch dependencies (#865)
* fix(deps): update bun minor and patch dependencies

* fix: ci

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-05-07 17:11:53 +02:00
Nicolas Meienberger
3c7eb65c7c chore(package-core): remove lock 2026-05-07 09:17:46 +02:00
Nico
e65a135676 feat(agents): create agent registry and service (#849)
* feat(agents): create agent registry and service

* fix: mark agent offline only if the session was removed properly

* refactor: centralize agent backup lifecycle state

* refactor: simplify session management

* refactor: move effect / async boundary in one place

* chore: regen migration

* refactor: improve error handling

* chore: pr feedback
2026-05-05 19:34:10 +02:00
Nicolas Meienberger
e981211a2d fix(notifications): validate webhook headers and show delivery health 2026-05-05 10:24:20 +02:00
Nicolas Meienberger
8772d4796e feat(backups): configure backup webhook timeout 2026-05-04 07:52:21 +02:00
Nicolas Meienberger
38f5a669ae fix(core): preserve significant path whitespace 2026-05-04 07:19:57 +02:00
Nicolas Meienberger
7be7c9edae test(e2e): fix waiting on transitive state 2026-05-03 20:51:43 +02:00
Nico
220e2d2801 feat: make webhook calls trusted only (#848)
* feat: make webhook calls trusted only

* fix: pr feedbacks
2026-04-30 22:14:22 +02:00
Nico
11e9fbcc44 feat: pre/post backup webhooks (#835)
* feat: pre/post backup webhooks

* fix(hooks): run post when cancelled

* refactor(webhooks): headers as array

* refactor: pr feedback

* refactor: simplify hooks ceremonies

* chore: pr feedbacks

* chore: re-gen migration
2026-04-29 23:48:58 +02:00
Nico
e506047415 test: add property-based tests with fast-check (#832) 2026-04-25 09:35:28 +02:00
Nicolas Meienberger
7b3b7583c0 chore: improve sanitize function to catch escaped characters 2026-04-25 09:30:16 +02:00
Nico
e2c9ef0518 chore: fixed unused types (#824) 2026-04-22 22:04:46 +02:00
Eric Hess
d2f65716fe feat(mirrors): add selective snapshot sync to mirror repositories (#755)
* feat(mirrors): add selective snapshot sync to mirror repositories

Allow users to sync missing snapshots from the source repository to a
mirror. A new sync button per mirror opens a dialog showing which
snapshots are missing, with checkboxes to select which ones to copy.

- Add GET /:shortId/mirrors/:mirrorShortId/status endpoint to compare
  snapshots between source and mirror repositories
- Add POST /:shortId/mirrors/:mirrorShortId/sync endpoint accepting
  selected snapshotIds in the request body
- Extend restic copy command to accept multiple snapshotIds
- Add sync preview dialog with snapshot selection to the frontend

* refactor: stylistic changes

---------

Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-04-16 21:28:48 +02:00
Nicolas Meienberger
95006a7471 chore(core package): re-organize files 2026-04-16 19:07:11 +02:00
Nico
4520335ebc fix(rclone): pass explicitly the RCLONE_CONF env var (#779) 2026-04-12 09:25:57 +02:00
Nico
863fbfc5cc fix(snapshots): use streamed response to avoid 1 MiB buffer limit on large repos (#771) 2026-04-09 23:47:36 +02:00
Nico
8a4a06f888 chore: migrate toolchain to vite-plus (#762)
* chore: migrate toolchain to vite-plus

* chore: run lint with bunx

* chore: add vp config postinstall
2026-04-09 17:57:19 +02:00
Nico
c371676ad0 feat(agent): add standalone agent runtime (#761)
* feat(agent): add standalone agent runtime

* fix(backups): bridge local executor to Effect restic API

* fix(agent): add Bun and DOM types to agent tsconfig

* refactor: wrap backup error in a tagged effect error

* fix: pr feedbacks
2026-04-08 20:47:15 +02:00
Nico
3169627b79 feat(contracts): add shared agent/controller protocol (#759)
* feat(contracts): add shared agent/controller protocol

* chore: pr feedback
2026-04-08 08:17:15 +02:00
renovate[bot]
7add3dd517 chore(deps): update dependency typescript to v6 (#732)
* chore(deps): update dependency typescript to v6

* chore: fix bun types in core package

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-04-04 17:34:25 +02:00
Nico
4305057185 test: move test runner from Bun to Vitest (#727)
* chore: migrate to vitest

* test: speed up some suites by sharing sessions and mocking expensive non-tested actions

* test: refactor some tests to verify behavior instead of implementation details

* chore: fix linting issues
2026-04-01 20:05:54 +02:00
Nicolas Meienberger
3acf565ccd fix: force user to provide known hosts values in sftp volume / repository creation 2026-03-31 20:27:48 +02:00
Nico
2a219ac042 refactor(backups): consolidate execution into service helpers (#717) 2026-03-29 12:57:47 +02:00
Nicolas Meienberger
dd1aca7e30 test(backup): ensure warning details are returned 2026-03-22 11:06:38 +01:00
Nico
05dd440dea fix(restic): separate error summary from diagnostic details (#694) 2026-03-21 20:50:23 +01:00
Nico
fa8e57a589 fix: close read line interfaces on spawn errors (#693) 2026-03-21 20:46:22 +01:00
Nico
3c9620f973 fix(rclone): correctly propagate RCLONE_NO_CHECK_CERTIFICATE env variable (#692)
Closes #688
2026-03-21 20:42:22 +01:00
Nico
a039bb478e fix: separate raw include paths and patterns (#683)
Separate include patters and included path cleanly to avoid path with special characters to be expanded. Closes https://github.com/nicotsx/zerobyte/discussions/680

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

* **New Features**
  * Added ability to select specific directories and paths for inclusion in backup schedules, separate from pattern-based rules.

* **Bug Fixes & Improvements**
  * Automatically migrates existing backup configurations to work with the new path selection system.
  * Enhanced backup restoration to properly handle both selected paths and pattern-based inclusions.

* **Chores**
  * Updated database schema to support path selections in backup schedules.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-20 19:27:54 +01:00