Add per-repo config.

This commit is contained in:
Bill Thiede 2022-12-05 20:47:08 -08:00
parent 28e430c8cf
commit 11b08785ed
2 changed files with 34 additions and 12 deletions

View File

@ -11,3 +11,5 @@ port = 9346
source_root = "/net/nasx/mnt/storage/aoc/github/" source_root = "/net/nasx/mnt/storage/aoc/github/"
build_root = "/tmp/aocsync/" build_root = "/tmp/aocsync/"
www_root = "/tmp/aocsync-serve/" www_root = "/tmp/aocsync-serve/"
repos = { akramer = { name = "aoc2022", branch = "main" }, ggriffiniii = { name = "aoc2022", branch = "main" }, wathiede = { name = "advent/2022", branch = "master", first_commit = "bc3feabb4669b7ad8167398a4d37eefe68ea0565" } }

View File

@ -1,6 +1,7 @@
#[macro_use] #[macro_use]
extern crate rocket; extern crate rocket;
use std::{ use std::{
collections::HashMap,
fs, fs,
fs::File, fs::File,
io, io,
@ -60,7 +61,17 @@ struct TaskStatus {
} }
fn logging_run(cmd: &mut Command) -> Result<TaskStatus, SyncError> { fn logging_run(cmd: &mut Command) -> Result<TaskStatus, SyncError> {
info!("{:?}", cmd); info!(
"{}$ {} {}",
cmd.get_current_dir()
.unwrap_or(Path::new("<NO CWD>"))
.display(),
cmd.get_program().to_string_lossy(),
cmd.get_args()
.map(|a| a.to_string_lossy())
.collect::<Vec<_>>()
.join(" "),
);
let start = Instant::now(); let start = Instant::now();
let o = cmd.output()?; let o = cmd.output()?;
let ts = TaskStatus { let ts = TaskStatus {
@ -102,17 +113,18 @@ fn bench_at_commit(
Ok(output) Ok(output)
} }
fn reload(config: &State<Config>, repo: &str) -> Result<String, SyncError> { fn reload(config: &State<Config>, name: &str) -> Result<String, SyncError> {
info!("Need to reload '{}': {:?}", repo, config); let repo = &config.repos[name];
info!("Need to reload '{}': {:?}\n{:#?}", name, config, repo);
let commits_root = config.build_root.join("commits"); let commits_root = config.build_root.join("commits");
let git_root = config.build_root.join("git"); let git_root = config.build_root.join("git").join(name);
let www_root = config.www_root.join(repo); let www_root = config.www_root.join(name);
let target_root = config.build_root.join("target"); let target_root = config.build_root.join("target");
let source_path = config.source_root.join(repo); let source_path = config.source_root.join(name).join(&repo.name);
let build_path = git_root.join(repo); let build_path = git_root.join(&repo.name);
let target_path = target_root.join(repo); let target_path = target_root.join(name);
dbg!( dbg!(
&source_path, &source_path,
@ -154,7 +166,7 @@ fn reload(config: &State<Config>, repo: &str) -> Result<String, SyncError> {
.current_dir(&build_path) .current_dir(&build_path)
.arg("checkout") .arg("checkout")
.arg("-f") .arg("-f")
.arg("origin"), .arg(&repo.branch),
)?); )?);
dbg!(&build_path); dbg!(&build_path);
// Make sure buildable clone is up to date // Make sure buildable clone is up to date
@ -164,7 +176,7 @@ fn reload(config: &State<Config>, repo: &str) -> Result<String, SyncError> {
let commits = logging_run(Command::new("git").current_dir(&build_path).args([ let commits = logging_run(Command::new("git").current_dir(&build_path).args([
"log", "log",
"--format=%H", "--format=%H",
"origin", &repo.branch,
]))?; ]))?;
let binding = String::from_utf8_lossy(&commits.output.stdout).into_owned(); let binding = String::from_utf8_lossy(&commits.output.stdout).into_owned();
let mut unknown_commits: Vec<_> = binding let mut unknown_commits: Vec<_> = binding
@ -180,7 +192,7 @@ fn reload(config: &State<Config>, repo: &str) -> Result<String, SyncError> {
output.extend(outputs); output.extend(outputs);
File::create(commits_root.join(commit))?; File::create(commits_root.join(commit))?;
} }
Err(err) => error!("Failed to bench {}@{}: {}", repo, commit, err), Err(err) => error!("Failed to bench {}@{}: {}", name, commit, err),
} }
} }
// Copy files from `target/` to serving directory // Copy files from `target/` to serving directory
@ -236,6 +248,14 @@ struct Config {
source_root: PathBuf, source_root: PathBuf,
build_root: PathBuf, build_root: PathBuf,
www_root: PathBuf, www_root: PathBuf,
repos: HashMap<String, Repo>,
}
#[derive(Debug, Deserialize)]
struct Repo {
name: String,
branch: String,
first_commit: Option<String>,
} }
#[launch] #[launch]
@ -252,7 +272,7 @@ fn rocket() -> _ {
let config = rocket::Config::figment() let config = rocket::Config::figment()
.extract::<Config>() .extract::<Config>()
.expect("Couldn't parse config"); .expect("Couldn't parse config");
info!("Config:\n{:#?}", config);
rocket::build() rocket::build()
.mount("/", routes![index, get_reload, post_reload]) .mount("/", routes![index, get_reload, post_reload])
.mount("/results/", FileServer::from(config.www_root)) .mount("/results/", FileServer::from(config.www_root))