remoteexec: Handle reclient logs

This CL add a functionalloity to collect the remoteexec logs, compress
them and return them to the caller on InstallPackages.

BUG=b:289878020
TEST=Ran `./generate.sh`
TEST=Ran `./run_tests lib/remoteexec_lib_unittest.py`

Cq-Depend: chromium:4835663
Change-Id: Ia18360f75959cacdad5739307262425f7491a133
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4835662
Auto-Submit: Yoshiki Iguchi <yoshiki@chromium.org>
Commit-Queue: Eric Lok <lokeric@google.com>
Reviewed-by: Eric Lok <lokeric@google.com>
Tested-by: Yoshiki Iguchi <yoshiki@chromium.org>
Commit-Queue: Yoshiki Iguchi <yoshiki@chromium.org>
diff --git a/api/controller/sysroot.py b/api/controller/sysroot.py
index a1b60f0..1b74b7b 100644
--- a/api/controller/sysroot.py
+++ b/api/controller/sysroot.py
@@ -6,6 +6,7 @@
 
 import logging
 import os
+from pathlib import Path
 import traceback
 
 from chromite.api import controller
@@ -21,6 +22,7 @@
 from chromite.lib import metrics_lib
 from chromite.lib import osutils
 from chromite.lib import portage_util
+from chromite.lib import remoteexec_lib
 from chromite.lib import sysroot_lib
 from chromite.service import sysroot
 
@@ -414,6 +416,15 @@
                 )
             output_proto.goma_artifacts.log_files[:] = archiver_tuple.log_files
 
+        if input_proto.remoteexec_config.log_dir.dir:
+            archiver = remoteexec_lib.LogsArchiver(
+                dest_dir=Path(input_proto.remoteexec_config.log_dir.dir),
+            )
+            archived_logs = archiver.archive()
+            output_proto.remoteexec_artifacts.log_files[:] = [
+                str(x) for x in archived_logs
+            ]
+
     # Return without populating the response if it is a dryrun.
     if dryrun:
         return controller.RETURN_CODE_SUCCESS