blob: 896699fd48b284b847fe3e36895a86adfa5ac99a [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 Klein076841b2019-08-29 15:19:39 -060012from chromite.api import faux
Alex Klein2b236722019-06-19 15:44:26 -060013from chromite.api import validate
Alex Klein4de25e82019-08-05 15:58:39 -060014from chromite.api.controller import controller_util
LaMont Jones8a1644f2019-04-16 14:30:17 -060015from chromite.api.gen.chromite.api import android_pb2
LaMont Jones8a1644f2019-04-16 14:30:17 -060016from chromite.lib import constants
LaMont Jones8a1644f2019-04-16 14:30:17 -060017from chromite.lib import osutils
Alex Klein18a60af2020-06-11 12:08:47 -060018from chromite.lib.parser import package_info
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090019from chromite.service import android
Alex Klein4de25e82019-08-05 15:58:39 -060020from chromite.service import packages
LaMont Jones8a1644f2019-04-16 14:30:17 -060021
22
23ANDROIDPIN_MASK_PATH = os.path.join(constants.SOURCE_ROOT,
24 constants.CHROMIUMOS_OVERLAY_DIR,
25 'profiles', 'default', 'linux',
26 'package.mask', 'androidpin')
27
28
Shao-Chuan Lee01dee222021-04-09 15:28:08 +090029def _GetLatestBuildResponse(_input_proto, output_proto, _config):
30 """Fake GetLatestBuild response."""
31 output_proto.android_version = '7123456'
32
33
34@faux.success(_GetLatestBuildResponse)
35@faux.empty_error
36@validate.require('android_build_branch')
37@validate.validation_complete
38def GetLatestBuild(input_proto, output_proto, _config):
39 build_id, _ = android.GetLatestBuild(input_proto.android_build_branch)
40 output_proto.android_version = build_id
41
42
Michael Mortensen25626442019-11-22 10:06:59 -070043def _MarkStableResponse(_input_proto, output_proto, _config):
44 """Add fake status to a successful response."""
45 output_proto.android_atom.category = 'category'
46 output_proto.android_atom.package_name = 'android-package-name'
47 output_proto.android_atom.version = '1.2'
48 output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
49
50
51@faux.success(_MarkStableResponse)
52@faux.empty_error
Shao-Chuan Leea4b4f302021-05-12 14:40:20 +090053@validate.require('package_name')
Alex Klein231d2da2019-07-22 16:44:45 -060054@validate.validation_complete
55def MarkStable(input_proto, output_proto, _config):
LaMont Jones8a1644f2019-04-16 14:30:17 -060056 """Uprev Android, if able.
57
58 Uprev Android, verify that the newly uprevved package can be emerged, and
59 return the new package info.
60
61 See AndroidService documentation in api/proto/android.proto.
62
63 Args:
64 input_proto (MarkStableRequest): The input proto.
Alex Klein231d2da2019-07-22 16:44:45 -060065 output_proto (MarkStableResponse): The output proto.
66 _config (api_config.ApiConfig): The call config.
LaMont Jones8a1644f2019-04-16 14:30:17 -060067 """
Alex Klein4de25e82019-08-05 15:58:39 -060068 chroot = controller_util.ParseChroot(input_proto.chroot)
69 build_targets = controller_util.ParseBuildTargets(input_proto.build_targets)
LaMont Jones8a1644f2019-04-16 14:30:17 -060070 package_name = input_proto.package_name
71 android_build_branch = input_proto.android_build_branch
72 android_version = input_proto.android_version
Shao-Chuan Lee85ba7ce2021-02-09 13:50:11 +090073 skip_commit = input_proto.skip_commit
LaMont Jones8a1644f2019-04-16 14:30:17 -060074
LaMont Jones8a1644f2019-04-16 14:30:17 -060075 # Assume success.
76 output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
David Burgerff1a92c2019-07-09 00:27:54 +000077 # TODO(crbug/904939): This should move to service/android.py and the port
78 # should be finished.
LaMont Jones8a1644f2019-04-16 14:30:17 -060079 try:
Alex Klein4de25e82019-08-05 15:58:39 -060080 android_atom_to_build = packages.uprev_android(
LaMont Jones8a1644f2019-04-16 14:30:17 -060081 android_package=package_name,
Alex Klein4de25e82019-08-05 15:58:39 -060082 chroot=chroot,
83 build_targets=build_targets,
Shao-Chuan Leea4b4f302021-05-12 14:40:20 +090084 android_build_branch=android_build_branch,
Shao-Chuan Lee85ba7ce2021-02-09 13:50:11 +090085 android_version=android_version,
86 skip_commit=skip_commit,
87 )
Alex Klein4de25e82019-08-05 15:58:39 -060088 except packages.AndroidIsPinnedUprevError as e:
LaMont Jones8a1644f2019-04-16 14:30:17 -060089 # If the uprev failed due to a pin, CI needs to unpin and retry.
90 android_atom_to_build = e.new_android_atom
91 output_proto.status = android_pb2.MARK_STABLE_STATUS_PINNED
92
93 if android_atom_to_build:
Alex Klein16c0f302020-10-06 17:28:14 -060094 pkg = package_info.parse(android_atom_to_build)
95 controller_util.serialize_package_info(pkg, output_proto.android_atom)
LaMont Jones8a1644f2019-04-16 14:30:17 -060096 else:
97 output_proto.status = android_pb2.MARK_STABLE_STATUS_EARLY_EXIT
98
Alex Klein2b236722019-06-19 15:44:26 -060099
Michael Mortensen25626442019-11-22 10:06:59 -0700100# We don't use @faux.success for UnpinVersion because output_proto is unused.
Alex Klein076841b2019-08-29 15:19:39 -0600101@faux.all_empty
Alex Klein231d2da2019-07-22 16:44:45 -0600102@validate.validation_complete
103def UnpinVersion(_input_proto, _output_proto, _config):
LaMont Jones8a1644f2019-04-16 14:30:17 -0600104 """Unpin the Android version.
105
106 See AndroidService documentation in api/proto/android.proto.
107
108 Args:
109 _input_proto (UnpinVersionRequest): The input proto. (not used.)
Alex Klein231d2da2019-07-22 16:44:45 -0600110 _output_proto (UnpinVersionResponse): The output proto. (not used.)
111 _config (api_config.ApiConfig): The call config.
LaMont Jones8a1644f2019-04-16 14:30:17 -0600112 """
LaMont Jones8a1644f2019-04-16 14:30:17 -0600113 osutils.SafeUnlink(ANDROIDPIN_MASK_PATH)