Skip to content

Commit 4b11759

Browse files
authored
Merge pull request #1868 from Urgau/rendered-link-config
Add proper config for rendered link handler
2 parents 9342f73 + 7a21772 commit 4b11759

File tree

3 files changed

+43
-20
lines changed

3 files changed

+43
-20
lines changed

src/config.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ pub(crate) struct Config {
4747
pub(crate) transfer: Option<TransferConfig>,
4848
pub(crate) merge_conflicts: Option<MergeConflictConfig>,
4949
pub(crate) bot_pull_requests: Option<BotPullRequests>,
50+
pub(crate) rendered_link: Option<RenderedLinkConfig>,
5051
}
5152

5253
#[derive(PartialEq, Eq, Debug, serde::Deserialize)]
@@ -408,6 +409,13 @@ pub(crate) struct MergeConflictConfig {
408409
#[serde(deny_unknown_fields)]
409410
pub(crate) struct BotPullRequests {}
410411

412+
#[derive(PartialEq, Eq, Debug, serde::Deserialize)]
413+
#[serde(rename_all = "kebab-case")]
414+
#[serde(deny_unknown_fields)]
415+
pub(crate) struct RenderedLinkConfig {
416+
pub(crate) trigger_files: Vec<String>,
417+
}
418+
411419
fn get_cached_config(repo: &str) -> Option<Result<Arc<Config>, ConfigurationError>> {
412420
let cache = CONFIG_CACHE.read().unwrap();
413421
cache.get(repo).and_then(|(config, fetch_time)| {
@@ -528,6 +536,9 @@ mod tests {
528536
infra = "T-infra"
529537
530538
[shortcut]
539+
540+
[rendered-link]
541+
trigger-files = ["posts/"]
531542
"#;
532543
let config = toml::from_str::<Config>(&config).unwrap();
533544
let mut ping_teams = HashMap::new();
@@ -587,6 +598,9 @@ mod tests {
587598
transfer: None,
588599
merge_conflicts: None,
589600
bot_pull_requests: None,
601+
rendered_link: Some(RenderedLinkConfig {
602+
trigger_files: vec!["posts/".to_string()]
603+
})
590604
}
591605
);
592606
}
@@ -649,6 +663,7 @@ mod tests {
649663
transfer: None,
650664
merge_conflicts: None,
651665
bot_pull_requests: None,
666+
rendered_link: None,
652667
}
653668
);
654669
}

src/handlers.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,15 @@ pub async fn handle(ctx: &Context, event: &Event) -> Vec<HandlerError> {
102102
);
103103
}
104104

105-
if let Err(e) = rendered_link::handle(ctx, event).await {
106-
log::error!(
107-
"failed to process event {:?} with rendered_link handler: {:?}",
108-
event,
109-
e
110-
);
105+
if let Some(rendered_link_config) = config.as_ref().ok().and_then(|c| c.rendered_link.as_ref())
106+
{
107+
if let Err(e) = rendered_link::handle(ctx, event, rendered_link_config).await {
108+
log::error!(
109+
"failed to process event {:?} with rendered_link handler: {:?}",
110+
event,
111+
e
112+
);
113+
}
111114
}
112115

113116
if let Err(e) = relnotes::handle(ctx, event).await {

src/handlers/rendered_link.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,36 @@ use std::borrow::Cow;
33
use anyhow::bail;
44

55
use crate::{
6+
config::RenderedLinkConfig,
67
github::{Event, IssuesAction, IssuesEvent},
78
handlers::Context,
89
};
910

10-
pub async fn handle(ctx: &Context, event: &Event) -> anyhow::Result<()> {
11-
let e = if let Event::Issue(e) = event {
12-
e
13-
} else {
11+
pub async fn handle(
12+
ctx: &Context,
13+
event: &Event,
14+
config: &RenderedLinkConfig,
15+
) -> anyhow::Result<()> {
16+
let Event::Issue(e) = event else {
1417
return Ok(());
1518
};
1619

1720
if !e.issue.is_pr() {
1821
return Ok(());
1922
}
2023

21-
let repo = e.issue.repository();
22-
let prefix = match (&*repo.organization, &*repo.repository) {
23-
("rust-lang", "rfcs") => "text/",
24-
("rust-lang", "blog.rust-lang.org") => "posts/",
25-
_ => return Ok(()),
26-
};
27-
28-
if let Err(e) = add_rendered_link(&ctx, &e, prefix).await {
24+
if let Err(e) = add_rendered_link(&ctx, &e, config).await {
2925
tracing::error!("Error adding rendered link: {:?}", e);
3026
}
3127

3228
Ok(())
3329
}
3430

35-
async fn add_rendered_link(ctx: &Context, e: &IssuesEvent, prefix: &str) -> anyhow::Result<()> {
31+
async fn add_rendered_link(
32+
ctx: &Context,
33+
e: &IssuesEvent,
34+
config: &RenderedLinkConfig,
35+
) -> anyhow::Result<()> {
3636
if e.action == IssuesAction::Opened
3737
|| e.action == IssuesAction::Closed
3838
|| e.action == IssuesAction::Reopened
@@ -42,7 +42,12 @@ async fn add_rendered_link(ctx: &Context, e: &IssuesEvent, prefix: &str) -> anyh
4242

4343
let rendered_link = files
4444
.iter()
45-
.find(|f| f.filename.starts_with(prefix))
45+
.find(|f| {
46+
config
47+
.trigger_files
48+
.iter()
49+
.any(|tf| f.filename.starts_with(tf))
50+
})
4651
.map(|file| {
4752
let head = e.issue.head.as_ref().unwrap();
4853
let base = e.issue.base.as_ref().unwrap();

0 commit comments

Comments
 (0)