autocrossbow/cmd/acb/main.go

116 lines
2.7 KiB
Go
Raw Normal View History

2025-09-13 08:40:40 -04:00
package main
import (
"encoding/json"
"fmt"
"os"
"time"
"o5r.ca/autocrossbow/contributions"
"o5r.ca/autocrossbow/issues/vikunja"
2025-09-13 08:40:40 -04:00
"o5r.ca/autocrossbow/issues"
)
func main() {
proj := os.Args[1]
ghusername := os.Args[2]
start := os.Args[3]
end := os.Args[4]
2025-10-28 12:28:04 -04:00
employeename := os.Args[5]
// Parse Jira user from flags
jiraUser := ""
for i, arg := range os.Args {
if arg == "-jira-user" && i+1 < len(os.Args) {
jiraUser = os.Args[i+1]
break
}
}
if jiraUser == "" {
fmt.Println("Error: -jira-user flag is required")
os.Exit(1)
}
2025-10-28 12:28:04 -04:00
prs := DoPrs(proj, ghusername, start, end)
issues := DoJira(start, end, jiraUser)
vikunjaTasks := DoVikunja(start, end)
summ, err := SummarizeData(employeename, prs, issues, vikunjaTasks)
2025-10-28 12:28:04 -04:00
if err != nil {
fmt.Println(fmt.Errorf("error getting PRs: %w", err))
os.Exit(1)
}
fmt.Println(summ)
2025-09-13 08:40:40 -04:00
}
2025-10-28 12:28:04 -04:00
func DoPrs(proj, ghusername, start, end string) map[string][]contributions.PullRequest {
2025-09-13 08:40:40 -04:00
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)
}
2025-10-28 12:28:04 -04:00
return prs
2025-09-13 08:40:40 -04:00
}
func DoJira(start, end, jiraUser string) []issues.Issue {
2025-09-13 08:40:40 -04:00
host := os.Getenv("JIRA_HOST")
issues, err := issues.GetIssues(host, jiraUser, start, end)
2025-09-13 08:40:40 -04:00
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()))
2025-09-13 08:40:40 -04:00
if err != nil {
fmt.Println(fmt.Errorf("error creating JIRA file: %w", err))
2025-09-13 08:40:40 -04:00
os.Exit(1)
}
defer jf.Close()
enc := json.NewEncoder(jf)
2025-10-28 12:28:04 -04:00
err = enc.Encode(issues)
2025-09-13 08:40:40 -04:00
if err != nil {
fmt.Println(fmt.Errorf("error writing out JIRA issues: %w", err))
2025-09-13 08:40:40 -04:00
os.Exit(1)
}
2025-10-28 12:28:04 -04:00
return issues
2025-09-13 08:40:40 -04:00
}
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
}