Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ic8de4ee50c15874ed695ed0812a55b866a6a6964
189 lines
7.1 KiB
TOML
189 lines
7.1 KiB
TOML
[workspace]
|
|
exclude = [
|
|
"crates/pinakes-core/tests/fixtures/test-plugin",
|
|
"examples/plugins/auto-tagger",
|
|
"examples/plugins/text-enrichment",
|
|
"examples/plugins/subtitle-detector",
|
|
"examples/plugins/cbz-comics",
|
|
]
|
|
members = [ "crates/*", "packages/*", "xtask" ]
|
|
resolver = "3"
|
|
|
|
[workspace.package]
|
|
edition = "2024" # keep in sync with .rustfmt.toml
|
|
license = "EUPL-1.2"
|
|
rust-version = "1.95.0"
|
|
version = "0.4.0-dev"
|
|
readme = true
|
|
|
|
[workspace.dependencies]
|
|
# Crate components for Pinakes. Those are the internal dependencies that are built
|
|
# while building any package.
|
|
pinakes-core = { path = "./crates/pinakes-core" }
|
|
pinakes-enrichment = { path = "./crates/pinakes-enrichment" }
|
|
pinakes-metadata = { path = "./crates/pinakes-metadata" }
|
|
pinakes-migrations = { path = "./crates/pinakes-migrations" }
|
|
pinakes-plugin = { path = "./crates/pinakes-plugin" }
|
|
pinakes-plugin-api = { path = "./crates/pinakes-plugin-api" }
|
|
pinakes-sync = { path = "./crates/pinakes-sync" }
|
|
pinakes-types = { path = "./crates/pinakes-types" }
|
|
|
|
# Pinakes itself is a REST API server. UI and TUI are official visual components
|
|
# that connect to the server. Using the API documentation, the user can write
|
|
# their own clients, but we separate "crates" and "packages" to establish the
|
|
# distinction properly.
|
|
pinakes-server = { path = "./packages/pinakes-server" }
|
|
pinakes-tui = { path = "./packages/pinakes-tui" }
|
|
pinakes-ui = { path = "./packages/pinakes-ui" }
|
|
|
|
# Other dependencies. Declaring them in the virtual manifests lets use reuse the crates
|
|
# without having to track individual crate version across different types of crates. This
|
|
# also includes *dev* dependencies.
|
|
ammonia = "4.1.2"
|
|
anyhow = "1.0.102"
|
|
argon2 = { version = "0.5.3", features = [ "std" ] }
|
|
async-trait = "0.1.89"
|
|
axum = { version = "0.8.9", features = [ "macros", "multipart" ] }
|
|
axum-server = { version = "0.8.0" }
|
|
blake3 = "1.8.5"
|
|
chrono = { version = "0.4.44", features = [ "serde" ] }
|
|
clap = { version = "4.6.1", features = [ "derive", "env" ] }
|
|
crossterm = "0.29.0"
|
|
deadpool-postgres = "0.14.1"
|
|
dioxus = { version = "0.7.9", features = [ "desktop", "router" ] }
|
|
dioxus-core = { version = "0.7.9" }
|
|
dioxus-free-icons = { version = "0.10.0", features = [ "font-awesome-solid" ] }
|
|
ed25519-dalek = { version = "2.2.0", features = [ "std" ] }
|
|
epub = "2.1.5"
|
|
futures = "0.3.32"
|
|
gloo-timers = { version = "0.4.0", features = [ "futures" ] }
|
|
governor = "0.10.4"
|
|
gray_matter = "0.3.2"
|
|
http = "1.4.0"
|
|
http-body-util = "0.1.3"
|
|
image = { version = "0.25.10", default-features = false, features = [
|
|
"jpeg",
|
|
"png",
|
|
"webp",
|
|
"gif",
|
|
"tiff",
|
|
"bmp",
|
|
] }
|
|
image_hasher = "3.1.1"
|
|
kamadak-exif = "0.6.1"
|
|
lofty = "0.24.0"
|
|
lopdf = "0.40.0"
|
|
matroska = "0.30.1"
|
|
mime_guess = "2.0.5"
|
|
moka = { version = "0.12.15", features = [ "future" ] }
|
|
native-tls = "0.2.18"
|
|
notify = { version = "8.2.0", features = [ "macos_fsevent" ] }
|
|
percent-encoding = "2.3.2"
|
|
postgres-native-tls = "0.5.3"
|
|
postgres-types = { version = "0.2.13", features = [ "derive" ] }
|
|
pulldown-cmark = "0.13.4"
|
|
rand = "0.10.1"
|
|
ratatui = "0.30.0"
|
|
refinery = { version = "0.9.1", features = [ "tokio-postgres" ] }
|
|
regex = "1.12.3"
|
|
reqwest = { version = "0.13.3", features = [ "json", "query", "blocking" ] }
|
|
rfd = "0.17.2"
|
|
rusqlite = { version = "0.39.0", features = [ "bundled", "column_decltype" ] }
|
|
rusqlite_migration = "2.5.0"
|
|
rustc-hash = "2.1.2"
|
|
serde = { version = "1.0.228", features = [ "derive" ] }
|
|
serde_json = "1.0.150"
|
|
tempfile = "3.27.0"
|
|
thiserror = "2.0.18"
|
|
tokio = { version = "1.52.3", features = [ "full" ] }
|
|
tokio-postgres = { version = "0.7.17", features = [ "with-uuid-1", "with-chrono-0_4", "with-serde_json-1" ] }
|
|
tokio-util = { version = "0.7.18", features = [ "rt" ] }
|
|
toml = "1.1.2"
|
|
tower = "0.5.3"
|
|
tower-http = { version = "0.6.11", features = [ "cors", "trace", "set-header" ] }
|
|
tower_governor = "0.8.0"
|
|
tracing = "0.1.44"
|
|
tracing-subscriber = { version = "0.3.23", features = [ "env-filter", "json" ] }
|
|
url = "2.5"
|
|
urlencoding = "2.1.3"
|
|
utoipa = { version = "5.5.0", features = [ "axum_extras", "uuid", "chrono" ] }
|
|
utoipa-axum = { version = "0.2.0" }
|
|
utoipa-swagger-ui = { version = "9.0.2", features = [ "axum" ] }
|
|
uuid = { version = "1.23.1", features = [ "v7", "serde" ] }
|
|
walkdir = "2.5.0"
|
|
wasmtime = { version = "45.0.0", features = [ "component-model" ] }
|
|
winnow = "1.0.3"
|
|
wit-bindgen = "0.57.1"
|
|
|
|
# See:
|
|
# <https://doc.rust-lang.org/rustc/lints/listing/allowed-by-default.html>
|
|
[workspace.lints.clippy]
|
|
cargo = { level = "warn", priority = -1 }
|
|
complexity = { level = "warn", priority = -1 }
|
|
nursery = { level = "warn", priority = -1 }
|
|
pedantic = { level = "warn", priority = -1 }
|
|
perf = { level = "warn", priority = -1 }
|
|
style = { level = "warn", priority = -1 }
|
|
|
|
# The lint groups above enable some less-than-desirable rules, we should manually
|
|
# enable those to keep our sanity.
|
|
absolute_paths = "allow"
|
|
arbitrary_source_item_ordering = "allow"
|
|
clone_on_ref_ptr = "warn"
|
|
dbg_macro = "warn"
|
|
empty_drop = "warn"
|
|
empty_structs_with_brackets = "warn"
|
|
exit = "warn"
|
|
filetype_is_file = "warn"
|
|
get_unwrap = "warn"
|
|
implicit_return = "allow"
|
|
infinite_loop = "warn"
|
|
map_with_unused_argument_over_ranges = "warn"
|
|
missing_docs_in_private_items = "allow"
|
|
multiple_crate_versions = "allow" # :(
|
|
non_ascii_literal = "allow"
|
|
non_std_lazy_statics = "warn"
|
|
pathbuf_init_then_push = "warn"
|
|
pattern_type_mismatch = "allow"
|
|
question_mark_used = "allow"
|
|
rc_buffer = "warn"
|
|
rc_mutex = "warn"
|
|
rest_pat_in_fully_bound_structs = "warn"
|
|
significant_drop_tightening = "allow" # rusqlite Statement<'conn> borrows the guard; cannot drop early
|
|
similar_names = "allow"
|
|
single_call_fn = "allow"
|
|
std_instead_of_core = "allow"
|
|
too_long_first_doc_paragraph = "allow"
|
|
too_many_arguments = "allow"
|
|
too_many_lines = "allow"
|
|
undocumented_unsafe_blocks = "warn"
|
|
unnecessary_safety_comment = "warn"
|
|
unused_result_ok = "warn"
|
|
unused_trait_names = "allow"
|
|
|
|
# False positive:
|
|
# clippy's build script check doesn't recognize workspace-inherited metadata
|
|
# which means in our current workspace layout, we get pranked by Clippy.
|
|
cargo_common_metadata = "allow"
|
|
|
|
# In the honor of a recent Cloudflare regression
|
|
panic = "deny"
|
|
unwrap_used = "deny"
|
|
|
|
# Less dangerous, but we'd like to know
|
|
# Those must be opt-in, and are fine ONLY in tests and examples.
|
|
expect_used = "warn"
|
|
print_stderr = "warn"
|
|
print_stdout = "warn"
|
|
todo = "warn"
|
|
unimplemented = "warn"
|
|
unreachable = "warn"
|
|
|
|
[profile.dev.package]
|
|
argon2 = { opt-level = 3 }
|
|
blake3 = { opt-level = 3 }
|
|
image = { opt-level = 3 }
|
|
lofty = { opt-level = 3 }
|
|
lopdf = { opt-level = 3 }
|
|
matroska = { opt-level = 3 }
|
|
regex = { opt-level = 3 }
|