blob: e123403b4dfc6267b196b81d12e86575bed770f5 [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
Michael Mortensen54bd70a2019-11-21 14:45:38 -070031def _UpdateEbuildWithAFDOArtifactsResponse(_input_proto, output_proto, _config):
32 """Add successful status to the faux response."""
33 output_proto.status = True
34
35
36@faux.success(_UpdateEbuildWithAFDOArtifactsResponse)
37@faux.empty_error
Alex Klein231d2da2019-07-22 16:44:45 -060038@validate.require('build_target.name')
Mike Frysinger1f4478c2019-10-20 18:33:17 -040039@validate.is_in('artifact_type', _NAMES_FOR_ARTIFACTS)
Alex Klein231d2da2019-07-22 16:44:45 -060040@validate.validation_complete
Tiancong Wang24a3df72019-08-20 15:48:51 -070041def UpdateEbuildWithAFDOArtifacts(input_proto, output_proto, _config):
42 """Update Chrome or kernel ebuild with most recent unvetted artifacts.
Tiancong Wangaf050172019-07-10 11:52:03 -070043
44 Args:
Tiancong Wang24a3df72019-08-20 15:48:51 -070045 input_proto (VerifyAFDOArtifactsRequest): The input proto
46 output_proto (VerifyAFDOArtifactsResponse): The output proto
Alex Klein231d2da2019-07-22 16:44:45 -060047 _config (api_config.ApiConfig): The API call config.
Tiancong Wangaf050172019-07-10 11:52:03 -070048 """
Tiancong Wangaf050172019-07-10 11:52:03 -070049 board = input_proto.build_target.name
Tiancong Wangf9c736c2019-08-26 13:54:38 -070050 update_method = _GetMethodForUpdatingArtifacts(input_proto.artifact_type)
51 output_proto.status = update_method(board)
Tiancong Wangaf050172019-07-10 11:52:03 -070052
53
Michael Mortensen54bd70a2019-11-21 14:45:38 -070054def _UploadVettedAFDOArtifactsResponse(_input_proto, output_proto, _config):
55 """Add successful status to the faux response."""
56 output_proto.status = True
57
58
59@faux.success(_UploadVettedAFDOArtifactsResponse)
60@faux.empty_error
Tiancong Wang24a3df72019-08-20 15:48:51 -070061@validate.require('build_target.name')
Mike Frysinger1f4478c2019-10-20 18:33:17 -040062@validate.is_in('artifact_type', _NAMES_FOR_ARTIFACTS)
Alex Klein231d2da2019-07-22 16:44:45 -060063@validate.validation_complete
Tiancong Wang24a3df72019-08-20 15:48:51 -070064def UploadVettedAFDOArtifacts(input_proto, output_proto, _config):
Tiancong Wangaf050172019-07-10 11:52:03 -070065 """Upload a vetted orderfile to GS bucket.
66
67 Args:
Tiancong Wang24a3df72019-08-20 15:48:51 -070068 input_proto (VerifyAFDOArtifactsRequest): The input proto
69 output_proto (VerifyAFDOArtifactsResponse): The output proto
Alex Klein231d2da2019-07-22 16:44:45 -060070 _config (api_config.ApiConfig): The API call config.
Tiancong Wangaf050172019-07-10 11:52:03 -070071 """
Tiancong Wang24a3df72019-08-20 15:48:51 -070072 board = input_proto.build_target.name
Tiancong Wangf9c736c2019-08-26 13:54:38 -070073 artifact_type = _NAMES_FOR_ARTIFACTS[input_proto.artifact_type]
Tiancong Wang24a3df72019-08-20 15:48:51 -070074 output_proto.status = toolchain_util.UploadAndPublishVettedAFDOArtifacts(
75 artifact_type, board)