feat: CLI parser, restic discovery+download, pull/push via restic CLI
CI / build (push) Failing after 2s
CI / release (push) Has been skipped

- Args.kt: parses --url, --pack-folder, --token-file, --restic-binary,
    --no-download, -g/--no-gui. Inline and space-separated value forms.
  - Restic.kt: locates restic via 1) --restic-binary override, 2) cached
    <pack-folder>/.cloud-sync/restic-<ver>, 3) system PATH (version match),
    4) auto-download from github releases + sha256 verify against SHA256SUMS.
    bz2 decompression via commons-compress (bzcat fallback).
  - Scope.kt: per-distribution cloud-scope.json with sensible defaults
    (options.txt, config/, journeymap/data/, screenshots/). Auto-excludes
    .cloud-sync/ so we never leak our own credentials.
  - Sync.kt: pull = restic restore latest --target <pack-folder>;
    push = restic backup --files-from <generated> --exclude-file <generated>.
    Empty repos handled (pull is no-op when no snapshots yet).
  - 18 tests pass. Fat jar grew to 6 MB (commons-compress).
This commit is contained in:
2026-06-02 22:41:00 +02:00
parent df02f8a441
commit 31062e98b9
9 changed files with 731 additions and 16 deletions
+4
View File
@@ -21,6 +21,10 @@ dependencies {
// JSON via Kotlin's official lib; supports kotlin data classes natively.
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
// bz2 decompression of restic release archives without shelling out to
// system bzcat (covers stripped-down containers).
implementation("org.apache.commons:commons-compress:1.27.1")
testImplementation(kotlin("test"))
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.10.2")
}