blob: 4dc55b808ada036f32b99698a180fbca529aedca [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Android operations."""
from __future__ import print_function
import os
from chromite.api.gen.chromite.api import android_pb2
# TODO(crbug/904939): implement service/android.
from chromite.cbuildbot import commands
from chromite.lib import constants
from chromite.lib import cros_build_lib
from chromite.lib import osutils
from chromite.lib import portage_util
ANDROIDPIN_MASK_PATH = os.path.join(constants.SOURCE_ROOT,
constants.CHROMIUMOS_OVERLAY_DIR,
'profiles', 'default', 'linux',
'package.mask', 'androidpin')
def MarkStable(input_proto, output_proto):
"""Uprev Android, if able.
Uprev Android, verify that the newly uprevved package can be emerged, and
return the new package info.
See AndroidService documentation in api/proto/android.proto.
Args:
input_proto (MarkStableRequest): The input proto.
output_proto (MarkStableReSponse): The output proto.
"""
tracking_branch = input_proto.tracking_branch
package_name = input_proto.package_name
android_build_branch = input_proto.android_build_branch
android_version = input_proto.android_version
android_gts_build_branch = input_proto.android_gts_build_branch
boards = input_proto.boards
buildroot = input_proto.buildroot
if not tracking_branch:
cros_build_lib.Die('Tracking_branch is required.')
if not package_name:
cros_build_lib.Die('Package_name is required.')
if not android_build_branch:
cros_build_lib.Die('Android_build_branch is required.')
# Assume success.
output_proto.status = android_pb2.MARK_STABLE_STATUS_SUCCESS
# TODO(crbug/904939): This should move to service/android.py and the port
# should be finished.
try:
android_atom_to_build = commands.MarkAndroidAsStable(
buildroot=buildroot,
tracking_branch=tracking_branch,
android_package=package_name,
android_build_branch=android_build_branch,
boards=boards,
android_version=android_version,
android_gts_build_branch=android_gts_build_branch)
except commands.AndroidIsPinnedUprevError as e:
# If the uprev failed due to a pin, CI needs to unpin and retry.
android_atom_to_build = e.new_android_atom
output_proto.status = android_pb2.MARK_STABLE_STATUS_PINNED
if android_atom_to_build:
CPV = portage_util.SplitCPV(android_atom_to_build)
output_proto.android_atom.category = CPV.category
output_proto.android_atom.package_name = CPV.package
output_proto.android_atom.version = CPV.version
else:
output_proto.status = android_pb2.MARK_STABLE_STATUS_EARLY_EXIT
def UnpinVersion(_input_proto, _output_proto):
"""Unpin the Android version.
See AndroidService documentation in api/proto/android.proto.
Args:
_input_proto (UnpinVersionRequest): The input proto. (not used.)
_output_proto (google.protobuf.Empty): The output proto. (not used.)
"""
osutils.SafeUnlink(ANDROIDPIN_MASK_PATH)