github.com/mentimeter/morty@v1.2.2-0.20221012065510-5596adecd154/main.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 "log" 7 "os" 8 9 "github.com/mentimeter/morty/mortems" 10 "github.com/sethvargo/go-githubactions" 11 ) 12 13 var ErrMissingInput = errors.New("missing required input") 14 15 func main() { 16 if len(os.Args) <= 1 { 17 exitHelp() 18 } 19 if os.Args[1] == "check" { 20 if err := runCheck(); err != nil { 21 log.Fatalf("Oh jeez: %s\n", err) 22 } 23 } else if os.Args[1] == "local" { 24 if err := runLocal(); err != nil { 25 log.Fatalf("Oh jeez: %s\n", err) 26 } 27 } else if len(os.Args) == 3 && os.Args[1] == "git" && os.Args[2] == "check" { 28 if err := runGitCheck(); err != nil { 29 log.Fatalf("Oh jeez: %s\n", err) 30 } 31 } else if len(os.Args) == 2 && os.Args[1] == "git" { 32 if err := runGitCollect(); err != nil { 33 log.Fatalf("Oh jeez: %s\n", err) 34 } 35 } else { 36 exitHelp() 37 } 38 39 fmt.Println("Post-mortems successfully parsed and organized") 40 } 41 42 func exitHelp() { 43 fmt.Println("What do you want me to do? Options are: ") 44 fmt.Println(" `check` - for local parsing") 45 fmt.Println(" `git` - to parse and commit stats") 46 fmt.Println(" `git check` - to check parsing in your github action") 47 log.Fatalln("Please give me an argument!") 48 } 49 50 func runGitCollect() error { 51 token := githubactions.GetInput("token") 52 if token == "" { 53 fmt.Println("Want to check that your post-mortem is correctly formatted? Use `./morty check`") 54 return fmt.Errorf("no github action token supplied: %w", ErrMissingInput) 55 } 56 57 repository := os.Getenv("GITHUB_REPOSITORY") 58 if repository == "" { 59 return fmt.Errorf("no repository name set as env variable: %w", ErrMissingInput) 60 } 61 62 ref := os.Getenv("GITHUB_REF") 63 if ref == "" { 64 return fmt.Errorf("no ref: %w", ErrMissingInput) 65 } 66 67 gitService := mortems.NewGitHubService(token, repository, ref) 68 69 var mortemCollector mortems.MortemCollector 70 71 _, ddApiExists := os.LookupEnv("DD_API_KEY") 72 _, ddAppExists := os.LookupEnv("DD_APP_KEY") 73 if ddApiExists && ddAppExists { 74 ddService := mortems.NewDatadogReporter() 75 mortemCollector = mortems.NewMortemReportingCollector(gitService, ddService) 76 } else { 77 mortemCollector = mortems.NewMortemCollector(gitService) 78 79 } 80 81 return mortemCollector.Collect() 82 } 83 84 func runGitCheck() error { 85 token := githubactions.GetInput("token") 86 if token == "" { 87 fmt.Println("Want to check that your post-mortem is correctly formatted? Use `./morty check`") 88 return fmt.Errorf("no github action token supplied: %w", ErrMissingInput) 89 } 90 91 repository := os.Getenv("GITHUB_REPOSITORY") 92 if repository == "" { 93 return fmt.Errorf("no repository name set as env variable: %w", ErrMissingInput) 94 } 95 96 ref := os.Getenv("GITHUB_REF") 97 if ref == "" { 98 return fmt.Errorf("no ref: %w", ErrMissingInput) 99 } 100 101 gitService := mortems.NewGitHubService(token, repository, ref) 102 mortemCollector := mortems.NewMortemCollector(gitService) 103 _, err := mortemCollector.Check() 104 return err 105 } 106 107 func runLocal() error { 108 repoPath, err := os.Getwd() 109 if err != nil { 110 return fmt.Errorf("could not get wd: %w", err) 111 } 112 113 fileService := mortems.NewLocalFileService(repoPath) 114 115 var mortemCollector mortems.MortemCollector 116 117 _, ddApiExists := os.LookupEnv("DD_API_KEY") 118 _, ddAppExists := os.LookupEnv("DD_APP_KEY") 119 if ddApiExists && ddAppExists { 120 ddService := mortems.NewDatadogReporter() 121 mortemCollector = mortems.NewMortemReportingCollector(fileService, ddService) 122 } else { 123 mortemCollector = mortems.NewMortemCollector(fileService) 124 125 } 126 return mortemCollector.Collect() 127 } 128 129 func runCheck() error { 130 repoPath, err := os.Getwd() 131 if err != nil { 132 return fmt.Errorf("could not get wd: %w", err) 133 } 134 135 fileService := mortems.NewLocalFileService(repoPath) 136 mortemCollector := mortems.NewMortemCollector(fileService) 137 _, err = mortemCollector.Check() 138 return err 139 }