From 80c6b2a8a273ffd1f4286e1133e1d9b77fc49120 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Thu, 29 Sep 2022 22:12:09 +0200 Subject: [PATCH 01/13] make into form --- index.html | 94 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/index.html b/index.html index d43ef51..21c88fa 100644 --- a/index.html +++ b/index.html @@ -32,12 +32,16 @@

Bisect rustc

- -
- - - - - - + > +
+ + -
-
+ + - + + + +
+
+ +

@@ -80,12 +86,8 @@ impl<T> Struct<T> { diff --git a/src/main.rs b/src/main.rs index daff821..340911e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,7 @@ use tracing::{error, info, metadata::LevelFilter}; use tracing_subscriber::EnvFilter; use uuid::Uuid; -type SendChannel = Arc>>; +type SendChannel = Arc>>; type Conn = Arc>; #[tokio::main] @@ -37,7 +37,7 @@ async fn main() -> color_eyre::Result<()> { ) .init(); - let (job_queue_send, job_queue_recv) = mpsc::channel(); // FIXME: make this a sync_channel because bounds are cool + let (job_queue_send, job_queue_recv) = mpsc::sync_channel(10); let sqlite_db = env::var("SQLITE_DB").unwrap_or_else(|_| "bisect.sqlite".to_string()); @@ -62,7 +62,7 @@ async fn main() -> color_eyre::Result<()> { std::thread::spawn(|| bisect::bisect_worker(job_queue_recv, worker_conn)); - info!("Starting up server"); + info!("Starting up server on port 4000"); axum::Server::bind(&"0.0.0.0:4000".parse().unwrap()) .serve(app.into_make_service()) From 4bb561df9bfc2ee2a51b53c1388e5a6d83e8b894 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Sat, 26 Nov 2022 12:09:45 +0100 Subject: [PATCH 05/13] remove toolchains sometimes --- src/bisect.rs | 2 ++ src/main.rs | 3 ++ src/toolchain.rs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 src/toolchain.rs diff --git a/src/bisect.rs b/src/bisect.rs index a66c929..1b3f043 100644 --- a/src/bisect.rs +++ b/src/bisect.rs @@ -107,6 +107,8 @@ pub fn process_job(job: Job, conn: &Connection) -> Result<()> { trace!(?bisect, "Finished bisection job"); + crate::toolchain::clean_toolchains()?; + Ok(()) } diff --git a/src/main.rs b/src/main.rs index 340911e..50ad1a3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ mod bisect; mod db; +mod toolchain; use std::sync::{mpsc, Arc, Mutex}; @@ -50,6 +51,8 @@ async fn main() -> color_eyre::Result<()> { db::setup(&worker_conn).wrap_err("db setup")?; + toolchain::clean_toolchains()?; + let app = Router::new() .route("/", get(|| async { index_html() })) .route("/bisect/:id", get(get_bisection)) diff --git a/src/toolchain.rs b/src/toolchain.rs new file mode 100644 index 0000000..97b0ae5 --- /dev/null +++ b/src/toolchain.rs @@ -0,0 +1,73 @@ +use std::process::Command; + +use color_eyre::{ + eyre::{eyre, Context}, + Result, +}; +use tracing::debug; + +const MAX_BISECTOR_TOOLCHAINS: usize = 15; + +#[tracing::instrument] +pub fn clean_toolchains() -> Result<()> { + let toolchains = get_toolchains()?; + let for_removal = filter_toolchain_for_removal(toolchains); + if !for_removal.is_empty() { + remove_toolchains(&for_removal)?; + } + + Ok(()) +} + +fn filter_toolchain_for_removal(mut toolchains: Vec) -> Vec { + toolchains.retain(|toolchain| toolchain.starts_with("bisector-")); + + let amount = toolchains.len(); + if amount <= MAX_BISECTOR_TOOLCHAINS { + debug!(%amount, "No toolchains removed"); + return Vec::new(); + } + + let to_remove = amount - MAX_BISECTOR_TOOLCHAINS; + + toolchains.into_iter().take(to_remove).collect() +} + +fn get_toolchains() -> Result> { + let mut command = Command::new("rustup"); + command.args(["toolchain", "list"]); + + let output = command + .output() + .wrap_err("running `rustup toolchain list`")?; + + if output.status.success() { + let stdout = + String::from_utf8(output.stdout).wrap_err("rustup returned non-utf-8 bytes")?; + + let toolchains = stdout.lines().map(ToOwned::to_owned).collect(); + + Ok(toolchains) + } else { + let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); + Err(eyre!("`rustup toolchain list` failed").wrap_err(stderr)) + } +} + +fn remove_toolchains(toolchains: &[String]) -> Result<()> { + debug!(?toolchains, "Removing toolchains"); + let mut command = Command::new("rustup"); + command.args(["toolchain", "remove"]); + command.args(toolchains); + + let output = command + .output() + .wrap_err("running `rustup toolchain remove`")?; + + if output.status.success() { + return Ok(()); + } + + let stderr = String::from_utf8_lossy(&output.stderr).into_owned(); + Err(eyre!("`rustup toolchain remove` failed").wrap_err(stderr)) +} From 9a2f8ecdbc058e3e4c794f2bfbf7994626c38e8c Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Sat, 26 Nov 2022 12:17:37 +0100 Subject: [PATCH 06/13] add github link --- index.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/index.html b/index.html index 93abc24..47efd17 100644 --- a/index.html +++ b/index.html @@ -84,6 +84,13 @@ impl<T> Struct<T> { readonly > +
+ Made by Nilstrieb + Github +
+