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  }