github.com/testrecall/reporter@v0.2.3-0.20240102230324-a312dcb6d921/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 8 "github.com/sirupsen/logrus" 9 "github.com/testrecall/reporter/reporter" 10 ) 11 12 var ( 13 // updated at compile 14 RemoteURL = "http://0.0.0.0:1323" 15 Version = "unknown" 16 Date = "unknown" 17 Commit = "unknown" 18 19 printVersion = flag.Bool("version", false, "print version") 20 21 debug = flag.Bool("debug", false, "debug log level") 22 setExitCode = flag.String("setExitCode", "", "[true]/false', exits 1 if tests failed") 23 multi = flag.String("multi", "", reporter.MultiErrorMessage) 24 25 junitFile = flag.String("file", "", "junit file") 26 hostName = flag.String("host", "", "host name") 27 28 gitBranch = flag.String("branch", "", "git branch") 29 gitSHA = flag.String("sha", "", "git sha") 30 gitTag = flag.String("tag", "", "git tag") 31 isPr = flag.String("pr", "", "true/false/[unknown] is git PR") 32 33 slug = flag.String("slug", "", "repo slug") 34 ciName = flag.String("ciName", "", "ci runner name") 35 buildNumber = flag.String("buildnumber", "", "build number for labeling runs") 36 buildURL = flag.String("buildurl", "", "build url to link back to") 37 job = flag.String("job", "", "build url to link back to") 38 ) 39 40 func main() { 41 flag.Parse() 42 43 if *printVersion { 44 fmt.Printf("Version: %s\nCommit: %s\nBuilt at: %s\n", Version, Commit, Date) 45 os.Exit(0) 46 } 47 48 logger := logrus.New() 49 logger.SetFormatter(&logrus.TextFormatter{FullTimestamp: true}) 50 51 if *debug { 52 logger.Level = logrus.TraceLevel 53 } else { 54 logger.Level = logrus.InfoLevel 55 } 56 57 flags := map[string]string{} 58 flag.VisitAll(func(f *flag.Flag) { 59 value := f.Value.String() 60 if value != "" { 61 flags[f.Name] = value 62 } 63 }) 64 65 payload := reporter.RequestPayload{ 66 Filename: *junitFile, 67 UploadToken: "", 68 69 RequestData: reporter.RequestData{ 70 RunData: [][]byte{}, 71 Filenames: []string{*junitFile}, 72 Multi: *multi, 73 74 Hostname: *hostName, 75 ReporterVersion: Version + "-" + Commit, 76 Flags: flags, 77 78 Branch: *gitBranch, 79 SHA: *gitSHA, 80 Tag: *gitTag, 81 PR: *isPr, 82 83 Slug: *slug, 84 CIName: *ciName, 85 BuildNumber: *buildNumber, 86 BuildURL: *buildURL, 87 Job: *job, 88 }, 89 90 Logger: logger, 91 } 92 93 payload.Setup() 94 95 url := RemoteURL 96 if newURL, found := os.LookupEnv("TR_SITE"); found { 97 url = newURL 98 } 99 100 sender := reporter.NewSender(logger) 101 if err := sender.Send(url, payload); err != nil { 102 logger.Debug("upload failed!") 103 logger.Fatalln(err) 104 } 105 logger.Debug("upload success!") 106 107 fails, xmlValid := payload.FailureCount() 108 if shouldExitOnFail(*setExitCode) { 109 if !xmlValid { 110 logger.Debugf("test xml is invalid") 111 os.Exit(1) 112 } else if fails > 0 { 113 logger.Debugf("exiting with failed tests: %v", fails) 114 os.Exit(1) 115 } 116 } 117 } 118 119 func shouldExitOnFail(s string) bool { 120 if s == "false" || s == "f" { 121 return false 122 } 123 return true 124 }