blob: 238f755662ef50ad8448abe6baf20e5b169f893e [file] [log] [blame]
# 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.
"""API information controller."""
import os
from chromite.api import faux
from chromite.api import router as router_lib
from chromite.api import validate
from chromite.lib import constants
from chromite.lib import cros_build_lib
# API version number.
# The major version MUST be updated on breaking changes.
VERSION_MAJOR = 1
# The minor and bug versions are not currently utilized, but put in place
# to simplify future requirements.
VERSION_MINOR = 0
VERSION_BUG = 0
def _CompileProtoSuccess(_input_proto, output_proto, _config):
"""Mock success response for CompileProto."""
output_proto.modified_files.add().path = "/code/chromite/api/gen/foo_pb2.py"
@faux.success(_CompileProtoSuccess)
@faux.empty_error
@validate.validation_complete
def CompileProto(_input_proto, output_proto, _config):
"""Compile the Build API proto, returning the list of modified files."""
cmd = [
os.path.join(constants.CHROMITE_DIR, "api", "compile_build_api_proto")
]
cros_build_lib.run(cmd)
result = cros_build_lib.run(
["git", "status", "--porcelain=v1"],
cwd=constants.CHROMITE_DIR,
capture_output=True,
encoding="utf-8",
)
for line in result.stdout.splitlines():
if not line:
continue
path = line.split()[-1]
output_proto.modified_files.add().path = os.path.join(
constants.CHROMITE_DIR, path
)
@faux.all_empty
@validate.validation_complete
def GetMethods(_input_proto, output_proto, _config):
"""List all of the registered methods."""
router = router_lib.GetRouter()
for method in router.ListMethods():
output_proto.methods.add().method = method
@validate.validation_complete
def GetVersion(_input_proto, output_proto, _config):
"""Get the Build API major version number."""
output_proto.version.major = VERSION_MAJOR
output_proto.version.minor = VERSION_MINOR
output_proto.version.bug = VERSION_BUG