blob: e673b51181d218e687903c78df82cc26088b97b6 [file] [log] [blame]
Tiancong Wangaf050172019-07-10 11:52:03 -07001# -*- coding: utf-8 -*-
2# Copyright 2019 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Toolchain-related operations."""
7
8from __future__ import print_function
9
Alex Klein076841b2019-08-29 15:19:39 -060010from chromite.api import faux
Alex Klein231d2da2019-07-22 16:44:45 -060011from chromite.api import validate
Tiancong Wang24a3df72019-08-20 15:48:51 -070012from chromite.api.gen.chromite.api import toolchain_pb2
Tiancong Wangaf050172019-07-10 11:52:03 -070013from chromite.lib import toolchain_util
14
Tiancong Wangf9c736c2019-08-26 13:54:38 -070015_NAMES_FOR_ARTIFACTS = {
16 toolchain_pb2.ORDERFILE: 'orderfile',
17 toolchain_pb2.KERNEL_AFDO: 'kernel_afdo',
18 toolchain_pb2.CHROME_AFDO: 'chrome_afdo'
19}
20
21# Using a function instead of a dict because we need to mock these
22# functions in unittest, and mock doesn't play well with a dict definition.
23def _GetMethodForUpdatingArtifacts(artifact_type):
24 return {
25 toolchain_pb2.ORDERFILE: toolchain_util.OrderfileUpdateChromeEbuild,
26 toolchain_pb2.KERNEL_AFDO: toolchain_util.AFDOUpdateKernelEbuild,
27 toolchain_pb2.CHROME_AFDO: toolchain_util.AFDOUpdateChromeEbuild
28 }[artifact_type]
Tiancong Wang24a3df72019-08-20 15:48:51 -070029
Tiancong Wangaf050172019-07-10 11:52:03 -070030
Alex Klein076841b2019-08-29 15:19:39 -060031@faux.all_empty
Alex Klein231d2da2019-07-22 16:44:45 -060032@validate.require('build_target.name')
Tiancong Wangf9c736c2019-08-26 13:54:38 -070033@validate.is_in('artifact_type', _NAMES_FOR_ARTIFACTS.keys())
Alex Klein231d2da2019-07-22 16:44:45 -060034@validate.validation_complete
Tiancong Wang24a3df72019-08-20 15:48:51 -070035def UpdateEbuildWithAFDOArtifacts(input_proto, output_proto, _config):
36 """Update Chrome or kernel ebuild with most recent unvetted artifacts.
Tiancong Wangaf050172019-07-10 11:52:03 -070037
38 Args:
Tiancong Wang24a3df72019-08-20 15:48:51 -070039 input_proto (VerifyAFDOArtifactsRequest): The input proto
40 output_proto (VerifyAFDOArtifactsResponse): The output proto
Alex Klein231d2da2019-07-22 16:44:45 -060041 _config (api_config.ApiConfig): The API call config.
Tiancong Wangaf050172019-07-10 11:52:03 -070042 """
43
44 board = input_proto.build_target.name
Tiancong Wangf9c736c2019-08-26 13:54:38 -070045 update_method = _GetMethodForUpdatingArtifacts(input_proto.artifact_type)
46 output_proto.status = update_method(board)
Tiancong Wangaf050172019-07-10 11:52:03 -070047
48
Alex Klein076841b2019-08-29 15:19:39 -060049@faux.all_empty
Tiancong Wang24a3df72019-08-20 15:48:51 -070050@validate.require('build_target.name')
Tiancong Wangf9c736c2019-08-26 13:54:38 -070051@validate.is_in('artifact_type', _NAMES_FOR_ARTIFACTS.keys())
Alex Klein231d2da2019-07-22 16:44:45 -060052@validate.validation_complete
Tiancong Wang24a3df72019-08-20 15:48:51 -070053def UploadVettedAFDOArtifacts(input_proto, output_proto, _config):
Tiancong Wangaf050172019-07-10 11:52:03 -070054 """Upload a vetted orderfile to GS bucket.
55
56 Args:
Tiancong Wang24a3df72019-08-20 15:48:51 -070057 input_proto (VerifyAFDOArtifactsRequest): The input proto
58 output_proto (VerifyAFDOArtifactsResponse): The output proto
Alex Klein231d2da2019-07-22 16:44:45 -060059 _config (api_config.ApiConfig): The API call config.
Tiancong Wangaf050172019-07-10 11:52:03 -070060 """
Tiancong Wang24a3df72019-08-20 15:48:51 -070061 board = input_proto.build_target.name
Tiancong Wangf9c736c2019-08-26 13:54:38 -070062 artifact_type = _NAMES_FOR_ARTIFACTS[input_proto.artifact_type]
Tiancong Wang24a3df72019-08-20 15:48:51 -070063 output_proto.status = toolchain_util.UploadAndPublishVettedAFDOArtifacts(
64 artifact_type, board)