ci_manager/ci_provider/
gitlab.rs

1#![allow(dead_code, unused_variables)]
2use crate::*;
3
4pub struct GitLab {
5    client: gitlab::Gitlab,
6}
7
8impl GitLab {
9    pub fn get() -> Self {
10        // Grab the token from the CI_PAT environment variable
11        let token = std::env::var("CI_PAT").unwrap();
12        // Query the GitLab API
13        let client = Gitlab::new("gitlab.com", token).unwrap();
14        Self { client }
15    }
16
17    pub fn handle(&self, command: &commands::Command) -> Result<()> {
18        let endpoint = projects::Project::builder()
19            .project("CramBL/github-workflow-parser")
20            .build()
21            .unwrap();
22        // Call the endpoint. The return type decides how to represent the value.
23        let project: Project = endpoint.query(&self.client).unwrap();
24        //let _: () = api::ignore(endpoint).query(&client).unwrap();
25        println!("{project:?}");
26
27        // List all open issues
28        let endpoint = projects::issues::Issues::builder()
29            .project("CramBL/github-workflow-parser")
30            .state(projects::issues::IssueState::Opened)
31            .label("bug")
32            .build()
33            .unwrap();
34
35        let issues: Vec<Issue> = endpoint.query(&self.client).unwrap();
36        println!("{issues:?}");
37
38        // query pipeline status
39        let endpoint = projects::pipelines::PipelineJobs::builder()
40            .project("CramBL/github-workflow-parser")
41            .pipeline(1180296622)
42            .build()
43            .unwrap();
44
45        let pipeline_jobs: Vec<Job> = endpoint.query(&self.client).unwrap();
46
47        println!("{pipeline_jobs:?}");
48
49        // get log for failed job
50        let failed_job = pipeline_jobs
51            .iter()
52            .find(|job| job.status == "failed")
53            .unwrap();
54
55        let endpoint = projects::jobs::Job::builder()
56            .project("CramBL/github-workflow-parser")
57            .job(6195815626)
58            .build()
59            .unwrap();
60
61        let job: Job = endpoint.query(&self.client).unwrap();
62
63        println!("{job:?}");
64
65        let endpoint = projects::jobs::JobTrace::builder()
66            .project("CramBL/github-workflow-parser")
67            .job(6195815626)
68            .build()
69            .unwrap();
70
71        let resp = api::raw(endpoint).query(&self.client).unwrap();
72
73        println!("{}", String::from_utf8_lossy(&resp));
74
75        // let failed_jobs: Vec<String> = pipeline_jobs
76        //     .iter()
77        //     .filter(|job| job.status == "failed")
78        //     .map(|job| job.name.clone())
79        //     .collect();
80
81        // let endpoint = projects::issues::CreateIssue::builder()
82        //     .project("CramBL/github-workflow-parser")
83        //     .title("Failed pipeline")
84        //     .description(format!(
85        //         "The pipeline failed, these jobs failed: {}",
86        //         failed_jobs.join(", ")
87        //     ))
88        //     .labels(["bug", "test"])
89        //     .build()
90        //     .unwrap();
91
92        // let resp = api::raw(endpoint).query(&client).unwrap();
93
94        // let resp_as_string = std::str::from_utf8(&resp).unwrap();
95
96        // println!("{resp_as_string}");
97        Ok(())
98    }
99}
100
101#[derive(Debug, Deserialize)]
102struct Project {
103    name: String,
104    name_with_namespace: String,
105}
106
107#[derive(Debug, Deserialize)]
108struct Issue {
109    title: String,
110    description: String,
111    labels: Vec<String>,
112}
113
114#[derive(Debug, Deserialize)]
115struct Job {
116    id: u64,
117    name: String,
118    status: String,
119    #[serde(rename = "ref")]
120    ref_: String,
121}