proto/remote.proto (135 lines of code) (raw):
syntax = "proto3";
package gitaly;
import "lint.proto";
import "shared.proto";
option go_package = "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb";
// RemoteService is a service providing RPCs to interact with a remote
// repository that is hosted on another Git server.
service RemoteService {
// UpdateRemoteMirror compares the references in the target repository and its remote mirror
// repository. Any differences in the references are then addressed by pushing the differing
// references to the mirror. Created and modified references are updated, removed references are
// deleted from the mirror. UpdateRemoteMirror updates all tags. Branches are updated if they match
// the patterns specified in the requests.
rpc UpdateRemoteMirror(stream UpdateRemoteMirrorRequest) returns (UpdateRemoteMirrorResponse) {
option (op_type) = {
op: ACCESSOR
};
}
// FindRemoteRepository detects whether a repository exists at the given URI. This is done by
// asking git-ls-remote(1) to enumerate the remote's HEAD and then checking that we recognize it
// as a valid reference.
rpc FindRemoteRepository(FindRemoteRepositoryRequest) returns (FindRemoteRepositoryResponse) {
option (op_type) = {
op: ACCESSOR
scope_level: STORAGE
};
}
// FindRemoteRootRef tries to find the root reference of a remote
// repository. The root reference is the default branch as pointed to by
// the remotes HEAD reference. Returns an InvalidArgument error if the
// specified remote does not exist and a NotFound error in case no HEAD
// branch was found.
rpc FindRemoteRootRef(FindRemoteRootRefRequest) returns (FindRemoteRootRefResponse) {
option (op_type) = {
op: ACCESSOR
};
}
}
// UpdateRemoteMirrorRequest is a request for the UpdateRemoteMirror RPC.
message UpdateRemoteMirrorRequest {
// Remote defines a remote repository that diverged references should be pushed to.
message Remote {
// url is the URL of the remote repository.
string url = 1;
// http_authorization_header is an optional HTTP header used for
// authenticating against the remote repository.
string http_authorization_header = 2;
// resolved_address holds the resolved IP address of the remote_url. This is
// used to avoid DNS rebinding by mapping the url to the resolved address.
// Only IPv4 dotted decimal ("192.0.2.1"), IPv6 ("2001:db8::68"), or IPv4-mapped
// IPv6 ("::ffff:192.0.2.1") forms are supported.
// Works with HTTP/HTTPS/Git/SSH protocols.
// Optional.
string resolved_address = 4;
// HttpHost has been removed in favor of ResolvedAddress.
reserved 3;
reserved "http_host";
}
// repository is the repository whose mirror repository to update.
Repository repository = 1 [(target_repository)=true];
// remote contains parameters required to connect to the remote repository.
// This allows Gitaly to use an in-memory remote and does not require any
// on-disk remote configuration.
Remote remote = 7;
// only_branches_matching contains patterns to match branches against. Only the
// matched branches are updated in the remote mirror. If no patterns are
// specified, all branches are updated. The patterns should only contain the
// branch name without the 'refs/heads/' prefix. "*" can be used as a
// wildcard to match anything. only_branches_matching can be streamed to the
// server over multiple messages. Optional.
repeated bytes only_branches_matching = 3; // protolint:disable:this REPEATED_FIELD_NAMES_PLURALIZED
// ssh_key is the SSH key to use for accessing to the mirror repository.
// Optional.
string ssh_key = 4;
// known_hosts specifies the identities used for strict host key checking.
// Optional.
string known_hosts = 5;
// keep_divergent_refs specifies whether or not to update diverged references
// in the mirror repository.
bool keep_divergent_refs = 6;
reserved 2;
reserved "ref_name";
}
// UpdateRemoteMirrorResponse is a response for the UpdateRemoteMirror RPC.
message UpdateRemoteMirrorResponse {
// divergent_refs contains a list of references that had diverged in the
// mirror from the source repository.
repeated bytes divergent_refs = 1;
}
// FindRemoteRepositoryRequest is a request for the FindRemoteRepository RPC.
message FindRemoteRepositoryRequest {
// remote is the remote repository being checked. Because this RPC is not executed within a
// repository, the remote parameter must specify a valid Git URL for the targeted repository.
string remote = 1;
// storage_name is used to redirect request to proper storage where it can be handled.
// As of now it doesn't matter what storage will be used, but it still must be a valid.
// For more details: https://gitlab.com/gitlab-org/gitaly/-/issues/2442
string storage_name = 2 [(storage)=true];
}
// FindRemoteRepositoryResponse is a response for the FindRemoteRepository RPC. This might throw a
// GRPC Unavailable code to signal the request failure is transient.
message FindRemoteRepositoryResponse {
// exists specifies if the remote repository exists.
bool exists = 1;
}
// FindRemoteRootRefRequest represents a request for the FindRemoteRootRef RPC.
message FindRemoteRootRefRequest {
// repository is the repository in which the request shall be executed in. If
// a remote name is given, then this is the repository in which the remote
// will be looked up.
Repository repository = 1 [(target_repository)=true];
// remote_url specifies the remote repository URL which should be fetched from.
string remote_url = 3;
// http_authorization_header is the HTTP header which should be added to the
// request in order to authenticate against the repository.
string http_authorization_header = 4;
// resolved_address holds the resolved IP address of the remote_url. This is
// used to avoid DNS rebinding by mapping the url to the resolved address.
// Only IPv4 dotted decimal ("192.0.2.1"), IPv6 ("2001:db8::68"), or IPv4-mapped
// IPv6 ("::ffff:192.0.2.1") forms are supported.
// Works with HTTP/HTTPS/Git/SSH protocols.
// Optional.
string resolved_address = 6;
reserved 2;
reserved "remote";
// HttpHost has been removed in favor of ResolvedAddress.
reserved 5;
reserved "http_host";
}
// FindRemoteRootRefResponse represents the response for the FindRemoteRootRef
// request.
message FindRemoteRootRefResponse {
// ref is the name of the remote root reference.
string ref = 1;
}