summaryrefslogtreecommitdiff
path: root/crates/bot-jobs/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/bot-jobs/src')
-rw-r--r--crates/bot-jobs/src/lib.rs30
-rw-r--r--crates/bot-jobs/src/repo.rs77
2 files changed, 0 insertions, 107 deletions
diff --git a/crates/bot-jobs/src/lib.rs b/crates/bot-jobs/src/lib.rs
deleted file mode 100644
index d65c929..0000000
--- a/crates/bot-jobs/src/lib.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-use bot_config::Config;
-use bot_error::Error;
-
-use std::time::Duration;
-
-use log::error;
-
-mod repo;
-
-/// Run our jobs an initial time, then loop them on a separate thread
-///
-/// # Errors
-///
-/// Will return [`Err`] if any jobs fail
-pub fn dispatch(config: Config) -> Result<(), Error> {
- repo::fetch_or_update_repository(&config.nixpkgs_path, &config.nixpkgs_branches)?;
-
- tokio::spawn(async move {
- loop {
- tokio::time::sleep(Duration::from_secs(repo::TTL_SECS)).await;
- if let Err(why) =
- repo::fetch_or_update_repository(&config.nixpkgs_path, &config.nixpkgs_branches)
- {
- error!("Failed to fetch or update repository!\n{why:?}");
- };
- }
- });
-
- Ok(())
-}
diff --git a/crates/bot-jobs/src/repo.rs b/crates/bot-jobs/src/repo.rs
deleted file mode 100644
index 4d3e214..0000000
--- a/crates/bot-jobs/src/repo.rs
+++ /dev/null
@@ -1,77 +0,0 @@
-use bot_consts::{NIXPKGS_REMOTE, NIXPKGS_URL};
-use bot_error::Error;
-
-use std::{io::Write, path::Path};
-
-use git2::{AutotagOption, FetchOptions, RemoteCallbacks, Repository};
-use log::{debug, info, trace, warn};
-
-pub const TTL_SECS: u64 = 60 * 5; // 5 minutes
-
-// much of this is shamelessly lifted from
-// https://github.com/rust-lang/git2-rs/blob/9a5c9706ff578c936be644dd1e8fe155bdc4d129/examples/pull.rs
-
-/// basic set of options for fetching from remotes
-fn fetch_options<'a>() -> FetchOptions<'a> {
- let mut remote_callbacks = RemoteCallbacks::new();
- remote_callbacks.transfer_progress(|progress| {
- if progress.received_objects() == progress.total_objects() {
- trace!(
- "Resolving deltas {}/{}\r",
- progress.indexed_deltas(),
- progress.total_deltas()
- );
- } else {
- trace!(
- "Received {}/{} objects ({}) in {} bytes\r",
- progress.received_objects(),
- progress.total_objects(),
- progress.indexed_objects(),
- progress.received_bytes()
- );
- }
- std::io::stdout().flush().ok();
- true
- });
-
- let mut fetch_opts = FetchOptions::new();
- fetch_opts.remote_callbacks(remote_callbacks);
-
- fetch_opts
-}
-
-/// update the given branches in the [`repository`] using the nixpkgs remote
-fn update_branches_in(repository: &Repository, branches: &[String]) -> Result<(), Error> {
- let mut remote = repository.find_remote(NIXPKGS_REMOTE)?;
- // download all the refs
- remote.download(branches, Some(&mut fetch_options()))?;
- remote.disconnect()?;
- // and (hopefully) update what they refer to for later
- remote.update_tips(None, true, AutotagOption::Auto, None)?;
-
- Ok(())
-}
-
-pub fn fetch_or_update_repository(path: &str, branches: &[String]) -> Result<(), Error> {
- // Open our repository or clone it if it doesn't exist
- let path = Path::new(path);
- let repository = if path.exists() {
- Repository::open(path)?
- } else {
- warn!(
- "Couldn't find repository at {}! Cloning a fresh one from {NIXPKGS_URL}",
- path.display()
- );
- Repository::clone(NIXPKGS_URL, path)?;
- info!("Finished cloning to {}", path.display());
-
- // bail early as we already have a fresh copy
- return Ok(());
- };
-
- debug!("Updating repository at {}", path.display());
- update_branches_in(&repository, branches)?;
- debug!("Finished updating!");
-
- Ok(())
-}