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  }