api: Output failed package data in SdkService/Update response.

If a host package failed to compile in the SDK update call, then return
the package name and logs so that it can be surfaced by the builders.

BUG=b:271120919
TEST=./run_tests
TEST=led https://chromeos-swarming.appspot.com/task?id=640ec62cfcc82c10

Change-Id: I20825ebd4e2d74fbd08accc5488818fbe6d19e28
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4772528
Reviewed-by: Alex Klein <saklein@chromium.org>
Reviewed-by: Lee Presland <zland@google.com>
Commit-Queue: Navil Perez <navil@google.com>
Tested-by: Navil Perez <navil@google.com>
diff --git a/api/controller/sdk.py b/api/controller/sdk.py
index 127d7af..8417dfa 100644
--- a/api/controller/sdk.py
+++ b/api/controller/sdk.py
@@ -13,6 +13,7 @@
 from chromite.api.controller import controller_util
 from chromite.api.gen.chromiumos import common_pb2
 from chromite.lib import cros_build_lib
+from chromite.lib import sysroot_lib
 from chromite.service import sdk
 
 
@@ -167,16 +168,17 @@
         toolchain_changed=toolchain_changed,
     )
 
-    version = sdk.Update(args)
-
-    if version:
-        output_proto.version.version = version
-    else:
-        # This should be very rare, if ever used, but worth noting.
-        cros_build_lib.Die(
-            "No chroot version could be found. There was likely an"
-            "error creating the chroot that was not detected."
+    result = sdk.Update(args)
+    if result.success:
+        output_proto.version.version = result.version
+    elif result.failed_pkgs:
+        sysroot = sysroot_lib.Sysroot("/")
+        controller_util.retrieve_package_log_paths(
+            result.failed_pkgs, output_proto, sysroot
         )
+        return controller.RETURN_CODE_UNSUCCESSFUL_RESPONSE_AVAILABLE
+    else:
+        return controller.RETURN_CODE_COMPLETED_UNSUCCESSFULLY
 
 
 @faux.all_empty