api: Begin implementing SdkService/Uprev

BUG=b:259445565
TEST=./run_tests

Change-Id: I4246d0159ce5b42440974a299b676c8af41e8b07
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4257247
Tested-by: Greg Edelston <gredelston@google.com>
Auto-Submit: Greg Edelston <gredelston@google.com>
Reviewed-by: Cindy Lin <xcl@google.com>
Commit-Queue: Greg Edelston <gredelston@google.com>
diff --git a/api/controller/sdk.py b/api/controller/sdk.py
index ab3e0ba..f4f54ec 100644
--- a/api/controller/sdk.py
+++ b/api/controller/sdk.py
@@ -181,6 +181,28 @@
 
 
 @faux.all_empty
+@validate.require("chroot")
+@validate.require("binhost_gs_bucket")
+@validate.validation_complete
+def Uprev(input_proto, output_proto, _config):
+    """Update the SDK version and prebuilt files to point to the latest SDK."""
+    target_version = input_proto.version or sdk.GetLatestVersion()
+    modified_files = sdk.UprevSdkAndPrebuilts(
+        controller_util.ParseChroot(input_proto.chroot),
+        binhost_gs_bucket=input_proto.binhost_gs_bucket,
+        version=target_version,
+    )
+    for modified_file in modified_files:
+        output_proto.modified_files.add(
+            common_pb2.Path(
+                path=str(modified_file),
+                location=common_pb2.Path.OUTSIDE,
+            )
+        )
+    output_proto.version = target_version
+
+
+@faux.all_empty
 @validate.validation_complete
 def Delete(input_proto, _output_proto, _config):
     """Delete a chroot."""