瀏覽代碼

Group FCP queries and remove duplicate empty results

apiraino 4 年之前
父節點
當前提交
083bafce17
共有 2 個文件被更改,包括 57 次插入11 次删除
  1. 47 1
      src/actions.rs
  2. 10 10
      src/agenda.rs

+ 47 - 1
src/actions.rs

@@ -47,6 +47,28 @@ lazy_static! {
     };
 }
 
+// Group all the pending FCP for these teams
+pub const IN_PRE_FCP_COMPILER_TEAM: &str = "in_pre_fcp_compiler_team";
+pub const IN_PRE_FCP_RUST: &str = "in_pre_fcp_rust";
+pub const IN_PRE_FCP_FORGE: &str = "in_pre_fcp_forge";
+const PENDINGFCP: [&str; 3] = [IN_PRE_FCP_COMPILER_TEAM, IN_PRE_FCP_RUST, IN_PRE_FCP_FORGE];
+
+// Group all the FCP for these teams
+pub const IN_FCP_COMPILER_TEAM: &str = "in_fcp_compiler_team";
+pub const IN_FCP_RUST: &str = "in_fcp_rust";
+pub const IN_FCP_FORGE: &str = "in_fcp_forge";
+const THINGSINFCP: [&str; 3] = [IN_FCP_COMPILER_TEAM, IN_FCP_RUST, IN_FCP_FORGE];
+
+// Group all the Finalized FCP for these teams
+pub const FCP_FINISHED_COMPILER_TEAM: &str = "fcp_finished_compiler_team";
+pub const FCP_FINISHED_RUST: &str = "fcp_finished_rust";
+pub const FCP_FINISHED_FORGE: &str = "fcp_finished_forge";
+const FINALIZEDFCP: [&str; 3] = [
+    FCP_FINISHED_COMPILER_TEAM,
+    FCP_FINISHED_RUST,
+    FCP_FINISHED_FORGE,
+];
+
 #[async_trait]
 impl<'a> Action for Step<'a> {
     async fn call(&self) -> String {
@@ -54,6 +76,10 @@ impl<'a> Action for Step<'a> {
 
         let mut context = Context::new();
 
+        let mut all_pending_fcp: Vec<(&str, Vec<IssueDecorator>)> = vec![];
+        let mut all_things_in_fcp: Vec<(&str, Vec<IssueDecorator>)> = vec![];
+        let mut all_finalized_fcp: Vec<(&str, Vec<IssueDecorator>)> = vec![];
+
         for Query { repo, queries } in &self.actions {
             let repository = Repository {
                 full_name: repo.to_string(),
@@ -93,7 +119,16 @@ impl<'a> Action for Step<'a> {
                                     })
                                     .collect();
 
-                                context.insert(*name, &issues_decorator);
+                                // group query results for multiline FCP and add them later
+                                if PENDINGFCP.contains(name) {
+                                    all_pending_fcp.push(("in_pre_fcp", issues_decorator));
+                                } else if THINGSINFCP.contains(name) {
+                                    all_things_in_fcp.push(("in_fcp", issues_decorator));
+                                } else if FINALIZEDFCP.contains(name) {
+                                    all_finalized_fcp.push(("fcp_finished", issues_decorator));
+                                } else {
+                                    context.insert(*name, &issues_decorator);
+                                }
                             }
                             Err(err) => {
                                 eprintln!("ERROR: {}", err);
@@ -125,6 +160,17 @@ impl<'a> Action for Step<'a> {
             }
         }
 
+        // Add to a single template the aggregate of each group
+        for (name, issue_decorator) in all_pending_fcp {
+            context.insert(name, &issue_decorator);
+        }
+        for (name, issue_decorator) in all_things_in_fcp {
+            context.insert(name, &issue_decorator);
+        }
+        for (name, issue_decorator) in all_finalized_fcp {
+            context.insert(name, &issue_decorator);
+        }
+
         TEMPLATES
             .render(&format!("{}.tt", self.name), &context)
             .unwrap()

+ 10 - 10
src/agenda.rs

@@ -1,4 +1,4 @@
-use crate::actions::{Action, Query, QueryMap, Step};
+use crate::actions::{self, Action, Query, QueryMap, Step};
 use crate::github;
 
 pub fn prioritization<'a>() -> Box<dyn Action> {
@@ -28,7 +28,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
     });
 
     queries.push(QueryMap {
-        name: "in_pre_fcp_compiler_team",
+        name: actions::IN_PRE_FCP_COMPILER_TEAM,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "open")],
@@ -37,7 +37,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
         },
     });
     queries.push(QueryMap {
-        name: "in_fcp_compiler_team",
+        name: actions::IN_FCP_COMPILER_TEAM,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "open")],
@@ -57,7 +57,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
     });
 
     queries.push(QueryMap {
-        name: "fcp_finished_compiler_team",
+        name: actions::FCP_FINISHED_COMPILER_TEAM,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "all")],
@@ -78,7 +78,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
     let mut queries = Vec::new();
 
     queries.push(QueryMap {
-        name: "in_pre_fcp_rust",
+        name: actions::IN_PRE_FCP_RUST,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "open")],
@@ -87,7 +87,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
         },
     });
     queries.push(QueryMap {
-        name: "in_fcp_rust",
+        name: actions::IN_FCP_RUST,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "open")],
@@ -97,7 +97,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
     });
 
     queries.push(QueryMap {
-        name: "fcp_finished_rust",
+        name: actions::FCP_FINISHED_RUST,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "all")],
@@ -118,7 +118,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
     let mut queries = Vec::new();
 
     queries.push(QueryMap {
-        name: "in_pre_fcp_forge",
+        name: actions::IN_PRE_FCP_FORGE,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "open")],
@@ -127,7 +127,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
         },
     });
     queries.push(QueryMap {
-        name: "in_fcp_forge",
+        name: actions::IN_FCP_FORGE,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "open")],
@@ -137,7 +137,7 @@ pub fn prioritization<'a>() -> Box<dyn Action> {
     });
 
     queries.push(QueryMap {
-        name: "fcp_finished_forge",
+        name: actions::FCP_FINISHED_FORGE,
         query: github::Query {
             kind: github::QueryKind::List,
             filters: vec![("state", "all")],