This is an automated email from the ASF dual-hosted git repository. juergbi pushed a commit to branch jbilleter/http-cache in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 6dd7999cc6c1d4a1ae153137a088d4237af9a681 Author: Jürg Billeter <[email protected]> AuthorDate: Fri Aug 7 15:26:02 2026 +0200 _remotespec.py: Add `protocol` option --- src/buildstream/_assetcache.py | 3 +++ src/buildstream/_remotespec.py | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/buildstream/_assetcache.py b/src/buildstream/_assetcache.py index 9406b9cf9..f2f8aa1e8 100644 --- a/src/buildstream/_assetcache.py +++ b/src/buildstream/_assetcache.py @@ -56,6 +56,9 @@ class AssetRemote(BaseRemote): # RemoteError: If the upstream has a problem # def _check(self): + if self.spec.protocol != "grpc": + raise RemoteError("Index servers are supported only with the 'grpc' protocol") + request = remote_asset_pb2.FetchBlobRequest() if self.instance_name: request.instance_name = self.instance_name diff --git a/src/buildstream/_remotespec.py b/src/buildstream/_remotespec.py index f0ffd4d3e..5d67edecd 100644 --- a/src/buildstream/_remotespec.py +++ b/src/buildstream/_remotespec.py @@ -64,6 +64,7 @@ class RemoteSpec: remote_type: str, url: str, *, + protocol: bool = "grpc", push: bool = False, server_cert: Optional[str] = None, client_key: Optional[str] = None, @@ -88,6 +89,11 @@ class RemoteSpec: # The url of the remote, this may contain a port number self.url: str = url + # The protocol to use + if protocol not in ["grpc", "http"]: + raise RemoteError(f"Value for 'protocol' must be 'grpc' or 'http', got: {protocol}") + self.protocol: str = protocol + # The name of the grpc service to talk to at this remote url self.instance_name: Optional[str] = instance_name @@ -127,6 +133,7 @@ class RemoteSpec: self.remote_type, self.push, self.url, + self.protocol, self.instance_name, self.server_cert_file, self.client_key_file, @@ -141,7 +148,7 @@ class RemoteSpec: ) def __str__(self) -> str: - string = self.url + "\n" + string = f"{self.url} ({self.protocol})\n" string += "push: {} type: {} instance: {}\n".format(self.push, self.remote_type, self.instance_name) if self._spec_node: provenance = str(self._spec_node.get_provenance()) @@ -210,6 +217,7 @@ class RemoteSpec: # def to_localcas_remote(self, remote): remote.url = self.url + remote.protocol = self.protocol if self.instance_name: remote.instance_name = self.instance_name if self.server_cert: @@ -264,7 +272,7 @@ class RemoteSpec: push: bool = False remote_type: str = RemoteType.ENDPOINT - valid_keys: List[str] = ["url", "instance-name", "auth", "connection-config"] + valid_keys: List[str] = ["url", "protocol", "instance-name", "auth", "connection-config"] if not remote_execution: remote_type = cast(str, spec_node.get_enum("type", RemoteType, default=RemoteType.ALL)) valid_keys += ["type"] @@ -283,6 +291,8 @@ class RemoteSpec: provenance = spec_node.get_node("url").get_provenance() raise LoadError("{}: empty artifact cache URL".format(provenance), LoadErrorReason.INVALID_DATA) + protocol = spec_node.get_str("protocol", default="grpc") + instance_name = spec_node.get_str("instance-name", default=None) auth_node = spec_node.get_mapping("auth", None) @@ -296,6 +306,7 @@ class RemoteSpec: return cls( remote_type, url, + protocol=protocol, push=push, server_cert=server_cert, client_key=client_key, @@ -353,6 +364,8 @@ class RemoteSpec: if key == "url": url = val + elif key == "protocol": + protocol = val elif key == "instance-name": instance_name = val elif key == "type": @@ -396,6 +409,7 @@ class RemoteSpec: return cls( remote_type, url, + protocol=protocol, push=push, server_cert=server_cert, client_key=client_key,
