go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/internal/bugs/monorail/api_proto/project_objects.proto (about)

     1  // Copyright 2020 The Chromium Authors
     2  // Use of this source code is governed by a BSD-style license that can be
     3  // found in the LICENSE file.
     4  
     5  // This file defines protobufs for projects and their resources.
     6  
     7  syntax = "proto3";
     8  
     9  package monorail.v3;
    10  
    11  option go_package = "go.chromium.org/luci/analysis/internal/bugs/monorail/api_proto";
    12  
    13  import "google/protobuf/timestamp.proto";
    14  import "google/api/field_behavior.proto";
    15  import "google/api/resource.proto";
    16  import "go.chromium.org/luci/analysis/internal/bugs/monorail/api_proto/issue_objects.proto";
    17  import "go.chromium.org/luci/analysis/internal/bugs/monorail/api_proto/permission_objects.proto";
    18  
    19  // The top level organization of issues in Monorail.
    20  //
    21  // See monorail/doc/userguide/concepts.md#Projects-and-roles.
    22  // and monorail/doc/userguide/project-owners.md#why-does-monorail-have-projects
    23  // Next available tag: 5
    24  message Project {
    25    option (google.api.resource) = {
    26      type: "api.crbug.com/Project"
    27      pattern: "projects/{project}"
    28    };
    29  
    30    // Resource name of the project.
    31    string name = 1;
    32    // Display name of the project.
    33    string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
    34    // Summary of the project, ie describing what its use and purpose.
    35    string summary = 3;
    36    // URL pointing to this project's logo image.
    37    string thumbnail_url = 4;
    38  }
    39  
    40  // Potential steps along the development process that an issue can be in.
    41  //
    42  // See monorail/doc/userguide/project-owners.md#How-to-configure-statuses
    43  // (-- aip.dev/not-precedent: "Status" should be reserved for HTTP/gRPC codes
    44  //     per aip.dev/216. Monorail's Status  preceded the AIP standards, and is
    45  //     used extensively throughout the system.)
    46  // Next available tag: 7
    47  message StatusDef {
    48    option (google.api.resource) = {
    49      type: "api.crbug.com/StatusDef"
    50      pattern: "projects/{project}/statusDefs/{status_def}"
    51    };
    52  
    53    // Type of this status.
    54    // Next available tag: 4
    55    enum StatusDefType {
    56      // Default enum value. This value is unused.
    57      STATUS_DEF_TYPE_UNSPECIFIED = 0;
    58      // This status means issue is open.
    59      OPEN = 1;
    60      // This status means issue is closed.
    61      CLOSED = 2;
    62      // This status means issue is merged into another.
    63      MERGED = 3;
    64    }
    65  
    66    // State of this status.
    67    // Next available tag: 3
    68    enum StatusDefState {
    69      // Default value. This value is unused.
    70      STATUS_DEF_STATE_UNSPECIFIED = 0;
    71      // This status is deprecated
    72      DEPRECATED = 1;
    73      // This status is not deprecated
    74      ACTIVE = 2;
    75    }
    76  
    77    // Resource name of the status.
    78    string name = 1;
    79    // String value of the status.
    80    string value = 2;
    81    // Type of this status.
    82    StatusDefType type = 3;
    83    // Sorting rank of this status. If we sort issues by status
    84    // this rank determines the sort order rather than status value.
    85    uint32 rank = 4;
    86    // Brief explanation of this status.
    87    string docstring = 5;
    88    // State of this status.
    89    StatusDefState state = 6;
    90  }
    91  
    92  // Well-known labels that can be applied to issues within the project.
    93  //
    94  // See monorail/doc/userguide/concepts.md#issue-fields-and-labels.
    95  // Next available tag: 5
    96  // Labels defined in this project.
    97  message LabelDef {
    98  
    99    option (google.api.resource) = {
   100      type: "api.crbug.com/LabelDef"
   101      pattern: "projects/{project}/labelDefs/{label_def}"
   102    };
   103  
   104    // State of this label.
   105    // Next available tag: 3
   106    enum LabelDefState {
   107      // Default enum value. This value is unused.
   108      LABEL_DEF_STATE_UNSPECIFIED = 0;
   109      // This label is deprecated
   110      DEPRECATED = 1;
   111      // This label is not deprecated
   112      ACTIVE = 2;
   113    }
   114  
   115    // Resource name of the label.
   116    string name = 1;
   117    // String value of the label.
   118    string value = 2;
   119    // Brief explanation of this label.
   120    string docstring = 3;
   121    // State of this label.
   122    LabelDefState state = 4;
   123  }
   124  
   125  // Custom fields defined for the project.
   126  //
   127  // See monorail/doc/userguide/concepts.md#issue-fields-and-labels.
   128  // Check bugs.chromium.org/p/{project}/adminLabels to see the FieldDef IDs.
   129  // If your code needs to call multiple monorail instances
   130  // (e.g. monorail-{prod|staging|dev}) FieldDef IDs for FieldDefs
   131  // with the same display_name will differ between each monorail
   132  // instance. To see what FieldDef ID to use when calling staging
   133  // you must check bugs-staging.chromium.org/p/{project}/adminLabels.
   134  // Next available tag: 15
   135  message FieldDef {
   136    option (google.api.resource) = {
   137      type: "api.crbug.com/FieldDef"
   138      pattern: "projects/{project}/fieldDefs/{field_def_id}"
   139    };
   140  
   141    // Resource name of the field.
   142    string name = 1;
   143    // Display name of the field.
   144    string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
   145    // Brief explanation of this field.
   146    string docstring = 3;
   147    // Type of this field.
   148    // Next available tag: 7
   149    enum Type {
   150      // Default enum value. This value is unused.
   151      TYPE_UNSPECIFIED = 0;
   152      // This field can be filled only with enumerated option(s).
   153      ENUM = 1;
   154      // This field can be filled with integer(s).
   155      INT = 2;
   156      // This field can be filled with string(s).
   157      STR = 3;
   158      // This field can be filled with user(s).
   159      USER = 4;
   160      // This field can be filled with date(s).
   161      DATE = 5;
   162      // This field can be filled with URL(s).
   163      URL = 6;
   164    }
   165    Type type = 4 [(google.api.field_behavior) = IMMUTABLE];
   166  
   167    // Type of issue this field applies: ie Bug or Enhancement.
   168    // Note: type is indicated by any "Type-foo" label or "Type" custom field.
   169    string applicable_issue_type = 5;
   170    // Administrators of this field.
   171    repeated string admins = 6 [
   172        (google.api.resource_reference) = { type: "api.crbug.com/User" }
   173    ];
   174  
   175    // Traits of this field, ie is required or can support multiple values.
   176    // Next available tag: 6
   177    enum Traits {
   178      // Default enum value. This value is unused.
   179      TRAITS_UNSPECIFIED = 0;
   180      // This field must be filled out in issues where it's applicable.
   181      REQUIRED = 1;
   182      // This field defaults to hidden.
   183      DEFAULT_HIDDEN = 2;
   184      // This field can have multiple values.
   185      MULTIVALUED = 3;
   186      // This is a phase field, meaning it is repeated for each phase of an
   187      // approval process. It cannot be the child of a particular approval.
   188      PHASE = 4;
   189      // Values of this field can only be edited in issues/templates by editors.
   190      // Project owners and field admins are not subject of this restriction.
   191      RESTRICTED = 5;
   192    }
   193    repeated Traits traits = 7;
   194  
   195    // ApprovalDef that this field belongs to, if applicable.
   196    // A field may not both have `approval_parent` set and have the PHASE trait.
   197    string approval_parent = 8 [
   198        (google.api.resource_reference) = { type: "api.crbug.com/ApprovalDef" },
   199        (google.api.field_behavior) = IMMUTABLE
   200    ];
   201  
   202    // Settings specific to enum type fields.
   203    // Next available tag: 2
   204    message EnumTypeSettings {
   205      // One available choice for an enum field.
   206      // Next available tag: 3
   207      message Choice {
   208        // Value of this choice.
   209        string value = 1;
   210        // Brief explanation of this choice.
   211        string docstring = 2;
   212      }
   213      repeated Choice choices = 1;
   214    }
   215    EnumTypeSettings enum_settings = 9;
   216  
   217    // Settings specific to int type fields.
   218    // Next available tag: 3
   219    message IntTypeSettings {
   220      // Minimum value that this field can have.
   221      int32 min_value = 1;
   222      // Maximum value that this field can have.
   223      int32 max_value = 2;
   224    }
   225    IntTypeSettings int_settings = 10;
   226  
   227    // Settings specific to str type fields.
   228    // Next available tag: 2
   229    message StrTypeSettings {
   230      // Regex that this field value(s) must match.
   231      string regex = 1;
   232    }
   233    StrTypeSettings str_settings = 11;
   234  
   235    // Settings specific to user type fields.
   236    // Next available tag: 5
   237    message UserTypeSettings {
   238      // Event that triggers a notification.
   239      // Next available tag: 3
   240      enum NotifyTriggers {
   241        // Default notify trigger value. This value is unused.
   242        NOTIFY_TRIGGERS_UNSPECIFIED = 0;
   243        // There are no notifications.
   244        NEVER = 1;
   245        // Notify whenever any comment is made.
   246        ANY_COMMENT = 2;
   247      }
   248      NotifyTriggers notify_triggers = 1;
   249      // Field value(s) can only be set to users that fulfill the role
   250      // requirements.
   251      // Next available tag: 3
   252      enum RoleRequirements {
   253        // Default role requirement value. This value is unused.
   254        ROLE_REQUIREMENTS_UNSPECIFIED = 0;
   255        // There is no requirement.
   256        NO_ROLE_REQUIREMENT = 1;
   257        // Field value(s) can only be set to users who are members.
   258        PROJECT_MEMBER = 2;
   259      }
   260      RoleRequirements role_requirements = 2;
   261      // User(s) named in this field are granted this permission in the issue.
   262      string grants_perm = 3;
   263      // Field value(s) can only be set to users with this permission.
   264      string needs_perm = 4;
   265    }
   266    UserTypeSettings user_settings = 12;
   267  
   268    // Settings specific to date type fields.
   269    // Next available tag: 2
   270    message DateTypeSettings {
   271      // Action to do when a date field value arrives.
   272      // Next available tag: 4
   273      enum DateAction {
   274        // Default date action value. This value is unused.
   275        DATE_ACTION_UNSPECIFIED = 0;
   276        // No action will be taken when a date arrives.
   277        NO_ACTION = 1;
   278        // Notify owner only when a date arrives.
   279        NOTIFY_OWNER = 2;
   280        // Notify all participants when a date arrives.
   281        NOTIFY_PARTICIPANTS = 3;
   282      }
   283      DateAction date_action = 1;
   284    }
   285    DateTypeSettings date_settings = 13;
   286  
   287    // Editors of this field, only for RESTRICTED fields.
   288    repeated string editors = 14 [
   289        (google.api.resource_reference) = { type: "api.crbug.com/User" }
   290    ];
   291  }
   292  
   293  // A high level definition of the part of the software affected by an issue.
   294  //
   295  // See monorail/doc/userguide/project-owners.md#how-to-configure-components.
   296  // Check crbug.com/p/{project}/adminComponents to see the ComponenttDef IDs.
   297  // Next available tag: 12
   298  message ComponentDef {
   299    option (google.api.resource) = {
   300      type: "api.crbug.com/ComponentDef"
   301      pattern: "projects/{project}/componentDefs/{component_def_id}"
   302    };
   303  
   304    // The current state of the component definition.
   305    // Next available tag: 3
   306    enum ComponentDefState {
   307      // Default enum value. This value is unused.
   308      COMPONENT_DEF_STATE_UNSPECIFIED = 0;
   309      // This component is deprecated
   310      DEPRECATED = 1;
   311      // This component is not deprecated
   312      ACTIVE = 2;
   313    }
   314  
   315    // Resource name of the component, aka identifier.
   316    // the API will always return ComponentDef names with format:
   317    // projects/{project}/componentDefs/<component_def_id>.
   318    // However the API will accept ComponentDef names with formats:
   319    // projects/{project}/componentDefs/<component_def_id|value>.
   320    string name = 1;
   321    // String value of the component, ie 'Tools>Stability' or 'Blink'.
   322    string value = 2;
   323    // Brief explanation of this component.
   324    string docstring = 3;
   325    // Administrators of this component.
   326    repeated string admins = 4 [
   327        (google.api.resource_reference) = { type: "api.crbug.com/User" }
   328    ];
   329    // Auto cc'ed users of this component.
   330    repeated string ccs = 5 [
   331        (google.api.resource_reference) = { type: "api.crbug.com/User" }
   332    ];
   333    // State of this component.
   334    ComponentDefState state = 6;
   335    // The user that created this component.
   336    string creator = 7 [
   337        (google.api.resource_reference) = { type: "api.crbug.com/User" },
   338        (google.api.field_behavior) = OUTPUT_ONLY
   339    ];
   340    // The user that last modified this component.
   341    string modifier = 8 [
   342        (google.api.resource_reference) = { type: "api.crbug.com/User" },
   343        (google.api.field_behavior) = OUTPUT_ONLY
   344    ];
   345    // The time this component was created.
   346    google.protobuf.Timestamp create_time = 9 [
   347        (google.api.field_behavior) = OUTPUT_ONLY
   348    ];
   349    // The time this component was last modified.
   350    google.protobuf.Timestamp modify_time = 10 [
   351        (google.api.field_behavior) = OUTPUT_ONLY
   352    ];
   353    // Labels that auto-apply to issues in this component.
   354    repeated string labels = 11;
   355  }
   356  
   357  // Defines approvals that issues within the project may need.
   358  // See monorail/doc/userguide/concepts.md#issue-approvals-and-gates and
   359  // monorail/doc/userguide/project-owners.md#How-to-configure-approvals
   360  // Check bugs.chromium.org/p/{project}/adminLabels to see the ApprovalDef IDs.
   361  // If your code needs to call multiple monorail instances
   362  // (e.g. monorail-{prod|staging|dev}) ApprovalDef IDs for ApprovalDefs
   363  // with the same display_name will differ between each monorail
   364  // instance. To see what ApprovalDef ID to use when calling staging
   365  // you must check bugs-staging.chromium.org/p/{project}/adminLabels.
   366  // Next available tag: 7
   367  message ApprovalDef {
   368    option (google.api.resource) = {
   369      type: "api.crbug.com/ApprovalDef"
   370      pattern: "projects/{project}/approvalDefs/{approval_def_id}"
   371    };
   372  
   373    // Resource name of the approval.
   374    string name = 1;
   375    // Display name of the field.
   376    string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
   377    // Brief explanation of this field.
   378    string docstring = 3;
   379    // Information approvers need from requester.
   380    // May be adjusted on the issue after creation.
   381    string survey = 4;
   382    // Default list of users who can approve this field.
   383    // May be adjusted on the issue after creation.
   384    repeated string approvers = 5 [
   385        (google.api.resource_reference) = { type: "api.crbug.com/User" }
   386    ];
   387    // Administrators of this field.
   388    repeated string admins = 6 [
   389        (google.api.resource_reference) = { type: "api.crbug.com/User" }
   390    ];
   391  }
   392  
   393  
   394  // Defines saved queries that belong to a project
   395  //
   396  // Next available tag: 4
   397  message ProjectSavedQuery {
   398    option (google.api.resource) = {
   399      type: "api.crbug.com/ProjectSavedQuery"
   400      pattern: "projects/{project}/savedQueries/{saved_query_id}"
   401    };
   402  
   403    // Resource name of this saved query.
   404    string name = 1;
   405    // Display name of this saved query, ie 'open issues'.
   406    string display_name = 2;
   407    // Search term of this saved query.
   408    string query = 3;
   409  }
   410  
   411  
   412  // Defines a template for filling issues.
   413  // Next available tag: 10
   414  message IssueTemplate {
   415    option (google.api.resource) = {
   416      type: "api.crbug.com/IssueTemplate"
   417      pattern: "projects/{project}/templates/{template_id}"
   418    };
   419    // Resource name of the template.
   420    string name = 1;
   421    // Display name of this template.
   422    string display_name = 2 [(google.api.field_behavior) = IMMUTABLE];
   423    // Canonical Issue for this template.
   424    Issue issue = 3;
   425    // ApprovalValues to be created with the issue when using this template.
   426    repeated ApprovalValue approval_values = 9;
   427    // Boolean indicating subsequent issue creation must have delta in summary.
   428    bool summary_must_be_edited = 4;
   429    // Visibility permission of template.
   430    // Next available tag: 3
   431    enum TemplatePrivacy {
   432      // This value is unused.
   433      TEMPLATE_PRIVACY_UNSPECIFIED = 0;
   434      // Owner project members may view this template.
   435      MEMBERS_ONLY = 1;
   436      // Anyone on the web can view this template.
   437      PUBLIC = 2;
   438    }
   439    TemplatePrivacy template_privacy = 5;
   440    // Indicator of who if anyone should be the default owner of the issue
   441    // created with this template.
   442    // Next available tag: 2
   443    enum DefaultOwner {
   444      // There is no default owner.
   445      // This value is used if the default owner is omitted.
   446      DEFAULT_OWNER_UNSPECIFIED = 0;
   447      // The owner should default to the Issue reporter if the reporter is a
   448      // member of the project.
   449      PROJECT_MEMBER_REPORTER = 1;
   450    }
   451    DefaultOwner default_owner = 6;
   452    // Boolean indicating whether issue must have a component.
   453    bool component_required = 7;
   454    // Names of Users who can administer this template.
   455    repeated string admins = 8 [
   456        (google.api.resource_reference) = { type: "api.crbug.com/User" }];
   457  }
   458  
   459  
   460  // Defines configurations of a project
   461  //
   462  // Next available tag: 11
   463  message ProjectConfig {
   464    option (google.api.resource) = {
   465      type: "api.crbug.com/ProjectConfig"
   466      pattern: "projects/{project}/config"
   467    };
   468  
   469    // Resource name of the project config.
   470    string name = 1;
   471    // Set of label prefixes that only apply once per issue.
   472    // E.g. priority, since no issue can be both Priority-High and Priority-Low.
   473    repeated string exclusive_label_prefixes = 2;
   474    // Default search query for this project's members.
   475    string member_default_query = 3;
   476    // TODO(crbug.com/monorail/7517): consider using IssuesListColumn
   477    // Default sort specification for this project.
   478    string default_sort = 4;
   479    // Default columns for displaying issue list for this project.
   480    repeated IssuesListColumn default_columns = 5;
   481    // Grid view configurations.
   482    // Next available tag: 3
   483    message GridViewConfig {
   484      // Default column dimension in grid view for this project.
   485      string default_x_attr = 1;
   486      // Default row dimension in grid view for this project.
   487      string default_y_attr = 2;
   488    }
   489    GridViewConfig project_grid_config = 6;
   490    // Default template used for issue entry for members of this project.
   491    string member_default_template = 7 [
   492        (google.api.resource_reference) = { type: "api.crbug.com/Template" }];
   493    // Default template used for issue entry for non-members of this project.
   494    string non_members_default_template = 8 [
   495        (google.api.resource_reference) = { type: "api.crbug.com/Template" }];
   496    // URL to browse project's source code revisions for any given revnum.
   497    // E.g. https://crrev.com/{revnum}
   498    string revision_url_format = 9;
   499    // A project's custom URL for the "New issue" link, only if specified.
   500    string custom_issue_entry_url = 10;
   501  }
   502  
   503  // Specifies info for a member of a project.
   504  //
   505  // Next available tag: 7
   506  message ProjectMember {
   507    // Resource name of the Project Member.
   508    // projects/{project}/members/{user_id}
   509    string name = 1;
   510    // The role the user has in the project.
   511    // Next available tag: 4
   512    enum ProjectRole {
   513      // The user has no role in the project.
   514      PROJECT_ROLE_UNSPECIFIED = 0;
   515      // The user can make any changes to the project.
   516      OWNER = 1;
   517      // The user may participate in the project but may not edit the project.
   518      COMMITTER = 2;
   519      // The user starts with the same permissions as a non-member.
   520      CONTRIBUTOR = 3;
   521    }
   522    ProjectRole role = 2;
   523    // Which built-in/standard permissions the user has set.
   524    repeated Permission standard_perms = 3;
   525    // Custom permissions defined for the user.
   526    // eg. "Google" in "Restrict-View-Google" is an example custom permission.
   527    repeated string custom_perms = 4;
   528    // Annotations about a user configured by project owners.
   529    // Visible to anyone who can see the project's settings.
   530    string notes = 5;
   531    // Whether the user should show up in autocomplete.
   532    // Next available tag: 3
   533    enum AutocompleteVisibility {
   534      // No autocomplete visibility value specified.
   535      AUTOCOMPLETE_VISIBILITY_UNSPECIFIED = 0;
   536      // The user should not show up in autocomplete.
   537      HIDDEN = 1;
   538      // The user may show up in autocomplete.
   539      SHOWN = 2;
   540    }
   541    AutocompleteVisibility include_in_autocomplete = 6;
   542  }