github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/tests/build_tau_test.go (about) 1 //go:build !no_rebuild 2 3 package tests 4 5 import ( 6 "bytes" 7 "fmt" 8 "os" 9 "os/exec" 10 "sync" 11 "time" 12 13 "github.com/pterm/pterm" 14 ) 15 16 var ( 17 tauBuilt bool 18 buildLock sync.Mutex 19 20 // Special case override for sending empty values, will be useful 21 // when testing for scripting as currently survey empty values panic with EOF 22 // TODO We need to handle EOF for non-required prompts and return 23 // Note this should only be used for debugging as other tests could get stuck looping 24 promptingEnabled bool 25 26 buildTags = "localAuthClient,projectCreateable,localPatrick,mockGithub" 27 ) 28 29 func internalBuildTau() error { 30 buildLock.Lock() 31 defer buildLock.Unlock() 32 if tauBuilt { 33 return nil 34 } 35 36 tauBuilt = true 37 38 toBuildTags := buildTags 39 if !promptingEnabled { 40 toBuildTags += ",noPrompt" 41 } 42 43 buildStartTime := time.Now() 44 buildCmd := exec.Command("go", "build", "--tags", toBuildTags, "../") 45 46 var out bytes.Buffer 47 var errOut bytes.Buffer 48 buildCmd.Stdout = &out 49 buildCmd.Stderr = &errOut 50 51 err := buildCmd.Start() 52 if err != nil { 53 return fmt.Errorf("starting build command failed with: %s", err) 54 } 55 56 err = buildCmd.Wait() 57 if err != nil { 58 fmt.Printf("tau failed to build:\n%s\n", &errOut) 59 os.Exit(1) 60 } 61 // Display buildStartTime 62 pterm.Info.Printf("tau built in %s\n", time.Since(buildStartTime)) 63 64 _, err = os.Stat("./tau-cli") 65 if err != nil { 66 return fmt.Errorf("building tau for tests failed with: %s", err) 67 } 68 69 return nil 70 } 71 72 // Always rebuild between `go test ...` command executions 73 func buildTau() error { 74 return internalBuildTau() 75 }