package main import ( "encoding/json" "flag" "fmt" "os" "time" "o5r.ca/autocrossbow/contributions" "o5r.ca/autocrossbow/issues/vikunja" "o5r.ca/autocrossbow/issues" ) func main() { // Define flags var jiraUser = flag.String("jira-user", "", "Jira user to query") var proj = flag.String("proj", "", "Project name") var ghusername = flag.String("ghusername", "", "GitHub username") var start = flag.String("start", "", "Start date") var end = flag.String("end", "", "End date") var employeename = flag.String("employeename", "", "Employee name") flag.Parse() // Check required flags if *jiraUser == "" || *proj == "" || *ghusername == "" || *start == "" || *end == "" || *employeename == "" { fmt.Println("All flags are required") flag.Usage() os.Exit(1) } prs := DoPrs(*proj, *ghusername, *start, *end) issues := DoJira(*start, *end, *jiraUser) vikunjaTasks := DoVikunja(*start, *end) summ, err := SummarizeData(*employeename, prs, issues, vikunjaTasks) if err != nil { fmt.Println(fmt.Errorf("error getting PRs: %w", err)) os.Exit(1) } fmt.Println(summ) } func DoPrs(proj, ghusername, start, end string) map[string][]contributions.PullRequest { prs, err := contributions.GetPRs(proj, ghusername, start, end) if err != nil { fmt.Println(fmt.Errorf("error getting PRs: %w", err)) os.Exit(1) } ghf, err := os.Create(fmt.Sprintf("gh-%s-%s-%s-%s-%d.json", proj, ghusername, start, end, time.Now().Unix())) if err != nil { fmt.Println(fmt.Errorf("error creating PR file: %w", err)) os.Exit(1) } enc := json.NewEncoder(ghf) err = enc.Encode(prs) if err != nil { fmt.Println(fmt.Errorf("error writing out PRs: %w", err)) os.Exit(1) } return prs } func DoJira(start, end, jiraUser string) []issues.Issue { host := os.Getenv("JIRA_HOST") issues, err := issues.GetIssues(host, jiraUser, start, end) if err != nil { fmt.Println(fmt.Errorf("error getting PRs: %w", err)) os.Exit(1) } jf, err := os.Create(fmt.Sprintf("jira-%s-%s-%s-%s-%d.json", host, jiraUser, start, end, time.Now().Unix())) if err != nil { fmt.Println(fmt.Errorf("error creating JIRA file: %w", err)) os.Exit(1) } defer jf.Close() enc := json.NewEncoder(jf) err = enc.Encode(issues) if err != nil { fmt.Println(fmt.Errorf("error writing out JIRA issues: %w", err)) os.Exit(1) } return issues } func DoVikunja(start, end string) []vikunja.Task { host := os.Getenv("VIKUNJA_HOST") user := os.Getenv("VIKUNJA_USER") tasks, err := vikunja.GetTasks(host, user, start, end) if err != nil { fmt.Println(fmt.Errorf("error getting Vikunja tasks: %w", err)) os.Exit(1) } vf, err := os.Create(fmt.Sprintf("vikunja-%s-%s-%s-%s-%d.json", host, user, start, end, time.Now().Unix())) if err != nil { fmt.Println(fmt.Errorf("error creating Vikunja file: %w", err)) os.Exit(1) } defer vf.Close() enc := json.NewEncoder(vf) err = enc.Encode(tasks) if err != nil { fmt.Println(fmt.Errorf("error writing out Vikunja tasks: %w", err)) os.Exit(1) } return tasks }