Cargo.toml
Rama main · réplica de lectura del repositorio original.
[workspace]
resolver = "3"
members = ["crates/*"]
[workspace.package]
version = "1.9.0"
edition = "2024"
rust-version = "1.88" # raised from 1.85: time >=0.3.47 (RUSTSEC-2026-0009 fix) needs 1.88
license = "AGPL-3.0-only"
repository = "https://github.com/schubydoo/podspine"
authors = ["schubydoo"]
# Comment and doc lints. Each member crate opts in with `[lints] workspace = true`.
# CI runs clippy with `-D warnings`, so "warn" here blocks CI but not local builds.
[workspace.lints.clippy]
# Identifiers in doc comments must have backticks.
doc_markdown = "warn"
# Each `unsafe` block must have a `// SAFETY:` comment. The workspace has no
# `unsafe` today; this lint guards the first one.
undocumented_unsafe_blocks = "warn"
[workspace.lints.rustdoc]
# Each [`item`] link in doc comments must resolve. Fires only under `cargo doc`
# (the "Docs (deny warnings)" CI step), not under clippy.
broken_intra_doc_links = "deny"
# The CI doc step passes `--document-private-items` because this workspace is a
# binary, not a library. Links from public items to private items are therefore
# valid and stay clickable.
private_intra_doc_links = "allow"
# Pinned per TAD §3 (verified 2026-07-03). Member crates opt in as each pipeline
# stage lands (`axum.workspace = true`, etc.); unreferenced entries stay inert.
[workspace.dependencies]
# http / serving
axum = "0.8.9"
axum-range = "1.0.0"
axum-extra = { version = "0.12.6", features = ["typed-header"] }
tower-http = { version = "0.7", features = ["fs", "timeout", "limit", "trace"] }
tokio = { version = "1.52", features = ["full"] }
# feed
rss = "2.1.0"
time = { version = "0.3.47", features = ["formatting", "parsing"] } # >=0.3.47: RUSTSEC-2026-0009
# index / storage (bundled SQLite compiles into the static binary)
rusqlite = { version = "0.42", features = ["bundled"] }
# ui
maud = "0.27"
qrcode = { version = "0.14", default-features = false, features = ["svg"] }
# tokens (v1.5)
getrandom = "0.4"
base64 = "0.23"
blake3 = "1.5"
# scanning / watching
notify = "8"
# config / cli
clap = { version = "4", features = ["derive", "env"] }
toml = "1.0"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
# observability
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# Metrics facade; a no-op unless a recorder is installed (`--metrics-bind`).
metrics = "0.24.6"
# `default-features = false` drops the crate's own hyper listener and the
# rustls/aws-lc-rs push-gateway stack: Podspine renders from the handle and
# serves it on its own axum listener, so none of that is reachable.
metrics-exporter-prometheus = { version = "0.18.3", default-features = false }
# errors
thiserror = "2"
anyhow = "1"
# process control (sync per-child timeout+kill for ffmpeg; the splitter is sync)
wait-timeout = "0.2"
[package]
name = "podspine"
description = "Self-hosted server that turns audiobook files into per-chapter podcast RSS feeds."
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true
publish = false
# cargo-binstall: fetch the prebuilt release binary instead of compiling.
# cargo binstall --git https://github.com/schubydoo/podspine podspine
# (`--git` because the workspace is publish=false — nothing is on crates.io.)
# Our assets are raw binaries named podspine-v{version}-{os}-{arch} with
# os=linux|darwin|windows and arch=amd64|arm64, which don't match binstall's
# default {target-arch}/{target-os}, so each supported target is mapped here.
# The Linux binaries are static musl, so they also serve the -gnu targets.
[package.metadata.binstall]
pkg-fmt = "bin"
[package.metadata.binstall.overrides.x86_64-unknown-linux-musl]
pkg-url = "{ repo }/releases/download/v{ version }/podspine-v{ version }-linux-amd64"
[package.metadata.binstall.overrides.aarch64-unknown-linux-musl]
pkg-url = "{ repo }/releases/download/v{ version }/podspine-v{ version }-linux-arm64"
[package.metadata.binstall.overrides.x86_64-unknown-linux-gnu]
pkg-url = "{ repo }/releases/download/v{ version }/podspine-v{ version }-linux-amd64"
[package.metadata.binstall.overrides.aarch64-unknown-linux-gnu]
pkg-url = "{ repo }/releases/download/v{ version }/podspine-v{ version }-linux-arm64"
[package.metadata.binstall.overrides.x86_64-apple-darwin]
pkg-url = "{ repo }/releases/download/v{ version }/podspine-v{ version }-darwin-amd64"
[package.metadata.binstall.overrides.aarch64-apple-darwin]
pkg-url = "{ repo }/releases/download/v{ version }/podspine-v{ version }-darwin-arm64"
[package.metadata.binstall.overrides.x86_64-pc-windows-msvc]
pkg-url = "{ repo }/releases/download/v{ version }/podspine-v{ version }-windows-amd64.exe"
[[bin]]
name = "podspine"
path = "src/main.rs"
[dependencies]
podspine-config = { path = "crates/config" }
podspine-index = { path = "crates/index" }
podspine-scanner = { path = "crates/scanner" }
podspine-http = { path = "crates/http" }
podspine-metrics = { path = "crates/metrics" }
tokio = { workspace = true }
anyhow = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
[lints]
workspace = true