blob: edfc19dd9b5ff2d4b3b09842a2c9da9ca2601828 [file] [log] [blame]
syntax = "proto3";
package autoroll.rpc;
option go_package = "go.skia.org/infra/autoroll/go/rpc";
import "google/protobuf/timestamp.proto";
// AutoRollService provides interactions with the AutoRoll frontend.
service AutoRollService {
// GetRollers retrieves AutoRollMiniStatuses for all known rollers.
rpc GetRollers(GetRollersRequest) returns (GetRollersResponse);
// GetMiniStatus retrieves the AutoRollMiniStatus for one roller.
rpc GetMiniStatus(GetMiniStatusRequest) returns (GetMiniStatusResponse);
// GetStatus retrieves the AutoRollStatus for one roller.
rpc GetStatus(GetStatusRequest) returns (GetStatusResponse);
// SetMode sets the mode for a roller.
rpc SetMode(SetModeRequest) returns (SetModeResponse);
// SetStrategy sets the strategy for a roller.
rpc SetStrategy(SetStrategyRequest) returns (SetStrategyResponse);
// CreateManualRoll initiates the creation of a manual roll.
rpc CreateManualRoll(CreateManualRollRequest) returns (CreateManualRollResponse);
// Unthrottle clears any throttling of the roller, allowing it to roll again.
rpc Unthrottle(UnthrottleRequest) returns (UnthrottleResponse);
}
// Mode describes the valid operating modes of an autoroller.
// These must be kept in sync with autoroll/go/modes/modes.go.
enum Mode {
// RUNNING is the typical operating mode of the autoroller. It will upload and
// land CLs as new revisions appear in the Child.
RUNNING = 0;
// STOPPED prevents the autoroller from uploading any CLs. The roller will
// continue to update any local checkouts to prevent them from getting too far
// out of date, and any requested manual rolls will be fulfilled.
STOPPED = 1;
// DRY_RUN is similar to RUNNING but does not land the roll CLs after the
// commit queue finishes. Instead, the active roll is left open until new
// revisions appear in the child, at which point the roll is closed and a new
// one is uploaded.
DRY_RUN = 2;
// OFFLINE is similar to STOPPED, but the roller does not update its checkouts
// and requests for manual rolls are ignored.
OFFLINE = 3;
}
// Strategy describes the valid strategies for choosing the next revision to
// roll. These must be kept in sync with autoroll/go/strategy/strategies.go.
enum Strategy {
// BATCH indicates that all not-yet-rolled revisions should be rolled in a
// single CL.
BATCH = 0;
// N_BATCH is similar to BATCH but puts a limit on the number of revisions in
// a single CL.
N_BATCH = 1;
// SINGLE indicates that a single revision is rolled in each CL.
SINGLE = 2;
}
// AutoRollMiniStatus contains a subset of the information of AutoRollStatus.
message AutoRollMiniStatus {
// roller_id is the unique ID for this roller.
string roller_id = 1;
// child_name is the display name of the child.
string child_name = 2;
// parent_name is the display name of the parent.
string parent_name = 3;
// mode is the currently-set operating mode of the roller.
Mode mode = 4;
// current_roll_rev is the ID of the child revision which is being rolled in
// the active roll CL.
string current_roll_rev = 5;
// last_roll_rev is the ID of the child revision which is currently pinned by
// the parent.
string last_roll_rev = 6;
// num_failed is the number of consecutive roll failures.
int32 num_failed = 7;
// num_behind is the number of not-yet-rolled revisions.
int32 num_behind = 8;
}
message TryJob {
// Result describes the possible results for a TryJob.
// These must be kept in sync with go/autoroll/autoroll.go.
enum Result {
// UNKNOWN indicates that the result of the TryJob is unknown, ie. it has
// not yet finished.
UNKNOWN = 0;
// SUCCESS indicates that that TryJob completed successfully.
SUCCESS = 1;
// FAILURE indicates that that TryJob failed.
FAILURE = 2;
// CANCELED indicates that that TryJob was canceled.
CANCELED = 3;
}
// Status describes the lifecycle states of a TryJob.
// These must be kept in sync with go/autoroll/autoroll.go.
enum Status {
// SCHEDULED indicates that the TryJob has been scheduled but has not yet
// started.
SCHEDULED = 0;
// STARTED indicates that the TryJob is currently running.
STARTED = 1;
// COMPLETED indicates that the TryJob is finishes.
COMPLETED = 2;
}
// name of the TryJob.
string name = 1;
// status of the TryJob.
Status status = 2;
// result of the TryJob.
Result result = 3;
// url where more details can be found about the TryJob.
string url = 4;
// category of the TryJob, eg. "cq".
string category = 5;
}
// AutoRoll CL describes a CL uploaded by the autoroller.
message AutoRollCL {
// Result describes the possible results for an AutoRollCL.
enum Result {
// IN_PROGRESS indicates that the commit queue is still running for this
// AutoRollCL.
IN_PROGRESS = 0;
// SUCCESS indicates that this AutoRollCL landed successfully.
SUCCESS = 1;
// FAILURE indicates that the commit queue failed for this AutoRollCL.
FAILURE = 2;
// DRY_RUN_IN_PROGRESS indicates that the commit queue dry run is still
// running for this AutoRollCL.
DRY_RUN_IN_PROGRESS = 3;
// DRY_RUN_SUCCESS indicates that the commit queue dry run succeeded for
// this AutoRollCL.
DRY_RUN_SUCCESS = 4;
// DRY_RUN_FAILURE indicates that the commit queue dry run failed for this
// AutoRollCL.
DRY_RUN_FAILURE = 5;
}
// id is the unique identifier for the CL.
string id = 1;
// result of the AutoRollCL.
Result result = 2;
// subject line of the commit message of the AutoRollCL.
string subject = 3;
// rolling_to is the ID of the revision being rolled.
string rolling_to = 4;
// rolling_from is the ID of the currently-pinned revision.
string rolling_from = 5;
// created is the timestamp at which the AutoRollCL was created.
google.protobuf.Timestamp created = 6;
// created is the timestamp at which the AutoRollCL was last modified.
google.protobuf.Timestamp modified = 7;
// try_jobs contains results of any try jobs for the AutoRollCL.
repeated TryJob try_jobs = 8;
}
// Revision describes a single revision in a given Child. This may be a Git
// commit, CIPD package instance, a file uploaded to GCS, etc.
message Revision {
// id is the unique identifier for the Revision.
string id = 1;
// display is a human-friendly display name for the Revision.
string display = 2;
// description is a longer description of the Revision.
string description = 3;
// time is the timestamp at which the Revision was created.
google.protobuf.Timestamp time = 4;
// url where more details can be found about the Revision.
string url = 5;
}
// AutoRollConfig describes the configuration for a roller.
message AutoRollConfig {
// child_bug_link is a link to file a bug for the child project.
string child_bug_link = 5;
// parent_bug_link is a link to file a bug for the parent project.
string parent_bug_link = 6;
// parent_waterfall is the URL of the CI display for the parent repo.
string parent_waterfall = 1;
// roller_id is the unique identifier for the roller.
string roller_id = 2;
// supports_manual_rolls indicates whether this autoroller supports manually-
// triggered rolls.
bool supports_manual_rolls = 3;
// time_window describes the limitations, if any, on when the autoroller is
// allowed to upload roll CLs.
string time_window = 4;
}
// ModeChange describes one instance of an autoroller's mode being changed.
message ModeChange {
// roller_id is the unique identifier for the autoroller.
string roller_id = 1;
// mode is the operating mode of the autoroller which was set in this
// ModeChange.
Mode mode = 2;
// user is the email address of the user who created this ModeChange.
string user = 3;
// time is the timestamp at which the ModeChange was created.
google.protobuf.Timestamp time = 4;
// message is a user-created message which describes the reason for changing
// the mode.
string message = 5;
}
// StrategyChange describes one instance of an autoroller's mode being changed.
message StrategyChange {
// roller_id is the unique identifier for the autoroller.
string roller_id = 1;
// strategy is the strategy for choosing the next revision to roll which was
// set in this StrategyChange.
Strategy strategy = 2;
// user is the email address of the user who created this StrategyChange.
string user = 3;
// time is the timestamp at which the StrategyChange was created.
google.protobuf.Timestamp time = 4;
// message is a user-created message which describes the reason for changing
// the strategy.
string message = 5;
}
// ManualRoll describes a manually-triggered roll and its results.
message ManualRoll {
// Result describes the possible results for a manual roll.
// These must be kept in sync with autoroll/go/manual/db.go.
enum Result {
// UNKNOWN indicates that the result of the ManualRoll is unknown, ie. it
// has not yet finished.
UNKNOWN = 0;
// FAILURE indicates that the ManualRoll has failed.
FAILURE = 1;
// SUCCESS indicates that the ManualRoll landed successfully.
SUCCESS = 2;
}
// Status describes the lifecycle states of a manual roll.
// These must be kept in sync with autoroll/go/manual/db.go.
enum Status {
// PENDING indicates that the ManualRoll has been requested but no CL has
// been uploaded.
PENDING = 0;
// STARTED indicates that a CL has been uploaded for this ManualRoll.
STARTED = 1;
// COMPLETED indicates that the ManualRoll has finished and either landed
// successfully or failed.
COMPLETED = 2;
}
// id is the unique identifier for this ManualRoll.
string id = 1;
// roller_id is the unique identifier for the autoroller on which this
// ManualRoll was requested.
string roller_id = 2;
// revision is the ID of the revision to which this ManualRoll will roll.
string revision = 3;
// requester is the email address of the person who requested the ManualRoll.
string requester = 4;
// result of the ManualRoll.
Result result = 5;
// status of the ManualRoll.
Status status = 6;
// timestamp at which the ManualRoll was created.
google.protobuf.Timestamp timestamp = 7;
// url of the ManualRoll, if a roll has been uploaded.
string url = 8;
// dry_run indicates whether the ManualRoll should be performed as a dry run,
// so that the commit queue runs but the CL is not landed.
bool dry_run = 9;
// no_email specifies that the requester and reviewers should not receive
// email related to this ManualRoll.
bool no_email = 10;
// no_resolve_revision specifies that the autoroller should not attempt to
// find the requested revision ID in the Child but should simply use it as
// provided.
bool no_resolve_revision = 11;
}
// AutoRollStatus describes the overall status of an autoroller.
message AutoRollStatus {
// mini_status contains a subset of status information for the autoroller.
AutoRollMiniStatus mini_status = 1;
// status is the current status of the autoroller, as provided by the state
// machine.
string status = 2;
// config provides configuration information for the autoroller.
AutoRollConfig config = 3;
// full_history_url is the URL where the autoroller's history may be viewed.
string full_history_url = 4;
// issue_url_base provides a base URL which can be used to construct URLs for
// individual AutoRollCLs.
string issue_url_base = 5;
// mode is the current operating mode of the autoroller.
ModeChange mode = 6;
// strategy for choosing the next revision to roll.
StrategyChange strategy = 7;
// not_rolled_revisions are the revisions of the Child which have not yet been
// rolled.
repeated Revision not_rolled_revisions = 8;
// current_roll is the active roll CL, if any.
AutoRollCL current_roll = 9;
// last_roll is the previous roll CL.
AutoRollCL last_roll = 10;
// recent_rolls contains a list of recent roll CLs.
repeated AutoRollCL recent_rolls = 11;
// manual_rolls contains a list of recent ManualRolls.
repeated ManualRoll manual_rolls = 12;
// error contains a detailed message if the autoroller is in an error state.
string error = 13;
// throttled_until is the timestamp at which the autoroller will no longer be
// throttled, if the autoroller is currently throttled.
google.protobuf.Timestamp throttled_until = 14;
}
// GetRollersRequest is a request to GetRollers.
message GetRollersRequest {}
// GetRollersResponse is a response returned by GetRollers.
message GetRollersResponse {
// rollers contains status information for all known autorollers.
repeated AutoRollMiniStatus rollers = 1;
}
// GetMiniStatusRequest is a request to GetMiniStatus.
message GetMiniStatusRequest {
// roller_id is the unique identifier of the autoroller whose MiniStatus is to
// be retrieved.
string roller_id = 1;
}
// GetMiniStatusResponse is a response returned by GetMiniStatus.
message GetMiniStatusResponse {
// status is a subset of status information for the autoroller in question.
AutoRollMiniStatus status = 1;
}
// GetStatusRequest is a request to GetStatus.
message GetStatusRequest {
// roller_id is the unique identifier of the autoroller whose Status is to be
// retrieved.
string roller_id = 1;
}
// GetStatusResponse is a response returned by GetStatus.
message GetStatusResponse {
// status information about the autoroller in question.
AutoRollStatus status = 1;
}
// SetModeRequest is a request to SetMode.
message SetModeRequest {
// roller_id is the unique identifier of the autoroller whose mode is to be
// changed.
string roller_id = 1;
// mode is the desired mode to set for the given autoroller.
Mode mode = 2;
// message describes the reason for changing the mode.
string message = 4;
}
// SetModeResponse is a response returned by SetMode.
message SetModeResponse {
// status is the updated status of the autoroller after changing its mode.
AutoRollStatus status = 1;
}
// SetStrategyRequest is a request to SetStrategy.
message SetStrategyRequest {
// roller_id is the unique identifier of the autoroller whose strategy is to
// be changed.
string roller_id = 1;
// strategy is the desired strategy to set for the given autoroller.
Strategy strategy = 2;
// message describes the reason for changing the strategy.
string message = 4;
}
// SetStrategyResponse is a response returned by SetStrategy.
message SetStrategyResponse {
// status is the updated status of the autoroller after changing its strategy.
AutoRollStatus status = 1;
}
// CreateManualRollRequest is a request to CreateManualRoll.
message CreateManualRollRequest {
// roller_id is the unique identifier of the autoroller which should create
// the manual roll.
string roller_id = 1;
// revision is the ID of the revision to be rolled.
string revision = 2;
// dry_run flag controls whether the roll is a dry-run.
bool dry_run = 3;
}
// CreateManualRollResponse is a response returned by CreateManualRoll.
message CreateManualRollResponse {
// roll is the manual roll which was created.
ManualRoll roll = 1;
}
// UnthrottleRequest is a request to Unthrottle.
message UnthrottleRequest {
// roller_id is the unique identifier of the autoroller which should be
// unthrottled.
string roller_id = 1;
}
// UnthrottleResponse is a response returned by Unthrottle.
message UnthrottleResponse {}