blob: d216afc7662cd286cac0ff4afac7e22875bd8791 [file] [log] [blame]
LaMont Jones8a1644f2019-04-16 14:30:17 -06001# -*- 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"""Android operations."""
7
8from __future__ import print_function
9
10import os
Mike Frysingeref94e4c2020-02-10 23:59:54 -050011import sys
LaMont Jones8a1644f2019-04-16 14:30:17 -060012
Alex Klein076841b2019-08-29 15:19:39 -060013from chromite.api import faux
Alex Klein2b236722019-06-19 15:44:26 -060014from chromite.api import validate
Alex Klein4de25e82019-08-05 15:58:39 -060015from chromite.api.controller import controller_util
LaMont Jones8a1644f2019-04-16 14:30:17 -060016from chromite.api.gen.chromite.api import android_pb2
LaMont Jones8a1644f2019-04-16 14:30:17 -060017from chromite.lib import constants
LaMont Jones8a1644f2019-04-16 14:30:17 -060018from chromite.lib import osutils
19from chromite.lib import portage_util
Alex Klein4de25e82019-08-05 15:58:39 -060020from chromite.service import packages
LaMont Jones8a1644f2019-04-16 14:30:17 -060021
22
Mike Frysingeref94e4c2020-02-10 23:59:54 -050023assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
24
25
LaMont Jones8a1644f2019-04-16 14:30:17 -060026ANDROIDPIN_MASK_PATH = os.path.join(constants.SOURCE_ROOT,
27 constants.CHROMIUMOS_OVERLAY_DIR,
28 'profiles', 'default', 'linux',
29 'package.mask', 'androidpin')
30
31
Michael Mortensen25626442019-11-22 10:06:59 -070032def _MarkStableResponse(_input_proto, output_proto, _config):
33 """Add fake status to a successful response."""
34 output_proto.android_atom.category = 'category'
35 output_proto.android_atom.package_name = 'android-package-name'
36 output_proto.android_atom.version = '1.2'
37 output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
38
39
40@faux.success(_MarkStableResponse)
41@faux.empty_error
Alex Klein2b236722019-06-19 15:44:26 -060042@validate.require('tracking_branch', 'package_name', 'android_build_branch')
Alex Klein231d2da2019-07-22 16:44:45 -060043@validate.validation_complete
44def MarkStable(input_proto, output_proto, _config):
LaMont Jones8a1644f2019-04-16 14:30:17 -060045 """Uprev Android, if able.
46
47 Uprev Android, verify that the newly uprevved package can be emerged, and
48 return the new package info.
49
50 See AndroidService documentation in api/proto/android.proto.
51
52 Args:
53 input_proto (MarkStableRequest): The input proto.
Alex Klein231d2da2019-07-22 16:44:45 -060054 output_proto (MarkStableResponse): The output proto.
55 _config (api_config.ApiConfig): The call config.
LaMont Jones8a1644f2019-04-16 14:30:17 -060056 """
Alex Klein4de25e82019-08-05 15:58:39 -060057 chroot = controller_util.ParseChroot(input_proto.chroot)
58 build_targets = controller_util.ParseBuildTargets(input_proto.build_targets)
LaMont Jones8a1644f2019-04-16 14:30:17 -060059 tracking_branch = input_proto.tracking_branch
60 package_name = input_proto.package_name
61 android_build_branch = input_proto.android_build_branch
62 android_version = input_proto.android_version
63 android_gts_build_branch = input_proto.android_gts_build_branch
LaMont Jones8a1644f2019-04-16 14:30:17 -060064
LaMont Jones8a1644f2019-04-16 14:30:17 -060065 # Assume success.
66 output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
David Burgerff1a92c2019-07-09 00:27:54 +000067 # TODO(crbug/904939): This should move to service/android.py and the port
68 # should be finished.
LaMont Jones8a1644f2019-04-16 14:30:17 -060069 try:
Alex Klein4de25e82019-08-05 15:58:39 -060070 android_atom_to_build = packages.uprev_android(
LaMont Jones8a1644f2019-04-16 14:30:17 -060071 tracking_branch=tracking_branch,
72 android_package=package_name,
73 android_build_branch=android_build_branch,
Alex Klein4de25e82019-08-05 15:58:39 -060074 chroot=chroot,
75 build_targets=build_targets,
LaMont Jones8a1644f2019-04-16 14:30:17 -060076 android_version=android_version,
77 android_gts_build_branch=android_gts_build_branch)
Alex Klein4de25e82019-08-05 15:58:39 -060078 except packages.AndroidIsPinnedUprevError as e:
LaMont Jones8a1644f2019-04-16 14:30:17 -060079 # If the uprev failed due to a pin, CI needs to unpin and retry.
80 android_atom_to_build = e.new_android_atom
81 output_proto.status = android_pb2.MARK_STABLE_STATUS_PINNED
82
83 if android_atom_to_build:
84 CPV = portage_util.SplitCPV(android_atom_to_build)
85 output_proto.android_atom.category = CPV.category
86 output_proto.android_atom.package_name = CPV.package
87 output_proto.android_atom.version = CPV.version
88 else:
89 output_proto.status = android_pb2.MARK_STABLE_STATUS_EARLY_EXIT
90
Alex Klein2b236722019-06-19 15:44:26 -060091
Michael Mortensen25626442019-11-22 10:06:59 -070092# We don't use @faux.success for UnpinVersion because output_proto is unused.
Alex Klein076841b2019-08-29 15:19:39 -060093@faux.all_empty
Alex Klein231d2da2019-07-22 16:44:45 -060094@validate.validation_complete
95def UnpinVersion(_input_proto, _output_proto, _config):
LaMont Jones8a1644f2019-04-16 14:30:17 -060096 """Unpin the Android version.
97
98 See AndroidService documentation in api/proto/android.proto.
99
100 Args:
101 _input_proto (UnpinVersionRequest): The input proto. (not used.)
Alex Klein231d2da2019-07-22 16:44:45 -0600102 _output_proto (UnpinVersionResponse): The output proto. (not used.)
103 _config (api_config.ApiConfig): The call config.
LaMont Jones8a1644f2019-04-16 14:30:17 -0600104 """
LaMont Jones8a1644f2019-04-16 14:30:17 -0600105 osutils.SafeUnlink(ANDROIDPIN_MASK_PATH)