From e7229626f8cc7c9575ce77a6c4cd602694cbe631 Mon Sep 17 00:00:00 2001 From: Dillard Blom Date: Mon, 5 Oct 2026 11:45:48 +0200 Subject: [PATCH] Prepare the 0.1.0-alpha.1 release info.xml's version field is restricted by Nextcloud's own info.xsd to plain numeric SemVer, no pre-release suffix, so the alpha/beta/rc stage from PLAN.md's release table lives in the git tag and CHANGELOG instead; noted that in PLAN.md so it isn't rediscovered later. Bumped the version, wrote an honest description for an alpha (feature-complete for phase 1, not for production), and added CHANGELOG.md. README: new "Storage backend experiences" section, seeded with the Hetzner Storage Box sub-account root-path quirk found while testing a real SFTP target (root must be "home", not "/"), open for others to extend via PR. --- CHANGELOG.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ PLAN.md | 5 +++++ README.md | 13 +++++++++++++ appinfo/info.xml | 8 ++++++-- 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f352ca0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,44 @@ +# Changelog + +All notable changes to NG Backup are documented here. The format follows +[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning follows the stages in +`PLAN.md` section 9. The `` in `appinfo/info.xml` is plain SemVer-numeric (Nextcloud's +own `info.xsd` doesn't allow a `-alpha`/`-beta`/`-rc` suffix there); the stability stage is instead +carried by the git tag, the release, and this file. + +## [0.1.0-alpha.1] - 2026-10-05 + +First public alpha. Feature-complete for phase 1: scheduled, encrypted, incremental backups, and +restore of files and folders. **Not for production use** — test on a copy of production (dev, +test, staging). Full disaster recovery (`backup:restore:full` on a fresh installation) is phase 2 +and not implemented yet. + +### Added +- Encrypted (XChaCha20-Poly1305), content-addressed, deduplicated, incremental backups, streamed + from source to destination without a local copy of the data. +- Backup locations via files_external's own backend/auth classes, without ever mounting the + location: S3 (and compatible services), SFTP, WebDAV, FTP, Swift, or a local path. +- A recovery kit with up to three passphrase slots, mandatory download-and-confirm before the + first backup runs, and an optional encrypted copy by email. +- Resumable, time-boxed background jobs (database dump, file walk, upload), so a run survives + short PHP time limits and a crash is resumed, never restarted, without leaving the instance in + maintenance mode. +- Database dump and restore without external tools, via Nextcloud's own `IDBConnection`/DBAL, + streamed through the same pipeline as file data. +- Restore of files and folders via the web interface and `occ`, into a new folder, merged, or + replacing the original (with the previous content going to the trash). +- Retention policy (last/daily/weekly/monthly), prune with pack repacking, and a snapshot trash + with a configurable deletion delay. +- Append-only locations and documented recommendations against ransomware and a compromised + server (object lock, delete-less credentials, off-site copies). +- Admin settings page (locations, schedule, retention, key management) and a JSON API. +- Notifications and an admin setup check for a failed or overdue backup. +- CI: unit tests on PHP 8.2–8.4, and an end-to-end backup→restore round trip on Nextcloud 32–35 × + SQLite/MariaDB/PostgreSQL, and against real S3 and SFTP backends (not just a local path). + +### Known limitations +- No full/disaster-recovery restore yet (phase 2). +- No per-user backup/restore via user_migration yet (phase 2). +- No FTP/SMB coverage in CI yet, and no verification/checksum-audit command yet (phase 2). +- See the "Storage backend experiences" section of the README for provider-specific quirks found + so far (e.g. Hetzner Storage Box sub-accounts). diff --git a/PLAN.md b/PLAN.md index e8104dc..de67187 100644 --- a/PLAN.md +++ b/PLAN.md @@ -338,6 +338,11 @@ een backup-app die niet betrouwbaar is, is erger dan geen backup-app. Volgorde: fase 1 grondig testen, reviewen en debuggen; dan nadenken over 0.1.0-alpha.1. Een minimale volledige restore (`occ backup:restore:full` op een verse installatie) komt vóór de beta. +**Let op (ontdekt 2026-10-05):** Nextcloud's eigen `info.xsd` staat voor `` alleen +`[0-9]+(\.[0-9]+){0,2}` toe — geen `-alpha`/`-beta`/`-rc`-achtervoegsel. De stabiliteitsaanduiding +uit deze tabel gaat dus niet in `info.xml` (dat blijft gewoon oplopend, bijv. `0.1.0`), maar in de +git-tag (`v0.1.0-alpha.1`), de GitHub/Gitea release (gemarkeerd als pre-release) en de CHANGELOG. + ## Bijlage: lessen uit nextcloud/backup (test NC34, 2026-10-01) - Externe programma's (`pg_dump`) en extensies (`pgsql`, `mysqli`) → onbruikbaar op standaard/hosted. diff --git a/README.md b/README.md index 393637c..965d49a 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,19 @@ What you should do on the location (strongly recommended): - **Raw restore** of any path (for example `config/`) to a local directory: `occ backup:restore ... --to-directory=DIR`. - **Whole server** (disaster recovery onto a fresh installation): planned for phase 2. +## Storage backend experiences + +Notes from actually running a backend, beyond what's in files_external's own documentation. +Contributions welcome via PR — add what you ran into with your own provider. + +- **Hetzner Storage Box, sub-account:** the SFTP backend's `root` option must be `home`, not `/`. + A sub-account's SFTP login lands in `/home` (confirmed via `pwd()` after login); writing to the + literal chroot root (`/`) fails with a generic `NET_SFTP_STATUS_FAILURE` from the SFTP server, + while the same write under `home` (or a path below it) succeeds. This affects any backend option + form that lets you set a path relative to the account's root, not just ng_backup. Not yet + verified whether this also applies to a Hetzner Storage Box **main** account (only tested with a + sub-account so far) — if you've tried a main account, please say so in a PR. + ## Commands | Command | Purpose | diff --git a/appinfo/info.xml b/appinfo/info.xml index 18a33fd..2314101 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -4,8 +4,12 @@ ng_backup NG Backup Encrypted, incremental backups of your Nextcloud with restore from the web interface - - 0.0.19 + + 0.1.0 agpl Dillard Blom NgBackup