Skip to main content

josh_github_graphql/operations/
check_runs.rs

1use josh_github_codegen_graphql::{
2    check_runs_discover::{
3        self, CheckRunsDiscoverNodes, CheckRunsDiscoverNodesOnCommitCheckSuites,
4        CheckRunsDiscoverNodesOnCommitCheckSuitesNodes, _CheckSuiteInfo,
5    },
6    CheckRunsDiscover, Id, NodeId,
7};
8
9use crate::connection::GithubApiConnection;
10
11impl GithubApiConnection {
12    // TODO:: filter out check suites matching github app id
13    pub async fn check_run_state_discover(
14        &self,
15        node_ids: Vec<NodeId>,
16    ) -> anyhow::Result<Vec<(NodeId, Vec<(NodeId, Id, usize)>)>> {
17        let variables = check_runs_discover::Variables {
18            node_ids: node_ids.clone(),
19        };
20
21        let response = self.make_request::<CheckRunsDiscover>(variables).await?;
22        let check_suites = response
23            .nodes
24            .into_iter()
25            .zip(node_ids)
26            .filter_map(|(node, id)| match node {
27                Some(CheckRunsDiscoverNodes::Commit(commit)) => match commit.check_suites {
28                    Some(CheckRunsDiscoverNodesOnCommitCheckSuites {
29                        nodes: Some(check_suites),
30                    }) => Some((id, check_suites)),
31                    _ => None,
32                },
33                _ => None,
34            });
35
36        let result = check_suites
37            .into_iter()
38            .map(|(id, check_suites)| {
39                let check_runs = check_suites
40                    .into_iter()
41                    .flatten()
42                    .filter_map(|check_suite| match check_suite {
43                        CheckRunsDiscoverNodesOnCommitCheckSuitesNodes {
44                            check_suite_info: _CheckSuiteInfo { id, app: Some(app) },
45                            check_runs: Some(check_runs),
46                        } => Some((id, app.id, check_runs.total_count as usize)),
47                        _ => None,
48                    });
49
50                (id, check_runs.collect::<Vec<_>>())
51            })
52            .collect::<Vec<_>>();
53
54        Ok(result)
55    }
56}