Gero Posmyk-Leinemann c568be5978
[image-builder] Introduce retry for all resolver requests (timeout 15s, up to 3 times) for all network-related issues (#20868)
* [image-builder] Fix generate.sh

* [image-builder-api] Add use_retry_client to ResolveBaseImageRequest and BuildRequest

* [image-builder] Use req.GetUseRetryClient() instead of feature flag resolved on startup

[image-builder] Drop superfluous imports

[image-builder] Switch to github.com/hashicorp/go-retryablehttp, incl. better unit tests at orchestrator level!

* [server] Pass "useRetryClient" on all requests to image-builder
2025-06-05 11:30:13 -04:00

145 lines
3.5 KiB
Protocol Buffer

syntax = "proto3";
package builder;
option go_package = "github.com/gitpod-io/gitpod/image-builder/api";
import "content-service-api/initializer.proto";
service ImageBuilder {
// ResolveBaseImage returns the "digest" form of a Docker image tag thereby making it absolute.
rpc ResolveBaseImage(ResolveBaseImageRequest) returns (ResolveBaseImageResponse) {};
// ResolveWorkspaceImage returns information about a build configuration without actually attempting to build anything.
rpc ResolveWorkspaceImage(ResolveWorkspaceImageRequest) returns (ResolveWorkspaceImageResponse) {};
// Build initiates the build of a Docker image using a build configuration. If a build of this
// configuration is already ongoing no new build will be started.
rpc Build(BuildRequest) returns (stream BuildResponse) {};
// Logs listens to the build output of an ongoing Docker build identified build the build ID
rpc Logs(LogsRequest) returns (stream LogsResponse) {};
// ListBuilds returns a list of currently running builds
rpc ListBuilds(ListBuildsRequest) returns (ListBuildsResponse) {};
}
message BuildSource {
oneof from {
BuildSourceReference ref = 1;
BuildSourceDockerfile file = 2;
};
}
message BuildSourceReference {
string ref = 1;
}
message BuildSourceDockerfile {
contentservice.WorkspaceInitializer source = 1;
string dockerfile_version = 2;
string dockerfile_path = 3;
string context_path = 4;
}
message ResolveBaseImageRequest {
string ref = 1;
BuildRegistryAuth auth = 2;
bool use_retry_client = 3;
}
message ResolveBaseImageResponse {
string ref = 1;
}
message ResolveWorkspaceImageRequest {
BuildSource source = 1;
BuildRegistryAuth auth = 2;
bool use_retry_client = 3;
}
message ResolveWorkspaceImageResponse {
string ref = 1;
string base_ref = 3;
BuildStatus status = 2;
}
message BuildRequest {
BuildSource source = 1;
BuildRegistryAuth auth = 2;
bool force_rebuild = 3;
string triggered_by = 4;
string supervisor_ref = 5;
string base_image_name_resolved = 6;
bool use_retry_client = 7;
}
message BuildRegistryAuth {
oneof mode {
BuildRegistryAuthTotal total = 1;
BuildRegistryAuthSelective selective = 2;
}
map<string, string> additional = 3;
}
message BuildRegistryAuthTotal {
bool allow_all = 1;
}
message BuildRegistryAuthSelective {
bool allow_baserep = 1;
bool allow_workspacerep = 2;
repeated string any_of = 3;
}
message BuildResponse {
// deprecated(cw): expect this field to go away in a future version.
// it's redundant with the build info.
string ref = 1;
string base_ref = 4;
// deprecated(cw): expect this field to go away in a future version.
// it's redundant with the build info.
BuildStatus status = 2;
string message = 3;
BuildInfo info = 5;
}
enum BuildStatus {
unknown = 0;
running = 1;
done_success = 2;
done_failure = 3;
}
message LogsRequest {
string build_ref = 1;
bool censored = 2;
string build_id = 3;
}
message LogsResponse {
bytes content = 1;
}
message ListBuildsRequest {}
message ListBuildsResponse {
repeated BuildInfo builds = 1;
}
message BuildInfo {
string ref = 1;
string base_ref = 4;
BuildStatus status = 2;
int64 started_at = 3;
string build_id = 5;
LogInfo log_info = 6;
}
message LogInfo {
string url = 1;
map<string, string> headers = 2;
}