• Onebox v33.17.0
    Release / build-and-release (push) Failing after 12m19s
    Stable

    philkunz released this 2026-10-14 00:42:17 +00:00 | 9 commits to main since this release

    2026-10-14 - 33.17.0

    Features

    • Backups leave out the object-storage data an App Store version declares as non-backup data (backupExclusions, @serve.zone/interfaces 32.56.0), such as Cloudly's workload logs under runtime-logs/: a restore brings back state, not past logs. The declaration is read from the installed template snapshot, normalized by @serve.zone/appstore 33.6.0, and legacy-s3 names the service's one Corestore bucket. The bucket is listed with Delimiter='/', skipping a declared prefix without listing anything under it, so an excluded subtree costs one entry of its parent's listing on an objectstorage that walks the whole bucket for every list request; the 100,000-object and 16 MiB manifest caps count included objects only. Every bucket is now listed before the archive ingest starts, so the ingest's idle timeout never waits on a listing, and closing the backup manager (daemon shutdown) aborts that listing. The bucket manifest names the prefixes in excludedKeyPrefixes (written only when something was left out, so a backup without exclusions keeps the shape earlier releases restore); the backup row and snapshot tag dataExclusion record which version's declaration applied and why, and onebox backup import derives the same record from the imported bucket manifests (origin: 'import'); a restore logs the prefixes it does not restore and deletes nothing. An App Store service without a snapshot of its version is exported in full, with the reason recorded. onebox backup create <service> --upgrade-target <version> takes a backup for an upgrade and applies the target version's declaration when the target pins the installed version's image digest, the installed version's otherwise. Onebox advertises storage.object-storage.backup-exclusions, so catalog versions that declare exclusions become installable and upgradable; the exclusion applies to the legacy-s3 platform-resource bucket, and services with named object-storage requests stay refused for backup. The canonical storage handoff of @serve.zone/appstore 33.6.0 carries backupExclusions; a handoff a service or a backup saved before it has none, which Onebox reads as no declaration, so existing services and earlier backups keep validating.

    Fixes

    • A backup whose ContainerArchive ingest is aborted fails by name instead of ending the daemon. When an item's socket fell silent, ContainerArchive destroyed the item's stream with Ingest timed out after 300000ms without socket activity; the bundle passed that on to its tar pack, which destroyed the entry waiting in it with the same error. Entries added from bytes in memory (addBytes, such as an S3 bucket's manifest.json, a Valkey export or a Corestore receipt), directory and link entries, and the documents of a backup's OCI image layout had no listener on that entry stream, so the error was an uncaught exception: onebox backup create lost the daemon (exit 1, systemd restart) and the CLI saw Onebox control socket closed without a response. Every such entry now goes through one function (addTarEntry) that listens on it and rejects with the error, so the backup fails with it and the daemon keeps running. The same class of unheard stream errors is closed on the other backup and restore paths: a bundle stopped before anything read it (a download export refused by staging, or whose output file exists), an image layer opened after its layout was destroyed (now closed), an image archive that ends inside a skipped entry, a download export's output file (now opened and its header written through a file handle), restore streams that were opened before their directory was created, and the MariaDB and ClickHouse restore inputs, which are now opened when the restore reads them.

    Maintenance

    • release tooling: pnpm 12.10.1 (@git.zone/tsdeno stays 1.15.0: its 2.x migration ships as its own release, owner decision 2026-10-13)
    Downloads