diff --git a/Cargo.lock b/Cargo.lock index 22ad9635..00a28ffb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -150,11 +150,11 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "attohttpc" -version = "0.30.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9" +checksum = "9bc84fee5e780a259df0e31fd3206fcb047ecff0eda5a71261f3e7564b78168c" dependencies = [ - "base64", + "base64 0.22.1", "flate2", "http 1.4.2", "log", @@ -654,6 +654,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64-simd" version = "0.8.0" @@ -1025,7 +1031,7 @@ dependencies = [ "assert_cmd", "aws-config", "aws-sdk-s3", - "base64", + "base64 0.22.1", "bytes", "cargo-util-schemas", "cargo_metadata", @@ -1700,9 +1706,9 @@ dependencies = [ [[package]] name = "git2" -version = "0.20.4" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" +checksum = "ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e" dependencies = [ "bitflags 2.13.0", "libc", @@ -1818,7 +1824,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "headers-core", "http 1.4.2", @@ -2052,7 +2058,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "futures-channel", "futures-util", @@ -3266,7 +3272,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "encoding_rs", "futures-channel", @@ -3500,13 +3506,13 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustwide" -version = "0.25.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e5e5d1bc12ace59ef13ae02f7a81abdc55bcf3f700d3fc5746ba264693b08a" +checksum = "87cea0e47a21dd5f5462edb1e9dc65769cc9d731e637e0ce9724bc2b0bc24fb6" dependencies = [ "anyhow", "attohttpc", - "base64", + "base64 0.23.1", "flate2", "futures-util", "getrandom 0.4.3", diff --git a/Cargo.toml b/Cargo.toml index 1bf6c494..572c0238 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,7 @@ reqwest = { version = "0.13", features = ["blocking", "json", "gzip"] } jiff = { version = "0.2.15", features = ["serde"] } rusqlite = { version = "0.39", features = ["chrono", "functions", "bundled"] } rust_team_data = { git = "https://github.com/rust-lang/team" } -rustwide = { version = "0.25.0", features = [ +rustwide = { version = "0.26.0", features = [ "unstable", "unstable-toolchain-ci", ] } diff --git a/src/config.rs b/src/config.rs index d356461f..93d6b8fb 100644 --- a/src/config.rs +++ b/src/config.rs @@ -3,6 +3,7 @@ use crate::prelude::*; use crate::utils::size::Size; use log::LevelFilter; use regex::Regex; +use rustwide::cmd::DockerRuntime; use rustwide::logging::LogStorage; use std::collections::{HashMap, HashSet}; use std::env; @@ -75,6 +76,29 @@ pub struct SandboxConfig { pub memory_limit: Size, pub build_log_max_size: Size, pub build_log_max_lines: usize, + #[serde(default, with = "docker_runtime_serde")] + pub docker_runtime: DockerRuntime, +} + +mod docker_runtime_serde { + use rustwide::cmd::DockerRuntime; + use serde::{de::Error, Deserialize, Deserializer, Serializer}; + + pub fn serialize(runtime: &DockerRuntime, serializer: S) -> Result + where + S: Serializer, + { + serializer.collect_str(runtime) + } + + pub fn deserialize<'de, D>(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + String::deserialize(deserializer)? + .parse() + .map_err(D::Error::custom) + } } #[derive(Clone, Serialize, Deserialize)] @@ -241,6 +265,7 @@ impl Default for Config { memory_limit: Size::Gigabytes(2), build_log_max_size: Size::Megabytes(1), build_log_max_lines: 1000, + docker_runtime: DockerRuntime::default(), }, server: ServerConfig { bot_acl: BotACL { diff --git a/src/runner/test.rs b/src/runner/test.rs index 805214ed..c3b2fe9c 100644 --- a/src/runner/test.rs +++ b/src/runner/test.rs @@ -302,6 +302,7 @@ pub(super) fn run_test( ); let sandbox = SandboxBuilder::new() .memory_limit(Some(ctx.config.sandbox.memory_limit.to_bytes())) + .docker_runtime(ctx.config.sandbox.docker_runtime) .enable_networking(false) .source_dir_mount_kind(ctx.mount_kind);