// Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // https://developers.google.com/protocol-buffers/docs/proto3 syntax = "proto3"; import "github.com/golang/protobuf/ptypes/timestamp/timestamp.proto"; package maintpb; message Mutation { GithubIssueMutation github_issue = 1; // issue-specific changes GithubMutation github = 3; // labels, milestones (not issue-specific) GitMutation git = 2; GerritMutation gerrit = 4; } message GithubMutation { string owner = 1; // "golang" string repo = 2; // "go" // Updated labels. (All must have id set at least) repeated GithubLabel labels = 3; // Updated milestones. (All must have id set at least) repeated GithubMilestone milestones = 4; } message GithubIssueMutation { string owner = 1; // "golang" string repo = 2; // "go" int32 number = 3; // 1, 2, 3... (not the ID) // not_exist is set true if the issue has been found to not exist. // If true, the owner/repo/number fields above must still be set. // If a future issue mutation for the same number arrives without // not_exist set, then the issue comes back to life. bool not_exist = 13; int64 id = 12; // unique across all repos GithubUser user = 4; // only set for new/updated issues, not new comments repeated GithubUser assignees = 10; // who the issue is assigned to repeated int64 deleted_assignees = 11; // IDs of users to delete from the assignee list google.protobuf.Timestamp created = 5; // only needed on new issues google.protobuf.Timestamp updated = 6; // only set on updated issue text string body = 7; // for new or updated issue text (top post, which isn't a comment) string title = 9; // issue title bool no_milestone = 15; // true unsets any previously-set milestone; false ignored. // When setting a milestone, only the milestone_id must be set. // TODO: allow num or title to be used if Github only returns those? So far unneeded. // The num and title, if non-zero, are treated as if they were a GithubMutation.Milestone update. int64 milestone_id = 16; // sets milestone to this milestone id (e.g. 2386495, global?) int64 milestone_num = 17; // sets milestone to this milestone number (e.g. 2, per-repo) string milestone_title = 18; BoolChange closed = 19; BoolChange locked = 25; google.protobuf.Timestamp closed_at = 21; GithubUser closed_by = 22; repeated int64 remove_label = 23; // label IDs to remove repeated GithubLabel add_label = 24; repeated GithubIssueCommentMutation comment = 8; GithubIssueSyncStatus comment_status = 14; repeated GithubIssueEvent event = 26; // new events to add GithubIssueSyncStatus event_status = 27; } // BoolChange represents a change to a boolean value. message BoolChange { bool val = 1; } message GithubLabel { int64 id = 1; string name = 2; } message GithubMilestone { int64 id = 1; // required // Following only need to be non-zero on changes: string title = 2; BoolChange closed = 3; int64 number = 4; } // See https://developer.github.com/v3/activity/events/types/#issuesevent // for some info. message GithubIssueEvent { // Required: int64 id = 1; // event_type can be one of "assigned", "unassigned", "labeled", // "unlabeled", "opened", "edited", "milestoned", "demilestoned", // "closed", "reopened", "referenced", "renamed" or anything else // that Github adds in the future. string event_type = 2; int64 actor_id = 3; google.protobuf.Timestamp created = 4; // time of the event // label is populated for "labeled" and "unlabeled" events. // The label will usually not have an ID, due to Github's API // not returning one. GithubLabel label = 5; // milestone is populated for "milestoned" and "demilestoned" events. // The label will usually not have an ID, due to Github's API // not returning one. GithubMilestone milestone = 6; // For "assigned", "unassigned": int64 assignee_id = 7; // always same as actor_id it seems? Github API doesn't say. int64 assigner_id = 8; // For "referenced", "closed": GithubCommit commit = 9; // For "renamed" events: string rename_from = 11; string rename_to = 12; // other_json is usually empty. If Github adds event types or fields // in the future, this captures those added fields. If non-empty it // will be a JSON object with the fields that weren't understood. bytes other_json = 10; } message GithubCommit { string owner = 1; // "golang" string repo = 2; // "go" string commit_id = 3; // "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33" } // GithubIssueSyncStatus notes where syncing is at for comments // on an issue, // This mutation type is only made at/after the same top-level mutation // which created the corresponding comments. message GithubIssueSyncStatus { // server_date is the "Date" response header from Github for the // final HTTP response. google.protobuf.Timestamp server_date = 1; } message GithubIssueCommentMutation { int64 id = 1; GithubUser user = 2; // not present in edits later string body = 3; // may not be present in edits later (if only reactions changed? TODO: investigate) google.protobuf.Timestamp created = 4; // not present in edits later google.protobuf.Timestamp updated = 5; } message GithubUser { int64 id = 1; string login = 2; } message GitMutation { GitRepo repo = 1; // commit adds a commit, or adds new information to a commit if fields // are added in the future. GitCommit commit = 2; } // GitRepo identifies a git repo being mutated. message GitRepo { // If go_repo is set, it identifies a go.googlesource.com/ repo. string go_repo = 1; // TODO: code.googlesource.com and github repos later. } message GitCommit { string sha1 = 1; // the full lowercase 40-hex-byte sha1 sum // raw is the "git cat-file commit $sha1" output. bytes raw = 2; GitDiffTree diff_tree = 3; } // git diff-tree --numstat oldtree newtree message GitDiffTree { repeated GitDiffTreeFile file = 1; } // GitDiffTreeFile represents one line of `git diff-tree --numstat` output. message GitDiffTreeFile { string file = 1; int64 added = 2; int64 deleted = 3; bool binary = 4; } message GerritMutation { // Project is the Gerrit server and project, without scheme (https implied) or // trailing slash. string project = 1; // "go.googlesource.com/go", "go.googlesource.com/net", etc // Commits to add. repeated GitCommit commits = 2; // git refs to update. repeated GitRef refs = 3; } message GitRef { // ref is the git ref name, such as: // HEAD // refs/heads/master // refs/changes/00/14700/1 // refs/changes/00/14700/meta // refs/meta/config string ref = 1; // sha1 is the lowercase hex sha1 string sha1 = 2; }