github.com/fnando/bolt@v0.0.4-0.20231107225351-5241e4d187b8/internal/reporters/post_run_command_reporter.go (about) 1 package reporters 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "os" 8 "os/exec" 9 10 c "github.com/fnando/bolt/common" 11 ) 12 13 type PostRunCommandReporter struct { 14 Command string 15 Output *c.Output 16 } 17 18 func (reporter PostRunCommandReporter) Name() string { 19 return "post-command" 20 } 21 22 func (reporter PostRunCommandReporter) OnFinished(options ReporterFinishedOptions) { 23 if reporter.Command == "" { 24 return 25 } 26 27 total := options.Aggregation.TestsCount() 28 fail := options.Aggregation.CountBy("fail") 29 pass := options.Aggregation.CountBy("pass") 30 skip := options.Aggregation.CountBy("skip") 31 benchmarks := len(options.Aggregation.Benchmarks()) 32 elapsed := options.Aggregation.Elapsed() 33 elapsedNS := int(elapsed) 34 title := "Passed!" 35 36 if fail > 0 { 37 title = "Failed!" 38 } 39 40 env := os.Environ() 41 env = append( 42 env, 43 fmt.Sprintf( 44 "BOLT_SUMMARY=Finished in %s, %d tests, %d fails, %d skips, %d benchmarks", 45 formatDuration(elapsed, 2), 46 total, 47 fail, 48 skip, 49 benchmarks, 50 ), 51 fmt.Sprintf("BOLT_TEST_COUNT=%d", total), 52 fmt.Sprintf("BOLT_FAIL_COUNT=%d", fail), 53 fmt.Sprintf("BOLT_PASS_COUNT=%d", pass), 54 fmt.Sprintf("BOLT_SKIP_COUNT=%d", skip), 55 fmt.Sprintf("BOLT_BENCHMARK_COUNT=%d", benchmarks), 56 fmt.Sprintf("BOLT_ELAPSED_NANOSECONDS=%d", elapsedNS), 57 fmt.Sprintf("BOLT_ELAPSED=%s", formatDuration(elapsed, 2)), 58 fmt.Sprintf("BOLT_TITLE=%s", title), 59 ) 60 61 var buffer bytes.Buffer 62 out := io.Writer(&buffer) 63 64 dir, _ := os.Getwd() 65 66 cmd := exec.Command("bash", "-c", reporter.Command) 67 cmd.Stdout = out 68 cmd.Stderr = out 69 cmd.Dir = dir 70 cmd.Env = env 71 err := cmd.Start() 72 73 if options.Debug && err != nil { 74 fmt.Fprintln( 75 reporter.Output.Stderr, 76 "\n", 77 c.Color.Detail("⚡️")+" failed to run post run command:", 78 err, 79 buffer.String(), 80 ) 81 } 82 83 if err != nil { 84 return 85 } 86 87 err = cmd.Wait() 88 89 if options.Debug && err != nil { 90 fmt.Fprintln( 91 reporter.Output.Stderr, 92 "\n", 93 c.Color.Detail("⚡️")+" failed to run post run command:", 94 err, 95 ) 96 97 fmt.Fprintln( 98 reporter.Output.Stderr, 99 "output:", 100 buffer.String(), 101 ) 102 } 103 104 if err != nil { 105 return 106 } 107 } 108 109 func (reporter PostRunCommandReporter) OnProgress(test c.Test) { 110 } 111 112 func (reporter PostRunCommandReporter) OnData(line string) { 113 }