fixup, fail on bots

td.FailStep() isn't enough to fail the bot,
so go back to a call to td.Fatal() when failures>0.

Change-Id: Ib2be7b15200376ab8a16e4a1b69d98fde0630673
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/364471
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/infra/bots/task_drivers/fm_driver/fm_driver.go b/infra/bots/task_drivers/fm_driver/fm_driver.go
index 2b5fe40..647ddb1 100644
--- a/infra/bots/task_drivers/fm_driver/fm_driver.go
+++ b/infra/bots/task_drivers/fm_driver/fm_driver.go
@@ -37,9 +37,7 @@
 	)
 	flag.Parse()
 
-	var failures int32 = 0
 	ctx := context.Background()
-	fail := func(_ error) { atomic.AddInt32(&failures, 1) }
 	fatal := func(err error) {
 		fmt.Fprintln(os.Stderr, err)
 		os.Exit(1)
@@ -47,9 +45,8 @@
 
 	if !*local {
 		ctx = td.StartRun(projectId, taskId, bot, output, local)
-		fail = func(err error) { td.FailStep(ctx, err) }
-		fatal = func(err error) { td.Fatal(ctx, err) }
 		defer td.EndRun(ctx)
+		fatal = func(err error) { td.Fatal(ctx, err) }
 	}
 
 	if flag.NArg() < 1 {
@@ -112,6 +109,7 @@
 
 	queue := make(chan Work, 1<<20) // Arbitrarily huge buffer to avoid ever blocking.
 	wg := &sync.WaitGroup{}
+	var failures int32 = 0
 
 	var worker func([]string, []string)
 	worker = func(sources, flags []string) {
@@ -158,7 +156,7 @@
 
 		// If an individual run failed, nothing more to do but fail.
 		if err != nil {
-			fail(err)
+			atomic.AddInt32(&failures, 1)
 			if *local {
 				lines := []string{}
 				scanner := bufio.NewScanner(stderr)
@@ -172,6 +170,8 @@
 					cmd.Name,
 					strings.Join(cmd.Args, " "),
 					strings.Join(lines, "\n\t"))
+			} else {
+				td.FailStep(ctx, err)
 			}
 			return
 		}