afdo: Implement build API of benchmark-afdo-generate builder.
This patch implements the wrapper build API and the core
functionalities in the benchmark-afdo-generate builder.
The implementation is mostly the same as orderfile generation,
so there's some refactoring of the orderfile generation to support
both AFDO and orderfile generation.
BUG=chromium:947345
TEST=Tryjob passed https://ci.chromium.org/p/chromeos/builders/general/Try/b8905015841960278192
Change-Id: I3253dd69054dd108348cab7b2bc9dd19549ae787
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1732051
Commit-Queue: Tiancong Wang <tcwang@google.com>
Tested-by: Tiancong Wang <tcwang@google.com>
Reviewed-by: George Burgess <gbiv@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/artifacts.py b/api/controller/artifacts.py
index 07f0ed4..40b6db8 100644
--- a/api/controller/artifacts.py
+++ b/api/controller/artifacts.py
@@ -12,6 +12,7 @@
from chromite.api import controller
from chromite.api import validate
from chromite.api.controller import controller_util
+from chromite.api.gen.chromite.api import artifacts_pb2
from chromite.cbuildbot import commands
from chromite.lib import build_target_util
from chromite.lib import chroot_lib
@@ -399,26 +400,33 @@
output_proto.artifacts.add().path = archive
+_VALID_ARTIFACT_TYPES = [artifacts_pb2.BENCHMARK_AFDO,
+ artifacts_pb2.ORDERFILE]
@validate.require('build_target.name', 'output_dir')
+@validate.is_in('artifact_type', _VALID_ARTIFACT_TYPES)
@validate.exists('output_dir')
@validate.validation_complete
-def BundleOrderfileGenerationArtifacts(input_proto, output_proto, _config):
- """Create tarballs of all the artifacts of orderfile_generate builder.
+def BundleAFDOGenerationArtifacts(input_proto, output_proto, _config):
+ """Generic function for creating tarballs of both AFDO and orerfile.
Args:
- input_proto (BundleRequest): The input proto.
+ input_proto (BundleChromeAFDORequest): The input proto.
output_proto (BundleResponse): The output proto.
_config (api_config.ApiConfig): The API call config.
"""
+
# Required args.
build_target = build_target_util.BuildTarget(input_proto.build_target.name)
output_dir = input_proto.output_dir
+ artifact_type = input_proto.artifact_type
chroot = controller_util.ParseChroot(input_proto.chroot)
try:
- results = artifacts.BundleOrderfileGenerationArtifacts(
- chroot, build_target, output_dir)
+ is_orderfile = bool(artifact_type is artifacts_pb2.ORDERFILE)
+ results = artifacts.BundleAFDOGenerationArtifacts(
+ is_orderfile, chroot,
+ build_target, output_dir)
except artifacts.Error as e:
cros_build_lib.Die('Error %s raised in BundleSimpleChromeArtifacts: %s',
type(e), e)