| // 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; |
| } |