github.com/ajguerrer/rules_go@v0.20.3/go/tools/windows-testrunner/windows-testrunner.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "log" 7 "os" 8 "os/exec" 9 10 "gopkg.in/yaml.v2" 11 ) 12 13 func main() { 14 log.SetFlags(0) 15 log.SetPrefix("testrunner: ") 16 if err := run(os.Args[1:]); err != nil { 17 log.Fatal(err) 18 } 19 } 20 21 func run(args []string) error { 22 if len(args) != 1 { 23 return fmt.Errorf("want 1 arg; got %d", len(args)) 24 } 25 26 testPath := args[0] 27 testData, err := ioutil.ReadFile(testPath) 28 if err != nil { 29 return err 30 } 31 var config interface{} 32 if err := yaml.Unmarshal(testData, &config); err != nil { 33 return err 34 } 35 36 platform := config.(map[interface{}]interface{})["platforms"].(map[interface{}]interface{})["windows"].(map[interface{}]interface{}) 37 var flags, buildTargets, testTargets []string 38 for _, f := range platform["build_flags"].([]interface{}) { 39 flags = append(flags, f.(string)) 40 } 41 for _, t := range platform["build_targets"].([]interface{}) { 42 buildTargets = append(buildTargets, t.(string)) 43 } 44 for _, t := range platform["test_targets"].([]interface{}) { 45 testTargets = append(testTargets, t.(string)) 46 } 47 48 buildCmd := exec.Command("bazel", "build") 49 buildCmd.Args = append(buildCmd.Args, flags...) 50 buildCmd.Args = append(buildCmd.Args, buildTargets...) 51 buildCmd.Stdout = os.Stdout 52 buildCmd.Stderr = os.Stderr 53 if err := buildCmd.Run(); err != nil { 54 return err 55 } 56 57 testCmd := exec.Command("bazel", "test") 58 testCmd.Args = append(testCmd.Args, flags...) 59 testCmd.Args = append(testCmd.Args, testTargets...) 60 testCmd.Stdout = os.Stdout 61 testCmd.Stderr = os.Stderr 62 if err := testCmd.Run(); err != nil { 63 return err 64 } 65 66 return nil 67 }