[package] name = "runicgateway-installer" version = "0.1.0" edition = "2021" description = "Deployment tool for Runic Gateway: syncs the ServUO plugin overlay, installs the uo-link sidecar, and records what it deployed." license = "GPL-3.0-or-later" repository = "https://gitea.whitlocktech.com/RunicGateway/installer" # The published binary keeps the name PLAN.md §3 and INSTALL.md give it. The library it is built # from does not share that name on purpose: Windows' UAC installer detection refuses to launch an # unsigned executable whose file name contains "install" (`os error 740`), and Cargo names test # harnesses after their target — so a target called `runicgateway_installer` makes `cargo test` # unrunnable on Windows. `test = false` keeps Cargo from building a harness under the binary's # name; all the code, and all the tests, live in the library. See src/lib.rs. [lib] name = "rgdeploy" path = "src/lib.rs" [[bin]] name = "runicgateway-installer" path = "src/main.rs" test = false [dependencies] # Blocking HTTP over a pure-Rust TLS stack (rustls + ring + webpki-roots). The # release cross-compiles to x86_64-pc-windows-gnu through MinGW, where anything # linking OpenSSL turns a one-line build into a toolchain project — and this tool # makes a handful of sequential requests, so an async runtime would be overhead # with nothing to overlap. ureq = "3.3" # Overlay releases ship as gzipped tar. flate2's default backend is miniz_oxide # (pure Rust), so it cross-compiles with no C dependency of its own. flate2 = "1" tar = "0.4" # SHA256 is the entire trust anchor for these deliberately unsigned artifacts # (PLAN.md §3), which makes this load-bearing rather than a nicety. sha2 = "0.11" serde = { version = "1", features = ["derive"] } serde_json = "1" # RFC 3339 timestamps for install.json. Same feature set link's sidecar uses. chrono = { version = "0.4", default-features = false, features = ["std", "clock"] } # Refusing to deploy under a running shard is a correctness requirement, not a # courtesy: ServUO holds Scripts.dll open and rewrites Saves/ on exit. Only the # `system` feature is wanted — disks, networks and users are not our business. sysinfo = { version = "0.38", default-features = false, features = ["system"] } # Error plumbing, as in link's sidecar. Every failure here is read by an operator # rather than matched on, so a chain of `.context()` strings is the whole # requirement — the value is that "failed to write install.json" arrives with the # path and the OS error attached instead of alone. anyhow = "1" [profile.release] opt-level = 2