review_requested.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. use crate::config::ReviewRequestedConfig;
  2. use crate::github::{Event, IssuesAction, IssuesEvent, Label};
  3. use crate::handlers::Context;
  4. pub(crate) async fn handle(
  5. ctx: &Context,
  6. event: &Event,
  7. config: &ReviewRequestedConfig,
  8. ) -> anyhow::Result<()> {
  9. // PR author requests a review from one of the assignees
  10. if let Event::Issue(IssuesEvent {
  11. action,
  12. issue,
  13. sender,
  14. ..
  15. }) = event
  16. {
  17. if let IssuesAction::ReviewRequested { requested_reviewer } = action {
  18. if *sender == issue.user && issue.assignees.contains(requested_reviewer) {
  19. issue
  20. .add_labels(
  21. &ctx.github,
  22. config
  23. .add_labels
  24. .iter()
  25. .cloned()
  26. .map(|name| Label { name })
  27. .collect(),
  28. )
  29. .await?;
  30. for label in &config.remove_labels {
  31. issue.remove_label(&ctx.github, label).await?;
  32. }
  33. }
  34. }
  35. }
  36. Ok(())
  37. }