chromite: Implement BundleChromeOSConfig BuildAPI endpoint.

BUG=chromium:987401
TEST=./run_tests

Change-Id: Iccfb573ac869cbc5aea613fd98a0a1f60b6e1994
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1748804
Tested-by: Andrew Lamb <andrewlamb@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/artifacts.py b/api/controller/artifacts.py
index f00d856..7b5fc5e 100644
--- a/api/controller/artifacts.py
+++ b/api/controller/artifacts.py
@@ -311,6 +311,28 @@
   output_proto.artifacts.add().path = os.path.join(output_dir, archive)
 
 
+@validate.exists('output_dir')
+@validate.validation_complete
+def BundleChromeOSConfig(input_proto, output_proto, _config):
+  """Output the ChromeOS Config payload for a build target.
+
+  Args:
+    input_proto (BundleRequest): The input proto.
+    output_proto (BundleResponse): The output proto.
+    _config (api_config.ApiConfig): The API call config.
+  """
+  output_dir = input_proto.output_dir
+  sysroot = sysroot_lib.Sysroot(input_proto.sysroot.path)
+  chroot = controller_util.ParseChroot(input_proto.chroot)
+
+  chromeos_config = artifacts.BundleChromeOSConfig(chroot, sysroot, output_dir)
+  if chromeos_config is None:
+    cros_build_lib.Die(
+        'Could not create ChromeOS Config payload. No config found for %s.',
+        sysroot.path)
+  output_proto.artifacts.add().path = os.path.join(output_dir, chromeos_config)
+
+
 @validate.require('output_dir', 'sysroot.build_target.name', 'sysroot.path')
 @validate.exists('output_dir')
 @validate.validation_complete