Build API: Refactor service/lib and commands.py to use artifacts.BundleFirmware

BUG=chromium:954300
TEST=manual, run_tests

Change-Id: I50d45449ed775cd8a1fc563f678a4f773a7cbd98
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1667502
Tested-by: Michael Mortensen <mmortensen@google.com>
Reviewed-by: Andrew Lamb <andrewlamb@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Michael Mortensen <mmortensen@google.com>
diff --git a/api/controller/artifacts.py b/api/controller/artifacts.py
index bf37a23..3e056a1 100644
--- a/api/controller/artifacts.py
+++ b/api/controller/artifacts.py
@@ -202,16 +202,20 @@
     input_proto (BundleRequest): The input proto.
     output_proto (BundleResponse): The output proto.
   """
-  target = input_proto.build_target.name
   output_dir = input_proto.output_dir
-  build_root = constants.SOURCE_ROOT
-
-  # TODO(crbug.com/954300): Replace with a chromite/service implementation.
-  archive = commands.BuildFirmwareArchive(build_root, target, output_dir)
+  if not output_dir:
+    cros_build_lib.Die('output_dir is required.')
+  chroot = controller_util.ParseChroot(input_proto.chroot)
+  sysroot_path = input_proto.sysroot.path
+  if not sysroot_path:
+    cros_build_lib.Die('sysroot.path is required.')
+  sysroot = sysroot_lib.Sysroot(sysroot_path)
+  archive = artifacts.BuildFirmwareArchive(chroot, sysroot, output_dir)
 
   if archive is None:
     cros_build_lib.Die(
-        'Could not create firmware archive. No firmware found for %s.', target)
+        'Could not create firmware archive. No firmware found for %s.',
+        sysroot_path)
 
   output_proto.artifacts.add().path = os.path.join(output_dir, archive)