controller/api: Implement CompileProtos endpoint.

BUG=b:162381958
TEST=manual

Change-Id: I68d696e43ff358fa2606c3ff0411c7d8a2f7f3a9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2708607
Tested-by: Alex Klein <saklein@chromium.org>
Reviewed-by: LaMont Jones <lamontjones@chromium.org>
Reviewed-by: Michael Mortensen <mmortensen@google.com>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/api.py b/api/controller/api.py
index 38253b1..1123fdb 100644
--- a/api/controller/api.py
+++ b/api/controller/api.py
@@ -7,9 +7,13 @@
 
 from __future__ import print_function
 
+import os
+
 from chromite.api import faux
 from chromite.api import router as router_lib
 from chromite.api import validate
+from chromite.lib import constants
+from chromite.lib import cros_build_lib
 
 # API version number.
 # The major version MUST be updated on breaking changes.
@@ -28,9 +32,19 @@
 @faux.success(_CompileProtoSuccess)
 @faux.empty_error
 @validate.validation_complete
-def CompileProto(_input_proto, _output_proto, _config):
+def CompileProto(_input_proto, output_proto, _config):
   """Compile the Build API proto, returning the list of modified files."""
-  pass
+  cmd = [os.path.join(constants.CHROMITE_DIR, 'api', 'compile_build_api_proto')]
+  cros_build_lib.run(cmd)
+  result = cros_build_lib.run(['git', 'status', '--porcelain=v1'],
+                              cwd=constants.CHROMITE_DIR, capture_output=True,
+                              encoding='utf-8')
+  for line in result.stdout.splitlines():
+    if not line:
+      continue
+    path = line.split()[-1]
+    output_proto.modified_files.add().path = os.path.join(
+        constants.CHROMITE_DIR, path)
 
 
 @faux.all_empty