Make multiproduct_kati return error

Test: insert error, run build/soong/build_test.sh and check $?
Change-Id: I3462defd1ff04247a8b729e22988cbe002b0ce69
diff --git a/cmd/multiproduct_kati/main.go b/cmd/multiproduct_kati/main.go
index 237d384..9fb400f 100644
--- a/cmd/multiproduct_kati/main.go
+++ b/cmd/multiproduct_kati/main.go
@@ -135,7 +135,7 @@
 	writer := terminal.NewWriter(terminal.StdioImpl{})
 	defer writer.Finish()
 
-	log := logger.New(os.Stderr)
+	log := logger.New(writer)
 	defer log.Cleanup()
 
 	flag.Parse()
@@ -150,6 +150,9 @@
 	defer stat.Finish()
 	stat.AddOutput(terminal.NewStatusOutput(writer, ""))
 
+	var failures failureCount
+	stat.AddOutput(&failures)
+
 	build.SetupSignals(log, cancel, func() {
 		trace.Close()
 		log.Cleanup()
@@ -386,4 +389,30 @@
 	}
 
 	s.Finish()
+
+	if failures == 1 {
+		log.Fatal("1 failure")
+	} else if failures > 1 {
+		log.Fatalf("%d failures", failures)
+	} else {
+		writer.Print("Success")
+	}
 }
+
+type failureCount int
+
+func (f *failureCount) StartAction(action *status.Action, counts status.Counts) {}
+
+func (f *failureCount) FinishAction(result status.ActionResult, counts status.Counts) {
+	if result.Error != nil {
+		*f += 1
+	}
+}
+
+func (f *failureCount) Message(level status.MsgLevel, message string) {
+	if level >= status.ErrorLvl {
+		*f += 1
+	}
+}
+
+func (f *failureCount) Flush() {}