blob: c0e1bb83663a301d79fe40512bfa28653838fa16 [file] [log] [blame] [view] [edit]
# Build API Proto Reference
This doc answers questions you may have about the Build API proto.
It does not cover the proto for specific endpoints, just more general topics,
and the overall structure.
## Service and Method Options
The service and method options extensions in
[`chromite/api/build_api.proto`](https://chromium.googlesource.com/chromiumos/infra/proto/+/refs/heads/main/src/chromite/api/build_api.proto)
define some key information about the implementation of the endpoint.
### Implementation Routing
The service option `module` is required for all services.
This option defines the python module in `chromite/api/controller` where
all the service's methods are implemented.
Generally, the protos contain a single service, and that service will map to a
controller module of the same name, but that is not required, and this option is
how that is managed.
The methods are each implemented as a function in the service's controller
module.
By default, the method's name is used to determine what function to call.
This default behavior can be optionally overridden by setting the method's
`implementation_name` option to the name of the function.
### Chroot Assertions
The `service_chroot_assert` and `method_chroot_assert` options define where the
endpoint should run.
The `service_chroot_assert` option defines the default for all methods in the
service, and the `method_chroot_assert` option allows overriding the service
default for the method.
When left undefined, the endpoint will be allowed to run inside or outside the
SDK, but in practice means the builders will always run it outside.
`OUTSIDE` will cause the Build API to raise an error if it is being run inside
the SDK.
`INSIDE` will cause the Build API to automatically re-execute the endpoint
inside the SDK when it is outside.
There are some built-in utilities that help make working inside the chroot as
easy as possible, see the [chroot reference](./chroot.md) for more information.
### List Visibility
The `service_visibility` and `method_visibility` options allow showing (default)
or hiding whole services and specific methods in the `MethodService/Get` list.
This is intended for cases like hiding an endpoint that's being actively
developed.
## Proto Structure
For the most part, the proto lives in the
[infra/proto repo](https://chromium.googlesource.com/chromiumos/infra/proto/).
The [Build API README](../README.md) has some information about specific
directories used by the Build API.
### infra/proto vs chromite/infra/proto
The `infra/proto` repo itself appears twice in the chromiumos checkout;
`infra/proto/` and `chromite/infra/proto`.
The `infra/proto` checkout is always at ToT.
The `chromite/infra/proto` checkout is branched along with chromite.
These two checkouts reflect the two versions of proto that would be used for the
checkout.
The CI recipes code will always be using ToT, while chromite has to use branched
proto to ensure the implementation and proto match.
Chromite also currently commits its compiled proto to ensure it has a version of
the proto that works with its vendored protobuf library, so while it doesn't
need the branched `chromite/infra/proto` to compile its proto, the checkout
ensures we have a human readable version of the proto being used by chromite in
the repository.