Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
990a1e4
feat!: rewrite getter as package-centric CLI core
xz-dev Jun 21, 2026
475c3b2
feat(update): add deterministic update selection
xz-dev Jun 21, 2026
2ca92b8
fix: satisfy clippy on stable
xz-dev Jun 22, 2026
90c02ba
fix(lua): support lib-prefixed repository modules
xz-dev Jun 22, 2026
bf932d6
fix(lua): constrain lib-prefixed module loading
xz-dev Jun 22, 2026
f746c96
fix(lua): avoid default cwd module leakage
xz-dev Jun 22, 2026
3b7613d
fix(android): keep JNI facade free of Lua domain deps
xz-dev Jun 22, 2026
7357980
feat(cli): expose legacy migration reports
xz-dev Jun 22, 2026
6be047a
fix(cli): keep migration report list sanitized
xz-dev Jun 22, 2026
1381686
feat(cli): add offline repo validation
xz-dev Jun 22, 2026
f1035d3
fix(core): include schema field diagnostics
xz-dev Jun 22, 2026
255a9c7
fix(core): constrain Lua validation environment
xz-dev Jun 22, 2026
17b0e28
feat(cli): import legacy Room databases
xz-dev Jun 22, 2026
05397e1
feat(cli): add installed app autogen
xz-dev Jun 22, 2026
196cd8c
feat(cli): add offline update check
xz-dev Jun 22, 2026
cb4cb65
feat(cli): add offline task lifecycle
xz-dev Jun 23, 2026
cee3b00
feat: share installed autogen operations
xz-dev Jun 23, 2026
21dc994
feat: share legacy room operations
xz-dev Jun 24, 2026
8e3e3c1
feat(core): add in-memory task runtime
xz-dev Jun 25, 2026
aa0b75e
feat(operations): expose runtime task controls
xz-dev Jun 25, 2026
c4f2c28
feat(operations): issue actions from update checks
xz-dev Jun 25, 2026
604a5f6
feat(core): accept static update candidates
xz-dev Jun 25, 2026
1738c03
feat(operations): issue actions from registered packages
xz-dev Jun 25, 2026
9ae7e56
feat(storage): rename ignored version to pin version
xz-dev Jun 25, 2026
ae5b00c
feat(cli): add runtime script debug tasks
xz-dev Jun 25, 2026
1cde4f4
feat(providers): wrap static updates as mock provider
xz-dev Jun 25, 2026
60a6515
feat(operations): expose read model operations
xz-dev Jun 25, 2026
3d26880
feat(repository): load ADR-0012 data-dir config
xz-dev Jun 26, 2026
3388b78
feat(repository): discover package directories
xz-dev Jun 26, 2026
8e880e6
feat(autogen): write installed packages as directories
xz-dev Jun 26, 2026
367fa9b
feat(repository): evaluate package directories
xz-dev Jun 26, 2026
15788b4
fix(core): satisfy clippy for Lua errors
xz-dev Jun 26, 2026
091bb9f
feat(lua): expose package-local file reads
xz-dev Jun 26, 2026
139d1ff
fix(repository): hash package-local file inputs
xz-dev Jun 26, 2026
edbebce
feat(cache): add provider refresh primitives
xz-dev Jun 26, 2026
bc94040
feat(providers): parse F-Droid catalog fixtures
xz-dev Jun 26, 2026
d60cc75
feat(operations): cache F-Droid catalog fixtures
xz-dev Jun 26, 2026
de63a6b
feat(autogen): generate F-Droid package directories
xz-dev Jun 27, 2026
6d91ce5
feat(autogen): match F-Droid installed inventory
xz-dev Jun 27, 2026
9001bb9
feat(providers): add GitHub release fixtures
xz-dev Jun 27, 2026
32e0fb3
refactor(repository): remove flat Lua repository layout
xz-dev Jun 27, 2026
a67e822
feat(providers): add GitHub latest commit fixtures
xz-dev Jun 27, 2026
496bc08
test(lua): cover F-Droid luaclass shape
xz-dev Jun 27, 2026
d8cd8c9
test(lua): cover GitHub luaclass shape
xz-dev Jun 27, 2026
7eb6ab2
feat(lua): add host binding injection seam
xz-dev Jun 27, 2026
236cfae
feat(lua): add dev provider host package eval
xz-dev Jun 27, 2026
0f74313
feat(lua): add F-Droid dev provider host eval
xz-dev Jun 27, 2026
517bbcf
feat(lua): add builtin luaclass fallback
xz-dev Jun 27, 2026
759e7b8
feat(lua): add HTTP host seam
xz-dev Jun 27, 2026
939c6de
feat(lua): add dev provider luaclass modules
xz-dev Jun 27, 2026
03e81cc
feat(lua): add HTTP policy harness
xz-dev Jun 27, 2026
25c510a
feat(lua): add runtime hook harness
xz-dev Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2,521 changes: 784 additions & 1,737 deletions Cargo.lock

Large diffs are not rendered by default.

69 changes: 32 additions & 37 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,39 @@ name = "getter"
version = "0.1.0"
edition = "2021"

[workspace]
resolver = "2"
members = [
"crates/getter-core",
"crates/getter-storage",
"crates/getter-providers",
"crates/getter-downloader",
"crates/getter-operations",
"crates/getter-plugin-api",
"crates/getter-rpc",
"crates/getter-cli",
"crates/getter-ffi",
]

[workspace.package]
version = "0.1.0"
edition = "2021"

[features]
default = ["rustls-platform-verifier"]
rustls-platform-verifier = ["hyper-rustls/rustls-platform-verifier", "dep:rustls-platform-verifier"]
default = ["cli", "domain"]
domain = ["dep:getter-core", "dep:getter-storage", "dep:getter-operations"]
lua = ["getter-core/lua", "getter-operations/lua"]
cli = ["dep:getter-cli"]
rustls-platform-verifier = ["dep:rustls-platform-verifier"]
rustls-platform-verifier-android = ["rustls-platform-verifier", "rustls-platform-verifier/jni"]
webpki-roots = ["hyper-rustls/webpki-roots"]
native-tokio = ["hyper-rustls/native-tokio"]
webpki-roots = []
native-tokio = []

[dependencies]
once_cell = "1.21.3"
async-trait = "0.1.89"
hyper = { version = "1.8", features = ["full"] }
tokio = { version = "1", features = ["full", "macros"] }
bytes = "1.11.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.149"
quick-xml = { version = "0.39.0", features = ["encoding", "async-tokio"] }
async_fn_traits = "0.1.1"
libversion-sys = { git = "https://github.com/DUpdateSystem/libversion-sys", rev = "68391515ac8f555ca86bc5dfcd980f66352e414d" }
regex = "1.12.2"
hyper-util = { version = "0.1.19", features = ["client", "tokio", "http1"] }
http-body-util = "0.1.3"
jsonrpsee = { version = "0.26.0", features = ["server", "client"] }
hyper-rustls = { version = "0.27.7", features = ["http1", "http2", "native-tokio", "ring", "tls12"], default-features = false }
rustls-platform-verifier = { version = "0.6.2", optional = true }
rustls = { version = "0.23.36", default-features = false }
markdown = "1.0.0"
# Downloader dependencies
reqwest = { version = "0.13", default-features = false, features = ["rustls", "stream", "json"] }
uuid = { version = "1.19", features = ["v4", "serde"] }
parking_lot = "0.12"
futures = "0.3"
tokio-util = { version = "0.7", features = ["io"] }
jsonl = "4.0"
file-locker = "1.1"
url = "2"

[dev-dependencies]
mockito = "1.7.1"
rand = "0.10.0"
serial_test = "3.3.1"
tempfile = "3.24.0"
getter-core = { path = "crates/getter-core", default-features = false, optional = true }
getter-storage = { path = "crates/getter-storage", optional = true }
getter-operations = { path = "crates/getter-operations", optional = true }
getter-cli = { path = "crates/getter-cli", optional = true }
thiserror = "1"
tokio = { version = "1", features = ["net"] }
rustls-platform-verifier = { version = "0.6", optional = true }
26 changes: 24 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,24 @@
# getter
Get update for everywhere
# UpgradeAll getter

Reusable Rust getter core for the UpgradeAll rewrite.

This repository is intentionally usable outside the UpgradeAll UI. The UpgradeAll app is a UI/platform adapter; package/repository evaluation, storage, migration mapping, update policy, and CLI behavior belong here.

## Current rewrite spine

- Rust workspace split into `getter-core`, `getter-storage`, `getter-cli`, and placeholder provider/downloader/RPC/FFI crates.
- Package IDs are readable, for example `android/org.fdroid.fdroid`.
- Lua package repositories are repository alias directories under `repo/`; packages are directories containing `metadata.jsonc`, optional `Manifest`, and direct child version scripts such as `1.20.0.lua` or `9999.lua`. Shared Lua classes live under repository-root `luaclass/`.
- SQLite storage uses a main DB and a separate cache DB.
- `getter-cli` exposes JSON command contracts for init, app list, repository registration/evaluation, package evaluation, storage validation, legacy bridge-bundle import, and sanitized legacy report listing.

## Verify

```bash
cargo fmt --all --check
cargo test --workspace --lib --bins
cargo test -p getter-cli --test bdd_cli
cargo check --workspace --all-targets
```

The CI helper at `tests/script/cargo_test.sh` runs the same core checks plus feature-compatibility checks.
24 changes: 24 additions & 0 deletions crates/getter-cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[package]
name = "getter-cli"
version.workspace = true
edition.workspace = true

[dependencies]
getter-core = { path = "../getter-core" }
getter-downloader = { path = "../getter-downloader" }
getter-operations = { path = "../getter-operations" }
getter-storage = { path = "../getter-storage" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "1"

[dev-dependencies]
cucumber = "0.23"
rusqlite = { version = "0.32", features = ["bundled"] }
serde_json = "1"
tempfile = "3"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }

[[test]]
name = "bdd_cli"
harness = false
Loading