Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
@@ -19,3 +19,4 @@ tower-http = { version = "0.5.2", features = ["cors", "trace"] }
|
||||
futures = "0.3.30"
|
||||
reqwest = {version = "0.12.3", default-features = false, features = ["json", "rustls-tls"]}
|
||||
itertools = "0.12.1"
|
||||
regex = "1.10.4"
|
||||
|
@@ -23,6 +23,9 @@ enum Commands {
|
||||
user: Option<String>,
|
||||
#[arg(long)]
|
||||
org: Option<Vec<String>>,
|
||||
|
||||
#[arg(long, env = "CONTRACTOR_FILTER")]
|
||||
filter: Option<String>,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -61,12 +64,12 @@ async fn main() -> anyhow::Result<()> {
|
||||
result??
|
||||
}
|
||||
}
|
||||
Some(Commands::Reconcile { user, org }) => {
|
||||
Some(Commands::Reconcile { user, org, filter }) => {
|
||||
tracing::info!("running reconcile");
|
||||
|
||||
let state = SharedState::from(Arc::new(State::new().await?));
|
||||
|
||||
state.reconciler().reconcile(user, org).await?;
|
||||
state.reconciler().reconcile(user, org, filter).await?;
|
||||
}
|
||||
None => {}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
use std::{ops::Deref, pin::Pin, sync::Arc};
|
||||
use std::{fmt::Display, ops::Deref, pin::Pin, sync::Arc};
|
||||
|
||||
type DynGiteaClient = Arc<dyn traits::GiteaClient + Send + Sync + 'static>;
|
||||
pub struct GiteaClient(DynGiteaClient);
|
||||
@@ -23,6 +23,12 @@ pub struct Repository {
|
||||
pub name: String,
|
||||
}
|
||||
|
||||
impl Display for Repository {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.write_fmt(format_args!("{}/{}", self.owner, self.name))
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<GiteaRepository> for Repository {
|
||||
type Error = anyhow::Error;
|
||||
|
||||
|
@@ -1,3 +1,4 @@
|
||||
use anyhow::Context;
|
||||
use futures::{stream::FuturesUnordered, StreamExt};
|
||||
use itertools::Itertools;
|
||||
|
||||
@@ -18,11 +19,38 @@ impl Reconciler {
|
||||
&self,
|
||||
user: Option<String>,
|
||||
orgs: Option<Vec<String>>,
|
||||
filter: Option<String>,
|
||||
) -> anyhow::Result<()> {
|
||||
let repos = self.get_repos(user, orgs).await?;
|
||||
tracing::debug!("found repositories: {}", repos.len());
|
||||
|
||||
let renovate_enabled = self.get_renovate_enabled(&repos).await?;
|
||||
let filtered_repos = match filter {
|
||||
Some(filter) => {
|
||||
let re = regex::Regex::new(&filter).context(
|
||||
"filter regex failed to compile, make sure it is valid against rust-lang/regex",
|
||||
)?;
|
||||
|
||||
repos
|
||||
.into_iter()
|
||||
.filter(|r| {
|
||||
if re.is_match(&r.to_string()) {
|
||||
true
|
||||
} else {
|
||||
tracing::trace!(
|
||||
filter = &filter,
|
||||
"repository: {}, didn't match filter",
|
||||
r.to_string(),
|
||||
);
|
||||
false
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
None => repos,
|
||||
};
|
||||
tracing::debug!("filtered repositories: {}", filtered_repos.len());
|
||||
|
||||
let renovate_enabled = self.get_renovate_enabled(&filtered_repos).await?;
|
||||
tracing::debug!(
|
||||
"found repositories with renovate enabled: {}",
|
||||
renovate_enabled.len()
|
||||
|
Reference in New Issue
Block a user