blob: 39c551739a5f4f193bb204c840c3546ce850a31f [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd
// This file defines protobufs for projects and their resources.
syntax = "proto3";
package monorail.v3;
option go_package = "infra/monorailv2/api/v3/api_proto";
import "google/protobuf/timestamp.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "api/v3/api_proto/issue_objects.proto";
import "api/v3/api_proto/permission_objects.proto";
// The top level organization of issues in Monorail.
//
// See monorail/doc/userguide/concepts.md#Projects-and-roles.
// and monorail/doc/userguide/project-owners.md#why-does-monorail-have-projects
// Next available tag: 5
message Project {
option (google.api.resource) = {
type: "api.crbug.com/Project"
pattern: "projects/{project}"
};
// Resource name of the project.
string name = 1;
// Display name of the project.
string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
// Summary of the project, ie describing what its use and purpose.
string summary = 3;
// URL pointing to this project's logo image.
string thumbnail_url = 4;
}
// Potential steps along the development process that an issue can be in.
//
// See monorail/doc/userguide/project-owners.md#How-to-configure-statuses
// (-- aip.dev/not-precedent: "Status" should be reserved for HTTP/gRPC codes
// per aip.dev/216. Monorail's Status preceded the AIP standards, and is
// used extensively throughout the system.)
// Next available tag: 7
message StatusDef {
option (google.api.resource) = {
type: "api.crbug.com/StatusDef"
pattern: "projects/{project}/statusDefs/{status_def}"
};
// Type of this status.
// Next available tag: 4
enum StatusDefType {
// Default enum value. This value is unused.
STATUS_DEF_TYPE_UNSPECIFIED = 0;
// This status means issue is open.
OPEN = 1;
// This status means issue is closed.
CLOSED = 2;
// This status means issue is merged into another.
MERGED = 3;
}
// State of this status.
// Next available tag: 3
enum StatusDefState {
// Default value. This value is unused.
STATUS_DEF_STATE_UNSPECIFIED = 0;
// This status is deprecated
DEPRECATED = 1;
// This status is not deprecated
ACTIVE = 2;
}
// Resource name of the status.
string name = 1;
// String value of the status.
string value = 2;
// Type of this status.
StatusDefType type = 3;
// Sorting rank of this status. If we sort issues by status
// this rank determines the sort order rather than status value.
uint32 rank = 4;
// Brief explanation of this status.
string docstring = 5;
// State of this status.
StatusDefState state = 6;
}
// Well-known labels that can be applied to issues within the project.
//
// See monorail/doc/userguide/concepts.md#issue-fields-and-labels.
// Next available tag: 5
// Labels defined in this project.
message LabelDef {
option (google.api.resource) = {
type: "api.crbug.com/LabelDef"
pattern: "projects/{project}/labelDefs/{label_def}"
};
// State of this label.
// Next available tag: 3
enum LabelDefState {
// Default enum value. This value is unused.
LABEL_DEF_STATE_UNSPECIFIED = 0;
// This label is deprecated
DEPRECATED = 1;
// This label is not deprecated
ACTIVE = 2;
}
// Resource name of the label.
string name = 1;
// String value of the label.
string value = 2;
// Brief explanation of this label.
string docstring = 3;
// State of this label.
LabelDefState state = 4;
}
// Custom fields defined for the project.
//
// See monorail/doc/userguide/concepts.md#issue-fields-and-labels.
// Check bugs.chromium.org/p/{project}/adminLabels to see the FieldDef IDs.
// If your code needs to call multiple monorail instances
// (e.g. monorail-{prod|staging|dev}) FieldDef IDs for FieldDefs
// with the same display_name will differ between each monorail
// instance. To see what FieldDef ID to use when calling staging
// you must check bugs-staging.chromium.org/p/{project}/adminLabels.
// Next available tag: 15
message FieldDef {
option (google.api.resource) = {
type: "api.crbug.com/FieldDef"
pattern: "projects/{project}/fieldDefs/{field_def_id}"
};
// Resource name of the field.
string name = 1;
// Display name of the field.
string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
// Brief explanation of this field.
string docstring = 3;
// Type of this field.
// Next available tag: 7
enum Type {
// Default enum value. This value is unused.
TYPE_UNSPECIFIED = 0;
// This field can be filled only with enumerated option(s).
ENUM = 1;
// This field can be filled with integer(s).
INT = 2;
// This field can be filled with string(s).
STR = 3;
// This field can be filled with user(s).
USER = 4;
// This field can be filled with date(s).
DATE = 5;
// This field can be filled with URL(s).
URL = 6;
}
Type type = 4 [(google.api.field_behavior) = IMMUTABLE];
// Type of issue this field applies: ie Bug or Enhancement.
// Note: type is indicated by any "Type-foo" label or "Type" custom field.
string applicable_issue_type = 5;
// Administrators of this field.
repeated string admins = 6 [
(google.api.resource_reference) = { type: "api.crbug.com/User" }
];
// Traits of this field, ie is required or can support multiple values.
// Next available tag: 6
enum Traits {
// Default enum value. This value is unused.
TRAITS_UNSPECIFIED = 0;
// This field must be filled out in issues where it's applicable.
REQUIRED = 1;
// This field defaults to hidden.
DEFAULT_HIDDEN = 2;
// This field can have multiple values.
MULTIVALUED = 3;
// This is a phase field, meaning it is repeated for each phase of an
// approval process. It cannot be the child of a particular approval.
PHASE = 4;
// Values of this field can only be edited in issues/templates by editors.
// Project owners and field admins are not subject of this restriction.
RESTRICTED = 5;
}
repeated Traits traits = 7;
// ApprovalDef that this field belongs to, if applicable.
// A field may not both have `approval_parent` set and have the PHASE trait.
string approval_parent = 8 [
(google.api.resource_reference) = { type: "api.crbug.com/ApprovalDef" },
(google.api.field_behavior) = IMMUTABLE
];
// Settings specific to enum type fields.
// Next available tag: 2
message EnumTypeSettings {
// One available choice for an enum field.
// Next available tag: 3
message Choice {
// Value of this choice.
string value = 1;
// Brief explanation of this choice.
string docstring = 2;
}
repeated Choice choices = 1;
}
EnumTypeSettings enum_settings = 9;
// Settings specific to int type fields.
// Next available tag: 3
message IntTypeSettings {
// Minimum value that this field can have.
int32 min_value = 1;
// Maximum value that this field can have.
int32 max_value = 2;
}
IntTypeSettings int_settings = 10;
// Settings specific to str type fields.
// Next available tag: 2
message StrTypeSettings {
// Regex that this field value(s) must match.
string regex = 1;
}
StrTypeSettings str_settings = 11;
// Settings specific to user type fields.
// Next available tag: 5
message UserTypeSettings {
// Event that triggers a notification.
// Next available tag: 3
enum NotifyTriggers {
// Default notify trigger value. This value is unused.
NOTIFY_TRIGGERS_UNSPECIFIED = 0;
// There are no notifications.
NEVER = 1;
// Notify whenever any comment is made.
ANY_COMMENT = 2;
}
NotifyTriggers notify_triggers = 1;
// Field value(s) can only be set to users that fulfill the role
// requirements.
// Next available tag: 3
enum RoleRequirements {
// Default role requirement value. This value is unused.
ROLE_REQUIREMENTS_UNSPECIFIED = 0;
// There is no requirement.
NO_ROLE_REQUIREMENT = 1;
// Field value(s) can only be set to users who are members.
PROJECT_MEMBER = 2;
}
RoleRequirements role_requirements = 2;
// User(s) named in this field are granted this permission in the issue.
string grants_perm = 3;
// Field value(s) can only be set to users with this permission.
string needs_perm = 4;
}
UserTypeSettings user_settings = 12;
// Settings specific to date type fields.
// Next available tag: 2
message DateTypeSettings {
// Action to do when a date field value arrives.
// Next available tag: 4
enum DateAction {
// Default date action value. This value is unused.
DATE_ACTION_UNSPECIFIED = 0;
// No action will be taken when a date arrives.
NO_ACTION = 1;
// Notify owner only when a date arrives.
NOTIFY_OWNER = 2;
// Notify all participants when a date arrives.
NOTIFY_PARTICIPANTS = 3;
}
DateAction date_action = 1;
}
DateTypeSettings date_settings = 13;
// Editors of this field, only for RESTRICTED fields.
repeated string editors = 14 [
(google.api.resource_reference) = { type: "api.crbug.com/User" }
];
}
// A high level definition of the part of the software affected by an issue.
//
// See monorail/doc/userguide/project-owners.md#how-to-configure-components.
// Check crbug.com/p/{project}/adminComponents to see the ComponenttDef IDs.
// Next available tag: 12
message ComponentDef {
option (google.api.resource) = {
type: "api.crbug.com/ComponentDef"
pattern: "projects/{project}/componentDefs/{component_def_id}"
};
// The current state of the component definition.
// Next available tag: 3
enum ComponentDefState {
// Default enum value. This value is unused.
COMPONENT_DEF_STATE_UNSPECIFIED = 0;
// This component is deprecated
DEPRECATED = 1;
// This component is not deprecated
ACTIVE = 2;
}
// Resource name of the component, aka identifier.
// the API will always return ComponentDef names with format:
// projects/{project}/componentDefs/<component_def_id>.
// However the API will accept ComponentDef names with formats:
// projects/{project}/componentDefs/<component_def_id|value>.
string name = 1;
// String value of the component, ie 'Tools>Stability' or 'Blink'.
string value = 2;
// Brief explanation of this component.
string docstring = 3;
// Administrators of this component.
repeated string admins = 4 [
(google.api.resource_reference) = { type: "api.crbug.com/User" }
];
// Auto cc'ed users of this component.
repeated string ccs = 5 [
(google.api.resource_reference) = { type: "api.crbug.com/User" }
];
// State of this component.
ComponentDefState state = 6;
// The user that created this component.
string creator = 7 [
(google.api.resource_reference) = { type: "api.crbug.com/User" },
(google.api.field_behavior) = OUTPUT_ONLY
];
// The user that last modified this component.
string modifier = 8 [
(google.api.resource_reference) = { type: "api.crbug.com/User" },
(google.api.field_behavior) = OUTPUT_ONLY
];
// The time this component was created.
google.protobuf.Timestamp create_time = 9 [
(google.api.field_behavior) = OUTPUT_ONLY
];
// The time this component was last modified.
google.protobuf.Timestamp modify_time = 10 [
(google.api.field_behavior) = OUTPUT_ONLY
];
// Labels that auto-apply to issues in this component.
repeated string labels = 11;
}
// Defines approvals that issues within the project may need.
// See monorail/doc/userguide/concepts.md#issue-approvals-and-gates and
// monorail/doc/userguide/project-owners.md#How-to-configure-approvals
// Check bugs.chromium.org/p/{project}/adminLabels to see the ApprovalDef IDs.
// If your code needs to call multiple monorail instances
// (e.g. monorail-{prod|staging|dev}) ApprovalDef IDs for ApprovalDefs
// with the same display_name will differ between each monorail
// instance. To see what ApprovalDef ID to use when calling staging
// you must check bugs-staging.chromium.org/p/{project}/adminLabels.
// Next available tag: 7
message ApprovalDef {
option (google.api.resource) = {
type: "api.crbug.com/ApprovalDef"
pattern: "projects/{project}/approvalDefs/{approval_def_id}"
};
// Resource name of the approval.
string name = 1;
// Display name of the field.
string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
// Brief explanation of this field.
string docstring = 3;
// Information approvers need from requester.
// May be adjusted on the issue after creation.
string survey = 4;
// Default list of users who can approve this field.
// May be adjusted on the issue after creation.
repeated string approvers = 5 [
(google.api.resource_reference) = { type: "api.crbug.com/User" }
];
// Administrators of this field.
repeated string admins = 6 [
(google.api.resource_reference) = { type: "api.crbug.com/User" }
];
}
// Defines saved queries that belong to a project
//
// Next available tag: 4
message ProjectSavedQuery {
option (google.api.resource) = {
type: "api.crbug.com/ProjectSavedQuery"
pattern: "projects/{project}/savedQueries/{saved_query_id}"
};
// Resource name of this saved query.
string name = 1;
// Display name of this saved query, ie 'open issues'.
string display_name = 2;
// Search term of this saved query.
string query = 3;
}
// Defines a template for filling issues.
// Next available tag: 10
message IssueTemplate {
option (google.api.resource) = {
type: "api.crbug.com/IssueTemplate"
pattern: "projects/{project}/templates/{template_id}"
};
// Resource name of the template.
string name = 1;
// Display name of this template.
string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
// Canonical Issue for this template.
Issue issue = 3;
// ApprovalValues to be created with the issue when using this template.
repeated ApprovalValue approval_values = 9;
// Boolean indicating subsequent issue creation must have delta in summary.
bool summary_must_be_edited = 4;
// Visibility permission of template.
// Next available tag: 3
enum TemplatePrivacy {
// This value is unused.
TEMPLATE_PRIVACY_UNSPECIFIED = 0;
// Owner project members may view this template.
MEMBERS_ONLY = 1;
// Anyone on the web can view this template.
PUBLIC = 2;
}
TemplatePrivacy template_privacy = 5;
// Indicator of who if anyone should be the default owner of the issue
// created with this template.
// Next available tag: 2
enum DefaultOwner {
// There is no default owner.
// This value is used if the default owner is omitted.
DEFAULT_OWNER_UNSPECIFIED = 0;
// The owner should default to the Issue reporter if the reporter is a
// member of the project.
PROJECT_MEMBER_REPORTER = 1;
}
DefaultOwner default_owner = 6;
// Boolean indicating whether issue must have a component.
bool component_required = 7;
// Names of Users who can administer this template.
repeated string admins = 8 [
(google.api.resource_reference) = { type: "api.crbug.com/User" }];
}
// Defines configurations of a project
//
// Next available tag: 11
message ProjectConfig {
option (google.api.resource) = {
type: "api.crbug.com/ProjectConfig"
pattern: "projects/{project}/config"
};
// Resource name of the project config.
string name = 1;
// Set of label prefixes that only apply once per issue.
// E.g. priority, since no issue can be both Priority-High and Priority-Low.
repeated string exclusive_label_prefixes = 2;
// Default search query for this project's members.
string member_default_query = 3;
// TODO(crbug.com/monorail/7517): consider using IssuesListColumn
// Default sort specification for this project.
string default_sort = 4;
// Default columns for displaying issue list for this project.
repeated IssuesListColumn default_columns = 5;
// Grid view configurations.
// Next available tag: 3
message GridViewConfig {
// Default column dimension in grid view for this project.
string default_x_attr = 1;
// Default row dimension in grid view for this project.
string default_y_attr = 2;
}
GridViewConfig project_grid_config = 6;
// Default template used for issue entry for members of this project.
string member_default_template = 7 [
(google.api.resource_reference) = { type: "api.crbug.com/Template" }];
// Default template used for issue entry for non-members of this project.
string non_members_default_template = 8 [
(google.api.resource_reference) = { type: "api.crbug.com/Template" }];
// URL to browse project's source code revisions for any given revnum.
// E.g. https://crrev.com/{revnum}
string revision_url_format = 9;
// A project's custom URL for the "New issue" link, only if specified.
string custom_issue_entry_url = 10;
}
// Specifies info for a member of a project.
//
// Next available tag: 7
message ProjectMember {
// Resource name of the Project Member.
// projects/{project}/members/{user_id}
string name = 1;
// The role the user has in the project.
// Next available tag: 4
enum ProjectRole {
// The user has no role in the project.
PROJECT_ROLE_UNSPECIFIED = 0;
// The user can make any changes to the project.
OWNER = 1;
// The user may participate in the project but may not edit the project.
COMMITTER = 2;
// The user starts with the same permissions as a non-member.
CONTRIBUTOR = 3;
}
ProjectRole role = 2;
// Which built-in/standard permissions the user has set.
repeated Permission standard_perms = 3;
// Custom permissions defined for the user.
// eg. "Google" in "Restrict-View-Google" is an example custom permission.
repeated string custom_perms = 4;
// Annotations about a user configured by project owners.
// Visible to anyone who can see the project's settings.
string notes = 5;
// Whether the user should show up in autocomplete.
// Next available tag: 3
enum AutocompleteVisibility {
// No autocomplete visibility value specified.
AUTOCOMPLETE_VISIBILITY_UNSPECIFIED = 0;
// The user should not show up in autocomplete.
HIDDEN = 1;
// The user may show up in autocomplete.
SHOWN = 2;
}
AutocompleteVisibility include_in_autocomplete = 6;
}