summaryrefslogtreecommitdiff
path: root/crates/discord-bot/src/jobs.rs
blob: 40d34cc1a3bf7f3b80b8d46a4271b8f461bc5973 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use crate::{config::Config, consts::NIXPKGS_REMOTE, consts::NIXPKGS_URL};

use std::{path::Path, time::Duration};

use eyre::Result;
use git_tracker::ManagedRepository;
use log::error;

const TTL_SECS: u64 = 60 * 5; // 5 minutes

/// 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<()> {
	let managed_repository = ManagedRepository {
		path: Path::new(&config.nixpkgs_path).to_path_buf(),
		tracked_branches: config.nixpkgs_branches,
		upstream_remote_url: NIXPKGS_URL.to_string(),
		upstream_remote_name: NIXPKGS_REMOTE.to_string(),
	};

	managed_repository.fetch_or_update()?;

	tokio::spawn(async move {
		loop {
			tokio::time::sleep(Duration::from_secs(TTL_SECS)).await;
			if let Err(why) = managed_repository.fetch_or_update() {
				error!("Could not fetch or update repository!\n{why:?}");
			};
		}
	});

	Ok(())
}