Commit Graph

60 Commits

Author SHA1 Message Date
Nico
4520335ebc fix(rclone): pass explicitly the RCLONE_CONF env var (#779) 2026-04-12 09:25:57 +02:00
Nico
28ba8657f9 feat(runtime): start and ship the local agent (#767)
* feat(runtime): start and ship the local agent

* refactor: gate local agent behind feature flag

* chore: skip agent manager if flag is false

* fix: hot reload agents

* test: fix config tests
2026-04-10 00:00:30 +02:00
Nico
70c7de1efc feat(config): add support for APP_SECRET as a file (#769)
* feat(config): add support for APP_SECRET as a file

* fix(tsc): ensure appSecret is set in type system

* fix: pr feedback
2026-04-09 23:13:07 +02:00
Nicolas Meienberger
049becb900 refactor(mutex): improve multi locks operations to wait for all
Wait for all locks to be available instead of locking one side and
waiting
2026-04-07 18:13:02 +02:00
Nico
a4e54ac527 fix: serialize mirror copy operations per destination repository (#747)
* fix: serialize mirror copy operations per destination repository

* refactor(copy-mirror): implement acquireMany to avoid deadlock cycles
2026-04-04 17:12:45 +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
Nico
e39220c024 fix: allow quoted urls in env variables (#676) 2026-03-17 22:09:22 +01:00
Nicolas Meienberger
b298524663 test: disable rate limiting in testing 2026-03-13 23:05:14 +01:00
Nico
7473c29948 feat: protect restores that would overwrite important internal path (#663) 2026-03-13 21:33:37 +01:00
Nico
9632c77177 feat: add a trust proxy env to control whether to trust incoming x-forwarded-for headers (#662) 2026-03-13 19:08:08 +01:00
Nico
d74f516336 feat: file-based provisionning of volumes and repos (#656)
* feat: file-based provisionning of volumes and repos

docs: provisioning example

chore: ui improvements

* chore: ci issues
2026-03-12 18:31:42 +01:00
Nico
332e5bffda refactor: extract restic in core package (#651)
* refactor: extract restic in core package

* chore: add turbo task runner

* refactor: split server utils

* chore: simplify withDeps signature and fix non-null assertion
2026-03-11 21:56:07 +01:00
Nico
df312cd419 refactor: move from arktype to zod (#637)
chore: gen api-client
2026-03-09 18:27:03 +01:00
Nico
dd8f471d60 feat: light theme (#638) 2026-03-09 18:16:50 +01:00
Nicolas Meienberger
3d2900ab69 refactor: harden cron validation and fail early in case of wrong pattern 2026-03-08 12:47:19 +01:00
Vutsal
4d8a0b28ca Refactor scheduler to use CronExpressionParser 2026-03-07 21:51:28 -08:00
Nico
4a812a884b refactor(restic): split each command into its own file (#584)
refactor(restic): split each command into its own file

refactor: add missing await before promise expects

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

## Summary by CodeRabbit

## Release Notes

* **Tests**
  * Improved async assertion handling across test suites for enhanced test reliability
  * Expanded test coverage for backup, restore, and other core operations

* **Refactor**
  * Reorganized internal utility structure for improved code maintainability

* **Chores**
  * Updated linting configuration and TypeScript dependencies

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-26 19:51:24 +01:00
Nico
182d39a887 feat: restore snapshot as tar (#550)
* feat: export snapshot as tar file

chore(mutext): prevent double lock release

* chore: pr feedbacks

* fix: dump single file no tar

* chore: pr feedbacks
2026-02-21 10:19:20 +01:00
Nico
de1278a416 refactor: rename DATABASE_URL -> ZEROBYTE_DATABASE_URL (#528) 2026-02-16 19:43:43 +01:00
Nico
bad944a232 feat: restore progress (#281)
* feat: restore progress

* feat: keep restore progress on reload

* refactor: centralize sse event types

* refactor(sse): generic handler factory
2026-02-14 12:35:16 +01:00
Nico
1017f1a38b feat: edit repository form (#507)
* feat: edit repository form

* refactor: local repo path concat as a code migration

* refactor: server constants

* chore: fix lint issue in test file

* refactor: add auth to getServerConstants
2026-02-14 11:49:33 +01:00
Nico
7ebce1166b feat: expand snapshot details with additional info (#505)
* feat: extend snapshot details with more info

Closes #385

* refactor: centralize restic backup schemas

* refactor: pr feedbacks
2026-02-12 18:25:21 +01:00
Nico
825d46c934 refactor: react-router -> tanstack start (#498)
* refactor: move to tanstack start

* refactor: auth flow & volumes

* refactor: repo & snapshot details

* refactor: backups, create repo, volumes

* refactor: create volume & restore snapshot

* refactor: notifications

* refactor: settings

* refactor: breadcrumbs

* fix: ts issues

* refactor: prod deployment

* fix: import css production

* refactor: nitro build

* refactor: winston -> consola

* fix: memory leak is sse events cleanup

* fix: cli usage

* chore: remove rr routes file

* refactor: pr feedbacks

* refactor: patch api client to have a global client per call

* refactor: pr feedbacks

* fix(dockerfile): add explicit port

* fix(e2e): healthcheck under /api
2026-02-11 21:41:06 +01:00
Nico
12d0eda6ef feat: dev panel (#489)
* feat: dev panel

* chore: fix typing issue
2026-02-09 22:04:21 +01:00
Nico
4c7bd31b88 feat: custom rclone conf dir env variable (#432)
* feat: custom rclone conf dir env variable

Closes #238

* chore: rename RCLONE_CONF_DIR -> RCLONE_CONFIG_DIR
2026-02-01 10:24:09 +01:00
Nico
45032362a8 feat: base-url env variable (#419) 2026-01-28 01:19:37 +01:00
Nicolas Meienberger
458799297d refactor: make sse events isolated per org 2026-01-24 22:45:56 +01:00
Nicolas Meienberger
0e5438897c fix(repo-mutex): catch errors and remove listener 2026-01-22 22:06:39 +01:00
Nico
2ab37e6b67 refactor: async doctor (#375)
* feat: background doctor operation

* refactor(repo-details): design layout

* refactor(doctor): support abort signal in all operations

* chore: fix linting issue

* chore: pr feedbacks

* chore: merge conflicts

* refactor: handle aborted signal in all operations

* chore: pr feedbacks

* chore: remove old migration
2026-01-22 21:55:45 +01:00
Nico
451aed8983 Multi users (#381)
* feat(db): add support for multiple users and organizations

* feat: backfill entities with new organization id

* refactor: filter all backend queries to surface only organization specific entities

* refactor: each org has its own restic password

* test: ensure organization is created

* chore: pr feedbacks

* refactor: filter by org id in all places

* refactor: download restic password from stored db password

* refactor(navigation): use volume id in urls instead of name

* feat: disable registrations

* refactor(auth): bubble up auth error to hono

* refactor: use async local storage for cleaner context sharing

* refactor: enable user registration vs disabling it

* test: multi-org isolation

* chore: final cleanup
2026-01-20 22:28:22 +01:00
Nico
bb2bdb9724 test(e2e): admin user registration (#338)
* test(e2e): admin user registration

* ci: e2e workflow

* feat: disable rate limiting env var

* test(e2e): fix order of execution in registration tests

* ci: run e2e tests before release
2026-01-11 10:31:04 +01:00
Nicolas Meienberger
185ce22ce9 feat: configurable trusted origins 2026-01-10 13:22:57 +01:00
Nico
1074d022b3 chore: add a pre-commit hook to format files (#336)
chore: add a pre-commit hook to format files
2026-01-10 11:57:24 +01:00
Nicolas Meienberger
6e68c75ef1 chore: various fixes
fix(create-schedule): expand folder button submitting the form

style(schedule-form): fix multi scrollbar on long file list
2026-01-09 21:25:38 +01:00
Nico
76741d6fb8 refactor: implement a proper code migration system (#324)
* refactor: implement a proper code migration system

* chore: rename .tsx -> .ts
2026-01-08 18:46:32 +01:00
Nico
b216219209 refactor: move from biome to oxlint/oxformat (#311)
* chore: install and configure oxlint

* chore: fix liniting issues

* chore: install and configure oxfmt

* ci: add oxlint action instead of biome

* chore: pr feedbacks

* Revert "chore: pr feedbacks"

This reverts commit 525dcd8d9f.
2026-01-05 21:04:37 +01:00
Nico
21040d7d4c feat: detect if a custom docker hostname was set before defaulting to zerobyte (#298) 2026-01-05 07:07:35 +01:00
Nico
d7bcf4c9e2 feat: display updates and release notes (#290)
* feat: display notification when new release is available

* refactor: standalone re-usable cache util

* refactor: clear cache on server startup

* refactor: add timeout to gh release fetch

* fix: run with app version env variable
2026-01-04 10:19:23 +01:00
Nicolas Meienberger
1fff5f53c5 chore: fix migration version 2026-01-03 00:26:57 +01:00
James Brink
eded452c83 feat: parameterize PORT and MIGRATIONS_PATH environment variables (#253)
* feat: parameterize PORT and MIGRATIONS_PATH environment variables

Allow configuring the server port (default: 4096) and migrations
folder path via environment variables for flexible deployment.

* fix: address PR review feedback

- Use consistent schema syntax (string? instead of key?)
- Remove config tests per maintainer request
2025-12-29 20:59:38 +01:00
Nico
ae5233d9fb refactor: tag snapshots with schedule short_id instead of db id (#248)
* refactor: tag snapshots with schedule short_id instead of db id

* chore: formatting issues
2025-12-28 11:42:25 +01:00
Nico
54068d5269 feat: allow changing the hostname (restic host) (#240) 2025-12-26 21:02:16 +01:00
Nico
55e27ef0b5 feat: server timeout env (#219)
* feat: increase server idle timeout and allow to modify it via env

* chore(app): move auth middleware to individual controller

To clean up de main app.ts file

* chore: remove console.log
2025-12-22 17:34:27 +01:00
Nico
598de4e078 fix: schedules not running if never run manually (#194)
* fix: backups that were never run manually are not picked up by job

* fix(mutex): prioritize waiting exclusive locks over newly added shared tasks
2025-12-20 11:28:18 +01:00
Nico
61dc07b36b Controllers tests (#187)
* test: backups service

* refactor: create hono app in a separate file

To avoid side effects like db migration or startup scripts when testing

test(backups): add security tests to the backups controller

* ci: run typechecks, build and tests on PR

* test: controllers security tests

* chore: update lock file

* refactor: pr feedbacks
2025-12-19 19:25:21 +01:00
Nico
94f49e2022 refactor: separate healthcheck and auto remount in two separate jobs (#179)
* refactor: separate healthcheck and auto remount in two separate jobs

* fix: try catch in volume auto remount
2025-12-18 23:03:41 +01:00
Nico
6a86de7b95 refactor: add default excludes to backups (#178)
- To avoid accidentaly backing up a repository to itself
- To avoid accidentaly backing up zerobyte's internal data
2025-12-18 22:34:21 +01:00
Nicolas Meienberger
c8962bb023 chore(frontend): parametrize server IP 2025-12-16 17:38:02 +01:00
Nico
b23317354c refactor: allow to run without the SYS_ADMIN cap for simple setups (#138)
* refactor: allow to run without the SYS_ADMIN cap for simple setups

* fix: pr feedback
2025-12-14 20:30:33 +01:00
Nico
361311285a refactor: remove docker volum plugin functionnality (#137) 2025-12-14 11:07:32 +01:00