blob: ced3dccc4bcb3858e95f4eba1d2b85762cbc94f7 [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
11
Alex Klein2b236722019-06-19 15:44:26 -060012from chromite.api import validate
Alex Kleineb8616c2019-06-28 12:26:23 -060013from chromite.api.controller import controller_util
LaMont Jones8a1644f2019-04-16 14:30:17 -060014from chromite.api.gen.chromite.api import android_pb2
Alex Kleineb8616c2019-06-28 12:26:23 -060015from chromite.lib import build_target_util
LaMont Jones8a1644f2019-04-16 14:30:17 -060016from chromite.lib import constants
LaMont Jones8a1644f2019-04-16 14:30:17 -060017from chromite.lib import osutils
18from chromite.lib import portage_util
Alex Kleineb8616c2019-06-28 12:26:23 -060019from chromite.service import packages
LaMont Jones8a1644f2019-04-16 14:30:17 -060020
21
22ANDROIDPIN_MASK_PATH = os.path.join(constants.SOURCE_ROOT,
23 constants.CHROMIUMOS_OVERLAY_DIR,
24 'profiles', 'default', 'linux',
25 'package.mask', 'androidpin')
26
27
Alex Klein2b236722019-06-19 15:44:26 -060028@validate.require('tracking_branch', 'package_name', 'android_build_branch')
LaMont Jones8a1644f2019-04-16 14:30:17 -060029def MarkStable(input_proto, output_proto):
30 """Uprev Android, if able.
31
32 Uprev Android, verify that the newly uprevved package can be emerged, and
33 return the new package info.
34
35 See AndroidService documentation in api/proto/android.proto.
36
37 Args:
38 input_proto (MarkStableRequest): The input proto.
Alex Kleineb8616c2019-06-28 12:26:23 -060039 output_proto (MarkStableResponse): The output proto.
LaMont Jones8a1644f2019-04-16 14:30:17 -060040 """
Alex Kleineb8616c2019-06-28 12:26:23 -060041 chroot = controller_util.ParseChroot(input_proto.chroot)
LaMont Jones8a1644f2019-04-16 14:30:17 -060042 tracking_branch = input_proto.tracking_branch
43 package_name = input_proto.package_name
44 android_build_branch = input_proto.android_build_branch
45 android_version = input_proto.android_version
46 android_gts_build_branch = input_proto.android_gts_build_branch
Alex Kleineb8616c2019-06-28 12:26:23 -060047
48 build_targets = []
49 for build_target in input_proto.build_targets:
50 build_targets.append(build_target_util.BuildTarget(build_target.name))
LaMont Jones8a1644f2019-04-16 14:30:17 -060051
LaMont Jones8a1644f2019-04-16 14:30:17 -060052 # Assume success.
53 output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
LaMont Jones8a1644f2019-04-16 14:30:17 -060054 try:
Alex Kleineb8616c2019-06-28 12:26:23 -060055 android_atom_to_build = packages.uprev_android(
LaMont Jones8a1644f2019-04-16 14:30:17 -060056 tracking_branch=tracking_branch,
57 android_package=package_name,
58 android_build_branch=android_build_branch,
Alex Kleineb8616c2019-06-28 12:26:23 -060059 chroot=chroot,
60 build_targets=build_targets,
LaMont Jones8a1644f2019-04-16 14:30:17 -060061 android_version=android_version,
62 android_gts_build_branch=android_gts_build_branch)
Alex Kleineb8616c2019-06-28 12:26:23 -060063 except packages.AndroidIsPinnedUprevError as e:
LaMont Jones8a1644f2019-04-16 14:30:17 -060064 # If the uprev failed due to a pin, CI needs to unpin and retry.
65 android_atom_to_build = e.new_android_atom
66 output_proto.status = android_pb2.MARK_STABLE_STATUS_PINNED
67
68 if android_atom_to_build:
69 CPV = portage_util.SplitCPV(android_atom_to_build)
70 output_proto.android_atom.category = CPV.category
71 output_proto.android_atom.package_name = CPV.package
72 output_proto.android_atom.version = CPV.version
73 else:
74 output_proto.status = android_pb2.MARK_STABLE_STATUS_EARLY_EXIT
75
Alex Klein2b236722019-06-19 15:44:26 -060076
LaMont Jones8a1644f2019-04-16 14:30:17 -060077def UnpinVersion(_input_proto, _output_proto):
78 """Unpin the Android version.
79
80 See AndroidService documentation in api/proto/android.proto.
81
82 Args:
83 _input_proto (UnpinVersionRequest): The input proto. (not used.)
84 _output_proto (google.protobuf.Empty): The output proto. (not used.)
85 """
LaMont Jones8a1644f2019-04-16 14:30:17 -060086 osutils.SafeUnlink(ANDROIDPIN_MASK_PATH)