Add runner config options

This commit is contained in:
Joscha 2023-08-09 15:19:03 +02:00
parent 9264e033fa
commit 23ae5613c7
3 changed files with 83 additions and 1 deletions

11
Cargo.lock generated
View file

@ -821,6 +821,16 @@ dependencies = [
"version_check", "version_check",
] ]
[[package]]
name = "gethostname"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
dependencies = [
"libc",
"windows-targets",
]
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.2.10" version = "0.2.10"
@ -2795,6 +2805,7 @@ dependencies = [
"clap", "clap",
"directories", "directories",
"futures", "futures",
"gethostname",
"gix", "gix",
"humantime", "humantime",
"humantime-serde", "humantime-serde",

View file

@ -11,6 +11,7 @@ axum = { version = "0.6.19", features = ["macros"] }
clap = { version = "4.3.19", features = ["derive", "deprecated"] } clap = { version = "4.3.19", features = ["derive", "deprecated"] }
directories = "5.0.1" directories = "5.0.1"
futures = "0.3.28" futures = "0.3.28"
gethostname = "0.4.3"
humantime = "2.1.0" humantime = "2.1.0"
humantime-serde = "1.1.1" humantime-serde = "1.1.1"
mime_guess = "2.0.4" mime_guess = "2.0.4"

View file

@ -1,6 +1,7 @@
//! Configuration from a file. //! Configuration from a file.
use std::{ use std::{
collections::HashMap,
fs, fs,
io::ErrorKind, io::ErrorKind,
net::SocketAddr, net::SocketAddr,
@ -32,6 +33,10 @@ mod default {
pub fn repo_update_delay() -> Duration { pub fn repo_update_delay() -> Duration {
Duration::from_secs(60) Duration::from_secs(60)
} }
pub fn runner_ping_delay() -> Duration {
Duration::from_secs(10)
}
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
@ -67,10 +72,38 @@ impl Default for Repo {
} }
} }
#[derive(Debug, Deserialize)]
struct RunnerServer {
url: String,
token: String,
}
#[derive(Debug, Deserialize)]
struct Runner {
name: Option<String>,
#[serde(default = "default::runner_ping_delay", with = "humantime_serde")]
ping_delay: Duration,
servers: HashMap<String, RunnerServer>,
}
impl Default for Runner {
fn default() -> Self {
Self {
name: None,
ping_delay: default::runner_ping_delay(),
servers: HashMap::new(),
}
}
}
#[derive(Debug, Default, Deserialize)] #[derive(Debug, Default, Deserialize)]
struct ConfigFile { struct ConfigFile {
repo: Repo, #[serde(default)]
web: Web, web: Web,
#[serde(default)]
repo: Repo,
#[serde(default)]
runner: Runner,
} }
impl ConfigFile { impl ConfigFile {
@ -115,6 +148,35 @@ impl ConfigFile {
Ok("unnamed repo".to_string()) Ok("unnamed repo".to_string())
} }
fn runner_name(&self) -> String {
if let Some(name) = &self.runner.name {
return name.clone();
}
gethostname::gethostname().to_string_lossy().to_string()
}
fn runner_servers(&self) -> HashMap<String, RunnerServerConfig> {
self.runner
.servers
.iter()
.map(|(name, server)| {
let url = server
.url
.strip_suffix('/')
.unwrap_or(&server.url)
.to_string();
let token = server.token.to_string();
(name.to_string(), RunnerServerConfig { url, token })
})
.collect()
}
}
pub struct RunnerServerConfig {
pub url: String,
pub token: String,
} }
pub struct Config { pub struct Config {
@ -122,6 +184,9 @@ pub struct Config {
pub web_address: SocketAddr, pub web_address: SocketAddr,
pub repo_name: String, pub repo_name: String,
pub repo_update_delay: Duration, pub repo_update_delay: Duration,
pub runner_name: String,
pub runner_ping_delay: Duration,
pub runner_servers: HashMap<String, RunnerServerConfig>,
} }
impl Config { impl Config {
@ -144,12 +209,17 @@ impl Config {
let web_base = config_file.web_base(); let web_base = config_file.web_base();
let repo_name = config_file.repo_name(args)?; let repo_name = config_file.repo_name(args)?;
let runner_name = config_file.runner_name();
let runner_servers = config_file.runner_servers();
Ok(Self { Ok(Self {
web_base, web_base,
web_address: config_file.web.address, web_address: config_file.web.address,
repo_name, repo_name,
repo_update_delay: config_file.repo.update_delay, repo_update_delay: config_file.repo.update_delay,
runner_name,
runner_ping_delay: config_file.runner.ping_delay,
runner_servers,
}) })
} }
} }