go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/internal/bugs/monorail/api_proto/issue_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 issues and related business
     6  // objects, e.g., field values, comments, and attachments.
     7  
     8  syntax = "proto3";
     9  
    10  package monorail.v3;
    11  
    12  option go_package = "go.chromium.org/luci/analysis/internal/bugs/monorail/api_proto";
    13  
    14  import "google/api/field_behavior.proto";
    15  import "google/api/resource.proto";
    16  import "google/protobuf/timestamp.proto";
    17  
    18  // Represents a comment and any associated changes to an Issue.
    19  //
    20  // Comments cannot be Created or Updated through standard methods. The
    21  // OUTPUT_ONLY annotations here indicate fields that would never be provided
    22  // by the user even if these methods were made available.
    23  // Next available tag: 11.
    24  message Comment {
    25  
    26    // The type of comment.
    27    // Next available tag: 9
    28    enum Type {
    29      // The default comment type. Used if type is omitted.
    30      UNSPECIFIED = 0;
    31      // A standard comment on an issue.
    32      COMMENT = 1;
    33      // A comment representing a new description for the issue.
    34      DESCRIPTION = 2;
    35    }
    36  
    37    // A file attached to a comment.
    38    // Next available tag: 8
    39    message Attachment {
    40      // The name of the attached file.
    41      string filename = 1;
    42      // It is possible for attachments to be deleted (and undeleted) by the
    43      // uploader. The name of deleted attachments are still shown, but the
    44      // content is not available.
    45      IssueContentState state = 2;
    46      // Size of the attached file in bytes.
    47      uint64 size = 3;
    48      // The type of content contained in the file, using the IANA's media type
    49      // https://www.iana.org/assignments/media-types/media-types.xhtml.
    50      string media_type = 4;
    51      // The URI used for a preview of the attachment (when relelvant).
    52      string thumbnail_uri = 5;
    53      // The URI used to view the content of the attachment.
    54      string view_uri = 6;
    55      // The URI used to download the content of the attachment.
    56      string download_uri = 7;
    57    }
    58  
    59    // This message is only suitable for displaying the amendment to users.
    60    // We don't currently offer structured amendments that client code can
    61    // reason about, field names can be ambiguous, and we don't have
    62    // old_value for most changes.
    63    // Next available tag: 4
    64    message Amendment {
    65      // This may be the name of a built-in or custom field, or relative to
    66      // an approval field name.
    67      string field_name = 1;
    68      // This may be a new value that overwrote the old value, e.g., "Assigned",
    69      // or it may be a space-separated list of changes, e.g., "Size-L -Size-S".
    70      string new_or_delta_value = 2;
    71      // old_value is only used when the user changes the summary.
    72      string old_value = 3;
    73    }
    74  
    75    option (google.api.resource) = {
    76      type: "api.crbug.com/Comment"
    77      pattern: "projects/{project}/issues/{issue}/comments/{comment}"
    78    };
    79  
    80    // Resource name of the comment.
    81    string name = 1;
    82    // The state of the comment.
    83    IssueContentState state = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
    84    // The type of comment.
    85    Type type = 3;
    86    // The text of the comment.
    87    string content = 4;
    88    // Resource name of the author of the comment.
    89    string commenter = 5 [
    90      (google.api.resource_reference) = { type: "api.crbug.com/User" },
    91      (google.api.field_behavior) = OUTPUT_ONLY
    92    ];
    93    // The time this comment was added to the Issue.
    94    google.protobuf.Timestamp create_time = 6
    95        [(google.api.field_behavior) = OUTPUT_ONLY];
    96    // Optional string full text of an email that caused this comment to be added.
    97    string inbound_message = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
    98    // The approval this comment is associated with, if applicable.
    99    string approval = 8
   100        [(google.api.resource_reference) = { type: "api.crbug.com/ApprovalValue" }];
   101    // Any changes made to the issue in association with this comment.
   102    repeated Amendment amendments = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
   103    // Any attachments uploaded in association with this comment.
   104    repeated Attachment attachments = 10
   105        [(google.api.field_behavior) = OUTPUT_ONLY];
   106  }
   107  
   108  
   109  // Many values on an issue can be set either explicitly or by a rule.
   110  //
   111  // Note: Though Derivations are used as OUTPUT_ONLY, values including them
   112  // will still be ingested even though the Derivation is ignored.
   113  //
   114  // Next available tag: 3
   115  enum Derivation {
   116    // The default derivation. This value is used if the derivation is omitted.
   117    DERIVATION_UNSPECIFIED = 0;
   118    // The value was explicitly set on the issue.
   119    EXPLICIT = 1;
   120    // Value was auto-applied to the issue based on a project's rule. See
   121    // monorail/doc/userguide/project-owners.md#how-to-configure-filter-rules
   122    RULE = 2;
   123  }
   124  
   125  
   126  // A value of a custom field for an issue.
   127  // Next available tag: 5
   128  message FieldValue {
   129    // The project-defined field associated with this value
   130    string field = 1 [
   131        (google.api.resource_reference) = { type: "api.crbug.com/FieldDef" }];
   132    // The value associated with the field.
   133    // Mapping of field types to string value:
   134    // ENUM_TYPE(int) => str(value)
   135    // INT_TYPE(int) => str(value)
   136    // STR_TYPE(str) => value
   137    // USER_TYPE(int) => the user's resource name
   138    // DATE_TYPE(int) => str(int) representing time in seconds since epoch
   139    // URL_TYPE(str) => value
   140    string value = 2;
   141    // How the value was derived.
   142    Derivation derivation = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
   143    // Issues with phase-specific fields can have values for each phase.
   144    string phase = 4;
   145  }
   146  
   147  // Documents and tracks a bug, task, or feature request within a Project.
   148  // Next available tag: 24
   149  message Issue {
   150    option (google.api.resource) = {
   151      type: "api.crbug.com/Issue"
   152      pattern: "projects/{project}/issues/{issue}"
   153    };
   154  
   155    // A possibly rule-derived component for the issue.
   156    // Next available tag: 3
   157    message ComponentValue {
   158      // AIP resource name of the component.
   159      string component = 1 [
   160        (google.api.resource_reference) = { type: "api.crbug.com/ComponentDef" }
   161      ];
   162      // How the component was derived.
   163      Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
   164    }
   165  
   166    // A possibly rule-derived label for an issue.
   167    // Next available tag: 3
   168    message LabelValue {
   169      // The label.
   170      string label = 1;
   171      // How the label was derived.
   172      Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
   173    }
   174  
   175    // A possibly rule-derived status for an issue.
   176    // Next available tag: 3
   177    message StatusValue {
   178      // The status of the issue. Note that in rare cases this can be a
   179      // value not defined in the project's StatusDefs (e.g. if the issue
   180      // was moved from another project).
   181      string status = 1;
   182      // How the status was derived.
   183      Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
   184    }
   185  
   186    // A possibly rule-derived user value on an issue.
   187    // Next available tag: 3
   188    message UserValue {
   189      // The user.
   190      string user = 1
   191          [(google.api.resource_reference) = { type: "api.crbug.com/User" }];
   192      // How the user value was derived.
   193      Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
   194    }
   195  
   196    // Resource name of the issue.
   197    string name = 1;
   198    // A brief summary of the issue. Generally displayed as a user-facing title.
   199    // TODO(monorail:6988): The UI limits summary length while the backend does
   200    // not. Resolve this discrepancy.
   201    string summary = 2;
   202    // The state of the issue.
   203    IssueContentState state = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
   204    // The current status of the issue.
   205    StatusValue status = 4 [(google.api.field_behavior) = REQUIRED];
   206    // The user who created the issue.
   207    string reporter = 5 [
   208      (google.api.resource_reference) = { type: "api.crbug.com/User" },
   209      (google.api.field_behavior) = OUTPUT_ONLY
   210    ];
   211    // The user currently responsible for the issue. This user must be a member of
   212    // the Project.
   213    UserValue owner = 6;
   214    // Additional users receiving notifications on the issue.
   215    repeated UserValue cc_users = 7;
   216    // Labels applied to the issue.
   217    repeated LabelValue labels = 8;
   218    // Components the issue is associated with.
   219    repeated ComponentValue components = 9;
   220    // Values for custom fields on the issue.
   221    repeated FieldValue field_values = 10;
   222    // An issue can be merged into another. If this value is set, the issue
   223    // referred to should be considered the primary source for further updates.
   224    IssueRef merged_into_issue_ref = 11;
   225    // Issues preventing the completion of this issue.
   226    repeated IssueRef blocked_on_issue_refs = 12;
   227    // Issues for which this issue is blocking completion.
   228    repeated IssueRef blocking_issue_refs = 13;
   229    // The time the issue was reported.
   230    google.protobuf.Timestamp create_time = 14
   231        [(google.api.field_behavior) = OUTPUT_ONLY];
   232    // The most recent time the issue was closed.
   233    google.protobuf.Timestamp close_time = 15
   234        [(google.api.field_behavior) = OUTPUT_ONLY];
   235    // The most recent time the issue was modified.
   236    google.protobuf.Timestamp modify_time = 16
   237        [(google.api.field_behavior) = OUTPUT_ONLY];
   238    // The most recent time a component value was modified.
   239    google.protobuf.Timestamp component_modify_time = 17
   240        [(google.api.field_behavior) = OUTPUT_ONLY];
   241    // The most recent time the status value was modified.
   242    google.protobuf.Timestamp status_modify_time = 18
   243        [(google.api.field_behavior) = OUTPUT_ONLY];
   244    // The most recent time the owner made a modification to the issue.
   245    google.protobuf.Timestamp owner_modify_time = 19
   246        [(google.api.field_behavior) = OUTPUT_ONLY];
   247    // The number of attachments associated with the issue.
   248    uint32 attachment_count = 20 [(google.api.field_behavior) = OUTPUT_ONLY];
   249    // The number of users who have starred the issue.
   250    uint32 star_count = 21 [(google.api.field_behavior) = OUTPUT_ONLY];
   251    // Phases of a process the issue is tracking (if applicable).
   252    // See monorail/doc/userguide/concepts.md#issue-approvals-and-gates
   253    repeated string phases = 22 [
   254        (google.api.field_behavior) = OUTPUT_ONLY];
   255    // The issue tracker ID this Monorail issue migrated to.
   256    string migrated_id = 23;
   257  }
   258  
   259  // States that an issue or its comments can be in (aip.dev/216).
   260  // Next available tag: 4
   261  enum IssueContentState {
   262    // The default value. This value is used if the state is omitted.
   263    STATE_UNSPECIFIED = 0;
   264    // The Issue or Comment is available.
   265    ACTIVE = 1;
   266    // The Issue or Comment has been deleted.
   267    DELETED = 2;
   268    // The Issue or Comment has been flagged as spam.
   269    // Takes precedent over DELETED.
   270    SPAM = 3;
   271  }
   272  
   273  // Specifies a column in an issues list view.
   274  // Next available tag: 2
   275  message IssuesListColumn {
   276    // Column name shown in the column header.
   277    string column = 1;
   278  }
   279  
   280  // Refers to an issue that may or may not be tracked in Monorail.
   281  // At least one of `issue` and `ext_identifier` MUST be set; they MUST NOT both
   282  // be set.
   283  // Next available tag: 3
   284  message IssueRef {
   285    // Resource name of an issue tracked in Monorail
   286    string issue = 1
   287        [(google.api.resource_reference) = { type: "api.crbug.com/Issue" }];
   288    // For referencing external issues, e.g. b/1234, or a dangling reference
   289    // to an old 'codesite' issue.
   290    // TODO(monorail:7208): add more documentation on dangling references.
   291    string ext_identifier = 2;
   292  }
   293  
   294  // Documents and tracks an approval process.
   295  // See monorail/doc/userguide/concepts.md#issue-approvals-and-gates
   296  // Next available tag: 9
   297  message ApprovalValue {
   298    option (google.api.resource) = {
   299       type: "api.crbug.com/ApprovalValue"
   300       pattern: "projects/{project}/issues/{issue}/approvalValues/{approval}"
   301     };
   302  
   303    // Potential states for an approval. Note that these statuses cause different
   304    // sets of notifications. See monorail/doc/userguide/email.md
   305    // Next available tag: 9
   306    enum ApprovalStatus {
   307      // The default approval status. This value is used if the status is omitted.
   308      APPROVAL_STATUS_UNSPECIFIED = 0;
   309      // No status has yet been set on this value.
   310      NOT_SET = 1;
   311      // This issue needs review from the approvers for this phase.
   312      NEEDS_REVIEW = 2;
   313      // This approval is not needed for this issue for this phase.
   314      NA = 3;
   315      // The issue is ready for the approvers to review.
   316      REVIEW_REQUESTED = 4;
   317      // The approvers have started reviewing this issue.
   318      REVIEW_STARTED = 5;
   319      // The approvers need more information.
   320      NEED_INFO = 6;
   321      // The approvers have approved this issue for this phase.
   322      APPROVED = 7;
   323      // The approvers have indicated this issue is not approved for this phase.
   324      NOT_APPROVED = 8;
   325    }
   326  
   327    // The resource name.
   328    string name = 1;
   329    // The resource name of the ApprovalDef.
   330    string approval_def = 2 [
   331        (google.api.resource_reference) = { type: "api.crbug.com/ApprovalDef" },
   332        (google.api.field_behavior) = OUTPUT_ONLY];
   333    // The users able to grant this approval.
   334    repeated string approvers = 3 [
   335        (google.api.resource_reference) = { type: "api.crbug.com/User" }];
   336    // The current status of the approval.
   337    ApprovalStatus status = 4;
   338    // The time `status` was last set.
   339    google.protobuf.Timestamp set_time = 5 [
   340        (google.api.field_behavior) = OUTPUT_ONLY];
   341    // The user who most recently set `status`.
   342    string setter = 6 [
   343        (google.api.resource_reference) = { type: "api.crbug.com/User" },
   344        (google.api.field_behavior) = OUTPUT_ONLY];
   345    // The phase the approval is associated with (if applicable).
   346    string phase = 7 [
   347        (google.api.field_behavior) = OUTPUT_ONLY];
   348    // FieldValues with `approval_def` as their parent.
   349    repeated FieldValue field_values = 8;
   350  }