# Autogenerated input type of AcceptTopicSuggestion
input AcceptTopicSuggestionInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the repository.
  repositoryId: ID!

  # The name of the suggested topic.
  name: String!
}

# Autogenerated return type of AcceptTopicSuggestion
type AcceptTopicSuggestionPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The accepted topic.
  topic: Topic!
}

# Represents an object which can take actions on GitHub. Typically a User or Bot.
interface Actor {
  # A URL pointing to the actor's public avatar.
  avatarUrl(
    # The size of the resulting square image.
    size: Int
  ): URI!

  # The username of the actor.
  login: String!

  # The path to this actor.
  path: URI!
}

# Autogenerated input type of AddComment
input AddCommentInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the subject to modify.
  subjectId: ID!

  # The contents of the comment.
  body: String!
}

# Autogenerated return type of AddComment
type AddCommentPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The edge from the subject's comment connection.
  commentEdge: IssueCommentEdge!

  # The subject
  subject: Node!

  # The edge from the subject's timeline connection.
  timelineEdge: IssueTimelineItemEdge!
}

# Autogenerated input type of AddProjectCard
input AddProjectCardInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the ProjectColumn.
  projectColumnId: ID!

  # The content of the card. Must be a member of the ProjectCardItem union
  contentId: ID

  # The note on the card.
  note: String
}

# Autogenerated return type of AddProjectCard
type AddProjectCardPayload {
  # The edge from the ProjectColumn's card connection.
  cardEdge: ProjectCardEdge!

  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The ProjectColumn
  projectColumn: Project!
}

# Autogenerated input type of AddProjectColumn
input AddProjectColumnInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the project.
  projectId: ID!

  # The name of the column.
  name: String!
}

# Autogenerated return type of AddProjectColumn
type AddProjectColumnPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The edge from the project's column connection.
  columnEdge: ProjectColumnEdge!

  # The project
  project: Project!
}

# Autogenerated input type of AddPullRequestReviewComment
input AddPullRequestReviewCommentInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the review to modify.
  pullRequestReviewId: ID!

  # The SHA of the commit to comment on.
  commitOID: GitObjectID

  # The text of the comment.
  body: String!

  # The relative path of the file to comment on.
  path: String

  # The line index in the diff to comment on.
  position: Int

  # The comment id to reply to.
  inReplyTo: ID
}

# Autogenerated return type of AddPullRequestReviewComment
type AddPullRequestReviewCommentPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The newly created comment.
  comment: PullRequestReviewComment!

  # The edge from the review's comment connection.
  commentEdge: PullRequestReviewCommentEdge!
}

# Autogenerated input type of AddPullRequestReview
input AddPullRequestReviewInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the pull request to modify.
  pullRequestId: ID!

  # The contents of the review body comment.
  body: String

  # The event to perform on the pull request review.
  event: PullRequestReviewEvent

  # The review line comments.
  comments: [DraftPullRequestReviewComment]
}

# Autogenerated return type of AddPullRequestReview
type AddPullRequestReviewPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The newly created pull request review.
  pullRequestReview: PullRequestReview!

  # The edge from the pull request's review connection.
  reviewEdge: PullRequestReviewEdge!
}

# Autogenerated input type of AddReaction
input AddReactionInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the subject to modify.
  subjectId: ID!

  # The name of the emoji to react with.
  content: ReactionContent!
}

# Autogenerated return type of AddReaction
type AddReactionPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The reaction object.
  reaction: Reaction!

  # The reactable subject.
  subject: Reactable!
}

# An object that can have users assigned to it.
interface Assignable {
  # A list of Users assigned to this object.
  assignees(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!
}

# Represents an 'assigned' event on any assignable object.
type AssignedEvent implements Node {
  # Identifies the actor who performed the 'assigned' event.
  actor: Actor

  # Identifies the assignable associated with the event.
  assignable: Assignable!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the user who was assigned.
  user: User
}

# Represents a 'base_ref_force_pushed' event on a given pull request.
type BaseRefForcePushedEvent implements Node {
  # Identifies the actor who performed the 'base_ref_force_pushed' event.
  actor: Actor

  # Identifies the after commit SHA for the 'base_ref_force_pushed' event.
  afterCommit: Commit!

  # Identifies the before commit SHA for the 'base_ref_force_pushed' event.
  beforeCommit: Commit!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # PullRequest referenced by event.
  pullRequest: PullRequest!

  # Identifies the fully qualified ref name for the 'base_ref_force_pushed' event.
  ref: Ref
}

# Represents a Git blame.
type Blame {
  # The list of ranges from a Git blame.
  ranges: [BlameRange!]!
}

# Represents a range of information from a Git blame.
type BlameRange {
  # Identifies the recency of the change, from 1 (new) to 10 (old). This is
  # calculated as a 2-quantile and determines the length of distance between the
  # median age of all the changes in the file and the recency of the current
  # range's change.
  age: Int!

  # Identifies the line author
  commit: Commit!

  # The ending line for the range
  endingLine: Int!

  # The starting line for the range
  startingLine: Int!
}

# Represents a Git blob.
type Blob implements Node, GitObject {
  # Byte size of Blob object
  byteSize: Int!
  id: ID!

  # Indicates whether the Blob is binary or text
  isBinary: Boolean!

  # Indicates whether the contents is truncated
  isTruncated: Boolean!

  # The Git object ID
  oid: GitObjectID!

  # The Repository the Git object belongs to
  repository: Repository!

  # UTF8 text data or null if the Blob is binary
  text: String
}

# A special type of user which takes actions on behalf of integrations.
type Bot implements Node, Actor, UniformResourceLocatable {
  # A URL pointing to the integration's public avatar.
  avatarUrl(
    # The size of the resulting square image.
    size: Int
  ): URI!
  id: ID!

  # The username of the actor.
  login: String!

  # The HTTP path for this bot
  path: URI!

  # The HTTP url for this bot
  url: URI!
}

# An object that can be closed
interface Closable {
  # true if the object is `closed` (definition of closed may depend on type)
  closed: Boolean!
}

# Represents a 'closed' event on any `Closable`.
type ClosedEvent implements Node {
  # Identifies the actor who closed the item.
  actor: Actor

  # Object that was closed.
  closable: Closable!

  # Identifies the commit associated with the 'closed' event.
  commit: Commit

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!
}

# The Code of Conduct for a repository
type CodeOfConduct {
  # The body of the CoC
  body: String

  # The key for the CoC
  key: String!

  # The formal name of the CoC
  name: String!

  # The path to the CoC
  url: URI
}

# Represents a comment.
interface Comment {
  # The actor who authored the comment.
  author: Actor

  # The comment body as Markdown.
  body: String!

  # The comment body rendered to HTML.
  bodyHTML: HTML!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # The actor who edited the comment.
  editor: Actor
  id: ID!

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!
}

# The possible errors that will prevent a user from updating a comment.
enum CommentCannotUpdateReason {
  # You must be the author or have write access to this repository to update this comment.
  INSUFFICIENT_ACCESS

  # Unable to create comment because issue is locked.
  LOCKED

  # You must be logged in to update this comment.
  LOGIN_REQUIRED

  # Repository is under maintenance.
  MAINTENANCE

  # At least one email address must be verified to update this comment.
  VERIFIED_EMAIL_REQUIRED
}

# Represents a Git commit.
type Commit implements Node, GitObject {
  # Authorship details of the commit.
  author: GitActor

  # Check if the committer and the author match.
  authoredByCommitter: Boolean!

  # Fetches `git blame` information.
  blame(
    # The file whose Git blame information you want.
    path: String!
  ): Blame!

  # Comments made on the commit.
  comments(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): CommitCommentConnection!

  # The datetime when this commit was committed.
  committedDate: DateTime!

  # Check if commited via GitHub web UI.
  committedViaWeb: Boolean!

  # Committership details of the commit.
  committer: GitActor

  # The linear commit history starting from (and including) this commit, in the same order as `git log`.
  history(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters history to only show commits touching files under this path.
    path: String

    # If non-null, filters history to only show commits with matching authorship.
    author: CommitAuthor

    # Allows specifying a beginning time or date for fetching commits.
    since: GitTimestamp

    # Allows specifying an ending time or date for fetching commits.
    until: GitTimestamp
  ): CommitHistoryConnection!
  id: ID!

  # The Git commit message
  message: String!

  # The Git commit message body
  messageBody: String!

  # The commit message body rendered to HTML.
  messageBodyHTML: HTML!

  # The Git commit message headline
  messageHeadline: String!

  # The commit message headline rendered to HTML.
  messageHeadlineHTML: HTML!

  # The Git object ID
  oid: GitObjectID!

  # The HTTP path for this commit
  path: URI!

  # The Repository this commit belongs to
  repository: Repository!

  # Commit signing information, if present.
  signature: GitSignature

  # Status information for this commit
  status: Status

  # Commit's root Tree
  tree: Tree!

  # The HTTP url for this commit
  url: URI!
}

# Specifies an author for filtering Git commits.
input CommitAuthor {
  # ID of a User to filter by. If non-null, only commits authored by this user
  # will be returned. This field takes precedence over emails.
  id: ID

  # Email addresses to filter by. Commits authored by any of the specified email addresses will be returned.
  emails: [String!]
}

# Represents a comment on a given Commit.
type CommitComment implements Node, Comment, Deletable, Updatable, UpdatableComment, Reactable, RepositoryNode {
  # The actor who authored the comment.
  author: Actor

  # Identifies the comment body.
  body: String!

  # Identifies the comment body rendered to HTML.
  bodyHTML: HTML!

  # Identifies the commit associated with the comment.
  commit: Commit!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The actor who edited the comment.
  editor: Actor
  id: ID!

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # Identifies the file path associated with the comment.
  path: String

  # Identifies the line position associated with the comment.
  position: Int

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # A list of reactions grouped by content left on the subject.
  reactionGroups: [ReactionGroup!]

  # A list of Reactions left on the Issue.
  reactions(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering Reactions by emoji.
    content: ReactionContent

    # Allows specifying the order in which reactions are returned.
    orderBy: ReactionOrder
  ): ReactionConnection!

  # Identifies the repository associated with the comment.
  repository: Repository!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # Check if the current viewer can delete this object.
  viewerCanDelete: Boolean!

  # Can user react to this subject
  viewerCanReact: Boolean!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!

  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!
}

# The connection type for CommitComment.
type CommitCommentConnection {
  # A list of edges.
  edges: [CommitCommentEdge]

  # A list of nodes.
  nodes: [CommitComment]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type CommitCommentEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: CommitComment
}

# An edge in a connection.
type CommitEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Commit
}

# The connection type for Commit.
type CommitHistoryConnection {
  edges: [CommitEdge]

  # A list of nodes.
  nodes: [Commit]

  # Information to aid in pagination.
  pageInfo: PageInfo!
}

# Autogenerated input type of CreateProject
input CreateProjectInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The owner ID to create the project under.
  ownerId: ID!

  # The name of project.
  name: String!

  # The description of project.
  body: String
}

# Autogenerated return type of CreateProject
type CreateProjectPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The new project.
  project: Project!
}

# An ISO-8601 encoded UTC date string.
scalar DateTime

# Autogenerated input type of DeclineTopicSuggestion
input DeclineTopicSuggestionInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the repository.
  repositoryId: ID!

  # The name of the suggested topic.
  name: String!

  # The reason why the suggested topic is declined.
  reason: TopicSuggestionDeclineReason!
}

# Autogenerated return type of DeclineTopicSuggestion
type DeclineTopicSuggestionPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The declined topic.
  topic: Topic!
}

# The possible default permissions for organization-owned repositories.
enum DefaultRepositoryPermissionField {
  # Members have read access to org repos by default
  READ

  # Members have read and write access to org repos by default
  WRITE

  # Members have read, write, and admin access to org repos by default
  ADMIN
}

# Entities that can be deleted.
interface Deletable {
  # Check if the current viewer can delete this object.
  viewerCanDelete: Boolean!
}

# Autogenerated input type of DeleteProjectCard
input DeleteProjectCardInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The id of the card to delete.
  cardId: ID!
}

# Autogenerated return type of DeleteProjectCard
type DeleteProjectCardPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The column the deleted card was in.
  column: ProjectColumn!

  # The deleted card ID.
  deletedCardId: ID!
}

# Autogenerated input type of DeleteProjectColumn
input DeleteProjectColumnInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The id of the column to delete.
  columnId: ID!
}

# Autogenerated return type of DeleteProjectColumn
type DeleteProjectColumnPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The deleted column ID.
  deletedColumnId: ID!

  # The project the deleted column was in.
  project: Project!
}

# Autogenerated input type of DeleteProject
input DeleteProjectInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Project ID to update.
  projectId: ID!
}

# Autogenerated return type of DeleteProject
type DeleteProjectPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The repository or organization the project was removed from.
  owner: ProjectOwner!
}

# Autogenerated input type of DeletePullRequestReview
input DeletePullRequestReviewInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the pull request review to delete.
  pullRequestReviewId: ID!
}

# Autogenerated return type of DeletePullRequestReview
type DeletePullRequestReviewPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The deleted pull request review.
  pullRequestReview: PullRequestReview!
}

# Represents a 'demilestoned' event on a given issue or pull request.
type DemilestonedEvent implements Node {
  # Identifies the actor who performed the 'demilestoned' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the milestone title associated with the 'demilestoned' event.
  milestoneTitle: String!

  # Object referenced by event.
  subject: MilestoneItem!
}

# Represents a 'deployed' event on a given pull request.
type DeployedEvent implements Node {
  # Identifies the actor who performed the 'deployed' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # The deployment associated with the 'deployed' event.
  deployment: Deployment!
  id: ID!

  # PullRequest referenced by event.
  pullRequest: PullRequest!

  # The ref associated with the 'deployed' event.
  ref: Ref
}

# Represents triggered deployment instance.
type Deployment implements Node {
  # Identifies the commit sha of the deployment.
  commit: Commit!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Identifies the actor who triggered the deployment.
  creator: Actor
  id: ID!

  # Identifies the repository associated with the deployment.
  repository: Repository!

  # A list of statuses associated with the deployment.
  statuses(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): DeploymentStatusConnection
}

# The possible deployment states.
enum DeploymentState {
  # The deployment is pending.
  PENDING

  # The deployment was successful.
  SUCCESS

  # The deployment has failed.
  FAILURE

  # The deployment is inactive.
  INACTIVE

  # The deployment experienced an error.
  ERROR
}

# Describes the status of a given deployment attempt.
type DeploymentStatus implements Node {
  # Identifies the actor who triggered the deployment.
  creator: Actor

  # Identifies the deployment associated with status.
  deployment: Deployment!

  # Identifies the description of the deployment.
  description: String

  # Identifies the environment url of the deployment.
  environmentUrl: URI
  id: ID!

  # Identifies the log url of the deployment.
  logUrl: URI

  # Identifies the current state of the deployment.
  state: DeploymentState!
}

# The connection type for DeploymentStatus.
type DeploymentStatusConnection {
  # A list of edges.
  edges: [DeploymentStatusEdge]

  # A list of nodes.
  nodes: [DeploymentStatus]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type DeploymentStatusEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: DeploymentStatus
}

# Ways in which discussion post connections can be ordered.
input DiscussionPostOrder {
  # The field by which to order nodes.
  field: DiscussionPostOrderField!

  # The direction in which to order nodes.
  direction: OrderDirection!
}

# Properties by which discussion post connections can be ordered.
enum DiscussionPostOrderField {
  # Allows chronological ordering of discussion posts.
  CREATED_AT
}

# Autogenerated input type of DismissPullRequestReview
input DismissPullRequestReviewInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the pull request review to modify.
  pullRequestReviewId: ID!

  # The contents of the pull request review dismissal message.
  message: String!
}

# Autogenerated return type of DismissPullRequestReview
type DismissPullRequestReviewPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The dismissed pull request review.
  pullRequestReview: PullRequestReview!
}

# Specifies a review comment to be left with a Pull Request Review.
input DraftPullRequestReviewComment {
  # Path to the file being commented on.
  path: String!

  # Position in the file to leave a comment on.
  position: Int!

  # Body of the comment to leave.
  body: String!
}

# An external identity provisioned by SAML SSO or SCIM.
type ExternalIdentity implements Node {
  # The GUID for this identity
  guid: String!
  id: ID!

  # Organization invitation for this SCIM-provisioned external identity
  organizationInvitation: OrganizationInvitation

  # SAML Identity attributes
  samlIdentity: ExternalIdentitySamlAttributes

  # SCIM Identity attributes
  scimIdentity: ExternalIdentityScimAttributes

  # User linked to this external identity
  user: User
}

# The connection type for ExternalIdentity.
type ExternalIdentityConnection {
  # A list of edges.
  edges: [ExternalIdentityEdge]

  # A list of nodes.
  nodes: [ExternalIdentity]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ExternalIdentityEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: ExternalIdentity
}

# SAML attributes for the External Identity
type ExternalIdentitySamlAttributes {
  # The NameID of the SAML identity
  nameId: String
}

# SCIM attributes for the External Identity
type ExternalIdentityScimAttributes {
  # The userName of the SCIM identity
  username: String
}

# The connection type for User.
type FollowerConnection {
  # A list of edges.
  edges: [UserEdge]

  # A list of nodes.
  nodes: [User]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# The connection type for User.
type FollowingConnection {
  # A list of edges.
  edges: [UserEdge]

  # A list of nodes.
  nodes: [User]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# A Gist.
type Gist implements Node {
  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # The gist description.
  description: String
  id: ID!

  # Whether the gist is public or not.
  isPublic: Boolean!

  # The gist name.
  name: String!

  # The gist owner.
  owner: RepositoryOwner

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")
}

# Represents a comment on an Gist.
type GistComment implements Node, Comment, Deletable, Updatable, UpdatableComment {
  # The actor who authored the comment.
  author: Actor

  # Identifies the comment body.
  body: String!

  # The comment body rendered to HTML.
  bodyHTML: HTML!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # The actor who edited the comment.
  editor: Actor
  id: ID!

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # Check if the current viewer can delete this object.
  viewerCanDelete: Boolean!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!

  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!
}

# The connection type for Gist.
type GistConnection {
  # A list of edges.
  edges: [GistEdge]

  # A list of nodes.
  nodes: [Gist]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type GistEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Gist
}

# The privacy of a Gist
enum GistPrivacy {
  # Public
  PUBLIC

  # Secret
  SECRET

  # Gists that are public and secret
  ALL
}

# Represents an actor in a Git commit (ie. an author or committer).
type GitActor {
  # A URL pointing to the author's public avatar.
  avatarUrl(
    # The size of the resulting square image.
    size: Int
  ): URI!

  # The timestamp of the Git action (authoring or committing).
  date: GitTimestamp

  # The email in the Git commit.
  email: String

  # The name in the Git commit.
  name: String

  # The GitHub user corresponding to the email field. Null if no such user exists.
  user: User
}

# Represents a Git object.
interface GitObject {
  id: ID!

  # The Git object ID
  oid: GitObjectID!

  # The Repository the Git object belongs to
  repository: Repository!
}

# A Git object ID.
scalar GitObjectID

# Information about a signature (GPG or S/MIME) on a Commit or Tag.
interface GitSignature {
  # Email used to sign this object.
  email: String!

  # True if the signature is valid and verified by GitHub.
  isValid: Boolean!

  # Payload for GPG signing object. Raw ODB object without the signature header.
  payload: String!

  # ASCII-armored signature header from object.
  signature: String!

  # GitHub user corresponding to the email signing this commit.
  signer: User

  # The state of this signature. `VALID` if signature is valid and verified by
  # GitHub, otherwise represents reason why signature is considered invalid.
  state: GitSignatureState!
}

# The state of a Git signature.
enum GitSignatureState {
  # Valid signature and verified by GitHub.
  VALID

  # Invalid signature.
  INVALID

  # Malformed signature.
  MALFORMED_SIG

  # Key used for signing not known to GitHub.
  UNKNOWN_KEY

  # Invalid email used for signing.
  BAD_EMAIL

  # Email used for signing unverified on GitHub.
  UNVERIFIED_EMAIL

  # Email used for signing not known to GitHub.
  NO_USER

  # Unknown signature type.
  UNKNOWN_SIG_TYPE

  # Unsigned.
  UNSIGNED

  # Internal error - the GPG verification service is unavailable at the moment.
  GPGVERIFY_UNAVAILABLE

  # Internal error - the GPG verification service misbehaved.
  GPGVERIFY_ERROR

  # The usage flags for the key that signed this don't allow signing.
  NOT_SIGNING_KEY

  # Signing key expired.
  EXPIRED_KEY
}

# An ISO-8601 encoded date string. Unlike the DateTime type, GitTimestamp is not converted in UTC.
scalar GitTimestamp

# Represents a GPG signature on a Commit or Tag.
type GpgSignature implements GitSignature {
  # Email used to sign this object.
  email: String!

  # True if the signature is valid and verified by GitHub.
  isValid: Boolean!

  # Hex-encoded ID of the key that signed this object.
  keyId: String

  # Payload for GPG signing object. Raw ODB object without the signature header.
  payload: String!

  # ASCII-armored signature header from object.
  signature: String!

  # GitHub user corresponding to the email signing this commit.
  signer: User

  # The state of this signature. `VALID` if signature is valid and verified by
  # GitHub, otherwise represents reason why signature is considered invalid.
  state: GitSignatureState!
}

# Represents a 'head_ref_deleted' event on a given pull request.
type HeadRefDeletedEvent implements Node {
  # Identifies the actor who performed the 'head_ref_deleted' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Identifies the Ref associated with the `head_ref_deleted` event.
  headRef: Ref

  # Identifies the name of the Ref associated with the `head_ref_deleted` event.
  headRefName: String!
  id: ID!

  # PullRequest referenced by event.
  pullRequest: PullRequest!
}

# Represents a 'head_ref_force_pushed' event on a given pull request.
type HeadRefForcePushedEvent implements Node {
  # Identifies the actor who performed the 'head_ref_force_pushed' event.
  actor: Actor

  # Identifies the after commit SHA for the 'head_ref_force_pushed' event.
  afterCommit: Commit!

  # Identifies the before commit SHA for the 'head_ref_force_pushed' event.
  beforeCommit: Commit!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # PullRequest referenced by event.
  pullRequest: PullRequest!

  # Identifies the fully qualified ref name for the 'head_ref_force_pushed' event.
  ref: Ref
}

# Represents a 'head_ref_restored' event on a given pull request.
type HeadRefRestoredEvent implements Node {
  # Identifies the actor who performed the 'head_ref_restored' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # PullRequest referenced by event.
  pullRequest: PullRequest!
}

# A string containing HTML code.
scalar HTML

# Represents an integration with GitHub.
type Integration implements Node {
  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")
  id: ID!

  # A URL pointing to the integration's logo.
  logoUrl(
    # The size of the resulting image.
    size: Int
  ): URI!

  # The name of the integration.
  name: String!

  # The owner of this integration.
  owner: User!

  # A slug based on the name of the integration for use in URLs.
  slug: String!

  # The URL to the integration's homepage.
  url: URI!
}

# The connection type for Integration.
type IntegrationConnection {
  # A list of edges.
  edges: [IntegrationEdge]

  # A list of nodes.
  nodes: [Integration]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type IntegrationEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Integration
}

# An Issue is a place to discuss ideas, enhancements, tasks, and bugs for a project.
type Issue implements Node, Assignable, Closable, Comment, Updatable, UpdatableComment, Labelable, Lockable, Reactable, RepositoryNode, Subscribable, UniformResourceLocatable {
  # A list of Users assigned to this object.
  assignees(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!

  # The actor who authored the comment.
  author: Actor

  # Identifies the body of the issue.
  body: String!

  # Identifies the body of the issue rendered to HTML.
  bodyHTML: HTML!

  # Identifies the body of the issue rendered to text.
  bodyText: String!

  # true if the object is `closed` (definition of closed may depend on type)
  closed: Boolean!

  # A list of comments associated with the Issue.
  comments(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): IssueCommentConnection!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The actor who edited the comment.
  editor: Actor
  id: ID!

  # A list of labels associated with the object.
  labels(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): LabelConnection

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # `true` if the object is locked
  locked: Boolean!

  # Identifies the milestone associated with the issue.
  milestone: Milestone

  # Identifies the issue number.
  number: Int!

  # A list of Users that are participating in the Issue conversation.
  participants(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!

  # The HTTP path for this issue
  path: URI!

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # A list of reactions grouped by content left on the subject.
  reactionGroups: [ReactionGroup!]

  # A list of Reactions left on the Issue.
  reactions(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering Reactions by emoji.
    content: ReactionContent

    # Allows specifying the order in which reactions are returned.
    orderBy: ReactionOrder
  ): ReactionConnection!

  # Identifies the repository associated with the issue.
  repository: Repository!

  # Identifies the state of the issue.
  state: IssueState!

  # A list of events associated with an Issue.
  timeline(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering timeline events by a `since` timestamp.
    since: DateTime
  ): IssueTimelineConnection!

  # Identifies the issue title.
  title: String!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP url for this issue
  url: URI!

  # The integration the issue was authored via.
  viaIntegration: Integration

  # Can user react to this subject
  viewerCanReact: Boolean!

  # Check if the viewer is able to change their subscription status for the repository.
  viewerCanSubscribe: Boolean!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!

  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!

  # Identifies if the viewer is watching, not watching, or ignoring the repository.
  viewerSubscription: SubscriptionState!
}

# Represents a comment on an Issue.
type IssueComment implements Node, Comment, Deletable, Updatable, UpdatableComment, Reactable, RepositoryNode {
  # The actor who authored the comment.
  author: Actor

  # Identifies the comment body.
  body: String!

  # The comment body rendered to HTML.
  bodyHTML: HTML!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The actor who edited the comment.
  editor: Actor
  id: ID!

  # Identifies the issue associated with the comment.
  issue: Issue!

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # A list of reactions grouped by content left on the subject.
  reactionGroups: [ReactionGroup!]

  # A list of Reactions left on the Issue.
  reactions(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering Reactions by emoji.
    content: ReactionContent

    # Allows specifying the order in which reactions are returned.
    orderBy: ReactionOrder
  ): ReactionConnection!

  # The repository associated with this node.
  repository: Repository!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The integration this comment was authored via.
  viaIntegration: Integration

  # Check if the current viewer can delete this object.
  viewerCanDelete: Boolean!

  # Can user react to this subject
  viewerCanReact: Boolean!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!

  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!
}

# The connection type for IssueComment.
type IssueCommentConnection {
  # A list of edges.
  edges: [IssueCommentEdge]

  # A list of nodes.
  nodes: [IssueComment]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type IssueCommentEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: IssueComment
}

# The connection type for Issue.
type IssueConnection {
  # A list of edges.
  edges: [IssueEdge]

  # A list of nodes.
  nodes: [Issue]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type IssueEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Issue
}

# Used for return value of Repository.issueOrPullRequest.
union IssueOrPullRequest = Issue | PullRequest

# The possible PubSub channels for an issue.
enum IssuePubSubTopic {
  # The channel ID for observing issue updates.
  UPDATED

  # The channel ID for marking an issue as read.
  MARKASREAD
}

# The possible states of an issue.
enum IssueState {
  # An issue that is still open
  OPEN

  # An issue that has been closed
  CLOSED
}

# The connection type for IssueTimelineItem.
type IssueTimelineConnection {
  # A list of edges.
  edges: [IssueTimelineItemEdge]

  # A list of nodes.
  nodes: [IssueTimelineItem]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An item in an issue timeline
union IssueTimelineItem = Commit | IssueComment | ClosedEvent | ReopenedEvent | SubscribedEvent | UnsubscribedEvent | ReferencedEvent | AssignedEvent | UnassignedEvent | LabeledEvent | UnlabeledEvent | MilestonedEvent | DemilestonedEvent | RenamedTitleEvent | LockedEvent | UnlockedEvent

# An edge in a connection.
type IssueTimelineItemEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: IssueTimelineItem
}

# A label for categorizing Issues or Milestones with a given Repository.
type Label implements Node {
  # Identifies the label color.
  color: String!
  id: ID!

  # A list of issues associated with this label.
  issues(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A list of states to filter the issues by.
    states: [IssueState]
  ): IssueConnection!

  # Identifies the label name.
  name: String!

  # A list of pull requests associated with this label.
  pullRequests(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): PullRequestConnection

  # The repository associated with this label.
  repository: Repository!
}

# An object that can have labels assigned to it.
interface Labelable {
  # A list of labels associated with the object.
  labels(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): LabelConnection
}

# The connection type for Label.
type LabelConnection {
  # A list of edges.
  edges: [LabelEdge]

  # A list of nodes.
  nodes: [Label]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# Represents a 'labeled' event on a given issue or pull request.
type LabeledEvent implements Node {
  # Identifies the actor who performed the 'label' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the label associated with the 'labeled' event.
  label: Label!

  # Identifies the `Labelable` associated with the event.
  labelable: Labelable!
}

# An edge in a connection.
type LabelEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Label
}

# Represents a given language found in repositories.
type Language implements Node {
  # The color defined for the current language.
  color: String
  id: ID!

  # The name of the current language.
  name: String!
}

# A list of languages associated with the parent.
type LanguageConnection {
  # A list of edges.
  edges: [LanguageEdge]

  # A list of nodes.
  nodes: [Language]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!

  # The total size in bytes of files written in that language.
  totalSize: Int!
}

# Represents the language of a repository.
type LanguageEdge {
  cursor: String!
  node: Language!

  # The number of bytes of code written in the language.
  size: Int!
}

# Ordering options for language connections.
input LanguageOrder {
  # The field to order languages by.
  field: LanguageOrderField!

  # The ordering direction.
  direction: OrderDirection!
}

# Properties by which language connections can be ordered.
enum LanguageOrderField {
  # Order languages by the size of all files containing the language
  SIZE
}

# An object that can be locked.
interface Lockable {
  # `true` if the object is locked
  locked: Boolean!
}

# Represents a 'locked' event on a given issue or pull request.
type LockedEvent implements Node {
  # Identifies the actor who performed the 'locked' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Object that was locked.
  lockable: Lockable!
}

# Ways in which member connections can be ordered.
input MemberOrder {
  # The field in which to order nodes by.
  field: UserOrderField!

  # The direction in which to order nodes.
  direction: OrderDirection!
}

# Whether or not a PullRequest can be merged.
enum MergeableState {
  # The pull request can be merged.
  MERGEABLE

  # The pull request cannot be merged due to merge conflicts.
  CONFLICTING

  # The mergeability of the pull request is still being calculated.
  UNKNOWN
}

# Represents a 'merged' event on a given pull request.
type MergedEvent implements Node {
  # Identifies the actor who performed the 'merge' event.
  actor: Actor

  # Identifies the commit associated with the `merge` event.
  commit: Commit!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the Ref associated with the `merge` event.
  mergeRef: Ref

  # Identifies the name of the Ref associated with the `merge` event.
  mergeRefName: String!

  # PullRequest referenced by event.
  pullRequest: PullRequest!
}

# Represents a Milestone object on a given repository.
type Milestone implements Node {
  # Identifies the actor who created the milestone.
  creator: Actor

  # Identifies the description of the milestone.
  description: String

  # Identifies the due date of the milestone.
  dueOn: DateTime
  id: ID!

  # Identifies the number of the milestone.
  number: Int!

  # The HTTP path for this milestone
  path: URI!

  # The repository associated with this milestone.
  repository: Repository!

  # Identifies the state of the milestone.
  state: MilestoneState!

  # Identifies the title of the milestone.
  title: String!

  # The HTTP url for this milestone
  url: URI!
}

# The connection type for Milestone.
type MilestoneConnection {
  # A list of edges.
  edges: [MilestoneEdge]

  # A list of nodes.
  nodes: [Milestone]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# Represents a 'milestoned' event on a given issue or pull request.
type MilestonedEvent implements Node {
  # Identifies the actor who performed the 'milestoned' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the milestone title associated with the 'milestoned' event.
  milestoneTitle: String!

  # Object referenced by event.
  subject: MilestoneItem!
}

# An edge in a connection.
type MilestoneEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Milestone
}

# Types that can be inside a Milestone.
union MilestoneItem = Issue | PullRequest

# The possible states of a milestone.
enum MilestoneState {
  # A milestone that is still open.
  OPEN

  # A milestone that has been closed.
  CLOSED
}

# Autogenerated input type of MoveProjectCard
input MoveProjectCardInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The id of the card to move.
  cardId: ID!

  # The id of the column to move it into.
  columnId: ID!

  # Place the new card after the card with this id. Pass null to place it at the top.
  afterCardId: ID
}

# Autogenerated return type of MoveProjectCard
type MoveProjectCardPayload {
  # The new edge of the moved card.
  cardEdge: ProjectCardEdge!

  # A unique identifier for the client performing the mutation.
  clientMutationId: String
}

# Autogenerated input type of MoveProjectColumn
input MoveProjectColumnInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The id of the column to move.
  columnId: ID!

  # Place the new column after the column with this id. Pass null to place it at the front.
  afterColumnId: ID
}

# Autogenerated return type of MoveProjectColumn
type MoveProjectColumnPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The new edge of the moved column.
  columnEdge: ProjectColumnEdge!
}

# The root query for implementing GraphQL mutations.
type Mutation {
  # Applies a suggested topic to the repository.
  acceptTopicSuggestion(input: AcceptTopicSuggestionInput!): AcceptTopicSuggestionPayload

  # Adds a comment to an Issue or Pull Request.
  addComment(input: AddCommentInput!): AddCommentPayload

  # Adds a card to a ProjectColumn. Either `contentId` or `note` must be provided but **not** both.
  addProjectCard(input: AddProjectCardInput!): AddProjectCardPayload

  # Adds a column to a Project.
  addProjectColumn(input: AddProjectColumnInput!): AddProjectColumnPayload

  # Adds a review to a Pull Request.
  addPullRequestReview(input: AddPullRequestReviewInput!): AddPullRequestReviewPayload

  # Adds a comment to a review.
  addPullRequestReviewComment(input: AddPullRequestReviewCommentInput!): AddPullRequestReviewCommentPayload

  # Adds a reaction to a subject.
  addReaction(input: AddReactionInput!): AddReactionPayload

  # Creates a new project.
  createProject(input: CreateProjectInput!): CreateProjectPayload

  # Rejects a suggested topic for the repository.
  declineTopicSuggestion(input: DeclineTopicSuggestionInput!): DeclineTopicSuggestionPayload

  # Deletes a project.
  deleteProject(input: DeleteProjectInput!): DeleteProjectPayload

  # Deletes a project card.
  deleteProjectCard(input: DeleteProjectCardInput!): DeleteProjectCardPayload

  # Deletes a project column.
  deleteProjectColumn(input: DeleteProjectColumnInput!): DeleteProjectColumnPayload

  # Deletes a pull request review.
  deletePullRequestReview(input: DeletePullRequestReviewInput!): DeletePullRequestReviewPayload

  # Dismisses an approved or rejected pull request review.
  dismissPullRequestReview(input: DismissPullRequestReviewInput!): DismissPullRequestReviewPayload

  # Moves a project card to another place.
  moveProjectCard(input: MoveProjectCardInput!): MoveProjectCardPayload

  # Moves a project column to another place.
  moveProjectColumn(input: MoveProjectColumnInput!): MoveProjectColumnPayload

  # Removes outside collaborator from all repositories in an organization.
  removeOutsideCollaborator(input: RemoveOutsideCollaboratorInput!): RemoveOutsideCollaboratorPayload

  # Removes a reaction from a subject.
  removeReaction(input: RemoveReactionInput!): RemoveReactionPayload

  # Set review requests on a pull request.
  requestReviews(input: RequestReviewsInput!): RequestReviewsPayload

  # Submits a pending pull request review.
  submitPullRequestReview(input: SubmitPullRequestReviewInput!): SubmitPullRequestReviewPayload

  # Updates an existing project.
  updateProject(input: UpdateProjectInput!): UpdateProjectPayload

  # Updates an existing project card.
  updateProjectCard(input: UpdateProjectCardInput!): UpdateProjectCardPayload

  # Updates an existing project column.
  updateProjectColumn(input: UpdateProjectColumnInput!): UpdateProjectColumnPayload

  # Updates the body of a pull request review.
  updatePullRequestReview(input: UpdatePullRequestReviewInput!): UpdatePullRequestReviewPayload

  # Updates a pull request review comment.
  updatePullRequestReviewComment(input: UpdatePullRequestReviewCommentInput!): UpdatePullRequestReviewCommentPayload

  # Updates viewers repository subscription state.
  updateSubscription(input: UpdateSubscriptionInput!): UpdateSubscriptionPayload

  # Replaces the repository's topics with the given topics.
  updateTopics(input: UpdateTopicsInput!): UpdateTopicsPayload
}

# An object with an ID.
interface Node {
  # ID of the object.
  id: ID!
}

# Possible directions in which to order a list of items when provided an `orderBy` argument.
enum OrderDirection {
  # Specifies an ascending order for a given `orderBy` argument.
  ASC

  # Specifies a descending order for a given `orderBy` argument.
  DESC
}

# An account on GitHub, with one or more owners, that has repositories, members and teams.
type Organization implements Node, ProjectOwner, RepositoryOwner, UniformResourceLocatable {
  # A URL pointing to the organization's public avatar.
  avatarUrl(
    # The size of the resulting square image.
    size: Int
  ): URI!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # Find gist by repo name.
  gist(
    # The gist name to find.
    name: String!
  ): Gist
  id: ID!

  # The organization's login name.
  login: String!

  # A list of users who are members of this organization.
  members(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!

  # The organization's public profile name.
  name: String!

  # The HTTP path creating a new team
  newTeamPath: URI!

  # The HTTP url creating a new team
  newTeamUrl: URI!

  # The HTTP path for this user
  path: URI!

  # Find project by number.
  project(
    # The project number to find.
    number: Int!
  ): Project

  # A list of projects under the owner.
  projects(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Ordering options for projects returned from the connection
    orderBy: ProjectOrder

    # Query to search projects by, currently only searching by name.
    search: String

    # A list of states to filter the projects by.
    states: [ProjectState!]
  ): ProjectConnection!

  # The HTTP path listing organization's projects
  projectsPath: URI!

  # The HTTP url listing organization's projects
  projectsUrl: URI!

  # A list of repositories that the user owns.
  repositories(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters repositories according to privacy
    privacy: RepositoryPrivacy

    # Ordering options for repositories returned from the connection
    orderBy: RepositoryOrder

    # Affiliation options for repositories returned from the connection
    affiliation: [RepositoryAffiliation]

    # If non-null, filters repositories according to whether they have been locked
    isLocked: Boolean

    # If non-null, filters repositories according to whether they are forks of another repository
    isFork: Boolean
  ): RepositoryConnection!

  # Find Repository.
  repository(
    # Name of Repository to find.
    name: String!
  ): Repository

  # The Organization's SAML Identity Providers
  samlIdentityProvider: OrganizationIdentityProvider

  # Find an organization's team by its slug.
  team(
    # The name or slug of the team to find.
    slug: String
  ): Team

  # A list of teams in this organization.
  teams(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters teams according to privacy
    privacy: TeamPrivacy

    # If non-null, filters teams according to whether the viewer is an admin or member on team
    role: TeamRole

    # If non-null, filters teams with query on team name and team slug
    query: String

    # User logins to filter by
    usersFilter: [String!]

    # Ordering options for teams returned from the connection
    orderBy: TeamOrder

    # If true, filters teams that are mapped to an LDAP Group (Enterprise only)
    ldapMapped: Boolean
  ): TeamConnection!

  # The HTTP path listing organization's teams
  teamsPath: URI!

  # The HTTP path for teams search
  teamsSearchPath: URI!

  # The HTTP url for teams search
  teamsSearchUrl: URI!

  # The HTTP url listing organization's teams
  teamsUrl: URI!

  # The HTTP url for this user
  url: URI!

  # Organization is adminable by the viewer.
  viewerCanAdminister: Boolean!

  # Can the current viewer create new projects on this owner.
  viewerCanCreateProjects: Boolean!

  # Viewer can create repositories on this organization
  viewerCanCreateRepositories: Boolean!

  # Viewer can create teams on this organization.
  viewerCanCreateTeams: Boolean!

  # Viewer is a member of this organization.
  viewerIsAMember: Boolean!
}

# The connection type for Organization.
type OrganizationConnection {
  # A list of edges.
  edges: [OrganizationEdge]

  # A list of nodes.
  nodes: [Organization]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type OrganizationEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Organization
}

# An Identity Provider configured to provision SAML and SCIM identities for Organizations
type OrganizationIdentityProvider implements Node {
  # The digest algorithm used to sign SAML requests for the Identity Provider.
  digestMethod: URI

  # External Identities provisioned by this Identity Provider
  externalIdentities(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ExternalIdentityConnection!
  id: ID!

  # The x509 certificate used by the Identity Provder to sign assertions and responses.
  idpCertificate: X509Certificate

  # The Issuer Entity ID for the SAML Identity Provider
  issuer: String

  # Organization this Identity Provider belongs to
  organization: Organization

  # The signature algorithm used to sign SAML requests for the Identity Provider.
  signatureMethod: URI

  # The URL endpoint for the Identity Provider's SAML SSO.
  ssoUrl: URI
}

# An Invitation for a user to an organization.
type OrganizationInvitation {
  # The email address of the user invited to the organization.
  email: String
  id: ID!

  # The user who was invited to the organization.
  invitee: User

  # The user who created the invitation.
  inviter: User!

  # The user's pending role in the organization (e.g. member, owner).
  role: OrganizationInvitationRole!
}

# The connection type for OrganizationInvitation.
type OrganizationInvitationConnection {
  # A list of edges.
  edges: [OrganizationInvitationEdge]

  # A list of nodes.
  nodes: [OrganizationInvitation]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type OrganizationInvitationEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: OrganizationInvitation
}

# The possible organization invitation roles.
enum OrganizationInvitationRole {
  # The user is invited to be a direct member of the organization.
  DIRECT_MEMBER

  # The user is invited to be an admin of the organization.
  ADMIN

  # The user is invited to be a billing manager of the organization.
  BILLING_MANAGER

  # The user's previous role will be reinstated.
  REINSTATE
}

# Information about pagination in a connection.
type PageInfo {
  # When paginating forwards, the cursor to continue
  endCursor: String

  # Indicates if there are more pages to fetch
  hasNextPage: Boolean!

  # Indicates if there are any pages prior to the current page
  hasPreviousPage: Boolean!

  # When paginating backwards, the cursor to continue
  startCursor: String
}

# Projects manage issues, pull requests and notes within a project owner.
type Project implements Node, Updatable {
  # The project's description body.
  body: String

  # The projects description body rendered to HTML.
  bodyHTML: HTML!

  # Identifities the date and time when the project was closed.
  closedAt: DateTime

  # List of columns in the project
  columns(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ProjectColumnConnection!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # The actor who originally created the project.
  creator: Actor

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")
  id: ID!

  # The project's name.
  name: String!

  # The project's number.
  number: Int!

  # The project's owner. Currently limited to repositories and organizations.
  owner: ProjectOwner!

  # The HTTP path for this project
  path: URI!

  # Whether the project is open or closed.
  state: ProjectState!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP url for this project
  url: URI!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!
}

# A card in a project.
type ProjectCard implements Node {
  # The card content item
  content: ProjectCardItem

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # The actor who created this card
  creator: Actor

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")
  id: ID!

  # The card note
  note: String

  # The column that contains this card.
  projectColumn: ProjectColumn!

  # The state of ProjectCard
  state: ProjectCardState

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")
}

# The connection type for ProjectCard.
type ProjectCardConnection {
  # A list of edges.
  edges: [ProjectCardEdge]

  # A list of nodes.
  nodes: [ProjectCard]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ProjectCardEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: ProjectCard
}

# Types that can be inside Project Cards.
union ProjectCardItem = Issue | PullRequest

# Various content states of a ProjectCard
enum ProjectCardState {
  # The card has content only.
  CONTENT_ONLY

  # The card has a note only.
  NOTE_ONLY

  # The card is redacted.
  REDACTED
}

# A column inside a project.
type ProjectColumn implements Node {
  # List of cards in the column
  cards(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ProjectCardConnection!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")
  id: ID!

  # The project column's name.
  name: String!

  # The project that contains this column.
  project: Project!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")
}

# The connection type for ProjectColumn.
type ProjectColumnConnection {
  # A list of edges.
  edges: [ProjectColumnEdge]

  # A list of nodes.
  nodes: [ProjectColumn]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ProjectColumnEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: ProjectColumn
}

# A list of projects associated with the owner.
type ProjectConnection {
  # A list of edges.
  edges: [ProjectEdge]

  # A list of nodes.
  nodes: [Project]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ProjectEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Project
}

# Ways in which lists of projects can be ordered upon return.
input ProjectOrder {
  # The field in which to order projects by.
  field: ProjectOrderField!

  # The direction in which to order projects by the specified field.
  direction: OrderDirection!
}

# Properties by which project connections can be ordered.
enum ProjectOrderField {
  # Order projects by creation time
  CREATED_AT

  # Order projects by update time
  UPDATED_AT

  # Order projects by name
  NAME
}

# Represents an owner of a Project.
interface ProjectOwner {
  id: ID!

  # Find project by number.
  project(
    # The project number to find.
    number: Int!
  ): Project

  # A list of projects under the owner.
  projects(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Ordering options for projects returned from the connection
    orderBy: ProjectOrder

    # Query to search projects by, currently only searching by name.
    search: String

    # A list of states to filter the projects by.
    states: [ProjectState!]
  ): ProjectConnection!

  # The HTTP path listing owners projects
  projectsPath: URI!

  # The HTTP url listing owners projects
  projectsUrl: URI!

  # Can the current viewer create new projects on this owner.
  viewerCanCreateProjects: Boolean!
}

# State of the project; either 'open' or 'closed'
enum ProjectState {
  # The project is open.
  OPEN

  # The project is closed.
  CLOSED
}

# A repository protected branch.
type ProtectedBranch implements Node {
  # The actor who created this protected branch.
  creator: Actor

  # Will new commits pushed to this branch dismiss pull request review approvals.
  hasDismissableStaleReviews: Boolean!

  # Are reviews required to update this branch.
  hasRequiredReviews: Boolean!

  # Are status checks required to update this branch.
  hasRequiredStatusChecks: Boolean!

  # Is pushing to this branch restricted.
  hasRestrictedPushes: Boolean!

  # Is dismissal of pull request reviews restricted.
  hasRestrictedReviewDismissals: Boolean!

  # Are branches required to be up to date before merging.
  hasStrictRequiredStatusChecks: Boolean!
  id: ID!

  # Can admins overwrite branch protection.
  isAdminEnforced: Boolean!

  # Identifies the name of the protected branch.
  name: String!

  # A list push allowances for this protected branch.
  pushAllowances(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): PushAllowanceConnection!

  # The repository associated with this protected branch.
  repository: Repository!

  # List of required status check contexts that must pass for commits to be accepted to this branch.
  requiredStatusCheckContexts: [String]

  # A list review dismissal allowances for this protected branch.
  reviewDismissalAllowances(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ReviewDismissalAllowanceConnection!
}

# The connection type for ProtectedBranch.
type ProtectedBranchConnection {
  # A list of edges.
  edges: [ProtectedBranchEdge]

  # A list of nodes.
  nodes: [ProtectedBranch]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ProtectedBranchEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: ProtectedBranch
}

# A repository pull request.
type PullRequest implements Node, Assignable, Closable, Comment, Updatable, UpdatableComment, Labelable, Lockable, Reactable, RepositoryNode, Subscribable, UniformResourceLocatable {
  # A list of Users assigned to this object.
  assignees(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!

  # The actor who authored the comment.
  author: Actor

  # Identifies the base Ref associated with the pull request.
  baseRef: Ref

  # Identifies the name of the base Ref associated with the pull request, even if the ref has been deleted.
  baseRefName: String!

  # Identifies the body of the pull request.
  body: String!

  # Identifies the body of the pull request rendered to HTML.
  bodyHTML: HTML!

  # Identifies the body of the pull request rendered to text.
  bodyText: String!

  # true if the object is `closed` (definition of closed may depend on type)
  closed: Boolean!

  # A list of comments associated with the pull request.
  comments(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): IssueCommentConnection!

  # A list of commits present in this pull request's head branch not present in the base branch.
  commits(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): PullRequestCommitConnection!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The actor who edited this pull request's body.
  editor: Actor

  # Identifies the head Ref associated with the pull request.
  headRef: Ref

  # Identifies the name of the head Ref associated with the pull request, even if the ref has been deleted.
  headRefName: String!

  # The repository associated with this pull request's head Ref.
  headRepository: Repository

  # The owner of the repository associated with this pull request's head Ref.
  headRepositoryOwner: RepositoryOwner!
  id: ID!

  # A list of labels associated with the object.
  labels(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): LabelConnection

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # `true` if the object is locked
  locked: Boolean!

  # The commit that was created when this pull request was merged.
  mergeCommit: Commit

  # Whether or not the pull request can be merged based on the existence of merge conflicts.
  mergeable: MergeableState!

  # Whether or not the pull request was merged.
  merged: Boolean!

  # The date and time that the pull request was merged.
  mergedAt: DateTime

  # Identifies the pull request number.
  number: Int!

  # A list of Users that are participating in the Pull Request conversation.
  participants(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!

  # The HTTP path for this issue
  path: URI!

  # The commit that GitHub automatically generated to test if this pull request
  # could be merged. This field will not return a value if the pull request is
  # merged, or if the test merge commit is still being generated. See the
  # `mergeable` field for more details on the mergeability of the pull request.
  potentialMergeCommit: Commit

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # A list of reactions grouped by content left on the subject.
  reactionGroups: [ReactionGroup!]

  # A list of Reactions left on the Issue.
  reactions(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering Reactions by emoji.
    content: ReactionContent

    # Allows specifying the order in which reactions are returned.
    orderBy: ReactionOrder
  ): ReactionConnection!

  # The repository associated with this pull request.
  repository: Repository!

  # A list of review requests associated with the pull request.
  reviewRequests(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ReviewRequestConnection

  # A list of reviews associated with the pull request.
  reviews(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A list of states to filter the reviews.
    states: [PullRequestReviewState!]
  ): PullRequestReviewConnection

  # Identifies the state of the pull request.
  state: PullRequestState!

  # A list of reviewer suggestions based on commit history and past review comments.
  suggestedReviewers: [SuggestedReviewer]!

  # A list of events associated with a PullRequest.
  timeline(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering timeline events by a `since` timestamp.
    since: DateTime
  ): PullRequestTimelineConnection!

  # Identifies the pull request title.
  title: String!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP url for this issue
  url: URI!

  # Can user react to this subject
  viewerCanReact: Boolean!

  # Check if the viewer is able to change their subscription status for the repository.
  viewerCanSubscribe: Boolean!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!

  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!

  # Identifies if the viewer is watching, not watching, or ignoring the repository.
  viewerSubscription: SubscriptionState!
}

# Represents a Git commit part of a pull request.
type PullRequestCommit implements Node, UniformResourceLocatable {
  # The Git commit object
  commit: Commit!
  id: ID!

  # The HTTP path for this pull request commit
  path: URI!

  # The pull request this commit belongs to
  pullRequest: PullRequest!

  # The HTTP url for this pull request commit
  url: URI!
}

# The connection type for PullRequestCommit.
type PullRequestCommitConnection {
  # A list of edges.
  edges: [PullRequestCommitEdge]

  # A list of nodes.
  nodes: [PullRequestCommit]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type PullRequestCommitEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: PullRequestCommit
}

# The connection type for PullRequest.
type PullRequestConnection {
  # A list of edges.
  edges: [PullRequestEdge]

  # A list of nodes.
  nodes: [PullRequest]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type PullRequestEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: PullRequest
}

# The possible PubSub channels for a pull request.
enum PullRequestPubSubTopic {
  # The channel ID for observing pull request updates.
  UPDATED

  # The channel ID for marking an pull request as read.
  MARKASREAD
}

# A review object for a given pull request.
type PullRequestReview implements Node, Comment, Deletable, Updatable, UpdatableComment, RepositoryNode {
  # The actor who authored the comment.
  author: Actor

  # Identifies the pull request review body.
  body: String!

  # The body of this review rendered to HTML.
  bodyHTML: HTML!

  # The body of this review rendered as plain text.
  bodyText: String!

  # A list of review comments for the current pull request review.
  comments(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): PullRequestReviewCommentConnection!

  # Identifies the commit associated with this pull request review.
  commit: Commit

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The actor who edited the comment.
  editor: Actor
  id: ID!

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # The HTTP URL permalink for this PullRequestReview.
  path: URI!

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # Identifies the pull request associated with this pull request review.
  pullRequest: PullRequest!

  # The repository associated with this node.
  repository: Repository!

  # Identifies the current state of the pull request review.
  state: PullRequestReviewState!

  # Identifies when the Pull Request Review was submitted
  submittedAt: DateTime

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP URL permalink for this PullRequestReview.
  url: URI!

  # Check if the current viewer can delete this object.
  viewerCanDelete: Boolean!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!

  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!
}

# A review comment associated with a given repository pull request.
type PullRequestReviewComment implements Node, Comment, Deletable, Updatable, UpdatableComment, Reactable, RepositoryNode {
  # The actor who authored the comment.
  author: Actor

  # The comment body of this review comment.
  body: String!

  # The comment body of this review comment rendered to HTML.
  bodyHTML: HTML!

  # The comment body of this review comment rendered as plain text.
  bodyText: String!

  # Identifies the commit associated with the comment.
  commit: Commit!

  # Identifies when the comment was created.
  createdAt: DateTime!

  # Check if this comment was created via an email reply.
  createdViaEmail: Boolean!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The diff hunk to which the comment applies.
  diffHunk: String!

  # Identifies when the comment was created in a draft state.
  draftedAt: DateTime!

  # The actor who edited the comment.
  editor: Actor
  id: ID!

  # The moment the editor made the last edit
  lastEditedAt: DateTime

  # Identifies the original commit associated with the comment.
  originalCommit: Commit!

  # The original line index in the diff to which the comment applies.
  originalPosition: Int!

  # The path to which the comment applies.
  path: String!

  # The line index in the diff to which the comment applies.
  position: Int

  # Identifies when the comment was published at.
  publishedAt: DateTime

  # The pull request associated with this review comment.
  pullRequest: PullRequest!

  # The pull request review associated with this review comment.
  pullRequestReview: PullRequestReview!

  # A list of reactions grouped by content left on the subject.
  reactionGroups: [ReactionGroup!]

  # A list of Reactions left on the Issue.
  reactions(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering Reactions by emoji.
    content: ReactionContent

    # Allows specifying the order in which reactions are returned.
    orderBy: ReactionOrder
  ): ReactionConnection!

  # The repository associated with this review comment.
  repository: Repository!

  # Identifies when the comment was last updated.
  updatedAt: DateTime!

  # The HTTP URL permalink for this review comment.
  url: URI!

  # Check if the current viewer can delete this object.
  viewerCanDelete: Boolean!

  # Can user react to this subject
  viewerCanReact: Boolean!

  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!

  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!

  # Did the viewer author this comment.
  viewerDidAuthor: Boolean!
}

# The connection type for PullRequestReviewComment.
type PullRequestReviewCommentConnection {
  # A list of edges.
  edges: [PullRequestReviewCommentEdge]

  # A list of nodes.
  nodes: [PullRequestReviewComment]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type PullRequestReviewCommentEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: PullRequestReviewComment
}

# The connection type for PullRequestReview.
type PullRequestReviewConnection {
  # A list of edges.
  edges: [PullRequestReviewEdge]

  # A list of nodes.
  nodes: [PullRequestReview]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type PullRequestReviewEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: PullRequestReview
}

# The possible events to perform on a pull request review.
enum PullRequestReviewEvent {
  # Submit general feedback without explicit approval.
  COMMENT

  # Submit feedback and approve merging these changes.
  APPROVE

  # Submit feedback that must be addressed before merging.
  REQUEST_CHANGES

  # Dismiss review so it now longer effects merging.
  DISMISS
}

# The possible states of a pull request review.
enum PullRequestReviewState {
  # A review that has not yet been submitted.
  PENDING

  # An informational review.
  COMMENTED

  # A review allowing the pull request to merge.
  APPROVED

  # A review blocking the pull request from merging.
  CHANGES_REQUESTED

  # A review that has been dismissed.
  DISMISSED
}

# A threaded list of comments for a given pull request.
type PullRequestReviewThread implements Node {
  # A list of pull request comments associated with the thread.
  comments(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): PullRequestReviewCommentConnection!
  id: ID!

  # Identifies the pull request associated with this thread.
  pullRequest: PullRequest!
}

# The possible states of a pull request.
enum PullRequestState {
  # A pull request that is still open.
  OPEN

  # A pull request that has been closed without being merged.
  CLOSED

  # A pull request that has been closed by being merged.
  MERGED
}

# The connection type for PullRequestTimelineItem.
type PullRequestTimelineConnection {
  # A list of edges.
  edges: [PullRequestTimelineItemEdge]

  # A list of nodes.
  nodes: [PullRequestTimelineItem]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An item in an pull request timeline
union PullRequestTimelineItem = Commit | PullRequestReview | PullRequestReviewThread | PullRequestReviewComment | IssueComment | ClosedEvent | ReopenedEvent | SubscribedEvent | UnsubscribedEvent | MergedEvent | ReferencedEvent | AssignedEvent | UnassignedEvent | LabeledEvent | UnlabeledEvent | MilestonedEvent | DemilestonedEvent | RenamedTitleEvent | LockedEvent | UnlockedEvent | DeployedEvent | HeadRefDeletedEvent | HeadRefRestoredEvent | HeadRefForcePushedEvent | BaseRefForcePushedEvent | ReviewRequestedEvent | ReviewRequestRemovedEvent | ReviewDismissedEvent

# An edge in a connection.
type PullRequestTimelineItemEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: PullRequestTimelineItem
}

# A team or user who has the ability to push to a protected branch.
type PushAllowance implements Node {
  # The actor that can push.
  actor: PushAllowanceActor
  id: ID!

  # Identifies the protected branch associated with the allowed user or team.
  protectedBranch: ProtectedBranch!
}

# Types that can be an actor.
union PushAllowanceActor = User | Team

# The connection type for PushAllowance.
type PushAllowanceConnection {
  # A list of edges.
  edges: [PushAllowanceEdge]

  # A list of nodes.
  nodes: [PushAllowance]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type PushAllowanceEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: PushAllowance
}

# The query root of GitHub's GraphQL interface.
type Query {
  # Look up a code of conduct by its key
  codeOfConduct(
    # The code of conduct's key
    key: String!
  ): CodeOfConduct

  # Look up a code of conduct by its key
  codesOfConduct: [CodeOfConduct]

  # Fetches an object given its ID.
  node(
    # ID of the object.
    id: ID!
  ): Node

  # Lookup nodes by a list of IDs.
  nodes(
    # The list of node IDs.
    ids: [ID!]!
  ): [Node]!

  # Lookup a organization by login.
  organization(
    # The organization's login.
    login: String!
  ): Organization

  # Hack to workaround https://github.com/facebook/relay/issues/112 re-exposing the root query object
  relay: Query!

  # Lookup a given repository by the owner and repository name.
  repository(
    # The login field of a user or organizationn
    owner: String!

    # The name of the repository
    name: String!
  ): Repository

  # Lookup a repository owner (ie. either a User or an Organization) by login.
  repositoryOwner(
    # The username to lookup the owner by.
    login: String!
  ): RepositoryOwner

  # Lookup resource by a URL.
  resource(
    # The URL.
    url: URI!
  ): UniformResourceLocatable

  # Perform a search across resources.
  search(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # The search string to look for.
    query: String!

    # The types of search items to search within.
    type: SearchType!
  ): SearchResultItemConnection!

  # Look up a topic by name.
  topic(
    # The topic's name.
    name: String!
  ): Topic

  # Lookup a user by login.
  user(
    # The user's login.
    login: String!
  ): User

  # The currently authenticated user.
  viewer: User!
}

# Represents a subject that can be reacted on.
interface Reactable {
  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")
  id: ID!

  # A list of reactions grouped by content left on the subject.
  reactionGroups: [ReactionGroup!]

  # A list of Reactions left on the Issue.
  reactions(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Allows filtering Reactions by emoji.
    content: ReactionContent

    # Allows specifying the order in which reactions are returned.
    orderBy: ReactionOrder
  ): ReactionConnection!

  # Can user react to this subject
  viewerCanReact: Boolean!
}

# The connection type for User.
type ReactingUserConnection {
  # A list of edges.
  edges: [ReactingUserEdge]

  # A list of nodes.
  nodes: [User]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# Represents a user that's made a reaction.
type ReactingUserEdge {
  cursor: String!
  node: User!

  # The moment when the user made the reaction.
  reactedAt: DateTime!
}

# An emoji reaction to a particular piece of content.
type Reaction implements Node {
  # Identifies the emoji reaction.
  content: ReactionContent!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")
  id: ID!

  # Identifies the user who created this reaction.
  user: User
}

# A list of reactions that have been left on the subject.
type ReactionConnection {
  # A list of edges.
  edges: [ReactionEdge]

  # A list of nodes.
  nodes: [Reaction]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!

  # Whether or not the authenticated user has left a reaction on the subject.
  viewerHasReacted: Boolean!
}

# Emojis that can be attached to Issues, Pull Requests and Comments.
enum ReactionContent {
  # Represents the 👍 emoji.
  THUMBS_UP

  # Represents the 👎 emoji.
  THUMBS_DOWN

  # Represents the 😄 emoji.
  LAUGH

  # Represents the 🎉 emoji.
  HOORAY

  # Represents the 😕 emoji.
  CONFUSED

  # Represents the ❤️ emoji.
  HEART
}

# An edge in a connection.
type ReactionEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Reaction
}

# A group of emoji reactions to a particular piece of content.
type ReactionGroup {
  # Identifies the emoji reaction.
  content: ReactionContent!

  # Identifies when the reaction was created.
  createdAt: DateTime

  # The subject that was reacted to.
  subject: Reactable!

  # Users who have reacted to the reaction subject with the emotion represented by this reaction group
  users(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ReactingUserConnection!

  # Whether or not the authenticated user has left a reaction on the subject.
  viewerHasReacted: Boolean!
}

# Ways in which lists of reactions can be ordered upon return.
input ReactionOrder {
  # The field in which to order reactions by.
  field: ReactionOrderField!

  # The direction in which to order reactions by the specified field.
  direction: OrderDirection!
}

# A list of fields that reactions can be ordered by.
enum ReactionOrderField {
  # Allows ordering a list of reactions by when they were created.
  CREATED_AT
}

# Represents a Git reference.
type Ref implements Node {
  # A list of pull requests with this ref as the head ref.
  associatedPullRequests(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A list of states to filter the pull requests by.
    states: [PullRequestState!]
  ): PullRequestConnection!
  id: ID!

  # The ref name.
  name: String!

  # The ref's prefix, such as `refs/heads/` or `refs/tags/`.
  prefix: String!

  # The repository the ref belongs to.
  repository: Repository!

  # The object the ref points to.
  target: GitObject!
}

# The connection type for Ref.
type RefConnection {
  # A list of edges.
  edges: [RefEdge]

  # A list of nodes.
  nodes: [Ref]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type RefEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Ref
}

# Represents a 'referenced' event on a given `ReferencedSubject`.
type ReferencedEvent implements Node {
  # Identifies the actor who performed the 'label' event.
  actor: Actor

  # Identifies the commit associated with the 'referenced' event.
  commit: Commit

  # Identifies the repository associated with the 'referenced' event.
  commitRepository: Repository!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Reference originated in a different repository.
  isCrossReference: Boolean!

  # Object referenced by event.
  subject: ReferencedSubject!
}

# Any referencable object
union ReferencedSubject = Issue | PullRequest

# A release contains the content for a release.
type Release implements Node, UniformResourceLocatable {
  # Identifies the description of the release.
  description: String
  id: ID!

  # Identifies the title of the release.
  name: String!

  # The HTTP path for this issue
  path: URI!

  # Identifies the date and time when the release was created.
  publishedAt: DateTime

  # List of releases assets which are dependent on this release.
  releaseAsset(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A list of names to filter the assets by.
    name: String
  ): ReleaseAssetConnection!

  # List of releases assets which are dependent on this release.
  releaseAssets(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ReleaseAssetConnection!

  # The Git tag the release points to
  tag: Ref

  # The HTTP url for this issue
  url: URI!
}

# A release asset contains the content for a release asset.
type ReleaseAsset implements Node {
  id: ID!

  # Identifies the title of the release asset.
  name: String!

  # release that the asset is associated with
  release: Release

  # Identifies the url of the release asset.
  url: URI!
}

# The connection type for ReleaseAsset.
type ReleaseAssetConnection {
  # A list of edges.
  edges: [ReleaseAssetEdge]

  # A list of nodes.
  nodes: [ReleaseAsset]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ReleaseAssetEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: ReleaseAsset
}

# The connection type for Release.
type ReleaseConnection {
  # A list of edges.
  edges: [ReleaseEdge]

  # A list of nodes.
  nodes: [Release]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ReleaseEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Release
}

# Autogenerated input type of RemoveOutsideCollaborator
input RemoveOutsideCollaboratorInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The ID of the outside collaborator to remove.
  userId: ID!

  # The ID of the organization to remove the outside collaborator from.
  organizationId: ID!
}

# Autogenerated return type of RemoveOutsideCollaborator
type RemoveOutsideCollaboratorPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The user that was removed as an outside collaborator.
  removedUser: User!
}

# Autogenerated input type of RemoveReaction
input RemoveReactionInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the subject to modify.
  subjectId: ID!

  # The name of the emoji to react with.
  content: ReactionContent!
}

# Autogenerated return type of RemoveReaction
type RemoveReactionPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The reaction object.
  reaction: Reaction!

  # The reactable subject.
  subject: Reactable!
}

# Represents a 'renamed' event on a given issue or pull request
type RenamedTitleEvent implements Node {
  # Identifies the actor who performed the 'renamed' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Identifies the current title of the issue or pull request.
  currentTitle: String!
  id: ID!

  # Identifies the previous title of the issue or pull request.
  previousTitle: String!

  # Subject that was renamed.
  subject: RenamedTitleSubject!
}

# An object which has a renamable title
union RenamedTitleSubject = Issue | PullRequest

# Represents a 'reopened' event on any `Closable`.
type ReopenedEvent implements Node {
  # Identifies the actor who reopened the item.
  actor: Actor

  # Object that was reopened.
  closable: Closable!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!
}

# A repository contains the content for a project.
type Repository implements Node, ProjectOwner, Subscribable, UniformResourceLocatable, RepositoryInfo {
  # Returns the code of conduct for this repository
  codeOfConduct: CodeOfConduct

  # A list of commit comments associated with the repository.
  commitComments(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): CommitCommentConnection!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The Ref associated with the repository's default branch.
  defaultBranchRef: Ref

  # The description of the repository.
  description: String

  # The description of the repository rendered to HTML.
  descriptionHTML: HTML!

  # The number of kilobytes this repository occupies on disk.
  diskUsage: Int!

  # A list of forked repositories.
  forks(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters repositories according to privacy
    privacy: RepositoryPrivacy

    # Ordering options for repositories returned from the connection
    orderBy: RepositoryOrder

    # Affiliation options for repositories returned from the connection
    affiliation: [RepositoryAffiliation]

    # If non-null, filters repositories according to whether they have been locked
    isLocked: Boolean
  ): RepositoryConnection!

  # Indicates if the repository has issues feature enabled.
  hasIssuesEnabled: Boolean!

  # Indicates if the repository has wiki feature enabled.
  hasWikiEnabled: Boolean!

  # The repository's URL.
  homepageUrl: URI
  id: ID!

  # Identifies if the repository is a fork.
  isFork: Boolean!

  # Indicates if the repository has been locked or not.
  isLocked: Boolean!

  # Identifies if the repository is a mirror.
  isMirror: Boolean!

  # Identifies if the repository is private.
  isPrivate: Boolean!

  # Returns a single issue from the current repository by number.
  issue(
    # The number for the issue to be returned.
    number: Int!
  ): Issue

  # Returns a single issue-like object from the current repository by number.
  issueOrPullRequest(
    # The number for the issue to be returned.
    number: Int!
  ): IssueOrPullRequest

  # A list of issues that have been opened in the repository.
  issues(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A list of states to filter the issues by.
    states: [IssueState]

    # A list of label names to filter the issues by.
    labels: [String!]
  ): IssueConnection!

  # Returns a single label by name
  label(
    # Label name
    name: String!
  ): Label

  # A list of labels associated with the repository.
  labels(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): LabelConnection

  # A list containing a breakdown of the language composition of the repository.
  languages(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Order for connection
    orderBy: LanguageOrder
  ): LanguageConnection

  # The license associated with the repository
  license: String

  # The reason the repository has been locked.
  lockReason: RepositoryLockReason

  # A list of Users that can be mentioned in the context of the repository.
  mentionableUsers(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!

  # Returns a single milestone from the current repository by number.
  milestone(
    # The number for the milestone to be returned.
    number: Int!
  ): Milestone

  # A list of milestones associated with the repository.
  milestones(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): MilestoneConnection

  # The repository's original mirror URL.
  mirrorUrl: URI

  # The name of the repository.
  name: String!

  # The repository's name with owner.
  nameWithOwner: String!

  # A Git object in the repository
  object(
    # The Git object ID
    oid: GitObjectID

    # A Git revision expression suitable for rev-parse
    expression: String
  ): GitObject

  # The User owner of the repository.
  owner: RepositoryOwner!

  # The repository parent, if this is a fork.
  parent: Repository

  # The HTTP path for this repository
  path: URI!

  # The primary language of the repository's code.
  primaryLanguage: Language

  # Find project by number.
  project(
    # The project number to find.
    number: Int!
  ): Project

  # A list of projects under the owner.
  projects(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Ordering options for projects returned from the connection
    orderBy: ProjectOrder

    # Query to search projects by, currently only searching by name.
    search: String

    # A list of states to filter the projects by.
    states: [ProjectState!]
  ): ProjectConnection!

  # The HTTP path listing repository's projects
  projectsPath: URI!

  # The HTTP url listing repository's projects
  projectsUrl: URI!

  # A list of protected branches that are on this repository.
  protectedBranches(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ProtectedBranchConnection!

  # Returns a single pull request from the current repository by number.
  pullRequest(
    # The number for the pull request to be returned.
    number: Int!
  ): PullRequest

  # A list of pull requests that have been opened in the repository.
  pullRequests(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A list of states to filter the pull requests by.
    states: [PullRequestState!]

    # A list of label names to filter the pull requests by.
    labels: [String!]

    # The head ref name to filter the pull requests by.
    headRefName: String

    # The base ref name to filter the pull requests by.
    baseRefName: String
  ): PullRequestConnection!

  # Identifies when the repository was last pushed to.
  pushedAt: DateTime

  # Fetch a given ref from the repository
  ref(
    # The ref to retrieve.Fully qualified matches are checked in order
    # (`refs/heads/master`) before falling back onto checks for short name matches (`master`).
    qualifiedName: String!
  ): Ref

  # Fetch a list of refs from the repository
  refs(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A ref name prefix like `refs/heads/`, `refs/tags/`, etc.
    refPrefix: String!

    # The ordering direction.
    direction: OrderDirection
  ): RefConnection

  # List of releases which are dependent on this repository.
  releases(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): ReleaseConnection!

  # A list of applied repository-topic associations for this repository.
  repositoryTopics(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): RepositoryTopicConnection!

  # A list of users who have starred this repository.
  stargazers(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Order for connection
    orderBy: StarOrder
  ): StargazerConnection!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP url for this repository
  url: URI!

  # Indicates whether the viewer has admin permissions on this repository.
  viewerCanAdminister: Boolean!

  # Can the current viewer create new projects on this owner.
  viewerCanCreateProjects: Boolean!

  # Check if the viewer is able to change their subscription status for the repository.
  viewerCanSubscribe: Boolean!

  # Indicates whether the viewer can update the topics of this repository.
  viewerCanUpdateTopics: Boolean!

  # Returns a boolean indicating whether the viewing user has starred this repository.
  viewerHasStarred: Boolean!

  # Identifies if the viewer is watching, not watching, or ignoring the repository.
  viewerSubscription: SubscriptionState!

  # A list of users watching the repository.
  watchers(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): UserConnection!
}

# The affiliation of a user to a repository
enum RepositoryAffiliation {
  # Repositories that are owned by the authenticated user.
  OWNER

  # Repositories that the user has been added to as a collaborator.
  COLLABORATOR

  # Repositories that the user has access to through being a member of an
  # organization. This includes every repository on every team that the user is on.
  ORGANIZATION_MEMBER
}

# The affiliation type between collaborator and repository.
enum RepositoryCollaboratorAffiliation {
  # All collaborators of the repository.
  ALL

  # All outside collaborators of an organization-owned repository.
  OUTSIDE
}

# A list of repositories owned by the subject.
type RepositoryConnection {
  # A list of edges.
  edges: [RepositoryEdge]

  # A list of nodes.
  nodes: [Repository]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!

  # The total size in kilobytes of all repositories in the connection.
  totalDiskUsage: Int!
}

# An edge in a connection.
type RepositoryEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Repository
}

# A subset of repository info.
interface RepositoryInfo {
  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # The description of the repository.
  description: String

  # The description of the repository rendered to HTML.
  descriptionHTML: HTML!

  # Indicates if the repository has issues feature enabled.
  hasIssuesEnabled: Boolean!

  # Indicates if the repository has wiki feature enabled.
  hasWikiEnabled: Boolean!

  # The repository's URL.
  homepageUrl: URI

  # Identifies if the repository is a fork.
  isFork: Boolean!

  # Indicates if the repository has been locked or not.
  isLocked: Boolean!

  # Identifies if the repository is a mirror.
  isMirror: Boolean!

  # Identifies if the repository is private.
  isPrivate: Boolean!

  # The license associated with the repository
  license: String

  # The reason the repository has been locked.
  lockReason: RepositoryLockReason

  # The repository's original mirror URL.
  mirrorUrl: URI

  # The name of the repository.
  name: String!

  # The repository's name with owner.
  nameWithOwner: String!

  # The User owner of the repository.
  owner: RepositoryOwner!

  # The HTTP path for this repository
  path: URI!

  # Identifies when the repository was last pushed to.
  pushedAt: DateTime

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP url for this repository
  url: URI!
}

# An invitation for a user to be added to a repository.
type RepositoryInvitation implements Node {
  id: ID!

  # The user who received the invitation.
  invitee: User!

  # The user who created the invitation.
  inviter: User!

  # The Repository the user is invited to.
  repository: RepositoryInvitationRepository!
}

# A subset of repository info shared with potential collaborators.
type RepositoryInvitationRepository implements RepositoryInfo {
  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # The description of the repository.
  description: String

  # The description of the repository rendered to HTML.
  descriptionHTML: HTML!

  # Indicates if the repository has issues feature enabled.
  hasIssuesEnabled: Boolean!

  # Indicates if the repository has wiki feature enabled.
  hasWikiEnabled: Boolean!

  # The repository's URL.
  homepageUrl: URI

  # Identifies if the repository is a fork.
  isFork: Boolean!

  # Indicates if the repository has been locked or not.
  isLocked: Boolean!

  # Identifies if the repository is a mirror.
  isMirror: Boolean!

  # Identifies if the repository is private.
  isPrivate: Boolean!

  # The license associated with the repository
  license: String

  # The reason the repository has been locked.
  lockReason: RepositoryLockReason

  # The repository's original mirror URL.
  mirrorUrl: URI

  # The name of the repository.
  name: String!

  # The repository's name with owner.
  nameWithOwner: String!

  # The User owner of the repository.
  owner: RepositoryOwner!

  # The HTTP path for this repository
  path: URI!

  # Identifies when the repository was last pushed to.
  pushedAt: DateTime

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP url for this repository
  url: URI!
}

# The possible reasons a given repsitory could be in a locked state.
enum RepositoryLockReason {
  # The repository is locked due to a move.
  MOVING

  # The repository is locked due to a billing related reason.
  BILLING

  # The repository is locked due to a rename.
  RENAME

  # The repository is locked due to a migration.
  MIGRATING
}

# Represents a object that belongs to a repository.
interface RepositoryNode {
  # The repository associated with this node.
  repository: Repository!
}

# Ordering options for repository connections
input RepositoryOrder {
  # The field to order repositories by.
  field: RepositoryOrderField!

  # The ordering direction.
  direction: OrderDirection!
}

# Properties by which repository connections can be ordered.
enum RepositoryOrderField {
  # Order repositories by creation time
  CREATED_AT

  # Order repositories by update time
  UPDATED_AT

  # Order repositories by push time
  PUSHED_AT

  # Order repositories by name
  NAME
}

# Represents an owner of a Repository.
interface RepositoryOwner {
  # A URL pointing to the owner's public avatar.
  avatarUrl(
    # The size of the resulting square image.
    size: Int
  ): URI!

  # Find gist by repo name.
  gist(
    # The gist name to find.
    name: String!
  ): Gist
  id: ID!

  # The username used to login.
  login: String!

  # The HTTP url for the owner.
  path: URI!

  # A list of repositories that the user owns.
  repositories(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters repositories according to privacy
    privacy: RepositoryPrivacy

    # Ordering options for repositories returned from the connection
    orderBy: RepositoryOrder

    # Affiliation options for repositories returned from the connection
    affiliation: [RepositoryAffiliation]

    # If non-null, filters repositories according to whether they have been locked
    isLocked: Boolean

    # If non-null, filters repositories according to whether they are forks of another repository
    isFork: Boolean
  ): RepositoryConnection!

  # Find Repository.
  repository(
    # Name of Repository to find.
    name: String!
  ): Repository

  # The HTTP url for the owner.
  url: URI!
}

# The privacy of a repository
enum RepositoryPrivacy {
  # Public
  PUBLIC

  # Private
  PRIVATE
}

# A repository-topic connects a repository to a topic.
type RepositoryTopic implements Node, UniformResourceLocatable {
  id: ID!

  # The HTTP path for this repository-topic.
  path: URI!

  # The topic.
  topic: Topic!

  # The HTTP url for this repository-topic.
  url: URI!
}

# The connection type for RepositoryTopic.
type RepositoryTopicConnection {
  # A list of edges.
  edges: [RepositoryTopicEdge]

  # A list of nodes.
  nodes: [RepositoryTopic]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type RepositoryTopicEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: RepositoryTopic
}

# Autogenerated input type of RequestReviews
input RequestReviewsInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the pull request to modify.
  pullRequestId: ID!

  # The Node IDs of the users to request.
  userIds: [ID!]!

  # Add users to the set rather than replace.
  union: Boolean
}

# Autogenerated return type of RequestReviews
type RequestReviewsPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The pull request that is getting requests.
  pullRequest: PullRequest!

  # The edge from the pull request to the requested reviewers.
  requestedReviewersEdge: UserEdge!
}

# A team or user who has the ability to dismiss a review on a protected branch.
type ReviewDismissalAllowance implements Node {
  # The actor that can dismiss.
  actor: ReviewDismissalAllowanceActor
  id: ID!

  # Identifies the protected branch associated with the allowed user or team.
  protectedBranch: ProtectedBranch!
}

# Types that can be an actor.
union ReviewDismissalAllowanceActor = User | Team

# The connection type for ReviewDismissalAllowance.
type ReviewDismissalAllowanceConnection {
  # A list of edges.
  edges: [ReviewDismissalAllowanceEdge]

  # A list of nodes.
  nodes: [ReviewDismissalAllowance]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type ReviewDismissalAllowanceEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: ReviewDismissalAllowance
}

# Represents a 'review_dismissed' event on a given issue or pull request.
type ReviewDismissedEvent implements Node {
  # Identifies the actor who performed the 'review_dismissed' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the message associated with the 'review_dismissed' event.
  message: String!

  # Identifies the previous state of the review with the 'review_dismissed' event.
  previousReviewState: PullRequestReviewState!

  # PullRequest referenced by event.
  pullRequest: PullRequest!

  # Identifies the review associated with the 'review_dismissed' event.
  review: PullRequestReview!
}

# A request for a user to review a pull request.
type ReviewRequest implements Node {
  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")
  id: ID!

  # Identifies the pull request associated with this review request.
  pullRequest: PullRequest!

  # Identifies the author associated with this review request.
  reviewer: User
}

# The connection type for ReviewRequest.
type ReviewRequestConnection {
  # A list of edges.
  edges: [ReviewRequestEdge]

  # A list of nodes.
  nodes: [ReviewRequest]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# Represents an 'review_requested' event on a given pull request.
type ReviewRequestedEvent implements Node {
  # Identifies the actor who performed the 'base_ref_force_pushed' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # PullRequest referenced by event.
  pullRequest: PullRequest!

  # Identifies the user whose review was requested.
  subject: User!
}

# An edge in a connection.
type ReviewRequestEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: ReviewRequest
}

# Represents an 'review_request_removed' event on a given pull request.
type ReviewRequestRemovedEvent implements Node {
  # Identifies the actor who performed the 'review_request_removed' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # PullRequest referenced by event.
  pullRequest: PullRequest!

  # Identifies the user whose review request was removed.
  subject: User!
}

# The results of a search.
union SearchResultItem = Issue | PullRequest | Repository | User | Organization

# A list of results that matched against a search query.
type SearchResultItemConnection {
  # The number of pieces of code that matched the search query.
  codeCount: Int!

  # A list of edges.
  edges: [SearchResultItemEdge]

  # The number of issues that matched the search query.
  issueCount: Int!

  # A list of nodes.
  nodes: [SearchResultItem]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # The number of repositories that matched the search query.
  repositoryCount: Int!

  # The number of users that matched the search query.
  userCount: Int!

  # The number of wiki pages that matched the search query.
  wikiCount: Int!
}

# An edge in a connection.
type SearchResultItemEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: SearchResultItem
}

# Represents the individual results of a search.
enum SearchType {
  # Returns results matching issues in repositories.
  ISSUE

  # Returns results matching repositories.
  REPOSITORY

  # Returns results matching users on GitHub.
  USER
}

# Represents an S/MIME signature on a Commit or Tag.
type SmimeSignature implements GitSignature {
  # Email used to sign this object.
  email: String!

  # True if the signature is valid and verified by GitHub.
  isValid: Boolean!

  # Payload for GPG signing object. Raw ODB object without the signature header.
  payload: String!

  # ASCII-armored signature header from object.
  signature: String!

  # GitHub user corresponding to the email signing this commit.
  signer: User

  # The state of this signature. `VALID` if signature is valid and verified by
  # GitHub, otherwise represents reason why signature is considered invalid.
  state: GitSignatureState!
}

# The connection type for User.
type StargazerConnection {
  # A list of edges.
  edges: [StargazerEdge]

  # A list of nodes.
  nodes: [User]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# Represents a user that's starred a repository.
type StargazerEdge {
  cursor: String!
  node: User!

  # Identifies when the item was starred.
  starredAt: DateTime!
}

# Ways in which star connections can be ordered.
input StarOrder {
  # The field in which to order nodes by.
  field: StarOrderField!

  # The direction in which to order nodes.
  direction: OrderDirection!
}

# Properties by which star connections can be ordered.
enum StarOrderField {
  # Allows ordering a list of stars by when they were created.
  STARRED_AT
}

# The connection type for Repository.
type StarredRepositoryConnection {
  # A list of edges.
  edges: [StarredRepositoryEdge]

  # A list of nodes.
  nodes: [Repository]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# Represents a starred repository.
type StarredRepositoryEdge {
  cursor: String!
  node: Repository!

  # Identifies when the item was starred.
  starredAt: DateTime!
}

# Represents a commit status.
type Status implements Node {
  # The commit this status is attached to.
  commit: Commit

  # Looks up an individual status context by context name.
  context(
    # The context name.
    name: String!
  ): StatusContext

  # The individual status contexts for this commit.
  contexts: [StatusContext!]!
  id: ID!

  # The combined commit status.
  state: StatusState!
}

# Represents an individual commit status context
type StatusContext implements Node {
  # This commit this status context is attached to.
  commit: Commit

  # The name of this status context.
  context: String!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # The actor who created this status context.
  creator: Actor

  # The description for this status context.
  description: String
  id: ID!

  # The state of this status context.
  state: StatusState!

  # The URL for this status context.
  targetUrl: URI
}

# The possible commit status states.
enum StatusState {
  # Status is expected.
  EXPECTED

  # Status is errored.
  ERROR

  # Status is failing.
  FAILURE

  # Status is pending.
  PENDING

  # Status is successful.
  SUCCESS
}

# Autogenerated input type of SubmitPullRequestReview
input SubmitPullRequestReviewInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Pull Request Review ID to submit.
  pullRequestReviewId: ID!

  # The event to send to the Pull Request Review.
  event: PullRequestReviewEvent!

  # The text field to set on the Pull Request Review.
  body: String
}

# Autogenerated return type of SubmitPullRequestReview
type SubmitPullRequestReviewPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The submitted pull request review.
  pullRequestReview: PullRequestReview!
}

# Entities that can be subscribed to for web and email notifications.
interface Subscribable {
  # Check if the viewer is able to change their subscription status for the repository.
  viewerCanSubscribe: Boolean!

  # Identifies if the viewer is watching, not watching, or ignoring the repository.
  viewerSubscription: SubscriptionState!
}

# Represents a 'subscribed' event on a given `Subscribable`.
type SubscribedEvent implements Node {
  # Identifies the actor who performed the 'subscribed' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Object referenced by event.
  subscribable: Subscribable!
}

# The possible states of a subscription.
enum SubscriptionState {
  # The User is only notified when particpating or @mentioned.
  UNSUBSCRIBED

  # The User is notified of all conversations.
  SUBSCRIBED

  # The User is never notified.
  IGNORED
}

# A suggestion to review a pull request based on a user's commit history and review comments.
type SuggestedReviewer {
  # Is this suggestion based on past commits?
  isAuthor: Boolean!

  # Is this suggestion based on past review comments?
  isCommenter: Boolean!

  # Identifies the user suggested to review the pull request.
  reviewer: User!
}

# Represents a Git tag.
type Tag implements Node, GitObject {
  id: ID!

  # The Git tag message.
  message: String

  # The Git tag name.
  name: String!

  # The Git object ID
  oid: GitObjectID!

  # The Repository the Git object belongs to
  repository: Repository!

  # Details about the tag author.
  tagger: GitActor

  # The Git object the tag points to.
  target: GitObject!
}

# A team of users in an organization.
type Team implements Node, UniformResourceLocatable {
  # The description of the team.
  description: String

  # The HTTP path for editing this team
  editTeamPath: URI!

  # The HTTP url for editing this team
  editTeamUrl: URI!
  id: ID!

  # A list of pending invitations for users to this team
  invitations(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): OrganizationInvitationConnection

  # The name of the team.
  name: String!

  # The path to this resource.
  path: URI!

  # The level of privacy the team has.
  privacy: TeamPrivacy!

  # The slug corresponding to the team.
  slug: String!

  # For team discussions
  teamDiscussionsPath: URI!

  # For team discussions
  teamDiscussionsUrl: URI!

  # The HTTP path for this team
  teamPath: URI!

  # The HTTP path for this team's repositories
  teamRepositoriesPath: URI!

  # The HTTP url for this team's repositories
  teamRepositoriesUrl: URI!

  # The HTTP url for this team
  teamUrl: URI!

  # The URL to this resource.
  url: URI!
}

# The connection type for Team.
type TeamConnection {
  # A list of edges.
  edges: [TeamEdge]

  # A list of nodes.
  nodes: [Team]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type TeamEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: Team
}

# Ways in which team connections can be ordered.
input TeamOrder {
  # The field in which to order nodes by.
  field: TeamOrderField!

  # The direction in which to order nodes.
  direction: OrderDirection!
}

# Properties by which team connections can be ordered.
enum TeamOrderField {
  # Allows ordering a list of teams by name.
  NAME
}

# The possible team privacy values.
enum TeamPrivacy {
  # A secret team can only be seen by its members.
  SECRET

  # A visible team can be seen and @mentioned by every member of the organization.
  VISIBLE
}

# The role of a user on a team.
enum TeamRole {
  # User has admin rights on the team.
  ADMIN

  # User is a member of the team.
  MEMBER
}

# A topic aggregates entities that are related to a subject.
type Topic implements Node {
  id: ID!

  # The topic's name.
  name: String!

  # A list of related topics sorted with the most relevant first.
  relatedTopics: [Topic!]!
}

# Reason that the suggested topic is declined.
enum TopicSuggestionDeclineReason {
  # The suggested topic is not relevant to the repository.
  NOT_RELEVANT

  # The suggested topic is too specific for the repository (e.g. #ruby-on-rails-version-4-2-1).
  TOO_SPECIFIC

  # The viewer does not like the suggested topic.
  PERSONAL_PREFERENCE

  # The suggested topic is too general for the repository.
  TOO_GENERAL
}

# Represents a Git tree.
type Tree implements Node, GitObject {
  # A list of tree entries.
  entries: [TreeEntry!]
  id: ID!

  # The Git object ID
  oid: GitObjectID!

  # The HTTP path for this tree
  path: URI!

  # The Repository the Git object belongs to
  repository: Repository!

  # The HTTP url for this tree
  url: URI!
}

# Represents a Git tree entry.
type TreeEntry {
  # Entry file mode.
  mode: Int!

  # Entry file name.
  name: String!

  # Entry file object.
  object: GitObject!

  # Entry file Git object ID.
  oid: GitObjectID!

  # The Repository the tree entry belongs to
  repository: Repository!

  # Entry file type.
  type: String!
}

# Represents a 'unassigned' event on any assignable object.
type UnassignedEvent implements Node {
  # Identifies the actor who performed the 'unassigned' event.
  actor: Actor

  # Identifies the assignable associated with the event.
  assignable: Assignable!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the subject (user) who was unassigned.
  user: User
}

# Represents a type that can be retrieved by a URL.
interface UniformResourceLocatable {
  # The path to this resource.
  path: URI!

  # The URL to this resource.
  url: URI!
}

# Represents an unknown signature on a Commit or Tag.
type UnknownSignature implements GitSignature {
  # Email used to sign this object.
  email: String!

  # True if the signature is valid and verified by GitHub.
  isValid: Boolean!

  # Payload for GPG signing object. Raw ODB object without the signature header.
  payload: String!

  # ASCII-armored signature header from object.
  signature: String!

  # GitHub user corresponding to the email signing this commit.
  signer: User

  # The state of this signature. `VALID` if signature is valid and verified by
  # GitHub, otherwise represents reason why signature is considered invalid.
  state: GitSignatureState!
}

# Represents a 'unlabeled' event on a given issue or pull request.
type UnlabeledEvent implements Node {
  # Identifies the actor who performed the 'unlabel' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Identifies the label associated with the 'unlabeled' event.
  label: Label!

  # Identifies the `Labelable` associated with the event.
  labelable: Labelable!
}

# Represents a 'unlocked' event on a given issue or pull request.
type UnlockedEvent implements Node {
  # Identifies the actor who performed the 'unlocked' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Object that was unlocked.
  lockable: Lockable!
}

# Represents a 'unsubscribed' event on a given `Subscribable`.
type UnsubscribedEvent implements Node {
  # Identifies the actor who performed the 'unsubscribed' event.
  actor: Actor

  # Identifies the date and time when the object was created.
  createdAt: DateTime!
  id: ID!

  # Object referenced by event.
  subscribable: Subscribable!
}

# Entities that can be updated.
interface Updatable {
  # Check if the current viewer can update this object.
  viewerCanUpdate: Boolean!
}

# Comments that can be updated.
interface UpdatableComment {
  # Reasons why the current viewer can not update this comment.
  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!
}

# Autogenerated input type of UpdateProjectCard
input UpdateProjectCardInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The ProjectCard ID to update.
  projectCardId: ID!

  # The note of ProjectCard.
  note: String!
}

# Autogenerated return type of UpdateProjectCard
type UpdateProjectCardPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The updated ProjectCard.
  projectCard: ProjectCard!
}

# Autogenerated input type of UpdateProjectColumn
input UpdateProjectColumnInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The ProjectColumn ID to update.
  projectColumnId: ID!

  # The name of project column.
  name: String!
}

# Autogenerated return type of UpdateProjectColumn
type UpdateProjectColumnPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The updated project column.
  projectColumn: ProjectColumn!
}

# Autogenerated input type of UpdateProject
input UpdateProjectInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Project ID to update.
  projectId: ID!

  # The name of project.
  name: String!

  # The description of project.
  body: String

  # Whether the project is open or closed.
  state: ProjectState
}

# Autogenerated return type of UpdateProject
type UpdateProjectPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The updated project.
  project: Project!
}

# Autogenerated input type of UpdatePullRequestReviewComment
input UpdatePullRequestReviewCommentInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the comment to modify.
  pullRequestReviewCommentId: ID!

  # The text of the comment.
  body: String!
}

# Autogenerated return type of UpdatePullRequestReviewComment
type UpdatePullRequestReviewCommentPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The updated comment.
  pullRequestReviewComment: PullRequestReviewComment!
}

# Autogenerated input type of UpdatePullRequestReview
input UpdatePullRequestReviewInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the pull request review to modify.
  pullRequestReviewId: ID!

  # The contents of the pull request review body.
  body: String!
}

# Autogenerated return type of UpdatePullRequestReview
type UpdatePullRequestReviewPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The updated pull request review.
  pullRequestReview: PullRequestReview!
}

# Autogenerated input type of UpdateSubscription
input UpdateSubscriptionInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the subscribable object to modify.
  subscribableId: ID!

  # The new state of the subscription.
  state: SubscriptionState!
}

# Autogenerated return type of UpdateSubscription
type UpdateSubscriptionPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The input subscribable entity.
  subscribable: Subscribable!
}

# Autogenerated input type of UpdateTopics
input UpdateTopicsInput {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # The Node ID of the repository.
  repositoryId: ID!

  # An array of topic names.
  topicNames: [String!]!
}

# Autogenerated return type of UpdateTopics
type UpdateTopicsPayload {
  # A unique identifier for the client performing the mutation.
  clientMutationId: String

  # Names of the provided topics that are not valid.
  invalidTopicNames: [String!]

  # The updated repository.
  repository: Repository!
}

# An RFC 3986, RFC 3987, and RFC 6570 (level 4) compliant URI string.
scalar URI

# A user is an individual's account on GitHub that owns repositories and can make new content.
type User implements Node, Actor, RepositoryOwner, UniformResourceLocatable {
  # A URL pointing to the user's public avatar.
  avatarUrl(
    # The size of the resulting square image.
    size: Int
  ): URI!

  # The user's public profile bio.
  bio: String

  # The user's public profile bio as HTML.
  bioHTML: HTML!

  # The user's public profile company.
  company: String

  # The user's public profile company as HTML.
  companyHTML: HTML!

  # A list of repositories that the user recently contributed to.
  contributedRepositories(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters repositories according to privacy
    privacy: RepositoryPrivacy

    # Ordering options for repositories returned from the connection
    orderBy: RepositoryOrder

    # Affiliation options for repositories returned from the connection
    affiliation: [RepositoryAffiliation]

    # If non-null, filters repositories according to whether they have been locked
    isLocked: Boolean
  ): RepositoryConnection!

  # Identifies the date and time when the object was created.
  createdAt: DateTime!

  # Identifies the primary key from the database.
  databaseId: Int @deprecated(reason: "Exposed database IDs will eventually be removed in favor of global Relay IDs.")

  # The user's publicly visible profile email.
  email: String!

  # A list of users the given user is followed by.
  followers(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): FollowerConnection!

  # A list of users the given user is following.
  following(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): FollowingConnection!

  # Find gist by repo name.
  gist(
    # The gist name to find.
    name: String!
  ): Gist

  # A list of the Gists the user has created.
  gists(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Filters Gists according to privacy.
    privacy: GistPrivacy
  ): GistConnection!
  id: ID!

  # Whether or not this user is a participant in the GitHub Security Bug Bounty.
  isBountyHunter: Boolean!

  # Whether or not this user is a participant in the GitHub Campus Experts Program.
  isCampusExpert: Boolean!

  # Whether or not this user is a GitHub Developer Program member.
  isDeveloperProgramMember: Boolean!

  # Whether or not this user is a GitHub employee.
  isEmployee: Boolean!

  # Whether or not the user has marked themselves as for hire.
  isHireable: Boolean!

  # Whether or not this user is a site administrator.
  isSiteAdmin: Boolean!

  # Whether or not this user is the viewing user.
  isViewer: Boolean!

  # The user's public profile location.
  location: String

  # The username used to login.
  login: String!

  # The user's public profile name.
  name: String

  # Find an organization by its login that the user belongs to.
  organization(
    # The login of the organization to find.
    login: String!
  ): Organization

  # A list of organizations the user belongs to.
  organizations(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String
  ): OrganizationConnection!

  # The HTTP path for this user
  path: URI!

  # A list of repositories this user has pinned to their profile
  pinnedRepositories(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters repositories according to privacy
    privacy: RepositoryPrivacy

    # Ordering options for repositories returned from the connection
    orderBy: RepositoryOrder

    # Affiliation options for repositories returned from the connection
    affiliation: [RepositoryAffiliation]

    # If non-null, filters repositories according to whether they have been locked
    isLocked: Boolean
  ): RepositoryConnection!

  # A list of pull requests assocated with this user.
  pullRequests(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # A list of states to filter the pull requests by.
    states: [PullRequestState!]

    # A list of label names to filter the pull requests by.
    labels: [String!]

    # The head ref name to filter the pull requests by.
    headRefName: String

    # The base ref name to filter the pull requests by.
    baseRefName: String
  ): PullRequestConnection!

  # A list of repositories that the user owns.
  repositories(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters repositories according to privacy
    privacy: RepositoryPrivacy

    # Ordering options for repositories returned from the connection
    orderBy: RepositoryOrder

    # Affiliation options for repositories returned from the connection
    affiliation: [RepositoryAffiliation]

    # If non-null, filters repositories according to whether they have been locked
    isLocked: Boolean

    # If non-null, filters repositories according to whether they are forks of another repository
    isFork: Boolean
  ): RepositoryConnection!

  # Find Repository.
  repository(
    # Name of Repository to find.
    name: String!
  ): Repository

  # Repositories the user has starred.
  starredRepositories(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # Filters starred repositories to only return repositories owned by the viewer.
    ownedByViewer: Boolean

    # Order for connection
    orderBy: StarOrder
  ): StarredRepositoryConnection!

  # Identifies the date and time when the object was last updated.
  updatedAt: DateTime! @deprecated(reason: "General type updated timestamps will eventually be replaced by other field specific timestamps.")

  # The HTTP url for this user
  url: URI!

  # Whether or not the viewer is able to follow the user.
  viewerCanFollow: Boolean!

  # Whether or not this user is followed by the viewer.
  viewerIsFollowing: Boolean!

  # A list of repositories the given user is watching.
  watching(
    # Returns the first _n_ elements from the list.
    first: Int

    # Returns the elements in the list that come after the specified global ID.
    after: String

    # Returns the last _n_ elements from the list.
    last: Int

    # Returns the elements in the list that come before the specified global ID.
    before: String

    # If non-null, filters repositories according to privacy
    privacy: RepositoryPrivacy

    # Ordering options for repositories returned from the connection
    orderBy: RepositoryOrder

    # Affiliation options for repositories returned from the connection
    affiliation: [RepositoryAffiliation]

    # If non-null, filters repositories according to whether they have been locked
    isLocked: Boolean
  ): RepositoryConnection!

  # A URL pointing to the user's public website/blog.
  websiteUrl: URI
}

# The connection type for User.
type UserConnection {
  # A list of edges.
  edges: [UserEdge]

  # A list of nodes.
  nodes: [User]

  # Information to aid in pagination.
  pageInfo: PageInfo!

  # Identifies the total count of items in the connection.
  totalCount: Int!
}

# An edge in a connection.
type UserEdge {
  # A cursor for use in pagination.
  cursor: String!

  # The item at the end of the edge.
  node: User
}

# Properties by which user connections can be ordered.
enum UserOrderField {
  # Allows ordering a list of users by their login.
  LOGIN

  # Allows ordering a list of users by their ability action
  ACTION
}

# A valid x509 certificate string
scalar X509Certificate
