Skip to content

Commit f38ba05

Browse files
authored
Merge pull request #1203 from spkenv/dependency-upgrades
Dependency Upgrades
2 parents 7922f9b + 687c882 commit f38ba05

File tree

23 files changed

+705
-599
lines changed

23 files changed

+705
-599
lines changed

Cargo.lock

Lines changed: 338 additions & 416 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,21 @@ members = [
77
"crates/is_default_derive_macro",
88
"crates/progress_bar_derive_macro",
99
"crates/spfs",
10+
"crates/spfs-cli/*",
1011
"crates/spfs-encoding",
1112
"crates/spfs-proto",
13+
"crates/spk",
1214
"crates/spk-build",
1315
"crates/spk-cli/*",
14-
"crates/spfs-cli/*",
15-
"crates/spk-exec",
1616
"crates/spk-config",
17+
"crates/spk-exec",
1718
"crates/spk-launcher",
1819
"crates/spk-schema",
1920
"crates/spk-schema/crates/*",
2021
"crates/spk-solve",
2122
"crates/spk-solve/crates/*",
2223
"crates/spk-storage",
2324
"crates/spk-workspace",
24-
"crates/spk",
2525
]
2626
resolver = "2"
2727

@@ -40,7 +40,6 @@ repository = "https://github.com/spkenv/spk"
4040
readme = "README.md"
4141
description = "SPK is a Package Manager for high-velocity software environments, built on SPFS. SPFS is a system for filesystem isolation, capture, and distribution."
4242

43-
4443
[workspace.dependencies]
4544
arc-swap = "1.6.0"
4645
async-trait = "0.1"
@@ -49,30 +48,33 @@ bytes = "1.5"
4948
cached = "0.48.1"
5049
chrono = { version = "0.4.34", features = ["serde"] }
5150
clap = { version = "4.5", features = ["derive", "env"] }
52-
clap_complete = "4.3"
51+
clap_complete = "4.5"
5352
colored = "2.0.0"
5453
config = "0.14.0"
5554
console = "0.15.8"
56-
dashmap = "5.4.0"
57-
derive_builder = "0.20"
55+
dashmap = "6"
5856
data-encoding = "2.3"
57+
derive_builder = "0.20"
5958
dirs = "5.0"
6059
dunce = "1.0.4"
6160
dyn-clone = "1.0"
6261
enum_dispatch = "0.3.13"
63-
flatbuffers = "23.5.26"
62+
flatbuffers = "25.2"
6463
format_serde_error = { version = "0.3", default-features = false }
65-
fuser = "0.14.0"
64+
fuser = "0.15.1"
6665
futures = "0.3.28"
6766
futures-core = "0.3.28"
6867
glob = "0.3"
69-
indicatif = "0.17.8"
68+
http-body-util = "0.1"
69+
hyper = "1.6"
70+
hyper-util = "0.1"
7071
indexmap = "2.2"
71-
itertools = "0.12"
72+
indicatif = "0.17.8"
7273
is_default_derive_macro = { path = "crates/is_default_derive_macro" }
73-
libc = "0.2.80"
74+
itertools = "0.14"
75+
libc = "0.2.172"
7476
miette = "7.0"
75-
nix = { version = "0.27.1", features = ["mount", "sched", "user"] }
77+
nix = { version = "0.29", features = ["mount", "sched", "user"] }
7678
nom = "7.1"
7779
nom-supreme = "0.8"
7880
once_cell = "1.8"
@@ -81,12 +83,12 @@ paste = "1.0"
8183
pin-project-lite = "0.2.0"
8284
procfs = "0.16.0"
8385
progress_bar_derive_macro = { path = "crates/progress_bar_derive_macro" }
84-
prost = "0.12.1"
86+
prost = "0.13"
8587
rand = "0.8.5"
8688
regex = "1.6"
8789
relative-path = "1.3"
8890
ring = "0.17.14"
89-
rstest = "0.18.2"
91+
rstest = "0.25"
9092
sentry = { version = "0.34.0", default-features = false, features = [
9193
# all the default features except `debug-images` which causes a deadlock on
9294
# centos 7: https://github.com/getsentry/sentry-rust/issues/358
@@ -96,7 +98,7 @@ sentry = { version = "0.34.0", default-features = false, features = [
9698
"transport",
9799
] }
98100
sentry-miette = { version = "0.1.0", path = "crates/sentry-miette" }
99-
sentry-tracing = { version = "0.32.2" }
101+
sentry-tracing = { version = "0.34" }
100102
serde = "1.0"
101103
serde_json = "1.0"
102104
serde_yaml = "0.9.25"
@@ -148,18 +150,18 @@ tempfile = "3.3"
148150
thiserror = "1.0"
149151
tokio = { version = "1.43", features = ["rt"] }
150152
tokio-retry = "0.3.0"
151-
tonic = "0.11"
152-
tonic-build = "0.11"
153-
tower = "0.4.13"
153+
tonic = "0.13"
154+
tonic-build = "0.13"
155+
tower = "0.5"
154156
tracing = "0.1.35"
155157
tracing-capture = "0.1"
156158
tracing-subscriber = "0.3.14"
157159
ulid = "1.0"
160+
variantly = "0.4"
158161
whoami = "1.5"
159162
windows = "0.51"
160163
winfsp = { version = "0.9.3", default-features = false }
161164
winfsp-sys = "0.2"
162-
variantly = "0.4"
163165

164166
[workspace.lints.clippy]
165167
fn_params_excessive_bools = "warn"

crates/spfs-cli/main/Cargo.toml

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
[package]
22
authors = { workspace = true }
33
default-run = "spfs"
4+
description = { workspace = true }
45
edition = { workspace = true }
5-
name = "spfs-cli-main"
6-
version = { workspace = true }
7-
license-file = { workspace = true }
86
homepage = { workspace = true }
9-
repository = { workspace = true }
7+
license-file = { workspace = true }
8+
name = "spfs-cli-main"
109
readme = { workspace = true }
11-
description = { workspace = true }
10+
repository = { workspace = true }
11+
version = { workspace = true }
1212

1313
[lints]
1414
workspace = true
@@ -18,19 +18,27 @@ name = "spfs"
1818
path = "src/bin.rs"
1919

2020
[features]
21-
sentry = ["spfs-cli-common/sentry"]
22-
server = ["spfs/server", "dep:hyper", "dep:tonic", "dep:url"]
2321
fuse = ["spfs/fuse-backend"]
22+
sentry = ["spfs-cli-common/sentry"]
23+
server = [
24+
"dep:hyper",
25+
"dep:hyper-util",
26+
"dep:tonic",
27+
"dep:url",
28+
"hyper/server",
29+
"spfs/server",
30+
]
2431

2532
[dependencies]
2633
async-recursion = "1.0.2"
27-
clap = { workspace = true }
2834
chrono = { workspace = true }
35+
clap = { workspace = true }
2936
colored = "2.0"
3037
dunce = { workspace = true }
3138
futures = { workspace = true }
32-
hyper = { version = "0.14.16", optional = true }
33-
itertools = "0.10.3"
39+
hyper = { workspace = true, optional = true, features = ["http1"] }
40+
hyper-util = { workspace = true, optional = true }
41+
itertools = { workspace = true }
3442
libc = { workspace = true }
3543
miette = { workspace = true, features = ["fancy"] }
3644
nix = { workspace = true, features = ["signal"] }
@@ -52,12 +60,12 @@ url = { version = "2.2", optional = true }
5260
procfs = { workspace = true }
5361

5462
[target.'cfg(windows)'.dependencies.windows]
55-
version = "0.51"
5663
features = [
5764
"Win32_Foundation",
5865
"Win32_System_SystemInformation",
5966
"Win32_System_Threading",
6067
]
68+
version = "0.51"
6169

6270
[dev-dependencies]
6371
rstest = { workspace = true }

crates/spfs-cli/main/src/cmd_server.rs

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// https://github.com/spkenv/spk
44

55
use clap::Args;
6-
use miette::Result;
6+
use miette::{IntoDiagnostic, Result};
77
use spfs_cli_common as cli;
88

99
/// Start an spfs server
@@ -42,37 +42,65 @@ impl CmdServer {
4242

4343
let payload_service =
4444
spfs::server::PayloadService::new(repo.clone(), self.payloads_root.clone());
45-
let http_server = {
46-
let payload_service = payload_service.clone();
47-
hyper::Server::bind(&self.http_address).serve(hyper::service::make_service_fn(
48-
move |_| {
49-
let s = payload_service.clone();
50-
async move { Ok::<_, std::convert::Infallible>(s) }
51-
},
52-
))
53-
};
54-
let http_future = http_server.with_graceful_shutdown(async {
55-
if let Err(err) = tokio::signal::ctrl_c().await {
56-
tracing::error!(?err, "Failed to setup graceful shutdown handler");
57-
};
58-
tracing::info!("shutting down http server...");
59-
});
6045
let grpc_future = tonic::transport::Server::builder()
6146
.add_service(spfs::server::Repository::new_srv())
6247
.add_service(spfs::server::TagService::new_srv(repo.clone()))
6348
.add_service(spfs::server::DatabaseService::new_srv(repo))
64-
.add_service(payload_service.into_srv())
49+
.add_service(payload_service.clone().into_srv())
6550
.serve_with_shutdown(self.grpc_address, async {
6651
if let Err(err) = tokio::signal::ctrl_c().await {
6752
tracing::error!(?err, "Failed to setup graceful shutdown handler");
6853
};
6954
tracing::info!("shutting down gRPC server...");
7055
});
56+
let http_listener = tokio::net::TcpListener::bind(self.http_address)
57+
.await
58+
.into_diagnostic()?;
59+
let (shutdown_tx, mut shutdown_rx) = tokio::sync::oneshot::channel();
60+
tokio::task::spawn(async move {
61+
if let Err(err) = tokio::signal::ctrl_c().await {
62+
tracing::error!(?err, "failed to setup graceful shutdown handler");
63+
} else {
64+
tracing::info!("shutting down HTTP server...");
65+
shutdown_tx.send(()).ok();
66+
}
67+
});
68+
let http_future = async move {
69+
loop {
70+
let conn = tokio::select! {
71+
conn = http_listener.accept() => conn,
72+
_ = &mut shutdown_rx => {
73+
break;
74+
}
75+
};
76+
let stream = match conn {
77+
Ok((stream, _)) => {
78+
tracing::debug!("Accepted connection from {:?}", stream.peer_addr());
79+
stream
80+
}
81+
Err(err) => {
82+
tracing::error!("Error accepting connection: {:?}", err);
83+
continue;
84+
}
85+
};
86+
let io = hyper_util::rt::TokioIo::new(stream);
87+
let service = payload_service.clone();
88+
tokio::task::spawn(async move {
89+
if let Err(err) = hyper::server::conn::http1::Builder::new()
90+
.serve_connection(io, service)
91+
.await
92+
{
93+
tracing::error!("Error serving connection: {:?}", err);
94+
}
95+
});
96+
}
97+
Result::<(), miette::Report>::Ok(())
98+
};
7199
tracing::info!("listening on: {}, {}", self.grpc_address, self.http_address);
72100

73101
// TODO: stop the other server when one fails so that
74102
// the process can exit
75-
let (grpc_result, http_result) = tokio::join!(grpc_future, http_future,);
103+
let (grpc_result, http_result) = tokio::join!(grpc_future, http_future);
76104
if let Err(err) = grpc_result {
77105
tracing::error!("gRPC server failed: {:?}", err);
78106
}

crates/spfs-encoding/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ thiserror = { workspace = true }
2222
miette = { workspace = true }
2323

2424
[dev-dependencies]
25-
rstest = { version = "0.15.0", default-features = false }
25+
rstest = { workspace = true }
2626
rand = { workspace = true }

crates/spfs-encoding/src/binary_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ fn test_write_read_header() {
3939
assert_eq!(remaining, "");
4040
}
4141

42-
#[rstest(value, case(0), case(1), case(45), case(600))]
43-
fn test_read_write_int(value: i64) {
42+
#[rstest]
43+
fn test_read_write_int(#[values(0, 1, 45, 600)] value: i64) {
4444
let mut stream = Cursor::new(Vec::<u8>::new());
4545
write_int(&mut stream, value).unwrap();
4646
stream.write_all(b"postfix").unwrap();

crates/spfs-proto/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ flatc-rust = "0.2"
2828

2929
[dev-dependencies]
3030
ring = { workspace = true }
31-
rstest = { version = "0.15.0", default-features = false }
31+
rstest = { workspace = true }

crates/spfs-vfs/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
77
unsafe {
88
std::env::set_var("PROTOC", protobuf_src::protoc());
99
}
10-
tonic_build::configure().compile(&["src/proto/defs/vfs.proto"], &["src/proto/defs"])?;
10+
tonic_build::configure().compile_protos(&["src/proto/defs/vfs.proto"], &["src/proto/defs"])?;
1111
Ok(())
1212
}

crates/spfs-vfs/src/fuse.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ impl fuser::Filesystem for Session {
842842
});
843843
}
844844

845-
fn getattr(&mut self, _req: &Request<'_>, ino: u64, reply: fuser::ReplyAttr) {
845+
fn getattr(&mut self, _req: &Request<'_>, ino: u64, _fh: Option<u64>, reply: fuser::ReplyAttr) {
846846
let session = Arc::clone(&self.inner);
847847
tokio::task::spawn(async move {
848848
let fs = unwrap!(reply, session.get_fs().await);

0 commit comments

Comments
 (0)