peridot/peridot/proto/v1/project.proto

366 lines
11 KiB
Protocol Buffer

syntax = "proto3";
package resf.peridot.v1;
import "validate/validate.proto";
import "google/protobuf/wrappers.proto";
import "google/protobuf/timestamp.proto";
import "google/api/annotations.proto";
import "peridot/proto/v1/task.proto";
option go_package = "peridot.resf.org/peridot/pb;peridotpb";
service ProjectService {
rpc CreateProject(CreateProjectRequest) returns (CreateProjectResponse) {
option (google.api.http) = {
post: "/v1/projects"
body: "*"
};
}
rpc UpdateProject(UpdateProjectRequest) returns (UpdateProjectResponse) {
option (google.api.http) = {
put: "/v1/projects/{project_id=*}"
body: "*"
};
}
rpc ListProjects(ListProjectsRequest) returns (ListProjectsResponse) {
option (google.api.http) = {
get: "/v1/projects"
};
}
rpc GetProject(GetProjectRequest) returns (GetProjectResponse) {
option (google.api.http) = {
get: "/v1/projects/{id=*}"
};
}
rpc ListRepositories(ListRepositoriesRequest) returns (ListRepositoriesResponse) {
option (google.api.http) = {
get: "/v1/projects/{project_id=*}/repositories"
};
}
rpc GetRepository(GetRepositoryRequest) returns (GetRepositoryResponse) {
option (google.api.http) = {
get: "/v1/projects/{project_id=*}/repositories/{id=*}"
};
}
rpc GetProjectCredentials(GetProjectCredentialsRequest) returns (GetProjectCredentialsResponse) {
option (google.api.http) = {
get: "/v1/projects/{project_id=*}/credentials"
};
}
rpc SetProjectCredentials(SetProjectCredentialsRequest) returns (SetProjectCredentialsResponse) {
option (google.api.http) = {
post: "/v1/projects/{project_id=*}/credentials"
body: "*"
};
}
rpc SyncCatalog(SyncCatalogRequest) returns (resf.peridot.v1.AsyncTask) {
option (google.api.http) = {
post: "/v1/projects/{project_id=*}/catalogsync"
body: "*"
};
}
rpc CreateHashedRepositories(CreateHashedRepositoriesRequest) returns (resf.peridot.v1.AsyncTask) {
option (google.api.http) = {
post: "/v1/projects/{project_id=*}/repositories/hashed"
body: "*"
};
}
rpc LookasideFileUpload(LookasideFileUploadRequest) returns (LookasideFileUploadResponse) {
option (google.api.http) = {
post: "/v1/lookaside"
body: "*"
};
}
rpc CloneSwap(CloneSwapRequest) returns (resf.peridot.v1.AsyncTask) {
option (google.api.http) = {
post: "/v1/projects/{target_project_id=*}/cloneswap"
body: "*"
};
}
rpc ListExternalRepositories(ListExternalRepositoriesRequest) returns (ListExternalRepositoriesResponse) {
option (google.api.http) = {
get: "/v1/projects/{project_id=*}/external_repositories"
};
}
rpc DeleteExternalRepository(DeleteExternalRepositoryRequest) returns (DeleteExternalRepositoryResponse) {
option (google.api.http) = {
delete: "/v1/projects/{project_id=*}/external_repositories/{id=*}"
};
}
}
// Project is a contained RPM distribution
// Packages, builds, imports and tasks are assigned to projects (multi-projects possible)
// All actions currently has to belong to a project and currently all operational
// metadata is kept within a project. Such as source scm and target scm.
// Think of projects as each their own software collection
message Project {
// Unique identifier of format UUID v4
string id = 1;
// When project was created
google.protobuf.Timestamp created_at = 2;
// When project was last updated
google.protobuf.Timestamp updated_at = 3;
// Name of project, must be unique
google.protobuf.StringValue name = 4 [(validate.rules).message.required = true];
// Major version of project (e.g. 8 for EL8 and 1800 for openSUSE 18)
google.protobuf.Int32Value major_version = 5 [(validate.rules).message.required = true];
// Architectures supported by this project
repeated string archs = 6 [(validate.rules).repeated = {min_items: 1, unique: true, items: {string: {in: ["i686", "x86_64", "aarch64", "armhfp", "ppc64le", "s390x"]}}}];
// Dist tag that this project will supply for builds
google.protobuf.StringValue dist_tag = 7 [(validate.rules).message.required = true];
// Target gitlab host
google.protobuf.StringValue target_gitlab_host = 8 [(validate.rules).message.required = true];
// Target prefix
google.protobuf.StringValue target_prefix = 9 [(validate.rules).message.required = true];
// Target branch prefix
google.protobuf.StringValue target_branch_prefix = 10 [(validate.rules).message.required = true];
// Source git host
google.protobuf.StringValue source_git_host = 11;
// Source prefix
google.protobuf.StringValue source_prefix = 12;
// Source branch prefix
google.protobuf.StringValue source_branch_prefix = 13;
// URL to blob storage
google.protobuf.StringValue cdn_url = 14;
// Whether to fetch Stream packages
bool stream_mode = 15;
// Target vendor
string target_vendor = 16 [(validate.rules).string = {in: ["redhat", "suse"]}];
// Target additional vendor
google.protobuf.StringValue additional_vendor = 17 [(validate.rules).message.required = true];
// Whether the builds should forcefully use import dist tag
bool follow_import_dist = 18;
// Branch suffix
google.protobuf.StringValue branch_suffix = 19;
// Whether to make the resulting import repositories public
bool git_make_public = 20;
// Vendor macro is what gets inserted as the vendor in the RPM
google.protobuf.StringValue vendor_macro = 21;
// Packager macro is what gets inserted as the packager in the RPM
google.protobuf.StringValue packager_macro = 22;
}
// A repository is a yum repository that yumrepofs maintains
// for this specific project
// Repositories hold packages. All projects have a repository named "all"
message Repository {
// Unique identifier of format UUID v4
string id = 1;
// When project was created
google.protobuf.Timestamp created_at = 2;
google.protobuf.StringValue name = 3 [(validate.rules).message.required = true];
google.protobuf.StringValue project_id = 4 [(validate.rules).message.required = true];
repeated string packages = 5 [(validate.rules).repeated = {unique: true}];
// Whether an RPM from a package should be excluded from the repository
// Format: {name}.{arch}
repeated string exclude_filter = 6 [(validate.rules).repeated = {unique: true}];
// Whether an RPM from a package should be included in the repository
// If list contains a NA that is in exclude_list as well, then it will
// be excluded.
repeated string include_list = 7 [(validate.rules).repeated = {unique: true}];
// Force multilib on non-prepopulated, non-devel and non-runtime package
// Only accepts complete RPM name (e.g. valgrind)
repeated string additional_multilib = 8 [(validate.rules).repeated = {unique: true}];
// Exclude multilib even if devel or runtime
// Accepts glob (e.g. valgrind*)
repeated string exclude_multilib_filter = 9 [(validate.rules).repeated = {unique: true}];
// Architectures that should be multilib enabled
repeated string multilib = 10 [(validate.rules).repeated = {unique: true}];
// Exclude filter that supports globs
repeated string glob_include_filter = 11 [(validate.rules).repeated = {unique: true}];
}
message CreateProjectRequest {
// Project to create
Project project = 1 [(validate.rules).message.required = true];
}
message CreateProjectResponse {
// Created project
Project project = 1;
}
message UpdateProjectRequest {
string project_id = 1;
// Project to update
Project project = 2 [(validate.rules).message.required = true];
}
message UpdateProjectResponse {
// Updated project
Project project = 1;
}
message ProjectFilters {
google.protobuf.StringValue id = 1;
google.protobuf.StringValue name = 2;
repeated string ids = 3;
}
message ListProjectsRequest {
// The page to request
int64 page = 1;
// Maximum amount of results to return
// Minimum: 1
// Maximum: 100
int32 limit = 2;
}
message ListProjectsResponse {
repeated Project projects = 1;
int64 total = 2;
int64 current = 3;
int64 page = 4;
}
message GetProjectRequest {
google.protobuf.StringValue id = 1 [(validate.rules).message.required = true];
}
message GetProjectResponse {
Project project = 1;
}
message ListRepositoriesRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
}
message ListRepositoriesResponse {
repeated Repository repositories = 1;
}
message GetRepositoryRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
google.protobuf.StringValue id = 2 [(validate.rules).message.required = true];
}
message GetRepositoryResponse {
Repository repository = 1;
}
message GetProjectCredentialsRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
}
message GetProjectCredentialsResponse {
google.protobuf.StringValue gitlab_username = 1;
}
message SetProjectCredentialsRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
google.protobuf.StringValue gitlab_username = 2 [(validate.rules).message.required = true];
google.protobuf.StringValue gitlab_password = 3 [(validate.rules).message.required = true];
}
message SetProjectCredentialsResponse {
google.protobuf.StringValue gitlab_username = 1;
}
message SyncCatalogRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
google.protobuf.StringValue scm_url = 2 [(validate.rules).message.required = true];
google.protobuf.StringValue branch = 3 [(validate.rules).message.required = true];
}
message CreateHashedRepositoriesRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
repeated string repositories = 2 [(validate.rules).repeated = {unique: true}];
}
message CreateHashedRepositoriesTask {
repeated string repo_revisions = 1;
}
message CloneSwapRequest {
google.protobuf.StringValue target_project_id = 1 [(validate.rules).message.required = true];
google.protobuf.StringValue src_project_id = 2 [(validate.rules).message.required = true];
}
message CloneSwapTask {
string target_project_id = 1;
string src_project_id = 2;
repeated string build_ids_layered = 3;
}
message LookasideFileUploadRequest {
string file = 1 [(validate.rules).string.min_bytes = 1];
}
message LookasideFileUploadResponse {
string digest = 1;
}
message ExternalRepository {
string url = 1;
int32 priority = 2;
bool module_hotfixes = 3;
}
message ListExternalRepositoriesRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
}
message ListExternalRepositoriesResponse {
repeated ExternalRepository repositories = 1;
}
message CreateExternalRepositoryRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
google.protobuf.StringValue url = 2 [(validate.rules).message.required = true];
google.protobuf.Int32Value priority = 3;
bool module_hotfixes = 4;
}
message CreateExternalRepositoryResponse {
ExternalRepository repository = 1;
}
message DeleteExternalRepositoryRequest {
google.protobuf.StringValue project_id = 1 [(validate.rules).message.required = true];
google.protobuf.StringValue id = 2 [(validate.rules).message.required = true];
}
message DeleteExternalRepositoryResponse {}