diff --git a/src/Directory.Build.props b/src/Directory.Build.props index d8ae3277..7d62ce45 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -24,7 +24,7 @@ - + diff --git a/src/GraphQLParser.Benchmarks/Benchmarks/IBenchmark.cs b/src/GraphQLParser.Benchmarks/Benchmarks/IBenchmark.cs new file mode 100644 index 00000000..67aa7952 --- /dev/null +++ b/src/GraphQLParser.Benchmarks/Benchmarks/IBenchmark.cs @@ -0,0 +1,9 @@ +namespace GraphQLParser.Benchmarks +{ + internal interface IBenchmark + { + void GlobalSetup(); + + void Run(); + } +} diff --git a/src/GraphQLParser.Benchmarks/Benchmarks/LexerBenchmark.cs b/src/GraphQLParser.Benchmarks/Benchmarks/LexerBenchmark.cs new file mode 100644 index 00000000..48a5d507 --- /dev/null +++ b/src/GraphQLParser.Benchmarks/Benchmarks/LexerBenchmark.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using BenchmarkDotNet.Attributes; + +namespace GraphQLParser.Benchmarks +{ + [MemoryDiagnoser] + public class LexerBenchmark : IBenchmark + { + private string _escapes = null!; + private string _kitchen = null!; + private string _github = null!; + + [GlobalSetup] + public void GlobalSetup() + { + _escapes = "query_with_many_escape_symbols".ReadGraphQLFile(); + _kitchen = "kitchenSink".ReadGraphQLFile(); + _github = "github".ReadGraphQLFile(); + } + + [Benchmark] + [ArgumentsSource(nameof(Queries))] + public void Lex(string query) + { + var lexer = new Lexer(); + var source = new Source(query); + int resetPosition = 0; + Token token; + while ((token = lexer.Lex(source, resetPosition)).Kind != TokenKind.EOF) + { + resetPosition = token.End; + } + } + + public IEnumerable Queries() + { + yield return _escapes; + yield return _kitchen; + yield return _github; + } + + void IBenchmark.Run() => Lex(_github); + } +} diff --git a/src/GraphQLParser.Benchmarks/ParserBenchmark.cs b/src/GraphQLParser.Benchmarks/Benchmarks/ParserBenchmark.cs similarity index 53% rename from src/GraphQLParser.Benchmarks/ParserBenchmark.cs rename to src/GraphQLParser.Benchmarks/Benchmarks/ParserBenchmark.cs index 61b5a080..62fbee15 100644 --- a/src/GraphQLParser.Benchmarks/ParserBenchmark.cs +++ b/src/GraphQLParser.Benchmarks/Benchmarks/ParserBenchmark.cs @@ -1,11 +1,11 @@ -using BenchmarkDotNet.Attributes; using System.Collections.Generic; +using BenchmarkDotNet.Attributes; namespace GraphQLParser.Benchmarks { [MemoryDiagnoser] - [RPlotExporter, CsvMeasurementsExporter] - public class ParserBenchmark + //[RPlotExporter, CsvMeasurementsExporter] + public class ParserBenchmark : IBenchmark { private ILexemeCache? _serial; private ILexemeCache? _concurrent; @@ -44,10 +44,12 @@ public void Concurrent(Query query) public IEnumerable Queries() { yield return new Query { Name = "Simple", Text = SMALL_QUERY }; - yield return new Query { Name = "Schema", Text = INTROSPECTION_QUERY }; + yield return new Query { Name = "Schema", Text = _introspectionQuery }; yield return new Query { Name = "Params", Text = PARAMS_QUERY }; } + void IBenchmark.Run() => Parse(new Query { Name = "Simple", Text = SMALL_QUERY }); + public struct Query { public string Text; @@ -57,105 +59,6 @@ public struct Query private const string SMALL_QUERY = "query test { field1 field2(id: 5) { name address } field3 }"; private const string PARAMS_QUERY = @"query { something(name: ""one"", names: [""abc"", ""def"", ""klmn"", ""abra"", ""blabla"", ""kadabra"", ""100500""] code: 123, values: [1,2,3,4,5,6,7,8,9,0,10,20,30,40,50,60,70,80,90,100], modified: true, percents: [10.1, 20.2, 30.3, 40.4, 50.5, 60.6, 70.7], mask: [true, false, true, false, true, false], struct: { name: ""tom"", age: 42, height: 1.82, friends: [ { name: ""nik"" }, { name: ""ben"" }]}) }"; - private const string INTROSPECTION_QUERY = @" - query IntrospectionQuery { - __schema { - queryType { name } - mutationType { name } - subscriptionType { name } - types { - ...FullType - } - directives { - name - description - locations - args { - ...InputValue - } - } - } - } - - fragment FullType on __Type { - kind - name - description - fields(includeDeprecated: true) { - name - description - args { - ...InputValue - } - type { - ...TypeRef - } - isDeprecated - deprecationReason - directives { - name - args { - name - value - } - } - } - inputFields { - ...InputValue - } - interfaces { - ...TypeRef - } - enumValues(includeDeprecated: true) { - name - description - isDeprecated - deprecationReason - } - possibleTypes { - ...TypeRef - } - } - - fragment InputValue on __InputValue { - name - description - type { ...TypeRef } - defaultValue - } - - fragment TypeRef on __Type { - kind - name - ofType { - kind - name - ofType { - kind - name - ofType { - kind - name - ofType { - kind - name - ofType { - kind - name - ofType { - kind - name - ofType { - kind - name - } - } - } - } - } - } - } - } -"; + private static readonly string _introspectionQuery = "introspectionQuery".ReadGraphQLFile(); } -} \ No newline at end of file +} diff --git a/src/GraphQLParser.Benchmarks/ParserBinaryBenchmark.cs b/src/GraphQLParser.Benchmarks/Benchmarks/ParserBinaryBenchmark.cs similarity index 53% rename from src/GraphQLParser.Benchmarks/ParserBinaryBenchmark.cs rename to src/GraphQLParser.Benchmarks/Benchmarks/ParserBinaryBenchmark.cs index 67035082..11747348 100644 --- a/src/GraphQLParser.Benchmarks/ParserBinaryBenchmark.cs +++ b/src/GraphQLParser.Benchmarks/Benchmarks/ParserBinaryBenchmark.cs @@ -1,23 +1,32 @@ -using System.IO; using BenchmarkDotNet.Attributes; using GraphQLParser.Exceptions; namespace GraphQLParser.Benchmarks { [MemoryDiagnoser] - public class ParserBinaryBenchmark + public class ParserBinaryBenchmark : IBenchmark { + private string _binaryTest = null!; + + [GlobalSetup] + public void GlobalSetup() + { + _binaryTest = "BinaryTest".ReadGraphQLFile(); + } + [Benchmark] public void ParseBinaryFile() { try { var parser = new Parser(new Lexer()); - parser.Parse(new Source(File.ReadAllText("BinaryTest.graphql"))); + parser.Parse(new Source(_binaryTest)); } catch (GraphQLSyntaxErrorException) { } } + + void IBenchmark.Run() => ParseBinaryFile(); } } diff --git a/src/GraphQLParser.Benchmarks/BinaryTest.graphql b/src/GraphQLParser.Benchmarks/Files/BinaryTest.graphql similarity index 100% rename from src/GraphQLParser.Benchmarks/BinaryTest.graphql rename to src/GraphQLParser.Benchmarks/Files/BinaryTest.graphql diff --git a/src/GraphQLParser.Benchmarks/Files/github.graphql b/src/GraphQLParser.Benchmarks/Files/github.graphql new file mode 100644 index 00000000..8af9e877 --- /dev/null +++ b/src/GraphQLParser.Benchmarks/Files/github.graphql @@ -0,0 +1,9272 @@ +schema { + query: Query + mutation: Mutation +} + +input AcceptEnterpriseAdministratorInvitationInput { + invitationId: ID! + clientMutationId: String +} + +type AcceptEnterpriseAdministratorInvitationPayload { + clientMutationId: String + invitation: EnterpriseAdministratorInvitation + message: String +} + +input AcceptTopicSuggestionInput { + repositoryId: ID! + name: String! + clientMutationId: String +} + +type AcceptTopicSuggestionPayload { + clientMutationId: String + topic: Topic +} + +enum ActionExecutionCapabilitySetting { + DISABLED + ALL_ACTIONS + LOCAL_ACTIONS_ONLY + NO_POLICY +} + +interface Actor { + avatarUrl( + size: Int + ): URI! + login: String! + resourcePath: URI! + url: URI! +} + +type ActorLocation { + city: String + country: String + countryCode: String + region: String + regionCode: String +} + +input AddAssigneesToAssignableInput { + assignableId: ID! + assigneeIds: [ID!]! + clientMutationId: String +} + +type AddAssigneesToAssignablePayload { + assignable: Assignable + clientMutationId: String +} + +input AddCommentInput { + subjectId: ID! + body: String! + clientMutationId: String +} + +type AddCommentPayload { + clientMutationId: String + commentEdge: IssueCommentEdge + subject: Node + timelineEdge: IssueTimelineItemEdge +} + +input AddLabelsToLabelableInput { + labelableId: ID! + labelIds: [ID!]! + clientMutationId: String +} + +type AddLabelsToLabelablePayload { + clientMutationId: String + labelable: Labelable +} + +input AddProjectCardInput { + projectColumnId: ID! + contentId: ID + note: String + clientMutationId: String +} + +type AddProjectCardPayload { + cardEdge: ProjectCardEdge + clientMutationId: String + projectColumn: ProjectColumn +} + +input AddProjectColumnInput { + projectId: ID! + name: String! + clientMutationId: String +} + +type AddProjectColumnPayload { + clientMutationId: String + columnEdge: ProjectColumnEdge + project: Project +} + +input AddPullRequestReviewCommentInput { + pullRequestReviewId: ID! + commitOID: GitObjectID + body: String! + path: String + position: Int + inReplyTo: ID + clientMutationId: String +} + +type AddPullRequestReviewCommentPayload { + clientMutationId: String + comment: PullRequestReviewComment + commentEdge: PullRequestReviewCommentEdge +} + +input AddPullRequestReviewInput { + pullRequestId: ID! + commitOID: GitObjectID + body: String + event: PullRequestReviewEvent + comments: [DraftPullRequestReviewComment] + clientMutationId: String +} + +type AddPullRequestReviewPayload { + clientMutationId: String + pullRequestReview: PullRequestReview + reviewEdge: PullRequestReviewEdge +} + +input AddReactionInput { + subjectId: ID! + content: ReactionContent! + clientMutationId: String +} + +type AddReactionPayload { + clientMutationId: String + reaction: Reaction + subject: Reactable +} + +input AddStarInput { + starrableId: ID! + clientMutationId: String +} + +type AddStarPayload { + clientMutationId: String + starrable: Starrable +} + +type AddedToProjectEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + id: ID! +} + +type App implements Node { + createdAt: DateTime! + databaseId: Int + description: String + id: ID! + logoBackgroundColor: String! + logoUrl( + size: Int + ): URI! + name: String! + slug: String! + updatedAt: DateTime! + url: URI! +} + +type AppEdge { + cursor: String! + node: App +} + +input ArchiveRepositoryInput { + repositoryId: ID! + clientMutationId: String +} + +type ArchiveRepositoryPayload { + clientMutationId: String + repository: Repository +} + +interface Assignable { + assignees( + after: String + before: String + first: Int + last: Int + ): UserConnection! +} + +type AssignedEvent implements Node { + actor: Actor + assignable: Assignable! + assignee: Assignee + createdAt: DateTime! + id: ID! + user: User @deprecated(reason: "Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC.") +} + +union Assignee = Bot | Mannequin | Organization | User + +interface AuditEntry { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + operationType: OperationType + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +union AuditEntryActor = Bot | Organization | User + +input AuditLogOrder { + field: AuditLogOrderField + direction: OrderDirection +} + +enum AuditLogOrderField { + CREATED_AT +} + +type BaseRefChangedEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + id: ID! +} + +type BaseRefForcePushedEvent implements Node { + actor: Actor + afterCommit: Commit + beforeCommit: Commit + createdAt: DateTime! + id: ID! + pullRequest: PullRequest! + ref: Ref +} + +type Blame { + ranges: [BlameRange!]! +} + +type BlameRange { + age: Int! + commit: Commit! + endingLine: Int! + startingLine: Int! +} + +type Blob implements Node, GitObject { + abbreviatedOid: String! + byteSize: Int! + commitResourcePath: URI! + commitUrl: URI! + id: ID! + isBinary: Boolean! + isTruncated: Boolean! + oid: GitObjectID! + repository: Repository! + text: String +} + +scalar Boolean + +type Bot implements Node, Actor, UniformResourceLocatable { + avatarUrl( + size: Int + ): URI! + createdAt: DateTime! + databaseId: Int + id: ID! + login: String! + resourcePath: URI! + updatedAt: DateTime! + url: URI! +} + +type BranchProtectionRule implements Node { + branchProtectionRuleConflicts( + after: String + before: String + first: Int + last: Int + ): BranchProtectionRuleConflictConnection! + creator: Actor + databaseId: Int + dismissesStaleReviews: Boolean! + id: ID! + isAdminEnforced: Boolean! + matchingRefs( + after: String + before: String + first: Int + last: Int + ): RefConnection! + pattern: String! + pushAllowances( + after: String + before: String + first: Int + last: Int + ): PushAllowanceConnection! + repository: Repository + requiredApprovingReviewCount: Int + requiredStatusCheckContexts: [String] + requiresApprovingReviews: Boolean! + requiresCodeOwnerReviews: Boolean! + requiresCommitSignatures: Boolean! + requiresStatusChecks: Boolean! + requiresStrictStatusChecks: Boolean! + restrictsPushes: Boolean! + restrictsReviewDismissals: Boolean! + reviewDismissalAllowances( + after: String + before: String + first: Int + last: Int + ): ReviewDismissalAllowanceConnection! +} + +type BranchProtectionRuleConflict { + branchProtectionRule: BranchProtectionRule + conflictingBranchProtectionRule: BranchProtectionRule + ref: Ref +} + +type BranchProtectionRuleConflictConnection { + edges: [BranchProtectionRuleConflictEdge] + nodes: [BranchProtectionRuleConflict] + pageInfo: PageInfo! + totalCount: Int! +} + +type BranchProtectionRuleConflictEdge { + cursor: String! + node: BranchProtectionRuleConflict +} + +type BranchProtectionRuleConnection { + edges: [BranchProtectionRuleEdge] + nodes: [BranchProtectionRule] + pageInfo: PageInfo! + totalCount: Int! +} + +type BranchProtectionRuleEdge { + cursor: String! + node: BranchProtectionRule +} + +input CancelEnterpriseAdminInvitationInput { + invitationId: ID! + clientMutationId: String +} + +type CancelEnterpriseAdminInvitationPayload { + clientMutationId: String + invitation: EnterpriseAdministratorInvitation + message: String +} + +input ChangeUserStatusInput { + emoji: String + message: String + organizationId: ID + limitedAvailability: Boolean = false + expiresAt: DateTime + clientMutationId: String +} + +type ChangeUserStatusPayload { + clientMutationId: String + status: UserStatus +} + +input ClearLabelsFromLabelableInput { + labelableId: ID! + clientMutationId: String +} + +type ClearLabelsFromLabelablePayload { + clientMutationId: String + labelable: Labelable +} + +input CloneProjectInput { + targetOwnerId: ID! + sourceId: ID! + includeWorkflows: Boolean! + name: String! + body: String + public: Boolean + clientMutationId: String +} + +type CloneProjectPayload { + clientMutationId: String + jobStatusId: String + project: Project +} + +input CloneTemplateRepositoryInput { + repositoryId: ID! + name: String! + ownerId: ID! + description: String + visibility: RepositoryVisibility! + clientMutationId: String +} + +type CloneTemplateRepositoryPayload { + clientMutationId: String + repository: Repository +} + +interface Closable { + closed: Boolean! + closedAt: DateTime +} + +input CloseIssueInput { + issueId: ID! + clientMutationId: String +} + +type CloseIssuePayload { + clientMutationId: String + issue: Issue +} + +input ClosePullRequestInput { + pullRequestId: ID! + clientMutationId: String +} + +type ClosePullRequestPayload { + clientMutationId: String + pullRequest: PullRequest +} + +type ClosedEvent implements Node, UniformResourceLocatable { + actor: Actor + closable: Closable! + closer: Closer + createdAt: DateTime! + id: ID! + resourcePath: URI! + url: URI! +} + +union Closer = Commit | PullRequest + +type CodeOfConduct implements Node { + body: String + id: ID! + key: String! + name: String! + resourcePath: URI + url: URI +} + +enum CollaboratorAffiliation { + OUTSIDE + DIRECT + ALL +} + +union CollectionItemContent = Organization | Repository | User + +interface Comment { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + createdAt: DateTime! + createdViaEmail: Boolean! + editor: Actor + id: ID! + includesCreatedEdit: Boolean! + lastEditedAt: DateTime + publishedAt: DateTime + updatedAt: DateTime! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerDidAuthor: Boolean! +} + +enum CommentAuthorAssociation { + MEMBER + OWNER + COLLABORATOR + CONTRIBUTOR + FIRST_TIME_CONTRIBUTOR + FIRST_TIMER + NONE +} + +enum CommentCannotUpdateReason { + ARCHIVED + INSUFFICIENT_ACCESS + LOCKED + LOGIN_REQUIRED + MAINTENANCE + VERIFIED_EMAIL_REQUIRED + DENIED +} + +type CommentDeletedEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + id: ID! +} + +type Commit implements Node, GitObject, Subscribable, UniformResourceLocatable { + abbreviatedOid: String! + additions: Int! + associatedPullRequests( + after: String + before: String + first: Int + last: Int + orderBy: PullRequestOrder = {field: CREATED_AT, direction: ASC} + ): PullRequestConnection + author: GitActor + authoredByCommitter: Boolean! + authoredDate: DateTime! + blame( + path: String! + ): Blame! + changedFiles: Int! + comments( + after: String + before: String + first: Int + last: Int + ): CommitCommentConnection! + commitResourcePath: URI! + commitUrl: URI! + committedDate: DateTime! + committedViaWeb: Boolean! + committer: GitActor + deletions: Int! + deployments( + environments: [String!] + orderBy: DeploymentOrder = {field: CREATED_AT, direction: ASC} + after: String + before: String + first: Int + last: Int + ): DeploymentConnection + history( + after: String + before: String + first: Int + last: Int + path: String + author: CommitAuthor + since: GitTimestamp + until: GitTimestamp + ): CommitHistoryConnection! + id: ID! + message: String! + messageBody: String! + messageBodyHTML: HTML! + messageHeadline: String! + messageHeadlineHTML: HTML! + oid: GitObjectID! + parents( + after: String + before: String + first: Int + last: Int + ): CommitConnection! + pushedDate: DateTime + repository: Repository! + resourcePath: URI! + signature: GitSignature + status: Status + tarballUrl: URI! + tree: Tree! + treeResourcePath: URI! + treeUrl: URI! + url: URI! + viewerCanSubscribe: Boolean! + viewerSubscription: SubscriptionState + zipballUrl: URI! +} + +input CommitAuthor { + id: ID + emails: [String!] +} + +type CommitComment implements Node, Comment, Deletable, Updatable, UpdatableComment, Reactable, RepositoryNode { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + commit: Commit + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + editor: Actor + id: ID! + includesCreatedEdit: Boolean! + isMinimized: Boolean! + lastEditedAt: DateTime + minimizedReason: String + path: String + position: Int + publishedAt: DateTime + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + repository: Repository! + resourcePath: URI! + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanDelete: Boolean! + viewerCanMinimize: Boolean! + viewerCanReact: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! +} + +type CommitCommentConnection { + edges: [CommitCommentEdge] + nodes: [CommitComment] + pageInfo: PageInfo! + totalCount: Int! +} + +type CommitCommentEdge { + cursor: String! + node: CommitComment +} + +type CommitCommentThread implements Node, RepositoryNode { + comments( + after: String + before: String + first: Int + last: Int + ): CommitCommentConnection! + commit: Commit + id: ID! + path: String + position: Int + repository: Repository! +} + +type CommitConnection { + edges: [CommitEdge] + nodes: [Commit] + pageInfo: PageInfo! + totalCount: Int! +} + +input CommitContributionOrder { + field: CommitContributionOrderField! + direction: OrderDirection! +} + +enum CommitContributionOrderField { + OCCURRED_AT + COMMIT_COUNT +} + +type CommitContributionsByRepository { + contributions( + after: String + before: String + first: Int + last: Int + orderBy: CommitContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedCommitContributionConnection! + repository: Repository! + resourcePath: URI! + url: URI! +} + +type CommitEdge { + cursor: String! + node: Commit +} + +type CommitHistoryConnection { + edges: [CommitEdge] + nodes: [Commit] + pageInfo: PageInfo! + totalCount: Int! +} + +type ContentAttachment { + body: String! + contentReference: ContentReference! + databaseId: Int! + id: ID! + title: String! +} + +type ContentReference { + databaseId: Int! + id: ID! + reference: String! +} + +interface Contribution { + isRestricted: Boolean! + occurredAt: DateTime! + resourcePath: URI! + url: URI! + user: User! +} + +type ContributionCalendar { + colors: [String!]! + isHalloween: Boolean! + months: [ContributionCalendarMonth!]! + totalContributions: Int! + weeks: [ContributionCalendarWeek!]! +} + +type ContributionCalendarDay { + color: String! + contributionCount: Int! + date: Date! + weekday: Int! +} + +type ContributionCalendarMonth { + firstDay: Date! + name: String! + totalWeeks: Int! + year: Int! +} + +type ContributionCalendarWeek { + contributionDays: [ContributionCalendarDay!]! + firstDay: Date! +} + +input ContributionOrder { + field: ContributionOrderField + direction: OrderDirection! +} + +enum ContributionOrderField { + OCCURRED_AT +} + +type ContributionsCollection { + commitContributionsByRepository( + maxRepositories: Int = 25 + ): [CommitContributionsByRepository!]! + contributionCalendar: ContributionCalendar! + contributionYears: [Int!]! + doesEndInCurrentMonth: Boolean! + earliestRestrictedContributionDate: Date + endedAt: DateTime! + firstIssueContribution: CreatedIssueOrRestrictedContribution + firstPullRequestContribution: CreatedPullRequestOrRestrictedContribution + firstRepositoryContribution: CreatedRepositoryOrRestrictedContribution + hasActivityInThePast: Boolean! + hasAnyContributions: Boolean! + hasAnyRestrictedContributions: Boolean! + isSingleDay: Boolean! + issueContributions( + after: String + before: String + first: Int + last: Int + excludeFirst: Boolean = false + excludePopular: Boolean = false + orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedIssueContributionConnection! + issueContributionsByRepository( + maxRepositories: Int = 25 + excludeFirst: Boolean = false + excludePopular: Boolean = false + ): [IssueContributionsByRepository!]! + joinedGitHubContribution: JoinedGitHubContribution + latestRestrictedContributionDate: Date + mostRecentCollectionWithActivity: ContributionsCollection + mostRecentCollectionWithoutActivity: ContributionsCollection + popularIssueContribution: CreatedIssueContribution + popularPullRequestContribution: CreatedPullRequestContribution + pullRequestContributions( + after: String + before: String + first: Int + last: Int + excludeFirst: Boolean = false + excludePopular: Boolean = false + orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedPullRequestContributionConnection! + pullRequestContributionsByRepository( + maxRepositories: Int = 25 + excludeFirst: Boolean = false + excludePopular: Boolean = false + ): [PullRequestContributionsByRepository!]! + pullRequestReviewContributions( + after: String + before: String + first: Int + last: Int + orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedPullRequestReviewContributionConnection! + pullRequestReviewContributionsByRepository( + maxRepositories: Int = 25 + ): [PullRequestReviewContributionsByRepository!]! + repositoryContributions( + after: String + before: String + first: Int + last: Int + excludeFirst: Boolean = false + orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedRepositoryContributionConnection! + restrictedContributionsCount: Int! + startedAt: DateTime! + totalCommitContributions: Int! + totalIssueContributions( + excludeFirst: Boolean = false + excludePopular: Boolean = false + ): Int! + totalPullRequestContributions( + excludeFirst: Boolean = false + excludePopular: Boolean = false + ): Int! + totalPullRequestReviewContributions: Int! + totalRepositoriesWithContributedCommits: Int! + totalRepositoriesWithContributedIssues( + excludeFirst: Boolean = false + excludePopular: Boolean = false + ): Int! + totalRepositoriesWithContributedPullRequestReviews: Int! + totalRepositoriesWithContributedPullRequests( + excludeFirst: Boolean = false + excludePopular: Boolean = false + ): Int! + totalRepositoryContributions( + excludeFirst: Boolean = false + ): Int! + user: User! +} + +input ConvertProjectCardNoteToIssueInput { + projectCardId: ID! + repositoryId: ID! + title: String + body: String + clientMutationId: String +} + +type ConvertProjectCardNoteToIssuePayload { + clientMutationId: String + projectCard: ProjectCard +} + +type ConvertedNoteToIssueEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + id: ID! +} + +input CreateBranchProtectionRuleInput { + repositoryId: ID! + pattern: String! + requiresApprovingReviews: Boolean + requiredApprovingReviewCount: Int + requiresCommitSignatures: Boolean + isAdminEnforced: Boolean + requiresStatusChecks: Boolean + requiresStrictStatusChecks: Boolean + requiresCodeOwnerReviews: Boolean + dismissesStaleReviews: Boolean + restrictsReviewDismissals: Boolean + reviewDismissalActorIds: [ID!] + restrictsPushes: Boolean + pushActorIds: [ID!] + requiredStatusCheckContexts: [String!] + clientMutationId: String +} + +type CreateBranchProtectionRulePayload { + branchProtectionRule: BranchProtectionRule + clientMutationId: String +} + +input CreateContentAttachmentInput { + contentReferenceId: ID! + title: String! + body: String! + clientMutationId: String +} + +input CreateEnterpriseOrganizationInput { + enterpriseId: ID! + login: String! + profileName: String! + billingEmail: String! + adminLogins: [String!]! + clientMutationId: String +} + +type CreateEnterpriseOrganizationPayload { + clientMutationId: String + enterprise: Enterprise + organization: Organization +} + +input CreateIssueInput { + repositoryId: ID! + title: String! + body: String + assigneeIds: [ID!] + milestoneId: ID + labelIds: [ID!] + projectIds: [ID!] + clientMutationId: String +} + +type CreateIssuePayload { + clientMutationId: String + issue: Issue +} + +input CreateProjectInput { + ownerId: ID! + name: String! + body: String + template: ProjectTemplate + repositoryIds: [ID!] + clientMutationId: String +} + +type CreateProjectPayload { + clientMutationId: String + project: Project +} + +input CreatePullRequestInput { + repositoryId: ID! + baseRefName: String! + headRefName: String! + title: String! + body: String + maintainerCanModify: Boolean = true + clientMutationId: String +} + +type CreatePullRequestPayload { + clientMutationId: String + pullRequest: PullRequest +} + +input CreateRefInput { + repositoryId: ID! + name: String! + oid: GitObjectID! + clientMutationId: String +} + +type CreateRefPayload { + clientMutationId: String + ref: Ref +} + +input CreateRepositoryInput { + name: String! + ownerId: ID + description: String + visibility: RepositoryVisibility! + template: Boolean = false + homepageUrl: URI + hasWikiEnabled: Boolean = false + hasIssuesEnabled: Boolean = true + teamId: ID + clientMutationId: String +} + +type CreateRepositoryPayload { + clientMutationId: String + repository: Repository +} + +input CreateTeamDiscussionCommentInput { + discussionId: ID! + body: String! + clientMutationId: String +} + +type CreateTeamDiscussionCommentPayload { + clientMutationId: String + teamDiscussionComment: TeamDiscussionComment +} + +input CreateTeamDiscussionInput { + teamId: ID! + title: String! + body: String! + private: Boolean + clientMutationId: String +} + +type CreateTeamDiscussionPayload { + clientMutationId: String + teamDiscussion: TeamDiscussion +} + +type CreatedCommitContribution implements Contribution { + commitCount: Int! + isRestricted: Boolean! + occurredAt: DateTime! + repository: Repository! + resourcePath: URI! + url: URI! + user: User! +} + +type CreatedCommitContributionConnection { + edges: [CreatedCommitContributionEdge] + nodes: [CreatedCommitContribution] + pageInfo: PageInfo! + totalCount: Int! +} + +type CreatedCommitContributionEdge { + cursor: String! + node: CreatedCommitContribution +} + +type CreatedIssueContribution implements Contribution { + isRestricted: Boolean! + issue: Issue! + occurredAt: DateTime! + resourcePath: URI! + url: URI! + user: User! +} + +type CreatedIssueContributionConnection { + edges: [CreatedIssueContributionEdge] + nodes: [CreatedIssueContribution] + pageInfo: PageInfo! + totalCount: Int! +} + +type CreatedIssueContributionEdge { + cursor: String! + node: CreatedIssueContribution +} + +union CreatedIssueOrRestrictedContribution = CreatedIssueContribution | RestrictedContribution + +type CreatedPullRequestContribution implements Contribution { + isRestricted: Boolean! + occurredAt: DateTime! + pullRequest: PullRequest! + resourcePath: URI! + url: URI! + user: User! +} + +type CreatedPullRequestContributionConnection { + edges: [CreatedPullRequestContributionEdge] + nodes: [CreatedPullRequestContribution] + pageInfo: PageInfo! + totalCount: Int! +} + +type CreatedPullRequestContributionEdge { + cursor: String! + node: CreatedPullRequestContribution +} + +union CreatedPullRequestOrRestrictedContribution = CreatedPullRequestContribution | RestrictedContribution + +type CreatedPullRequestReviewContribution implements Contribution { + isRestricted: Boolean! + occurredAt: DateTime! + pullRequest: PullRequest! + pullRequestReview: PullRequestReview! + repository: Repository! + resourcePath: URI! + url: URI! + user: User! +} + +type CreatedPullRequestReviewContributionConnection { + edges: [CreatedPullRequestReviewContributionEdge] + nodes: [CreatedPullRequestReviewContribution] + pageInfo: PageInfo! + totalCount: Int! +} + +type CreatedPullRequestReviewContributionEdge { + cursor: String! + node: CreatedPullRequestReviewContribution +} + +type CreatedRepositoryContribution implements Contribution { + isRestricted: Boolean! + occurredAt: DateTime! + repository: Repository! + resourcePath: URI! + url: URI! + user: User! +} + +type CreatedRepositoryContributionConnection { + edges: [CreatedRepositoryContributionEdge] + nodes: [CreatedRepositoryContribution] + pageInfo: PageInfo! + totalCount: Int! +} + +type CreatedRepositoryContributionEdge { + cursor: String! + node: CreatedRepositoryContribution +} + +union CreatedRepositoryOrRestrictedContribution = CreatedRepositoryContribution | RestrictedContribution + +type CrossReferencedEvent implements Node, UniformResourceLocatable { + actor: Actor + createdAt: DateTime! + id: ID! + isCrossRepository: Boolean! + referencedAt: DateTime! + resourcePath: URI! + source: ReferencedSubject! + target: ReferencedSubject! + url: URI! + willCloseTarget: Boolean! +} + +scalar Date + +scalar DateTime + +input DeclineTopicSuggestionInput { + repositoryId: ID! + name: String! + reason: TopicSuggestionDeclineReason! + clientMutationId: String +} + +type DeclineTopicSuggestionPayload { + clientMutationId: String + topic: Topic +} + +enum DefaultRepositoryPermissionField { + NONE + READ + WRITE + ADMIN +} + +interface Deletable { + viewerCanDelete: Boolean! +} + +input DeleteBranchProtectionRuleInput { + branchProtectionRuleId: ID! + clientMutationId: String +} + +type DeleteBranchProtectionRulePayload { + clientMutationId: String +} + +input DeleteIssueCommentInput { + id: ID! + clientMutationId: String +} + +type DeleteIssueCommentPayload { + clientMutationId: String +} + +input DeleteIssueInput { + issueId: ID! + clientMutationId: String +} + +type DeleteIssuePayload { + clientMutationId: String + repository: Repository +} + +input DeletePackageVersionInput { + packageVersionId: ID! + clientMutationId: String +} + +input DeleteProjectCardInput { + cardId: ID! + clientMutationId: String +} + +type DeleteProjectCardPayload { + clientMutationId: String + column: ProjectColumn + deletedCardId: ID +} + +input DeleteProjectColumnInput { + columnId: ID! + clientMutationId: String +} + +type DeleteProjectColumnPayload { + clientMutationId: String + deletedColumnId: ID + project: Project +} + +input DeleteProjectInput { + projectId: ID! + clientMutationId: String +} + +type DeleteProjectPayload { + clientMutationId: String + owner: ProjectOwner +} + +input DeletePullRequestReviewCommentInput { + id: ID! + clientMutationId: String +} + +type DeletePullRequestReviewCommentPayload { + clientMutationId: String + pullRequestReview: PullRequestReview +} + +input DeletePullRequestReviewInput { + pullRequestReviewId: ID! + clientMutationId: String +} + +type DeletePullRequestReviewPayload { + clientMutationId: String + pullRequestReview: PullRequestReview +} + +input DeleteRefInput { + refId: ID! + clientMutationId: String +} + +type DeleteRefPayload { + clientMutationId: String +} + +input DeleteTeamDiscussionCommentInput { + id: ID! + clientMutationId: String +} + +type DeleteTeamDiscussionCommentPayload { + clientMutationId: String +} + +input DeleteTeamDiscussionInput { + id: ID! + clientMutationId: String +} + +type DeleteTeamDiscussionPayload { + clientMutationId: String +} + +type DemilestonedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + milestoneTitle: String! + subject: MilestoneItem! +} + +type DeployKey implements Node { + createdAt: DateTime! + id: ID! + key: String! + readOnly: Boolean! + title: String! + verified: Boolean! +} + +type DeployKeyConnection { + edges: [DeployKeyEdge] + nodes: [DeployKey] + pageInfo: PageInfo! + totalCount: Int! +} + +type DeployKeyEdge { + cursor: String! + node: DeployKey +} + +type DeployedEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + deployment: Deployment! + id: ID! + pullRequest: PullRequest! + ref: Ref +} + +type Deployment implements Node { + commit: Commit + commitOid: String! + createdAt: DateTime! + creator: Actor + databaseId: Int + description: String + environment: String + id: ID! + latestStatus: DeploymentStatus + payload: String + ref: Ref + repository: Repository! + state: DeploymentState + statuses( + after: String + before: String + first: Int + last: Int + ): DeploymentStatusConnection + task: String + updatedAt: DateTime! +} + +type DeploymentConnection { + edges: [DeploymentEdge] + nodes: [Deployment] + pageInfo: PageInfo! + totalCount: Int! +} + +type DeploymentEdge { + cursor: String! + node: Deployment +} + +type DeploymentEnvironmentChangedEvent implements Node { + actor: Actor + createdAt: DateTime! + deploymentStatus: DeploymentStatus! + id: ID! + pullRequest: PullRequest! +} + +input DeploymentOrder { + field: DeploymentOrderField! + direction: OrderDirection! +} + +enum DeploymentOrderField { + CREATED_AT +} + +enum DeploymentState { + ABANDONED + ACTIVE + DESTROYED + ERROR + FAILURE + INACTIVE + PENDING + QUEUED + IN_PROGRESS +} + +type DeploymentStatus implements Node { + createdAt: DateTime! + creator: Actor + deployment: Deployment! + description: String + environmentUrl: URI + id: ID! + logUrl: URI + state: DeploymentStatusState! + updatedAt: DateTime! +} + +type DeploymentStatusConnection { + edges: [DeploymentStatusEdge] + nodes: [DeploymentStatus] + pageInfo: PageInfo! + totalCount: Int! +} + +type DeploymentStatusEdge { + cursor: String! + node: DeploymentStatus +} + +enum DeploymentStatusState { + PENDING + SUCCESS + FAILURE + INACTIVE + ERROR + QUEUED + IN_PROGRESS +} + +input DismissPullRequestReviewInput { + pullRequestReviewId: ID! + message: String! + clientMutationId: String +} + +type DismissPullRequestReviewPayload { + clientMutationId: String + pullRequestReview: PullRequestReview +} + +input DraftPullRequestReviewComment { + path: String! + position: Int! + body: String! +} + +type Enterprise implements Node { + avatarUrl( + size: Int + ): URI! + billingInfo: EnterpriseBillingInfo + createdAt: DateTime! + databaseId: Int + description: String + descriptionHTML: HTML! + id: ID! + location: String + members( + organizationLogins: [String!] + query: String + orderBy: EnterpriseMemberOrder = {field: LOGIN, direction: ASC} + role: EnterpriseUserAccountMembershipRole + deployment: EnterpriseUserDeployment + after: String + before: String + first: Int + last: Int + ): EnterpriseMemberConnection! + name: String! + organizations( + query: String + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + after: String + before: String + first: Int + last: Int + ): OrganizationConnection! + ownerInfo: EnterpriseOwnerInfo + resourcePath: URI! + url: URI! + userAccounts( + after: String + before: String + first: Int + last: Int + ): EnterpriseUserAccountConnection! + viewerIsAdmin: Boolean! + websiteUrl: URI +} + +type EnterpriseAdministratorConnection { + edges: [EnterpriseAdministratorEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseAdministratorEdge { + cursor: String! + node: User + role: EnterpriseAdministratorRole! +} + +type EnterpriseAdministratorInvitation implements Node { + createdAt: DateTime! + email: String + enterprise: Enterprise! + id: ID! + invitee: User + inviter: User + role: EnterpriseAdministratorRole! +} + +type EnterpriseAdministratorInvitationConnection { + edges: [EnterpriseAdministratorInvitationEdge] + nodes: [EnterpriseAdministratorInvitation] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseAdministratorInvitationEdge { + cursor: String! + node: EnterpriseAdministratorInvitation +} + +input EnterpriseAdministratorInvitationOrder { + field: EnterpriseAdministratorInvitationOrderField! + direction: OrderDirection! +} + +enum EnterpriseAdministratorInvitationOrderField { + CREATED_AT +} + +enum EnterpriseAdministratorRole { + OWNER + BILLING_MANAGER +} + +interface EnterpriseAuditEntryData { + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI +} + +type EnterpriseBillingInfo { + allLicensableUsersCount: Int! + assetPacks: Int! + availableSeats: Int! @deprecated(reason: "`availableSeats` will be replaced with `totalAvailableLicenses` to provide more clarity on the value being returned Use EnterpriseBillingInfo.totalAvailableLicenses instead. Removal on 2020-01-01 UTC.") + bandwidthQuota: Float! + bandwidthUsage: Float! + bandwidthUsagePercentage: Int! + seats: Int! @deprecated(reason: "`seats` will be replaced with `totalLicenses` to provide more clarity on the value being returned Use EnterpriseBillingInfo.totalLicenses instead. Removal on 2020-01-01 UTC.") + storageQuota: Float! + storageUsage: Float! + storageUsagePercentage: Int! + totalAvailableLicenses: Int! + totalLicenses: Int! +} + +enum EnterpriseDefaultRepositoryPermissionSettingValue { + NO_POLICY + ADMIN + WRITE + READ + NONE +} + +type EnterpriseEdge { + cursor: String! + node: Enterprise +} + +enum EnterpriseEnabledDisabledSettingValue { + ENABLED + DISABLED + NO_POLICY +} + +enum EnterpriseEnabledSettingValue { + ENABLED + NO_POLICY +} + +type EnterpriseIdentityProvider implements Node { + digestMethod: SamlDigestAlgorithm + enterprise: Enterprise + externalIdentities( + after: String + before: String + first: Int + last: Int + ): ExternalIdentityConnection! + id: ID! + idpCertificate: X509Certificate + issuer: String + recoveryCodes: [String!] + signatureMethod: SamlSignatureAlgorithm + ssoUrl: URI +} + +union EnterpriseMember = EnterpriseUserAccount | User + +type EnterpriseMemberConnection { + edges: [EnterpriseMemberEdge] + nodes: [EnterpriseMember] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseMemberEdge { + cursor: String! + isUnlicensed: Boolean! + node: EnterpriseMember +} + +input EnterpriseMemberOrder { + field: EnterpriseMemberOrderField! + direction: OrderDirection! +} + +enum EnterpriseMemberOrderField { + LOGIN + CREATED_AT +} + +enum EnterpriseMembersCanCreateRepositoriesSettingValue { + NO_POLICY + ALL + PUBLIC + PRIVATE + DISABLED +} + +enum EnterpriseMembersCanMakePurchasesSettingValue { + ENABLED + DISABLED +} + +enum EnterpriseMembershipType { + ALL + ADMIN + BILLING_MANAGER + ORG_MEMBERSHIP +} + +input EnterpriseOrder { + field: EnterpriseOrderField! + direction: OrderDirection! +} + +enum EnterpriseOrderField { + NAME +} + +type EnterpriseOrganizationMembershipConnection { + edges: [EnterpriseOrganizationMembershipEdge] + nodes: [Organization] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseOrganizationMembershipEdge { + cursor: String! + node: Organization + role: EnterpriseUserAccountMembershipRole! +} + +type EnterpriseOutsideCollaboratorConnection { + edges: [EnterpriseOutsideCollaboratorEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseOutsideCollaboratorEdge { + cursor: String! + isUnlicensed: Boolean! + node: User + repositories( + after: String + before: String + first: Int + last: Int + orderBy: RepositoryOrder = {field: NAME, direction: ASC} + ): EnterpriseRepositoryInfoConnection! +} + +type EnterpriseOwnerInfo { + actionExecutionCapabilitySettingOrganizations( + after: String + before: String + first: Int + last: Int + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + admins( + query: String + role: EnterpriseAdministratorRole + orderBy: EnterpriseMemberOrder = {field: LOGIN, direction: ASC} + after: String + before: String + first: Int + last: Int + ): EnterpriseAdministratorConnection! + affiliatedUsersWithTwoFactorDisabled( + after: String + before: String + first: Int + last: Int + ): UserConnection! + affiliatedUsersWithTwoFactorDisabledExist: Boolean! + allowPrivateRepositoryForkingSetting: EnterpriseEnabledDisabledSettingValue! + allowPrivateRepositoryForkingSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + defaultRepositoryPermissionSetting: EnterpriseDefaultRepositoryPermissionSettingValue! + defaultRepositoryPermissionSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: DefaultRepositoryPermissionField! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + enterpriseServerInstallations( + after: String + before: String + first: Int + last: Int + connectedOnly: Boolean = false + orderBy: EnterpriseServerInstallationOrder = {field: HOST_NAME, direction: ASC} + ): EnterpriseServerInstallationConnection! + isUpdatingDefaultRepositoryPermission: Boolean! + isUpdatingTwoFactorRequirement: Boolean! + membersCanChangeRepositoryVisibilitySetting: EnterpriseEnabledDisabledSettingValue! + membersCanChangeRepositoryVisibilitySettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + membersCanCreateInternalRepositoriesSetting: Boolean + membersCanCreatePrivateRepositoriesSetting: Boolean + membersCanCreatePublicRepositoriesSetting: Boolean + membersCanCreateRepositoriesSetting: EnterpriseMembersCanCreateRepositoriesSettingValue + membersCanCreateRepositoriesSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: OrganizationMembersCanCreateRepositoriesSettingValue! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + membersCanDeleteIssuesSetting: EnterpriseEnabledDisabledSettingValue! + membersCanDeleteIssuesSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + membersCanDeleteRepositoriesSetting: EnterpriseEnabledDisabledSettingValue! + membersCanDeleteRepositoriesSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + membersCanInviteCollaboratorsSetting: EnterpriseEnabledDisabledSettingValue! + membersCanInviteCollaboratorsSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + membersCanMakePurchasesSetting: EnterpriseMembersCanMakePurchasesSettingValue! + membersCanUpdateProtectedBranchesSetting: EnterpriseEnabledDisabledSettingValue! + membersCanUpdateProtectedBranchesSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + membersCanViewDependencyInsightsSetting: EnterpriseEnabledDisabledSettingValue! + membersCanViewDependencyInsightsSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + organizationProjectsSetting: EnterpriseEnabledDisabledSettingValue! + organizationProjectsSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + outsideCollaborators( + login: String + query: String + orderBy: EnterpriseMemberOrder = {field: LOGIN, direction: ASC} + visibility: RepositoryVisibility + after: String + before: String + first: Int + last: Int + ): EnterpriseOutsideCollaboratorConnection! + pendingAdminInvitations( + query: String + orderBy: EnterpriseAdministratorInvitationOrder = {field: CREATED_AT, direction: DESC} + role: EnterpriseAdministratorRole + after: String + before: String + first: Int + last: Int + ): EnterpriseAdministratorInvitationConnection! + pendingCollaborators( + query: String + orderBy: RepositoryInvitationOrder = {field: INVITEE_LOGIN, direction: ASC} + after: String + before: String + first: Int + last: Int + ): EnterprisePendingCollaboratorConnection! + pendingMemberInvitations( + query: String + after: String + before: String + first: Int + last: Int + ): EnterprisePendingMemberInvitationConnection! + repositoryProjectsSetting: EnterpriseEnabledDisabledSettingValue! + repositoryProjectsSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + samlIdentityProvider: EnterpriseIdentityProvider + samlIdentityProviderSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: IdentityProviderConfigurationState! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + teamDiscussionsSetting: EnterpriseEnabledDisabledSettingValue! + teamDiscussionsSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! + twoFactorRequiredSetting: EnterpriseEnabledSettingValue! + twoFactorRequiredSettingOrganizations( + after: String + before: String + first: Int + last: Int + value: Boolean! + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + ): OrganizationConnection! +} + +type EnterprisePendingCollaboratorConnection { + edges: [EnterprisePendingCollaboratorEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterprisePendingCollaboratorEdge { + cursor: String! + isUnlicensed: Boolean! + node: User + repositories( + after: String + before: String + first: Int + last: Int + orderBy: RepositoryOrder = {field: NAME, direction: ASC} + ): EnterpriseRepositoryInfoConnection! +} + +type EnterprisePendingMemberInvitationConnection { + edges: [EnterprisePendingMemberInvitationEdge] + nodes: [OrganizationInvitation] + pageInfo: PageInfo! + totalCount: Int! + totalUniqueUserCount: Int! +} + +type EnterprisePendingMemberInvitationEdge { + cursor: String! + isUnlicensed: Boolean! + node: OrganizationInvitation +} + +type EnterpriseRepositoryInfo implements Node { + id: ID! + isPrivate: Boolean! + name: String! + nameWithOwner: String! +} + +type EnterpriseRepositoryInfoConnection { + edges: [EnterpriseRepositoryInfoEdge] + nodes: [EnterpriseRepositoryInfo] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseRepositoryInfoEdge { + cursor: String! + node: EnterpriseRepositoryInfo +} + +type EnterpriseServerInstallation implements Node { + createdAt: DateTime! + customerName: String! + hostName: String! + id: ID! + isConnected: Boolean! + updatedAt: DateTime! + userAccounts( + orderBy: EnterpriseServerUserAccountOrder = {field: LOGIN, direction: ASC} + after: String + before: String + first: Int + last: Int + ): EnterpriseServerUserAccountConnection! + userAccountsUploads( + orderBy: EnterpriseServerUserAccountsUploadOrder = {field: CREATED_AT, direction: DESC} + after: String + before: String + first: Int + last: Int + ): EnterpriseServerUserAccountsUploadConnection! +} + +type EnterpriseServerInstallationConnection { + edges: [EnterpriseServerInstallationEdge] + nodes: [EnterpriseServerInstallation] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseServerInstallationEdge { + cursor: String! + node: EnterpriseServerInstallation +} + +input EnterpriseServerInstallationOrder { + field: EnterpriseServerInstallationOrderField! + direction: OrderDirection! +} + +enum EnterpriseServerInstallationOrderField { + HOST_NAME + CUSTOMER_NAME + CREATED_AT +} + +type EnterpriseServerUserAccount implements Node { + createdAt: DateTime! + emails( + orderBy: EnterpriseServerUserAccountEmailOrder = {field: EMAIL, direction: ASC} + after: String + before: String + first: Int + last: Int + ): EnterpriseServerUserAccountEmailConnection! + enterpriseServerInstallation: EnterpriseServerInstallation! + id: ID! + isSiteAdmin: Boolean! + login: String! + profileName: String + remoteCreatedAt: DateTime! + remoteUserId: Int! + updatedAt: DateTime! +} + +type EnterpriseServerUserAccountConnection { + edges: [EnterpriseServerUserAccountEdge] + nodes: [EnterpriseServerUserAccount] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseServerUserAccountEdge { + cursor: String! + node: EnterpriseServerUserAccount +} + +type EnterpriseServerUserAccountEmail implements Node { + createdAt: DateTime! + email: String! + id: ID! + isPrimary: Boolean! + updatedAt: DateTime! + userAccount: EnterpriseServerUserAccount! +} + +type EnterpriseServerUserAccountEmailConnection { + edges: [EnterpriseServerUserAccountEmailEdge] + nodes: [EnterpriseServerUserAccountEmail] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseServerUserAccountEmailEdge { + cursor: String! + node: EnterpriseServerUserAccountEmail +} + +input EnterpriseServerUserAccountEmailOrder { + field: EnterpriseServerUserAccountEmailOrderField! + direction: OrderDirection! +} + +enum EnterpriseServerUserAccountEmailOrderField { + EMAIL +} + +input EnterpriseServerUserAccountOrder { + field: EnterpriseServerUserAccountOrderField! + direction: OrderDirection! +} + +enum EnterpriseServerUserAccountOrderField { + LOGIN + REMOTE_CREATED_AT +} + +type EnterpriseServerUserAccountsUpload implements Node { + createdAt: DateTime! + enterprise: Enterprise! + enterpriseServerInstallation: EnterpriseServerInstallation! + id: ID! + name: String! + syncState: EnterpriseServerUserAccountsUploadSyncState! + updatedAt: DateTime! +} + +type EnterpriseServerUserAccountsUploadConnection { + edges: [EnterpriseServerUserAccountsUploadEdge] + nodes: [EnterpriseServerUserAccountsUpload] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseServerUserAccountsUploadEdge { + cursor: String! + node: EnterpriseServerUserAccountsUpload +} + +input EnterpriseServerUserAccountsUploadOrder { + field: EnterpriseServerUserAccountsUploadOrderField! + direction: OrderDirection! +} + +enum EnterpriseServerUserAccountsUploadOrderField { + CREATED_AT +} + +enum EnterpriseServerUserAccountsUploadSyncState { + PENDING + SUCCESS + FAILURE +} + +type EnterpriseUserAccount implements Node, Actor { + avatarUrl( + size: Int + ): URI! + createdAt: DateTime! + enterprise: Enterprise! + id: ID! + login: String! + name: String + organizations( + query: String + orderBy: OrganizationOrder = {field: LOGIN, direction: ASC} + role: EnterpriseUserAccountMembershipRole + after: String + before: String + first: Int + last: Int + ): EnterpriseOrganizationMembershipConnection! + resourcePath: URI! + updatedAt: DateTime! + url: URI! + user: User +} + +type EnterpriseUserAccountConnection { + edges: [EnterpriseUserAccountEdge] + nodes: [EnterpriseUserAccount] + pageInfo: PageInfo! + totalCount: Int! +} + +type EnterpriseUserAccountEdge { + cursor: String! + node: EnterpriseUserAccount +} + +enum EnterpriseUserAccountMembershipRole { + MEMBER + OWNER +} + +enum EnterpriseUserDeployment { + CLOUD + SERVER +} + +type ExternalIdentity implements Node { + guid: String! + id: ID! + organizationInvitation: OrganizationInvitation + samlIdentity: ExternalIdentitySamlAttributes + scimIdentity: ExternalIdentityScimAttributes + user: User +} + +type ExternalIdentityConnection { + edges: [ExternalIdentityEdge] + nodes: [ExternalIdentity] + pageInfo: PageInfo! + totalCount: Int! +} + +type ExternalIdentityEdge { + cursor: String! + node: ExternalIdentity +} + +type ExternalIdentitySamlAttributes { + nameId: String +} + +type ExternalIdentityScimAttributes { + username: String +} + +scalar Float + +input FollowUserInput { + userId: ID! + clientMutationId: String +} + +type FollowUserPayload { + clientMutationId: String + user: User +} + +type FollowerConnection { + edges: [UserEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type FollowingConnection { + edges: [UserEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type FundingLink { + platform: FundingPlatform! + url: URI! +} + +enum FundingPlatform { + GITHUB + PATREON + OPEN_COLLECTIVE + KO_FI + TIDELIFT + COMMUNITY_BRIDGE + LIBERAPAY + ISSUEHUNT + OTECHIE + CUSTOM +} + +type GenericHovercardContext implements HovercardContext { + message: String! + octicon: String! +} + +type Gist implements Node, Starrable, UniformResourceLocatable { + comments( + after: String + before: String + first: Int + last: Int + ): GistCommentConnection! + createdAt: DateTime! + description: String + files( + limit: Int = 10 + oid: GitObjectID + ): [GistFile] + forks( + after: String + before: String + first: Int + last: Int + orderBy: GistOrder + ): GistConnection! + id: ID! + isFork: Boolean! + isPublic: Boolean! + name: String! + owner: RepositoryOwner + pushedAt: DateTime + resourcePath: URI! + stargazers( + after: String + before: String + first: Int + last: Int + orderBy: StarOrder + ): StargazerConnection! + updatedAt: DateTime! + url: URI! + viewerHasStarred: Boolean! +} + +type GistComment implements Node, Comment, Deletable, Updatable, UpdatableComment { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + editor: Actor + gist: Gist! + id: ID! + includesCreatedEdit: Boolean! + isMinimized: Boolean! + lastEditedAt: DateTime + minimizedReason: String + publishedAt: DateTime + updatedAt: DateTime! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanDelete: Boolean! + viewerCanMinimize: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! +} + +type GistCommentConnection { + edges: [GistCommentEdge] + nodes: [GistComment] + pageInfo: PageInfo! + totalCount: Int! +} + +type GistCommentEdge { + cursor: String! + node: GistComment +} + +type GistConnection { + edges: [GistEdge] + nodes: [Gist] + pageInfo: PageInfo! + totalCount: Int! +} + +type GistEdge { + cursor: String! + node: Gist +} + +type GistFile { + encodedName: String + encoding: String + extension: String + isImage: Boolean! + isTruncated: Boolean! + language: Language + name: String + size: Int + text( + truncate: Int + ): String +} + +input GistOrder { + field: GistOrderField! + direction: OrderDirection! +} + +enum GistOrderField { + CREATED_AT + UPDATED_AT + PUSHED_AT +} + +enum GistPrivacy { + PUBLIC + SECRET + ALL +} + +type GitActor { + avatarUrl( + size: Int + ): URI! + date: GitTimestamp + email: String + name: String + user: User +} + +type GitHubMetadata { + gitHubServicesSha: GitObjectID! + gitIpAddresses: [String!] + hookIpAddresses: [String!] + importerIpAddresses: [String!] + isPasswordAuthenticationVerifiable: Boolean! + pagesIpAddresses: [String!] +} + +interface GitObject { + abbreviatedOid: String! + commitResourcePath: URI! + commitUrl: URI! + id: ID! + oid: GitObjectID! + repository: Repository! +} + +scalar GitObjectID + +scalar GitSSHRemote + +interface GitSignature { + email: String! + isValid: Boolean! + payload: String! + signature: String! + signer: User + state: GitSignatureState! + wasSignedByGitHub: Boolean! +} + +enum GitSignatureState { + VALID + INVALID + MALFORMED_SIG + UNKNOWN_KEY + BAD_EMAIL + UNVERIFIED_EMAIL + NO_USER + UNKNOWN_SIG_TYPE + UNSIGNED + GPGVERIFY_UNAVAILABLE + GPGVERIFY_ERROR + NOT_SIGNING_KEY + EXPIRED_KEY + OCSP_PENDING + OCSP_ERROR + BAD_CERT + OCSP_REVOKED +} + +scalar GitTimestamp + +type GpgSignature implements GitSignature { + email: String! + isValid: Boolean! + keyId: String + payload: String! + signature: String! + signer: User + state: GitSignatureState! + wasSignedByGitHub: Boolean! +} + +scalar HTML + +type HeadRefDeletedEvent implements Node { + actor: Actor + createdAt: DateTime! + headRef: Ref + headRefName: String! + id: ID! + pullRequest: PullRequest! +} + +type HeadRefForcePushedEvent implements Node { + actor: Actor + afterCommit: Commit + beforeCommit: Commit + createdAt: DateTime! + id: ID! + pullRequest: PullRequest! + ref: Ref +} + +type HeadRefRestoredEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + pullRequest: PullRequest! +} + +type Hovercard { + contexts: [HovercardContext!]! +} + +interface HovercardContext { + message: String! + octicon: String! +} + +scalar ID + +enum IdentityProviderConfigurationState { + ENFORCED + CONFIGURED + UNCONFIGURED +} + +input ImportProjectInput { + ownerName: String! + name: String! + body: String + public: Boolean = false + columnImports: [ProjectColumnImport!]! + clientMutationId: String +} + +scalar Int + +input InviteEnterpriseAdminInput { + enterpriseId: ID! + invitee: String + email: String + role: EnterpriseAdministratorRole + clientMutationId: String +} + +type InviteEnterpriseAdminPayload { + clientMutationId: String + invitation: EnterpriseAdministratorInvitation +} + +type Issue implements Node, Assignable, Closable, Comment, Updatable, UpdatableComment, Labelable, Lockable, Reactable, RepositoryNode, Subscribable, UniformResourceLocatable { + activeLockReason: LockReason + assignees( + after: String + before: String + first: Int + last: Int + ): UserConnection! + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + closed: Boolean! + closedAt: DateTime + comments( + after: String + before: String + first: Int + last: Int + ): IssueCommentConnection! + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + editor: Actor + hovercard( + includeNotificationContexts: Boolean = true + ): Hovercard! + id: ID! + includesCreatedEdit: Boolean! + labels( + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + after: String + before: String + first: Int + last: Int + ): LabelConnection + lastEditedAt: DateTime + locked: Boolean! + milestone: Milestone + number: Int! + participants( + after: String + before: String + first: Int + last: Int + ): UserConnection! + projectCards( + after: String + before: String + first: Int + last: Int + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + ): ProjectCardConnection! + publishedAt: DateTime + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + repository: Repository! + resourcePath: URI! + state: IssueState! + timeline( + since: DateTime + after: String + before: String + first: Int + last: Int + ): IssueTimelineConnection! @deprecated(reason: "`timeline` will be removed Use Issue.timelineItems instead. Removal on 2019-10-01 UTC.") + timelineItems( + since: DateTime + skip: Int + itemTypes: [IssueTimelineItemsItemType!] + after: String + before: String + first: Int + last: Int + ): IssueTimelineItemsConnection! + title: String! + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanReact: Boolean! + viewerCanSubscribe: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! + viewerSubscription: SubscriptionState +} + +type IssueComment implements Node, Comment, Deletable, Updatable, UpdatableComment, Reactable, RepositoryNode { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + editor: Actor + id: ID! + includesCreatedEdit: Boolean! + isMinimized: Boolean! + issue: Issue! + lastEditedAt: DateTime + minimizedReason: String + publishedAt: DateTime + pullRequest: PullRequest + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + repository: Repository! + resourcePath: URI! + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanDelete: Boolean! + viewerCanMinimize: Boolean! + viewerCanReact: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! +} + +type IssueCommentConnection { + edges: [IssueCommentEdge] + nodes: [IssueComment] + pageInfo: PageInfo! + totalCount: Int! +} + +type IssueCommentEdge { + cursor: String! + node: IssueComment +} + +type IssueConnection { + edges: [IssueEdge] + nodes: [Issue] + pageInfo: PageInfo! + totalCount: Int! +} + +type IssueContributionsByRepository { + contributions( + after: String + before: String + first: Int + last: Int + orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedIssueContributionConnection! + repository: Repository! +} + +type IssueEdge { + cursor: String! + node: Issue +} + +input IssueFilters { + assignee: String + createdBy: String + labels: [String!] + mentioned: String + milestone: String + since: DateTime + states: [IssueState!] + viewerSubscribed: Boolean = false +} + +union IssueOrPullRequest = Issue | PullRequest + +type IssueOrPullRequestEdge { + cursor: String! + node: IssueOrPullRequest +} + +input IssueOrder { + field: IssueOrderField! + direction: OrderDirection! +} + +enum IssueOrderField { + CREATED_AT + UPDATED_AT + COMMENTS +} + +enum IssuePubSubTopic { + UPDATED + MARKASREAD + TIMELINE + STATE +} + +enum IssueState { + OPEN + CLOSED +} + +type IssueTimelineConnection { + edges: [IssueTimelineItemEdge] + nodes: [IssueTimelineItem] + pageInfo: PageInfo! + totalCount: Int! +} + +union IssueTimelineItem = AssignedEvent | ClosedEvent | Commit | CrossReferencedEvent | DemilestonedEvent | IssueComment | LabeledEvent | LockedEvent | MilestonedEvent | ReferencedEvent | RenamedTitleEvent | ReopenedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnsubscribedEvent | UserBlockedEvent + +type IssueTimelineItemEdge { + cursor: String! + node: IssueTimelineItem +} + +union IssueTimelineItems = AddedToProjectEvent | AssignedEvent | ClosedEvent | CommentDeletedEvent | ConvertedNoteToIssueEvent | CrossReferencedEvent | DemilestonedEvent | IssueComment | LabeledEvent | LockedEvent | MarkedAsDuplicateEvent | MentionedEvent | MilestonedEvent | MovedColumnsInProjectEvent | PinnedEvent | ReferencedEvent | RemovedFromProjectEvent | RenamedTitleEvent | ReopenedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnpinnedEvent | UnsubscribedEvent | UserBlockedEvent + +type IssueTimelineItemsConnection { + edges: [IssueTimelineItemsEdge] + filteredCount: Int! + nodes: [IssueTimelineItems] + pageCount: Int! + pageInfo: PageInfo! + totalCount: Int! + updatedAt: DateTime! +} + +type IssueTimelineItemsEdge { + cursor: String! + node: IssueTimelineItems +} + +enum IssueTimelineItemsItemType { + ISSUE_COMMENT + CROSS_REFERENCED_EVENT + ADDED_TO_PROJECT_EVENT + ASSIGNED_EVENT + CLOSED_EVENT + COMMENT_DELETED_EVENT + CONVERTED_NOTE_TO_ISSUE_EVENT + DEMILESTONED_EVENT + LABELED_EVENT + LOCKED_EVENT + MARKED_AS_DUPLICATE_EVENT + MENTIONED_EVENT + MILESTONED_EVENT + MOVED_COLUMNS_IN_PROJECT_EVENT + PINNED_EVENT + REFERENCED_EVENT + REMOVED_FROM_PROJECT_EVENT + RENAMED_TITLE_EVENT + REOPENED_EVENT + SUBSCRIBED_EVENT + TRANSFERRED_EVENT + UNASSIGNED_EVENT + UNLABELED_EVENT + UNLOCKED_EVENT + USER_BLOCKED_EVENT + UNPINNED_EVENT + UNSUBSCRIBED_EVENT +} + +type JoinedGitHubContribution implements Contribution { + isRestricted: Boolean! + occurredAt: DateTime! + resourcePath: URI! + url: URI! + user: User! +} + +type Label implements Node { + color: String! + createdAt: DateTime + description: String + id: ID! + isDefault: Boolean! + issues( + orderBy: IssueOrder + labels: [String!] + states: [IssueState!] + filterBy: IssueFilters + after: String + before: String + first: Int + last: Int + ): IssueConnection! + name: String! + pullRequests( + states: [PullRequestState!] + labels: [String!] + headRefName: String + baseRefName: String + orderBy: IssueOrder + after: String + before: String + first: Int + last: Int + ): PullRequestConnection! + repository: Repository! + resourcePath: URI! + updatedAt: DateTime + url: URI! +} + +type LabelConnection { + edges: [LabelEdge] + nodes: [Label] + pageInfo: PageInfo! + totalCount: Int! +} + +type LabelEdge { + cursor: String! + node: Label +} + +input LabelOrder { + field: LabelOrderField! + direction: OrderDirection! +} + +enum LabelOrderField { + NAME + CREATED_AT +} + +interface Labelable { + labels( + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + after: String + before: String + first: Int + last: Int + ): LabelConnection +} + +type LabeledEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + label: Label! + labelable: Labelable! +} + +type Language implements Node { + color: String + id: ID! + name: String! +} + +type LanguageConnection { + edges: [LanguageEdge] + nodes: [Language] + pageInfo: PageInfo! + totalCount: Int! + totalSize: Int! +} + +type LanguageEdge { + cursor: String! + node: Language! + size: Int! +} + +input LanguageOrder { + field: LanguageOrderField! + direction: OrderDirection! +} + +enum LanguageOrderField { + SIZE +} + +type License implements Node { + body: String! + conditions: [LicenseRule]! + description: String + featured: Boolean! + hidden: Boolean! + id: ID! + implementation: String + key: String! + limitations: [LicenseRule]! + name: String! + nickname: String + permissions: [LicenseRule]! + pseudoLicense: Boolean! + spdxId: String + url: URI +} + +type LicenseRule { + description: String! + key: String! + label: String! +} + +input LinkRepositoryToProjectInput { + projectId: ID! + repositoryId: ID! + clientMutationId: String +} + +type LinkRepositoryToProjectPayload { + clientMutationId: String + project: Project + repository: Repository +} + +input LockLockableInput { + lockableId: ID! + lockReason: LockReason + clientMutationId: String +} + +type LockLockablePayload { + actor: Actor + clientMutationId: String + lockedRecord: Lockable +} + +enum LockReason { + OFF_TOPIC + TOO_HEATED + RESOLVED + SPAM +} + +interface Lockable { + activeLockReason: LockReason + locked: Boolean! +} + +type LockedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + lockReason: LockReason + lockable: Lockable! +} + +type Mannequin implements Node, Actor, UniformResourceLocatable { + avatarUrl( + size: Int + ): URI! + createdAt: DateTime! + databaseId: Int + email: String + id: ID! + login: String! + resourcePath: URI! + updatedAt: DateTime! + url: URI! +} + +type MarkedAsDuplicateEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! +} + +type MarketplaceCategory implements Node { + description: String + howItWorks: String + id: ID! + name: String! + primaryListingCount: Int! + resourcePath: URI! + secondaryListingCount: Int! + slug: String! + url: URI! +} + +type MarketplaceListing implements Node { + app: App + companyUrl: URI + configurationResourcePath: URI! + configurationUrl: URI! + documentationUrl: URI + extendedDescription: String + extendedDescriptionHTML: HTML! + fullDescription: String! + fullDescriptionHTML: HTML! + hasApprovalBeenRequested: Boolean! @deprecated(reason: "`hasApprovalBeenRequested` will be removed. Use `isVerificationPendingFromDraft` instead. Removal on 2019-10-01 UTC.") + hasPublishedFreeTrialPlans: Boolean! + hasTermsOfService: Boolean! + howItWorks: String + howItWorksHTML: HTML! + id: ID! + installationUrl: URI + installedForViewer: Boolean! + isApproved: Boolean! @deprecated(reason: "`isApproved` will be removed. Use `isPublic` instead. Removal on 2019-10-01 UTC.") + isArchived: Boolean! + isDelisted: Boolean! @deprecated(reason: "`isDelisted` will be removed. Use `isArchived` instead. Removal on 2019-10-01 UTC.") + isDraft: Boolean! + isPaid: Boolean! + isPublic: Boolean! + isRejected: Boolean! + isUnverified: Boolean! + isUnverifiedPending: Boolean! + isVerificationPendingFromDraft: Boolean! + isVerificationPendingFromUnverified: Boolean! + isVerified: Boolean! + logoBackgroundColor: String! + logoUrl( + size: Int = 400 + ): URI + name: String! + normalizedShortDescription: String! + pricingUrl: URI + primaryCategory: MarketplaceCategory! + privacyPolicyUrl: URI! + resourcePath: URI! + screenshotUrls: [String]! + secondaryCategory: MarketplaceCategory + shortDescription: String! + slug: String! + statusUrl: URI + supportEmail: String + supportUrl: URI! + termsOfServiceUrl: URI + url: URI! + viewerCanAddPlans: Boolean! + viewerCanApprove: Boolean! + viewerCanDelist: Boolean! + viewerCanEdit: Boolean! + viewerCanEditCategories: Boolean! + viewerCanEditPlans: Boolean! + viewerCanRedraft: Boolean! + viewerCanReject: Boolean! + viewerCanRequestApproval: Boolean! + viewerHasPurchased: Boolean! + viewerHasPurchasedForAllOrganizations: Boolean! + viewerIsListingAdmin: Boolean! +} + +type MarketplaceListingConnection { + edges: [MarketplaceListingEdge] + nodes: [MarketplaceListing] + pageInfo: PageInfo! + totalCount: Int! +} + +type MarketplaceListingEdge { + cursor: String! + node: MarketplaceListing +} + +interface MemberStatusable { + memberStatuses( + after: String + before: String + first: Int + last: Int + orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} + ): UserStatusConnection! +} + +type MembersCanDeleteReposClearAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type MembersCanDeleteReposDisableAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type MembersCanDeleteReposEnableAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type MentionedEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + id: ID! +} + +input MergeBranchInput { + repositoryId: ID! + base: String! + head: String! + commitMessage: String + clientMutationId: String +} + +type MergeBranchPayload { + clientMutationId: String + mergeCommit: Commit +} + +input MergePullRequestInput { + pullRequestId: ID! + commitHeadline: String + commitBody: String + expectedHeadOid: GitObjectID + mergeMethod: PullRequestMergeMethod = MERGE + clientMutationId: String +} + +type MergePullRequestPayload { + actor: Actor + clientMutationId: String + pullRequest: PullRequest +} + +enum MergeableState { + MERGEABLE + CONFLICTING + UNKNOWN +} + +type MergedEvent implements Node, UniformResourceLocatable { + actor: Actor + commit: Commit + createdAt: DateTime! + id: ID! + mergeRef: Ref + mergeRefName: String! + pullRequest: PullRequest! + resourcePath: URI! + url: URI! +} + +type Milestone implements Node, Closable, UniformResourceLocatable { + closed: Boolean! + closedAt: DateTime + createdAt: DateTime! + creator: Actor + description: String + dueOn: DateTime + id: ID! + issuePrioritiesDebug: String! + issues( + orderBy: IssueOrder + labels: [String!] + states: [IssueState!] + filterBy: IssueFilters + after: String + before: String + first: Int + last: Int + ): IssueConnection! + number: Int! + pullRequests( + states: [PullRequestState!] + labels: [String!] + headRefName: String + baseRefName: String + orderBy: IssueOrder + after: String + before: String + first: Int + last: Int + ): PullRequestConnection! + repository: Repository! + resourcePath: URI! + state: MilestoneState! + title: String! + updatedAt: DateTime! + url: URI! +} + +type MilestoneConnection { + edges: [MilestoneEdge] + nodes: [Milestone] + pageInfo: PageInfo! + totalCount: Int! +} + +type MilestoneEdge { + cursor: String! + node: Milestone +} + +union MilestoneItem = Issue | PullRequest + +input MilestoneOrder { + field: MilestoneOrderField! + direction: OrderDirection! +} + +enum MilestoneOrderField { + DUE_DATE + CREATED_AT + UPDATED_AT + NUMBER +} + +enum MilestoneState { + OPEN + CLOSED +} + +type MilestonedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + milestoneTitle: String! + subject: MilestoneItem! +} + +input MinimizeCommentInput { + subjectId: ID! + classifier: ReportedContentClassifiers! + clientMutationId: String +} + +input MoveProjectCardInput { + cardId: ID! + columnId: ID! + afterCardId: ID + clientMutationId: String +} + +type MoveProjectCardPayload { + cardEdge: ProjectCardEdge + clientMutationId: String +} + +input MoveProjectColumnInput { + columnId: ID! + afterColumnId: ID + clientMutationId: String +} + +type MoveProjectColumnPayload { + clientMutationId: String + columnEdge: ProjectColumnEdge +} + +type MovedColumnsInProjectEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + id: ID! +} + +type Mutation { + acceptEnterpriseAdministratorInvitation(input: AcceptEnterpriseAdministratorInvitationInput!): AcceptEnterpriseAdministratorInvitationPayload + acceptTopicSuggestion(input: AcceptTopicSuggestionInput!): AcceptTopicSuggestionPayload + addAssigneesToAssignable(input: AddAssigneesToAssignableInput!): AddAssigneesToAssignablePayload + addComment(input: AddCommentInput!): AddCommentPayload + addLabelsToLabelable(input: AddLabelsToLabelableInput!): AddLabelsToLabelablePayload + addProjectCard(input: AddProjectCardInput!): AddProjectCardPayload + addProjectColumn(input: AddProjectColumnInput!): AddProjectColumnPayload + addPullRequestReview(input: AddPullRequestReviewInput!): AddPullRequestReviewPayload + addPullRequestReviewComment(input: AddPullRequestReviewCommentInput!): AddPullRequestReviewCommentPayload + addReaction(input: AddReactionInput!): AddReactionPayload + addStar(input: AddStarInput!): AddStarPayload + archiveRepository(input: ArchiveRepositoryInput!): ArchiveRepositoryPayload + cancelEnterpriseAdminInvitation(input: CancelEnterpriseAdminInvitationInput!): CancelEnterpriseAdminInvitationPayload + changeUserStatus(input: ChangeUserStatusInput!): ChangeUserStatusPayload + clearLabelsFromLabelable(input: ClearLabelsFromLabelableInput!): ClearLabelsFromLabelablePayload + cloneProject(input: CloneProjectInput!): CloneProjectPayload + cloneTemplateRepository(input: CloneTemplateRepositoryInput!): CloneTemplateRepositoryPayload + closeIssue(input: CloseIssueInput!): CloseIssuePayload + closePullRequest(input: ClosePullRequestInput!): ClosePullRequestPayload + convertProjectCardNoteToIssue(input: ConvertProjectCardNoteToIssueInput!): ConvertProjectCardNoteToIssuePayload + createBranchProtectionRule(input: CreateBranchProtectionRuleInput!): CreateBranchProtectionRulePayload + createEnterpriseOrganization(input: CreateEnterpriseOrganizationInput!): CreateEnterpriseOrganizationPayload + createIssue(input: CreateIssueInput!): CreateIssuePayload + createProject(input: CreateProjectInput!): CreateProjectPayload + createPullRequest(input: CreatePullRequestInput!): CreatePullRequestPayload + createRef(input: CreateRefInput!): CreateRefPayload + createRepository(input: CreateRepositoryInput!): CreateRepositoryPayload + createTeamDiscussion(input: CreateTeamDiscussionInput!): CreateTeamDiscussionPayload + createTeamDiscussionComment(input: CreateTeamDiscussionCommentInput!): CreateTeamDiscussionCommentPayload + declineTopicSuggestion(input: DeclineTopicSuggestionInput!): DeclineTopicSuggestionPayload + deleteBranchProtectionRule(input: DeleteBranchProtectionRuleInput!): DeleteBranchProtectionRulePayload + deleteIssue(input: DeleteIssueInput!): DeleteIssuePayload + deleteIssueComment(input: DeleteIssueCommentInput!): DeleteIssueCommentPayload + deleteProject(input: DeleteProjectInput!): DeleteProjectPayload + deleteProjectCard(input: DeleteProjectCardInput!): DeleteProjectCardPayload + deleteProjectColumn(input: DeleteProjectColumnInput!): DeleteProjectColumnPayload + deletePullRequestReview(input: DeletePullRequestReviewInput!): DeletePullRequestReviewPayload + deletePullRequestReviewComment(input: DeletePullRequestReviewCommentInput!): DeletePullRequestReviewCommentPayload + deleteRef(input: DeleteRefInput!): DeleteRefPayload + deleteTeamDiscussion(input: DeleteTeamDiscussionInput!): DeleteTeamDiscussionPayload + deleteTeamDiscussionComment(input: DeleteTeamDiscussionCommentInput!): DeleteTeamDiscussionCommentPayload + dismissPullRequestReview(input: DismissPullRequestReviewInput!): DismissPullRequestReviewPayload + followUser(input: FollowUserInput!): FollowUserPayload + inviteEnterpriseAdmin(input: InviteEnterpriseAdminInput!): InviteEnterpriseAdminPayload + linkRepositoryToProject(input: LinkRepositoryToProjectInput!): LinkRepositoryToProjectPayload + lockLockable(input: LockLockableInput!): LockLockablePayload + mergeBranch(input: MergeBranchInput!): MergeBranchPayload + mergePullRequest(input: MergePullRequestInput!): MergePullRequestPayload + moveProjectCard(input: MoveProjectCardInput!): MoveProjectCardPayload + moveProjectColumn(input: MoveProjectColumnInput!): MoveProjectColumnPayload + regenerateEnterpriseIdentityProviderRecoveryCodes(input: RegenerateEnterpriseIdentityProviderRecoveryCodesInput!): RegenerateEnterpriseIdentityProviderRecoveryCodesPayload + removeAssigneesFromAssignable(input: RemoveAssigneesFromAssignableInput!): RemoveAssigneesFromAssignablePayload + removeEnterpriseAdmin(input: RemoveEnterpriseAdminInput!): RemoveEnterpriseAdminPayload + removeEnterpriseOrganization(input: RemoveEnterpriseOrganizationInput!): RemoveEnterpriseOrganizationPayload + removeLabelsFromLabelable(input: RemoveLabelsFromLabelableInput!): RemoveLabelsFromLabelablePayload + removeOutsideCollaborator(input: RemoveOutsideCollaboratorInput!): RemoveOutsideCollaboratorPayload + removeReaction(input: RemoveReactionInput!): RemoveReactionPayload + removeStar(input: RemoveStarInput!): RemoveStarPayload + reopenIssue(input: ReopenIssueInput!): ReopenIssuePayload + reopenPullRequest(input: ReopenPullRequestInput!): ReopenPullRequestPayload + requestReviews(input: RequestReviewsInput!): RequestReviewsPayload + resolveReviewThread(input: ResolveReviewThreadInput!): ResolveReviewThreadPayload + submitPullRequestReview(input: SubmitPullRequestReviewInput!): SubmitPullRequestReviewPayload + transferIssue(input: TransferIssueInput!): TransferIssuePayload + unarchiveRepository(input: UnarchiveRepositoryInput!): UnarchiveRepositoryPayload + unfollowUser(input: UnfollowUserInput!): UnfollowUserPayload + unlinkRepositoryFromProject(input: UnlinkRepositoryFromProjectInput!): UnlinkRepositoryFromProjectPayload + unlockLockable(input: UnlockLockableInput!): UnlockLockablePayload + unmarkIssueAsDuplicate(input: UnmarkIssueAsDuplicateInput!): UnmarkIssueAsDuplicatePayload + unresolveReviewThread(input: UnresolveReviewThreadInput!): UnresolveReviewThreadPayload + updateBranchProtectionRule(input: UpdateBranchProtectionRuleInput!): UpdateBranchProtectionRulePayload + updateEnterpriseActionExecutionCapabilitySetting(input: UpdateEnterpriseActionExecutionCapabilitySettingInput!): UpdateEnterpriseActionExecutionCapabilitySettingPayload + updateEnterpriseAdministratorRole(input: UpdateEnterpriseAdministratorRoleInput!): UpdateEnterpriseAdministratorRolePayload + updateEnterpriseAllowPrivateRepositoryForkingSetting(input: UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput!): UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload + updateEnterpriseDefaultRepositoryPermissionSetting(input: UpdateEnterpriseDefaultRepositoryPermissionSettingInput!): UpdateEnterpriseDefaultRepositoryPermissionSettingPayload + updateEnterpriseMembersCanChangeRepositoryVisibilitySetting(input: UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput!): UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload + updateEnterpriseMembersCanCreateRepositoriesSetting(input: UpdateEnterpriseMembersCanCreateRepositoriesSettingInput!): UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload + updateEnterpriseMembersCanDeleteIssuesSetting(input: UpdateEnterpriseMembersCanDeleteIssuesSettingInput!): UpdateEnterpriseMembersCanDeleteIssuesSettingPayload + updateEnterpriseMembersCanDeleteRepositoriesSetting(input: UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput!): UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload + updateEnterpriseMembersCanInviteCollaboratorsSetting(input: UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput!): UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload + updateEnterpriseMembersCanMakePurchasesSetting(input: UpdateEnterpriseMembersCanMakePurchasesSettingInput!): UpdateEnterpriseMembersCanMakePurchasesSettingPayload + updateEnterpriseMembersCanUpdateProtectedBranchesSetting(input: UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput!): UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload + updateEnterpriseMembersCanViewDependencyInsightsSetting(input: UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput!): UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload + updateEnterpriseOrganizationProjectsSetting(input: UpdateEnterpriseOrganizationProjectsSettingInput!): UpdateEnterpriseOrganizationProjectsSettingPayload + updateEnterpriseProfile(input: UpdateEnterpriseProfileInput!): UpdateEnterpriseProfilePayload + updateEnterpriseRepositoryProjectsSetting(input: UpdateEnterpriseRepositoryProjectsSettingInput!): UpdateEnterpriseRepositoryProjectsSettingPayload + updateEnterpriseTeamDiscussionsSetting(input: UpdateEnterpriseTeamDiscussionsSettingInput!): UpdateEnterpriseTeamDiscussionsSettingPayload + updateEnterpriseTwoFactorAuthenticationRequiredSetting(input: UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput!): UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload + updateIssue(input: UpdateIssueInput!): UpdateIssuePayload + updateIssueComment(input: UpdateIssueCommentInput!): UpdateIssueCommentPayload + updateProject(input: UpdateProjectInput!): UpdateProjectPayload + updateProjectCard(input: UpdateProjectCardInput!): UpdateProjectCardPayload + updateProjectColumn(input: UpdateProjectColumnInput!): UpdateProjectColumnPayload + updatePullRequest(input: UpdatePullRequestInput!): UpdatePullRequestPayload + updatePullRequestReview(input: UpdatePullRequestReviewInput!): UpdatePullRequestReviewPayload + updatePullRequestReviewComment(input: UpdatePullRequestReviewCommentInput!): UpdatePullRequestReviewCommentPayload + updateRef(input: UpdateRefInput!): UpdateRefPayload + updateRepository(input: UpdateRepositoryInput!): UpdateRepositoryPayload + updateSubscription(input: UpdateSubscriptionInput!): UpdateSubscriptionPayload + updateTeamDiscussion(input: UpdateTeamDiscussionInput!): UpdateTeamDiscussionPayload + updateTeamDiscussionComment(input: UpdateTeamDiscussionCommentInput!): UpdateTeamDiscussionCommentPayload + updateTopics(input: UpdateTopicsInput!): UpdateTopicsPayload +} + +interface Node { + id: ID! +} + +interface OauthApplicationAuditEntryData { + oauthApplicationName: String + oauthApplicationResourcePath: URI + oauthApplicationUrl: URI +} + +type OauthApplicationCreateAuditEntry implements Node, AuditEntry, OauthApplicationAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + applicationUrl: URI + callbackUrl: URI + createdAt: PreciseDateTime! + id: ID! + oauthApplicationName: String + oauthApplicationResourcePath: URI + oauthApplicationUrl: URI + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + rateLimit: Int + state: OauthApplicationCreateAuditEntryState + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OauthApplicationCreateAuditEntryState { + ACTIVE + SUSPENDED + PENDING_DELETION +} + +enum OauthApplicationRevokeTokensAuditEntryState { + ACTIVE + SUSPENDED + PENDING_DELETION +} + +enum OperationType { + ACCESS + AUTHENTICATION + CREATE + MODIFY + REMOVE + RESTORE + TRANSFER +} + +enum OrderDirection { + ASC + DESC +} + +type OrgAddBillingManagerAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + invitationEmail: String + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgAddMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + permission: OrgAddMemberAuditEntryPermission + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OrgAddMemberAuditEntryPermission { + READ + ADMIN +} + +type OrgBlockUserAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + blockedUser: User + blockedUserName: String + blockedUserResourcePath: URI + blockedUserUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgConfigDisableCollaboratorsOnlyAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgConfigEnableCollaboratorsOnlyAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgCreateAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + billingPlan: OrgCreateAuditEntryBillingPlan + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OrgCreateAuditEntryBillingPlan { + FREE + BUSINESS + BUSINESS_PLUS + UNLIMITED + TIERED_PER_SEAT +} + +type OrgDisableOauthAppRestrictionsAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgDisableSamlAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + digestMethodUrl: URI + id: ID! + issuerUrl: URI + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + signatureMethodUrl: URI + singleSignOnUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgDisableTwoFactorRequirementAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgEnableOauthAppRestrictionsAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgEnableSamlAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + digestMethodUrl: URI + id: ID! + issuerUrl: URI + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + signatureMethodUrl: URI + singleSignOnUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgEnableTwoFactorRequirementAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgInviteMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + email: String + id: ID! + operationType: OperationType + organization: Organization + organizationInvitation: OrganizationInvitation + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgInviteToBusinessAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgOauthAppAccessApprovedAuditEntry implements Node, AuditEntry, OauthApplicationAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + oauthApplicationName: String + oauthApplicationResourcePath: URI + oauthApplicationUrl: URI + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgOauthAppAccessDeniedAuditEntry implements Node, AuditEntry, OauthApplicationAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + oauthApplicationName: String + oauthApplicationResourcePath: URI + oauthApplicationUrl: URI + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgOauthAppAccessRequestedAuditEntry implements Node, AuditEntry, OauthApplicationAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + oauthApplicationName: String + oauthApplicationResourcePath: URI + oauthApplicationUrl: URI + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgRemoveBillingManagerAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + reason: OrgRemoveBillingManagerAuditEntryReason + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OrgRemoveBillingManagerAuditEntryReason { + TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE + SAML_EXTERNAL_IDENTITY_MISSING + SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY +} + +type OrgRemoveMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + membershipTypes: [OrgRemoveMemberAuditEntryMembershipType!] + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + reason: OrgRemoveMemberAuditEntryReason + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OrgRemoveMemberAuditEntryMembershipType { + DIRECT_MEMBER + ADMIN + BILLING_MANAGER + UNAFFILIATED + OUTSIDE_COLLABORATOR +} + +enum OrgRemoveMemberAuditEntryReason { + TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE + SAML_EXTERNAL_IDENTITY_MISSING + SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY +} + +type OrgRemoveOutsideCollaboratorAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + membershipTypes: [OrgRemoveOutsideCollaboratorAuditEntryMembershipType!] + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + reason: OrgRemoveOutsideCollaboratorAuditEntryReason + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OrgRemoveOutsideCollaboratorAuditEntryMembershipType { + OUTSIDE_COLLABORATOR + UNAFFILIATED + BILLING_MANAGER +} + +enum OrgRemoveOutsideCollaboratorAuditEntryReason { + TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE + SAML_EXTERNAL_IDENTITY_MISSING +} + +type OrgRestoreMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + restoredCustomEmailRoutingsCount: Int + restoredIssueAssignmentsCount: Int + restoredMemberships: [OrgRestoreMemberAuditEntryMembership!] + restoredMembershipsCount: Int + restoredRepositoriesCount: Int + restoredRepositoryStarsCount: Int + restoredRepositoryWatchesCount: Int + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +union OrgRestoreMemberAuditEntryMembership = OrgRestoreMemberMembershipOrganizationAuditEntryData | OrgRestoreMemberMembershipRepositoryAuditEntryData | OrgRestoreMemberMembershipTeamAuditEntryData + +type OrgRestoreMemberMembershipOrganizationAuditEntryData implements OrganizationAuditEntryData { + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI +} + +type OrgRestoreMemberMembershipRepositoryAuditEntryData implements RepositoryAuditEntryData { + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI +} + +type OrgRestoreMemberMembershipTeamAuditEntryData implements TeamAuditEntryData { + team: Team + teamName: String + teamResourcePath: URI + teamUrl: URI +} + +type OrgUnblockUserAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + blockedUser: User + blockedUserName: String + blockedUserResourcePath: URI + blockedUserUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type OrgUpdateDefaultRepositoryPermissionAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + permission: OrgUpdateDefaultRepositoryPermissionAuditEntryPermission + permissionWas: OrgUpdateDefaultRepositoryPermissionAuditEntryPermission + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OrgUpdateDefaultRepositoryPermissionAuditEntryPermission { + READ + WRITE + ADMIN + NONE +} + +type OrgUpdateMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + permission: OrgUpdateMemberAuditEntryPermission + permissionWas: OrgUpdateMemberAuditEntryPermission + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum OrgUpdateMemberAuditEntryPermission { + READ + ADMIN +} + +type OrgUpdateMemberRepositoryCreationPermissionAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + canCreateRepositories: Boolean + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI + visibility: OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility +} + +enum OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility { + ALL + PUBLIC +} + +type OrgUpdateMemberRepositoryInvitationPermissionAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + canInviteOutsideCollaboratorsToRepositories: Boolean + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type Organization implements Node, Actor, RegistryPackageOwner, RegistryPackageSearch, ProjectOwner, RepositoryOwner, UniformResourceLocatable, MemberStatusable, ProfileOwner, Sponsorable { + anyPinnableItems( + type: PinnableItemType + ): Boolean! + auditLog( + after: String + before: String + first: Int + last: Int + query: String + orderBy: AuditLogOrder = {field: CREATED_AT, direction: DESC} + ): OrganizationAuditEntryConnection! + avatarUrl( + size: Int + ): URI! + createdAt: DateTime! + databaseId: Int + description: String + descriptionHTML: String + email: String + id: ID! + isVerified: Boolean! + itemShowcase: ProfileItemShowcase! + location: String + login: String! + memberStatuses( + after: String + before: String + first: Int + last: Int + orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} + ): UserStatusConnection! + membersWithRole( + after: String + before: String + first: Int + last: Int + ): OrganizationMemberConnection! + name: String + newTeamResourcePath: URI! + newTeamUrl: URI! + organizationBillingEmail: String + pendingMembers( + after: String + before: String + first: Int + last: Int + ): UserConnection! + pinnableItems( + types: [PinnableItemType!] + after: String + before: String + first: Int + last: Int + ): PinnableItemConnection! + pinnedItems( + types: [PinnableItemType!] + after: String + before: String + first: Int + last: Int + ): PinnableItemConnection! + pinnedItemsRemaining: Int! + pinnedRepositories( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + ): RepositoryConnection! @deprecated(reason: "pinnedRepositories will be removed Use ProfileOwner.pinnedItems instead. Removal on 2019-10-01 UTC.") + project( + number: Int! + ): Project + projects( + orderBy: ProjectOrder + search: String + states: [ProjectState!] + after: String + before: String + first: Int + last: Int + ): ProjectConnection! + projectsResourcePath: URI! + projectsUrl: URI! + registryPackages( + after: String + before: String + first: Int + last: Int + name: String + names: [String] + repositoryId: ID + packageType: RegistryPackageType + registryPackageType: String + publicOnly: Boolean = false + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageOwner` object instead. Removal on 2020-04-01 UTC.") + registryPackagesForQuery( + after: String + before: String + first: Int + last: Int + query: String + packageType: RegistryPackageType + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageSearch` object instead. Removal on 2020-04-01 UTC.") + repositories( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + isFork: Boolean + ): RepositoryConnection! + repository( + name: String! + ): Repository + requiresTwoFactorAuthentication: Boolean + resourcePath: URI! + samlIdentityProvider: OrganizationIdentityProvider + sponsorsListing: SponsorsListing + sponsorshipsAsMaintainer( + after: String + before: String + first: Int + last: Int + includePrivate: Boolean = false + orderBy: SponsorshipOrder + ): SponsorshipConnection! + sponsorshipsAsSponsor( + after: String + before: String + first: Int + last: Int + orderBy: SponsorshipOrder + ): SponsorshipConnection! + team( + slug: String! + ): Team + teams( + privacy: TeamPrivacy + role: TeamRole + query: String + userLogins: [String!] + orderBy: TeamOrder + ldapMapped: Boolean + rootTeamsOnly: Boolean = false + after: String + before: String + first: Int + last: Int + ): TeamConnection! + teamsResourcePath: URI! + teamsUrl: URI! + updatedAt: DateTime! + url: URI! + viewerCanAdminister: Boolean! + viewerCanChangePinnedItems: Boolean! + viewerCanCreateProjects: Boolean! + viewerCanCreateRepositories: Boolean! + viewerCanCreateTeams: Boolean! + viewerIsAMember: Boolean! + websiteUrl: URI +} + +union OrganizationAuditEntry = MembersCanDeleteReposClearAuditEntry | MembersCanDeleteReposDisableAuditEntry | MembersCanDeleteReposEnableAuditEntry | OauthApplicationCreateAuditEntry | OrgAddBillingManagerAuditEntry | OrgAddMemberAuditEntry | OrgBlockUserAuditEntry | OrgConfigDisableCollaboratorsOnlyAuditEntry | OrgConfigEnableCollaboratorsOnlyAuditEntry | OrgCreateAuditEntry | OrgDisableOauthAppRestrictionsAuditEntry | OrgDisableSamlAuditEntry | OrgDisableTwoFactorRequirementAuditEntry | OrgEnableOauthAppRestrictionsAuditEntry | OrgEnableSamlAuditEntry | OrgEnableTwoFactorRequirementAuditEntry | OrgInviteMemberAuditEntry | OrgInviteToBusinessAuditEntry | OrgOauthAppAccessApprovedAuditEntry | OrgOauthAppAccessDeniedAuditEntry | OrgOauthAppAccessRequestedAuditEntry | OrgRemoveBillingManagerAuditEntry | OrgRemoveMemberAuditEntry | OrgRemoveOutsideCollaboratorAuditEntry | OrgRestoreMemberAuditEntry | OrgUnblockUserAuditEntry | OrgUpdateDefaultRepositoryPermissionAuditEntry | OrgUpdateMemberAuditEntry | OrgUpdateMemberRepositoryCreationPermissionAuditEntry | OrgUpdateMemberRepositoryInvitationPermissionAuditEntry | PrivateRepositoryForkingDisableAuditEntry | PrivateRepositoryForkingEnableAuditEntry | RepoAccessAuditEntry | RepoAddMemberAuditEntry | RepoAddTopicAuditEntry | RepoArchivedAuditEntry | RepoChangeMergeSettingAuditEntry | RepoConfigDisableAnonymousGitAccessAuditEntry | RepoConfigDisableCollaboratorsOnlyAuditEntry | RepoConfigDisableContributorsOnlyAuditEntry | RepoConfigDisableSockpuppetDisallowedAuditEntry | RepoConfigEnableAnonymousGitAccessAuditEntry | RepoConfigEnableCollaboratorsOnlyAuditEntry | RepoConfigEnableContributorsOnlyAuditEntry | RepoConfigEnableSockpuppetDisallowedAuditEntry | RepoConfigLockAnonymousGitAccessAuditEntry | RepoConfigUnlockAnonymousGitAccessAuditEntry | RepoCreateAuditEntry | RepoDestroyAuditEntry | RepoRemoveMemberAuditEntry | RepoRemoveTopicAuditEntry | RepositoryVisibilityChangeDisableAuditEntry | RepositoryVisibilityChangeEnableAuditEntry | TeamAddMemberAuditEntry | TeamAddRepositoryAuditEntry | TeamChangeParentTeamAuditEntry | TeamRemoveMemberAuditEntry | TeamRemoveRepositoryAuditEntry + +type OrganizationAuditEntryConnection { + edges: [OrganizationAuditEntryEdge] + nodes: [OrganizationAuditEntry] + pageInfo: PageInfo! + totalCount: Int! +} + +interface OrganizationAuditEntryData { + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI +} + +type OrganizationAuditEntryEdge { + cursor: String! + node: OrganizationAuditEntry +} + +type OrganizationConnection { + edges: [OrganizationEdge] + nodes: [Organization] + pageInfo: PageInfo! + totalCount: Int! +} + +type OrganizationEdge { + cursor: String! + node: Organization +} + +type OrganizationIdentityProvider implements Node { + digestMethod: URI + externalIdentities( + after: String + before: String + first: Int + last: Int + ): ExternalIdentityConnection! + id: ID! + idpCertificate: X509Certificate + issuer: String + organization: Organization + signatureMethod: URI + ssoUrl: URI +} + +type OrganizationInvitation implements Node { + createdAt: DateTime! + email: String + id: ID! + invitationType: OrganizationInvitationType! + invitee: User + inviter: User! + organization: Organization! + role: OrganizationInvitationRole! +} + +type OrganizationInvitationConnection { + edges: [OrganizationInvitationEdge] + nodes: [OrganizationInvitation] + pageInfo: PageInfo! + totalCount: Int! +} + +type OrganizationInvitationEdge { + cursor: String! + node: OrganizationInvitation +} + +enum OrganizationInvitationRole { + DIRECT_MEMBER + ADMIN + BILLING_MANAGER + REINSTATE +} + +enum OrganizationInvitationType { + USER + EMAIL +} + +type OrganizationMemberConnection { + edges: [OrganizationMemberEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type OrganizationMemberEdge { + cursor: String! + hasTwoFactorEnabled: Boolean + node: User + role: OrganizationMemberRole +} + +enum OrganizationMemberRole { + MEMBER + ADMIN +} + +enum OrganizationMembersCanCreateRepositoriesSettingValue { + ALL + PRIVATE + DISABLED +} + +input OrganizationOrder { + field: OrganizationOrderField! + direction: OrderDirection! +} + +enum OrganizationOrderField { + CREATED_AT + LOGIN +} + +type OrganizationTeamsHovercardContext implements HovercardContext { + message: String! + octicon: String! + relevantTeams( + after: String + before: String + first: Int + last: Int + ): TeamConnection! + teamsResourcePath: URI! + teamsUrl: URI! + totalTeamCount: Int! +} + +type OrganizationsHovercardContext implements HovercardContext { + message: String! + octicon: String! + relevantOrganizations( + after: String + before: String + first: Int + last: Int + ): OrganizationConnection! + totalOrganizationCount: Int! +} + +type PageInfo { + endCursor: String + hasNextPage: Boolean! + hasPreviousPage: Boolean! + startCursor: String +} + +union PermissionGranter = Organization | Repository | Team + +type PermissionSource { + organization: Organization! + permission: DefaultRepositoryPermissionField! + source: PermissionGranter! +} + +input PinIssueInput { + issueId: ID! + clientMutationId: String +} + +union PinnableItem = Gist | Repository + +type PinnableItemConnection { + edges: [PinnableItemEdge] + nodes: [PinnableItem] + pageInfo: PageInfo! + totalCount: Int! +} + +type PinnableItemEdge { + cursor: String! + node: PinnableItem +} + +enum PinnableItemType { + REPOSITORY + GIST + ISSUE + PROJECT + PULL_REQUEST + USER + ORGANIZATION + TEAM +} + +type PinnedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + issue: Issue! +} + +scalar PreciseDateTime + +type PrivateRepositoryForkingDisableAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type PrivateRepositoryForkingEnableAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type ProfileItemShowcase { + hasPinnedItems: Boolean! + items( + after: String + before: String + first: Int + last: Int + ): PinnableItemConnection! +} + +interface ProfileOwner { + anyPinnableItems( + type: PinnableItemType + ): Boolean! + email: String + id: ID! + itemShowcase: ProfileItemShowcase! + location: String + login: String! + name: String + pinnableItems( + types: [PinnableItemType!] + after: String + before: String + first: Int + last: Int + ): PinnableItemConnection! + pinnedItems( + types: [PinnableItemType!] + after: String + before: String + first: Int + last: Int + ): PinnableItemConnection! + pinnedItemsRemaining: Int! + viewerCanChangePinnedItems: Boolean! + websiteUrl: URI +} + +type Project implements Node, Closable, Updatable { + body: String + bodyHTML: HTML! + closed: Boolean! + closedAt: DateTime + columns( + after: String + before: String + first: Int + last: Int + ): ProjectColumnConnection! + createdAt: DateTime! + creator: Actor + databaseId: Int + id: ID! + name: String! + number: Int! + owner: ProjectOwner! + pendingCards( + after: String + before: String + first: Int + last: Int + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + ): ProjectCardConnection! + resourcePath: URI! + state: ProjectState! + updatedAt: DateTime! + url: URI! + viewerCanUpdate: Boolean! +} + +type ProjectCard implements Node { + column: ProjectColumn + content: ProjectCardItem + createdAt: DateTime! + creator: Actor + databaseId: Int + id: ID! + isArchived: Boolean! + note: String + project: Project! + resourcePath: URI! + state: ProjectCardState + updatedAt: DateTime! + url: URI! +} + +enum ProjectCardArchivedState { + ARCHIVED + NOT_ARCHIVED +} + +type ProjectCardConnection { + edges: [ProjectCardEdge] + nodes: [ProjectCard] + pageInfo: PageInfo! + totalCount: Int! +} + +type ProjectCardEdge { + cursor: String! + node: ProjectCard +} + +input ProjectCardImport { + repository: String! + number: Int! +} + +union ProjectCardItem = Issue | PullRequest + +enum ProjectCardState { + CONTENT_ONLY + NOTE_ONLY + REDACTED +} + +type ProjectColumn implements Node { + cards( + after: String + before: String + first: Int + last: Int + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + ): ProjectCardConnection! + createdAt: DateTime! + databaseId: Int + id: ID! + name: String! + project: Project! + purpose: ProjectColumnPurpose + resourcePath: URI! + updatedAt: DateTime! + url: URI! +} + +type ProjectColumnConnection { + edges: [ProjectColumnEdge] + nodes: [ProjectColumn] + pageInfo: PageInfo! + totalCount: Int! +} + +type ProjectColumnEdge { + cursor: String! + node: ProjectColumn +} + +input ProjectColumnImport { + columnName: String! + position: Int! + issues: [ProjectCardImport!] +} + +enum ProjectColumnPurpose { + TODO + IN_PROGRESS + DONE +} + +type ProjectConnection { + edges: [ProjectEdge] + nodes: [Project] + pageInfo: PageInfo! + totalCount: Int! +} + +type ProjectEdge { + cursor: String! + node: Project +} + +input ProjectOrder { + field: ProjectOrderField! + direction: OrderDirection! +} + +enum ProjectOrderField { + CREATED_AT + UPDATED_AT + NAME +} + +interface ProjectOwner { + id: ID! + project( + number: Int! + ): Project + projects( + orderBy: ProjectOrder + search: String + states: [ProjectState!] + after: String + before: String + first: Int + last: Int + ): ProjectConnection! + projectsResourcePath: URI! + projectsUrl: URI! + viewerCanCreateProjects: Boolean! +} + +enum ProjectState { + OPEN + CLOSED +} + +enum ProjectTemplate { + BASIC_KANBAN + AUTOMATED_KANBAN_V2 + AUTOMATED_REVIEWS_KANBAN + BUG_TRIAGE +} + +type PublicKey implements Node { + accessedAt: DateTime + createdAt: DateTime + fingerprint: String! + id: ID! + isReadOnly: Boolean + key: String! + updatedAt: DateTime +} + +type PublicKeyConnection { + edges: [PublicKeyEdge] + nodes: [PublicKey] + pageInfo: PageInfo! + totalCount: Int! +} + +type PublicKeyEdge { + cursor: String! + node: PublicKey +} + +type PullRequest implements Node, Assignable, Closable, Comment, Updatable, UpdatableComment, Labelable, Lockable, Reactable, RepositoryNode, Subscribable, UniformResourceLocatable { + activeLockReason: LockReason + additions: Int! + assignees( + after: String + before: String + first: Int + last: Int + ): UserConnection! + author: Actor + authorAssociation: CommentAuthorAssociation! + baseRef: Ref + baseRefName: String! + baseRefOid: GitObjectID! + baseRepository: Repository + body: String! + bodyHTML: HTML! + bodyText: String! + changedFiles: Int! + closed: Boolean! + closedAt: DateTime + comments( + after: String + before: String + first: Int + last: Int + ): IssueCommentConnection! + commits( + after: String + before: String + first: Int + last: Int + ): PullRequestCommitConnection! + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + deletions: Int! + editor: Actor + files( + after: String + before: String + first: Int + last: Int + ): PullRequestChangedFileConnection + headRef: Ref + headRefName: String! + headRefOid: GitObjectID! + headRepository: Repository + headRepositoryOwner: RepositoryOwner + hovercard( + includeNotificationContexts: Boolean = true + ): Hovercard! + id: ID! + includesCreatedEdit: Boolean! + isCrossRepository: Boolean! + labels( + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + after: String + before: String + first: Int + last: Int + ): LabelConnection + lastEditedAt: DateTime + locked: Boolean! + maintainerCanModify: Boolean! + mergeCommit: Commit + mergeable: MergeableState! + merged: Boolean! + mergedAt: DateTime + mergedBy: Actor + milestone: Milestone + number: Int! + participants( + after: String + before: String + first: Int + last: Int + ): UserConnection! + permalink: URI! + potentialMergeCommit: Commit + projectCards( + after: String + before: String + first: Int + last: Int + archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED] + ): ProjectCardConnection! + publishedAt: DateTime + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + repository: Repository! + resourcePath: URI! + revertResourcePath: URI! + revertUrl: URI! + reviewRequests( + after: String + before: String + first: Int + last: Int + ): ReviewRequestConnection + reviewThreads( + after: String + before: String + first: Int + last: Int + ): PullRequestReviewThreadConnection! + reviews( + after: String + before: String + first: Int + last: Int + states: [PullRequestReviewState!] + author: String + ): PullRequestReviewConnection + state: PullRequestState! + suggestedReviewers: [SuggestedReviewer]! + timeline( + since: DateTime + after: String + before: String + first: Int + last: Int + ): PullRequestTimelineConnection! @deprecated(reason: "`timeline` will be removed Use PullRequest.timelineItems instead. Removal on 2019-10-01 UTC.") + timelineItems( + since: DateTime + skip: Int + itemTypes: [PullRequestTimelineItemsItemType!] + after: String + before: String + first: Int + last: Int + ): PullRequestTimelineItemsConnection! + title: String! + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanApplySuggestion: Boolean! + viewerCanReact: Boolean! + viewerCanSubscribe: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! + viewerSubscription: SubscriptionState +} + +type PullRequestChangedFile { + additions: Int! + deletions: Int! + path: String! +} + +type PullRequestChangedFileConnection { + edges: [PullRequestChangedFileEdge] + nodes: [PullRequestChangedFile] + pageInfo: PageInfo! + totalCount: Int! +} + +type PullRequestChangedFileEdge { + cursor: String! + node: PullRequestChangedFile +} + +type PullRequestCommit implements Node, UniformResourceLocatable { + commit: Commit! + id: ID! + pullRequest: PullRequest! + resourcePath: URI! + url: URI! +} + +type PullRequestCommitCommentThread implements Node, RepositoryNode { + comments( + after: String + before: String + first: Int + last: Int + ): CommitCommentConnection! + commit: Commit! + id: ID! + path: String + position: Int + pullRequest: PullRequest! + repository: Repository! +} + +type PullRequestCommitConnection { + edges: [PullRequestCommitEdge] + nodes: [PullRequestCommit] + pageInfo: PageInfo! + totalCount: Int! +} + +type PullRequestCommitEdge { + cursor: String! + node: PullRequestCommit +} + +type PullRequestConnection { + edges: [PullRequestEdge] + nodes: [PullRequest] + pageInfo: PageInfo! + totalCount: Int! +} + +type PullRequestContributionsByRepository { + contributions( + after: String + before: String + first: Int + last: Int + orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedPullRequestContributionConnection! + repository: Repository! +} + +type PullRequestEdge { + cursor: String! + node: PullRequest +} + +enum PullRequestMergeMethod { + MERGE + SQUASH + REBASE +} + +input PullRequestOrder { + field: PullRequestOrderField! + direction: OrderDirection! +} + +enum PullRequestOrderField { + CREATED_AT + UPDATED_AT +} + +enum PullRequestPubSubTopic { + UPDATED + MARKASREAD + HEAD_REF + TIMELINE + STATE +} + +type PullRequestReview implements Node, Comment, Deletable, Updatable, UpdatableComment, Reactable, RepositoryNode { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + comments( + after: String + before: String + first: Int + last: Int + ): PullRequestReviewCommentConnection! + commit: Commit + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + editor: Actor + id: ID! + includesCreatedEdit: Boolean! + lastEditedAt: DateTime + onBehalfOf( + after: String + before: String + first: Int + last: Int + ): TeamConnection! + publishedAt: DateTime + pullRequest: PullRequest! + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + repository: Repository! + resourcePath: URI! + state: PullRequestReviewState! + submittedAt: DateTime + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanDelete: Boolean! + viewerCanReact: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! +} + +type PullRequestReviewComment implements Node, Comment, Deletable, Updatable, UpdatableComment, Reactable, RepositoryNode { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + commit: Commit + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + diffHunk: String! + draftedAt: DateTime! + editor: Actor + id: ID! + includesCreatedEdit: Boolean! + isMinimized: Boolean! + lastEditedAt: DateTime + minimizedReason: String + originalCommit: Commit + originalPosition: Int! + outdated: Boolean! + path: String! + position: Int + publishedAt: DateTime + pullRequest: PullRequest! + pullRequestReview: PullRequestReview + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + replyTo: PullRequestReviewComment + repository: Repository! + resourcePath: URI! + state: PullRequestReviewCommentState! + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanDelete: Boolean! + viewerCanMinimize: Boolean! + viewerCanReact: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! +} + +type PullRequestReviewCommentConnection { + edges: [PullRequestReviewCommentEdge] + nodes: [PullRequestReviewComment] + pageInfo: PageInfo! + totalCount: Int! +} + +type PullRequestReviewCommentEdge { + cursor: String! + node: PullRequestReviewComment +} + +enum PullRequestReviewCommentState { + PENDING + SUBMITTED +} + +type PullRequestReviewConnection { + edges: [PullRequestReviewEdge] + nodes: [PullRequestReview] + pageInfo: PageInfo! + totalCount: Int! +} + +type PullRequestReviewContributionsByRepository { + contributions( + after: String + before: String + first: Int + last: Int + orderBy: ContributionOrder = {field: OCCURRED_AT, direction: DESC} + ): CreatedPullRequestReviewContributionConnection! + repository: Repository! +} + +type PullRequestReviewEdge { + cursor: String! + node: PullRequestReview +} + +enum PullRequestReviewEvent { + COMMENT + APPROVE + REQUEST_CHANGES + DISMISS +} + +enum PullRequestReviewState { + PENDING + COMMENTED + APPROVED + CHANGES_REQUESTED + DISMISSED +} + +type PullRequestReviewThread implements Node { + comments( + after: String + before: String + first: Int + last: Int + skip: Int + ): PullRequestReviewCommentConnection! + id: ID! + isResolved: Boolean! + pullRequest: PullRequest! + repository: Repository! + resolvedBy: User + viewerCanResolve: Boolean! + viewerCanUnresolve: Boolean! +} + +type PullRequestReviewThreadConnection { + edges: [PullRequestReviewThreadEdge] + nodes: [PullRequestReviewThread] + pageInfo: PageInfo! + totalCount: Int! +} + +type PullRequestReviewThreadEdge { + cursor: String! + node: PullRequestReviewThread +} + +type PullRequestRevisionMarker { + createdAt: DateTime! + lastSeenCommit: Commit! + pullRequest: PullRequest! +} + +enum PullRequestState { + OPEN + CLOSED + MERGED +} + +type PullRequestTimelineConnection { + edges: [PullRequestTimelineItemEdge] + nodes: [PullRequestTimelineItem] + pageInfo: PageInfo! + totalCount: Int! +} + +union PullRequestTimelineItem = AssignedEvent | BaseRefForcePushedEvent | ClosedEvent | Commit | CommitCommentThread | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MergedEvent | MilestonedEvent | PullRequestReview | PullRequestReviewComment | PullRequestReviewThread | ReferencedEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnsubscribedEvent | UserBlockedEvent + +type PullRequestTimelineItemEdge { + cursor: String! + node: PullRequestTimelineItem +} + +union PullRequestTimelineItems = AddedToProjectEvent | AssignedEvent | BaseRefChangedEvent | BaseRefForcePushedEvent | ClosedEvent | CommentDeletedEvent | ConvertedNoteToIssueEvent | CrossReferencedEvent | DemilestonedEvent | DeployedEvent | DeploymentEnvironmentChangedEvent | HeadRefDeletedEvent | HeadRefForcePushedEvent | HeadRefRestoredEvent | IssueComment | LabeledEvent | LockedEvent | MarkedAsDuplicateEvent | MentionedEvent | MergedEvent | MilestonedEvent | MovedColumnsInProjectEvent | PinnedEvent | PullRequestCommit | PullRequestCommitCommentThread | PullRequestReview | PullRequestReviewThread | PullRequestRevisionMarker | ReadyForReviewEvent | ReferencedEvent | RemovedFromProjectEvent | RenamedTitleEvent | ReopenedEvent | ReviewDismissedEvent | ReviewRequestRemovedEvent | ReviewRequestedEvent | SubscribedEvent | TransferredEvent | UnassignedEvent | UnlabeledEvent | UnlockedEvent | UnpinnedEvent | UnsubscribedEvent | UserBlockedEvent + +type PullRequestTimelineItemsConnection { + edges: [PullRequestTimelineItemsEdge] + filteredCount: Int! + nodes: [PullRequestTimelineItems] + pageCount: Int! + pageInfo: PageInfo! + totalCount: Int! + updatedAt: DateTime! +} + +type PullRequestTimelineItemsEdge { + cursor: String! + node: PullRequestTimelineItems +} + +enum PullRequestTimelineItemsItemType { + PULL_REQUEST_COMMIT + PULL_REQUEST_COMMIT_COMMENT_THREAD + PULL_REQUEST_REVIEW + PULL_REQUEST_REVIEW_THREAD + PULL_REQUEST_REVISION_MARKER + BASE_REF_CHANGED_EVENT + BASE_REF_FORCE_PUSHED_EVENT + DEPLOYED_EVENT + DEPLOYMENT_ENVIRONMENT_CHANGED_EVENT + HEAD_REF_DELETED_EVENT + HEAD_REF_FORCE_PUSHED_EVENT + HEAD_REF_RESTORED_EVENT + MERGED_EVENT + REVIEW_DISMISSED_EVENT + REVIEW_REQUESTED_EVENT + REVIEW_REQUEST_REMOVED_EVENT + READY_FOR_REVIEW_EVENT + ISSUE_COMMENT + CROSS_REFERENCED_EVENT + ADDED_TO_PROJECT_EVENT + ASSIGNED_EVENT + CLOSED_EVENT + COMMENT_DELETED_EVENT + CONVERTED_NOTE_TO_ISSUE_EVENT + DEMILESTONED_EVENT + LABELED_EVENT + LOCKED_EVENT + MARKED_AS_DUPLICATE_EVENT + MENTIONED_EVENT + MILESTONED_EVENT + MOVED_COLUMNS_IN_PROJECT_EVENT + PINNED_EVENT + REFERENCED_EVENT + REMOVED_FROM_PROJECT_EVENT + RENAMED_TITLE_EVENT + REOPENED_EVENT + SUBSCRIBED_EVENT + TRANSFERRED_EVENT + UNASSIGNED_EVENT + UNLABELED_EVENT + UNLOCKED_EVENT + USER_BLOCKED_EVENT + UNPINNED_EVENT + UNSUBSCRIBED_EVENT +} + +enum PullRequestUpdateState { + OPEN + CLOSED +} + +type PushAllowance implements Node { + actor: PushAllowanceActor + branchProtectionRule: BranchProtectionRule + id: ID! +} + +union PushAllowanceActor = App | Team | User + +type PushAllowanceConnection { + edges: [PushAllowanceEdge] + nodes: [PushAllowance] + pageInfo: PageInfo! + totalCount: Int! +} + +type PushAllowanceEdge { + cursor: String! + node: PushAllowance +} + +type Query { + codeOfConduct( + key: String! + ): CodeOfConduct + codesOfConduct: [CodeOfConduct] + enterprise( + slug: String! + invitationToken: String + ): Enterprise + enterpriseAdministratorInvitation( + userLogin: String! + enterpriseSlug: String! + role: EnterpriseAdministratorRole! + ): EnterpriseAdministratorInvitation + enterpriseAdministratorInvitationByToken( + invitationToken: String! + ): EnterpriseAdministratorInvitation + license( + key: String! + ): License + licenses: [License]! + marketplaceCategories( + includeCategories: [String!] + excludeEmpty: Boolean + excludeSubcategories: Boolean + ): [MarketplaceCategory!]! + marketplaceCategory( + slug: String! + useTopicAliases: Boolean + ): MarketplaceCategory + marketplaceListing( + slug: String! + ): MarketplaceListing + marketplaceListings( + after: String + before: String + first: Int + last: Int + categorySlug: String + useTopicAliases: Boolean + viewerCanAdmin: Boolean + adminId: ID + organizationId: ID + allStates: Boolean + slugs: [String] + primaryCategoryOnly: Boolean = false + withFreeTrialsOnly: Boolean = false + ): MarketplaceListingConnection! + meta: GitHubMetadata! + node( + id: ID! + ): Node + nodes( + ids: [ID!]! + ): [Node]! + organization( + login: String! + ): Organization + rateLimit( + dryRun: Boolean = false + ): RateLimit + relay: Query! + repository( + owner: String! + name: String! + ): Repository + repositoryOwner( + login: String! + ): RepositoryOwner + resource( + url: URI! + ): UniformResourceLocatable + search( + after: String + before: String + first: Int + last: Int + query: String! + type: SearchType! + ): SearchResultItemConnection! + securityAdvisories( + orderBy: SecurityAdvisoryOrder = {field: UPDATED_AT, direction: DESC} + identifier: SecurityAdvisoryIdentifierFilter + publishedSince: DateTime + updatedSince: DateTime + after: String + before: String + first: Int + last: Int + ): SecurityAdvisoryConnection! + securityAdvisory( + ghsaId: String! + ): SecurityAdvisory + securityVulnerabilities( + orderBy: SecurityVulnerabilityOrder = {field: UPDATED_AT, direction: DESC} + ecosystem: SecurityAdvisoryEcosystem + package: String + severities: [SecurityAdvisorySeverity!] + after: String + before: String + first: Int + last: Int + ): SecurityVulnerabilityConnection! + sponsorsListing( + slug: String! + ): SponsorsListing @deprecated(reason: "`Query.sponsorsListing` will be removed. Use `Sponsorable.sponsorsListing` instead. Removal on 2020-04-01 UTC.") + topic( + name: String! + ): Topic + user( + login: String! + ): User + viewer: User! +} + +type RateLimit { + cost: Int! + limit: Int! + nodeCount: Int! + remaining: Int! + resetAt: DateTime! +} + +interface Reactable { + databaseId: Int + id: ID! + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + viewerCanReact: Boolean! +} + +type ReactingUserConnection { + edges: [ReactingUserEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type ReactingUserEdge { + cursor: String! + node: User! + reactedAt: DateTime! +} + +type Reaction implements Node { + content: ReactionContent! + createdAt: DateTime! + databaseId: Int + id: ID! + reactable: Reactable! + user: User +} + +type ReactionConnection { + edges: [ReactionEdge] + nodes: [Reaction] + pageInfo: PageInfo! + totalCount: Int! + viewerHasReacted: Boolean! +} + +enum ReactionContent { + THUMBS_UP + THUMBS_DOWN + LAUGH + HOORAY + CONFUSED + HEART + ROCKET + EYES +} + +type ReactionEdge { + cursor: String! + node: Reaction +} + +type ReactionGroup { + content: ReactionContent! + createdAt: DateTime + subject: Reactable! + users( + after: String + before: String + first: Int + last: Int + ): ReactingUserConnection! + viewerHasReacted: Boolean! +} + +input ReactionOrder { + field: ReactionOrderField! + direction: OrderDirection! +} + +enum ReactionOrderField { + CREATED_AT +} + +type ReadyForReviewEvent implements Node, UniformResourceLocatable { + actor: Actor + createdAt: DateTime! + id: ID! + pullRequest: PullRequest! + resourcePath: URI! + url: URI! +} + +type Ref implements Node { + associatedPullRequests( + states: [PullRequestState!] + labels: [String!] + headRefName: String + baseRefName: String + orderBy: IssueOrder + after: String + before: String + first: Int + last: Int + ): PullRequestConnection! + id: ID! + name: String! + prefix: String! + repository: Repository! + target: GitObject! +} + +type RefConnection { + edges: [RefEdge] + nodes: [Ref] + pageInfo: PageInfo! + totalCount: Int! +} + +type RefEdge { + cursor: String! + node: Ref +} + +input RefOrder { + field: RefOrderField! + direction: OrderDirection! +} + +enum RefOrderField { + TAG_COMMIT_DATE + ALPHABETICAL +} + +type ReferencedEvent implements Node { + actor: Actor + commit: Commit + commitRepository: Repository! + createdAt: DateTime! + id: ID! + isCrossRepository: Boolean! + isDirectReference: Boolean! + subject: ReferencedSubject! +} + +union ReferencedSubject = Issue | PullRequest + +input RegenerateEnterpriseIdentityProviderRecoveryCodesInput { + enterpriseId: ID! + clientMutationId: String +} + +type RegenerateEnterpriseIdentityProviderRecoveryCodesPayload { + clientMutationId: String + identityProvider: EnterpriseIdentityProvider +} + +type RegistryPackage implements Node { + color: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + id: ID! + latestVersion: RegistryPackageVersion @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + name: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + nameWithOwner: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + packageFileByGuid( + guid: String! + ): RegistryPackageFile @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object. Removal on 2020-04-01 UTC.") + packageFileBySha256( + sha256: String! + ): RegistryPackageFile @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object. Removal on 2020-04-01 UTC.") + packageType: RegistryPackageType! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + preReleaseVersions( + after: String + before: String + first: Int + last: Int + ): RegistryPackageVersionConnection @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + registryPackageType: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + repository: Repository @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + statistics: RegistryPackageStatistics @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + tags( + after: String + before: String + first: Int + last: Int + ): RegistryPackageTagConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object. Removal on 2020-04-01 UTC.") + topics( + after: String + before: String + first: Int + last: Int + ): TopicConnection @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object. Removal on 2020-04-01 UTC.") + version( + version: String! + ): RegistryPackageVersion @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + versionByPlatform( + version: String! + platform: String! + ): RegistryPackageVersion @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + versionBySha256( + sha256: String! + ): RegistryPackageVersion @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + versions( + after: String + before: String + first: Int + last: Int + ): RegistryPackageVersionConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") + versionsByMetadatum( + metadatum: RegistryPackageMetadatum! + after: String + before: String + first: Int + last: Int + ): RegistryPackageVersionConnection @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `Package` object instead. Removal on 2020-04-01 UTC.") +} + +type RegistryPackageConnection { + edges: [RegistryPackageEdge] + nodes: [RegistryPackage] + pageInfo: PageInfo! + totalCount: Int! +} + +type RegistryPackageDependency implements Node { + dependencyType: RegistryPackageDependencyType! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageDependency` object instead. Removal on 2020-04-01 UTC.") + id: ID! + name: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageDependency` object instead. Removal on 2020-04-01 UTC.") + version: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageDependency` object instead. Removal on 2020-04-01 UTC.") +} + +type RegistryPackageDependencyConnection { + edges: [RegistryPackageDependencyEdge] + nodes: [RegistryPackageDependency] + pageInfo: PageInfo! + totalCount: Int! +} + +type RegistryPackageDependencyEdge { + cursor: String! + node: RegistryPackageDependency +} + +enum RegistryPackageDependencyType { + DEFAULT + DEV + TEST + PEER + OPTIONAL + BUNDLED +} + +type RegistryPackageEdge { + cursor: String! + node: RegistryPackage +} + +type RegistryPackageFile implements Node { + guid: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + id: ID! + md5: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + metadataUrl: URI! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + name: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + packageVersion: RegistryPackageVersion! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + sha1: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + sha256: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + size: Int @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") + updatedAt: DateTime! + url: URI! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageFile` object instead. Removal on 2020-04-01 UTC.") +} + +type RegistryPackageFileConnection { + edges: [RegistryPackageFileEdge] + nodes: [RegistryPackageFile] + pageInfo: PageInfo! + totalCount: Int! +} + +type RegistryPackageFileEdge { + cursor: String! + node: RegistryPackageFile +} + +enum RegistryPackageFileState { + NEW + UPLOADED +} + +input RegistryPackageMetadatum { + name: String! + value: String! + update: Boolean +} + +interface RegistryPackageOwner { + id: ID! + registryPackages( + after: String + before: String + first: Int + last: Int + name: String + names: [String] + repositoryId: ID + packageType: RegistryPackageType + registryPackageType: String + publicOnly: Boolean = false + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageOwner` object instead. Removal on 2020-04-01 UTC.") +} + +interface RegistryPackageSearch { + id: ID! + registryPackagesForQuery( + after: String + before: String + first: Int + last: Int + query: String + packageType: RegistryPackageType + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageSearch` object instead. Removal on 2020-04-01 UTC.") +} + +type RegistryPackageStatistics { + downloadsThisMonth: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsThisWeek: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsThisYear: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsToday: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsTotalCount: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageStatistics` object instead. Removal on 2020-04-01 UTC.") +} + +type RegistryPackageTag implements Node { + id: ID! + name: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageTag` object instead. Removal on 2020-04-01 UTC.") + version: RegistryPackageVersion @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageTag` object instead. Removal on 2020-04-01 UTC.") +} + +type RegistryPackageTagConnection { + edges: [RegistryPackageTagEdge] + nodes: [RegistryPackageTag] + pageInfo: PageInfo! + totalCount: Int! +} + +type RegistryPackageTagEdge { + cursor: String! + node: RegistryPackageTag +} + +enum RegistryPackageType { + NPM + RUBYGEMS + MAVEN + DOCKER + DEBIAN + NUGET + PYTHON +} + +type RegistryPackageVersion implements Node { + dependencies( + after: String + before: String + first: Int + last: Int + type: RegistryPackageDependencyType + ): RegistryPackageDependencyConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + fileByName( + filename: String! + ): RegistryPackageFile @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + files( + after: String + before: String + first: Int + last: Int + ): RegistryPackageFileConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + id: ID! + installationCommand: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + manifest: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + platform: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + preRelease: Boolean! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + readme: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + readmeHtml: HTML @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + registryPackage: RegistryPackage @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + release: Release @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + sha256: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + size: Int @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + statistics: RegistryPackageVersionStatistics @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + summary: String @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + updatedAt: DateTime! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + version: String! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") + viewerCanEdit: Boolean! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersion` object instead. Removal on 2020-04-01 UTC.") +} + +type RegistryPackageVersionConnection { + edges: [RegistryPackageVersionEdge] + nodes: [RegistryPackageVersion] + pageInfo: PageInfo! + totalCount: Int! +} + +type RegistryPackageVersionEdge { + cursor: String! + node: RegistryPackageVersion +} + +type RegistryPackageVersionStatistics { + downloadsThisMonth: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersionStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsThisWeek: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersionStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsThisYear: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersionStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsToday: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersionStatistics` object instead. Removal on 2020-04-01 UTC.") + downloadsTotalCount: Int! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageVersionStatistics` object instead. Removal on 2020-04-01 UTC.") +} + +type Release implements Node, UniformResourceLocatable { + author: User + createdAt: DateTime! + description: String + descriptionHTML: HTML + id: ID! + isDraft: Boolean! + isPrerelease: Boolean! + name: String + publishedAt: DateTime + releaseAssets( + after: String + before: String + first: Int + last: Int + name: String + ): ReleaseAssetConnection! + resourcePath: URI! + shortDescriptionHTML( + limit: Int = 200 + ): HTML + tag: Ref + tagName: String! + updatedAt: DateTime! + url: URI! +} + +type ReleaseAsset implements Node { + contentType: String! + createdAt: DateTime! + downloadCount: Int! + downloadUrl: URI! + id: ID! + name: String! + release: Release + size: Int! + updatedAt: DateTime! + uploadedBy: User! + url: URI! +} + +type ReleaseAssetConnection { + edges: [ReleaseAssetEdge] + nodes: [ReleaseAsset] + pageInfo: PageInfo! + totalCount: Int! +} + +type ReleaseAssetEdge { + cursor: String! + node: ReleaseAsset +} + +type ReleaseConnection { + edges: [ReleaseEdge] + nodes: [Release] + pageInfo: PageInfo! + totalCount: Int! +} + +type ReleaseEdge { + cursor: String! + node: Release +} + +input ReleaseOrder { + field: ReleaseOrderField! + direction: OrderDirection! +} + +enum ReleaseOrderField { + CREATED_AT + NAME +} + +input RemoveAssigneesFromAssignableInput { + assignableId: ID! + assigneeIds: [ID!]! + clientMutationId: String +} + +type RemoveAssigneesFromAssignablePayload { + assignable: Assignable + clientMutationId: String +} + +input RemoveEnterpriseAdminInput { + enterpriseId: ID! + login: String! + clientMutationId: String +} + +type RemoveEnterpriseAdminPayload { + admin: User + clientMutationId: String + enterprise: Enterprise + message: String + viewer: User +} + +input RemoveEnterpriseOrganizationInput { + enterpriseId: ID! + organizationId: ID! + clientMutationId: String +} + +type RemoveEnterpriseOrganizationPayload { + clientMutationId: String + enterprise: Enterprise + organization: Organization + viewer: User +} + +input RemoveLabelsFromLabelableInput { + labelableId: ID! + labelIds: [ID!]! + clientMutationId: String +} + +type RemoveLabelsFromLabelablePayload { + clientMutationId: String + labelable: Labelable +} + +input RemoveOutsideCollaboratorInput { + userId: ID! + organizationId: ID! + clientMutationId: String +} + +type RemoveOutsideCollaboratorPayload { + clientMutationId: String + removedUser: User +} + +input RemoveReactionInput { + subjectId: ID! + content: ReactionContent! + clientMutationId: String +} + +type RemoveReactionPayload { + clientMutationId: String + reaction: Reaction + subject: Reactable +} + +input RemoveStarInput { + starrableId: ID! + clientMutationId: String +} + +type RemoveStarPayload { + clientMutationId: String + starrable: Starrable +} + +type RemovedFromProjectEvent implements Node { + actor: Actor + createdAt: DateTime! + databaseId: Int + id: ID! +} + +type RenamedTitleEvent implements Node { + actor: Actor + createdAt: DateTime! + currentTitle: String! + id: ID! + previousTitle: String! + subject: RenamedTitleSubject! +} + +union RenamedTitleSubject = Issue | PullRequest + +input ReopenIssueInput { + issueId: ID! + clientMutationId: String +} + +type ReopenIssuePayload { + clientMutationId: String + issue: Issue +} + +input ReopenPullRequestInput { + pullRequestId: ID! + clientMutationId: String +} + +type ReopenPullRequestPayload { + clientMutationId: String + pullRequest: PullRequest +} + +type ReopenedEvent implements Node { + actor: Actor + closable: Closable! + createdAt: DateTime! + id: ID! +} + +type RepoAccessAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI + visibility: RepoAccessAuditEntryVisibility +} + +enum RepoAccessAuditEntryVisibility { + INTERNAL + PRIVATE + PUBLIC +} + +type RepoAddMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI + visibility: RepoAddMemberAuditEntryVisibility +} + +enum RepoAddMemberAuditEntryVisibility { + INTERNAL + PRIVATE + PUBLIC +} + +type RepoAddTopicAuditEntry implements Node, AuditEntry, RepositoryAuditEntryData, OrganizationAuditEntryData, TopicAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + topic: Topic + topicName: String + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoArchivedAuditEntry implements Node, AuditEntry, RepositoryAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI + visibility: RepoArchivedAuditEntryVisibility +} + +enum RepoArchivedAuditEntryVisibility { + INTERNAL + PRIVATE + PUBLIC +} + +type RepoChangeMergeSettingAuditEntry implements Node, AuditEntry, RepositoryAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + isEnabled: Boolean + mergeType: RepoChangeMergeSettingAuditEntryMergeType + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum RepoChangeMergeSettingAuditEntryMergeType { + MERGE + REBASE + SQUASH +} + +type RepoConfigDisableAnonymousGitAccessAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigDisableCollaboratorsOnlyAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigDisableContributorsOnlyAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigDisableSockpuppetDisallowedAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigEnableAnonymousGitAccessAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigEnableCollaboratorsOnlyAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigEnableContributorsOnlyAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigEnableSockpuppetDisallowedAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigLockAnonymousGitAccessAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoConfigUnlockAnonymousGitAccessAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepoCreateAuditEntry implements Node, AuditEntry, RepositoryAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + forkParentName: String + forkSourceName: String + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI + visibility: RepoCreateAuditEntryVisibility +} + +enum RepoCreateAuditEntryVisibility { + INTERNAL + PRIVATE + PUBLIC +} + +type RepoDestroyAuditEntry implements Node, AuditEntry, RepositoryAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI + visibility: RepoDestroyAuditEntryVisibility +} + +enum RepoDestroyAuditEntryVisibility { + INTERNAL + PRIVATE + PUBLIC +} + +type RepoRemoveMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI + visibility: RepoRemoveMemberAuditEntryVisibility +} + +enum RepoRemoveMemberAuditEntryVisibility { + INTERNAL + PRIVATE + PUBLIC +} + +type RepoRemoveTopicAuditEntry implements Node, AuditEntry, RepositoryAuditEntryData, OrganizationAuditEntryData, TopicAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + topic: Topic + topicName: String + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +enum ReportedContentClassifiers { + SPAM + ABUSE + OFF_TOPIC + OUTDATED + RESOLVED +} + +type Repository implements Node, ProjectOwner, RegistryPackageOwner, RegistryPackageSearch, Subscribable, Starrable, UniformResourceLocatable, RepositoryInfo { + assignableUsers( + query: String + after: String + before: String + first: Int + last: Int + ): UserConnection! + branchProtectionRules( + after: String + before: String + first: Int + last: Int + ): BranchProtectionRuleConnection! + codeOfConduct: CodeOfConduct + collaborators( + affiliation: CollaboratorAffiliation + query: String + after: String + before: String + first: Int + last: Int + ): RepositoryCollaboratorConnection + commitComments( + after: String + before: String + first: Int + last: Int + ): CommitCommentConnection! + createdAt: DateTime! + databaseId: Int + defaultBranchRef: Ref + deployKeys( + after: String + before: String + first: Int + last: Int + ): DeployKeyConnection! + deployments( + environments: [String!] + orderBy: DeploymentOrder = {field: CREATED_AT, direction: ASC} + after: String + before: String + first: Int + last: Int + ): DeploymentConnection! + description: String + descriptionHTML: HTML! + diskUsage: Int + forkCount: Int! + forks( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + ): RepositoryConnection! + fundingLinks: [FundingLink!]! + hasIssuesEnabled: Boolean! + hasProjectsEnabled: Boolean! + hasWikiEnabled: Boolean! + homepageUrl: URI + id: ID! + isArchived: Boolean! + isDisabled: Boolean! + isFork: Boolean! + isLocked: Boolean! + isMirror: Boolean! + isPrivate: Boolean! + isTemplate: Boolean! + issue( + number: Int! + ): Issue + issueOrPullRequest( + number: Int! + ): IssueOrPullRequest + issues( + orderBy: IssueOrder + labels: [String!] + states: [IssueState!] + filterBy: IssueFilters + after: String + before: String + first: Int + last: Int + ): IssueConnection! + label( + name: String! + ): Label + labels( + orderBy: LabelOrder = {field: CREATED_AT, direction: ASC} + after: String + before: String + first: Int + last: Int + query: String + ): LabelConnection + languages( + after: String + before: String + first: Int + last: Int + orderBy: LanguageOrder + ): LanguageConnection + licenseInfo: License + lockReason: RepositoryLockReason + mentionableUsers( + query: String + after: String + before: String + first: Int + last: Int + ): UserConnection! + mergeCommitAllowed: Boolean! + milestone( + number: Int! + ): Milestone + milestones( + after: String + before: String + first: Int + last: Int + states: [MilestoneState!] + orderBy: MilestoneOrder + ): MilestoneConnection + mirrorUrl: URI + name: String! + nameWithOwner: String! + object( + oid: GitObjectID + expression: String + ): GitObject + openGraphImageUrl: URI! + owner: RepositoryOwner! + parent: Repository + primaryLanguage: Language + project( + number: Int! + ): Project + projects( + orderBy: ProjectOrder + search: String + states: [ProjectState!] + after: String + before: String + first: Int + last: Int + ): ProjectConnection! + projectsResourcePath: URI! + projectsUrl: URI! + pullRequest( + number: Int! + ): PullRequest + pullRequests( + states: [PullRequestState!] + labels: [String!] + headRefName: String + baseRefName: String + orderBy: IssueOrder + after: String + before: String + first: Int + last: Int + ): PullRequestConnection! + pushedAt: DateTime + rebaseMergeAllowed: Boolean! + ref( + qualifiedName: String! + ): Ref + refs( + after: String + before: String + first: Int + last: Int + refPrefix: String! + direction: OrderDirection + orderBy: RefOrder + ): RefConnection + registryPackages( + after: String + before: String + first: Int + last: Int + name: String + names: [String] + repositoryId: ID + packageType: RegistryPackageType + registryPackageType: String + publicOnly: Boolean = false + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageOwner` object instead. Removal on 2020-04-01 UTC.") + registryPackagesForQuery( + after: String + before: String + first: Int + last: Int + query: String + packageType: RegistryPackageType + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageSearch` object instead. Removal on 2020-04-01 UTC.") + release( + tagName: String! + ): Release + releases( + after: String + before: String + first: Int + last: Int + orderBy: ReleaseOrder + ): ReleaseConnection! + repositoryTopics( + after: String + before: String + first: Int + last: Int + ): RepositoryTopicConnection! + resourcePath: URI! + shortDescriptionHTML( + limit: Int = 200 + ): HTML! + squashMergeAllowed: Boolean! + sshUrl: GitSSHRemote! + stargazers( + after: String + before: String + first: Int + last: Int + orderBy: StarOrder + ): StargazerConnection! + tempCloneToken: String + templateRepository: Repository + updatedAt: DateTime! + url: URI! + usesCustomOpenGraphImage: Boolean! + viewerCanAdminister: Boolean! + viewerCanCreateProjects: Boolean! + viewerCanSubscribe: Boolean! + viewerCanUpdateTopics: Boolean! + viewerHasStarred: Boolean! + viewerPermission: RepositoryPermission + viewerSubscription: SubscriptionState + vulnerabilityAlerts( + after: String + before: String + first: Int + last: Int + ): RepositoryVulnerabilityAlertConnection + watchers( + after: String + before: String + first: Int + last: Int + ): UserConnection! +} + +enum RepositoryAffiliation { + OWNER + COLLABORATOR + ORGANIZATION_MEMBER +} + +interface RepositoryAuditEntryData { + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI +} + +enum RepositoryCollaboratorAffiliation { + ALL + OUTSIDE +} + +type RepositoryCollaboratorConnection { + edges: [RepositoryCollaboratorEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type RepositoryCollaboratorEdge { + cursor: String! + node: User! + permission: RepositoryPermission! + permissionSources: [PermissionSource!] +} + +type RepositoryConnection { + edges: [RepositoryEdge] + nodes: [Repository] + pageInfo: PageInfo! + totalCount: Int! + totalDiskUsage: Int! +} + +enum RepositoryContributionType { + COMMIT + ISSUE + PULL_REQUEST + REPOSITORY + PULL_REQUEST_REVIEW +} + +type RepositoryEdge { + cursor: String! + node: Repository +} + +interface RepositoryInfo { + createdAt: DateTime! + description: String + descriptionHTML: HTML! + forkCount: Int! + hasIssuesEnabled: Boolean! + hasProjectsEnabled: Boolean! + hasWikiEnabled: Boolean! + homepageUrl: URI + isArchived: Boolean! + isFork: Boolean! + isLocked: Boolean! + isMirror: Boolean! + isPrivate: Boolean! + isTemplate: Boolean! + licenseInfo: License + lockReason: RepositoryLockReason + mirrorUrl: URI + name: String! + nameWithOwner: String! + openGraphImageUrl: URI! + owner: RepositoryOwner! + pushedAt: DateTime + resourcePath: URI! + shortDescriptionHTML( + limit: Int = 200 + ): HTML! + updatedAt: DateTime! + url: URI! + usesCustomOpenGraphImage: Boolean! +} + +type RepositoryInvitation implements Node { + id: ID! + invitee: User! + inviter: User! + permission: RepositoryPermission! + repository: RepositoryInfo +} + +type RepositoryInvitationEdge { + cursor: String! + node: RepositoryInvitation +} + +input RepositoryInvitationOrder { + field: RepositoryInvitationOrderField! + direction: OrderDirection! +} + +enum RepositoryInvitationOrderField { + CREATED_AT + INVITEE_LOGIN +} + +enum RepositoryLockReason { + MOVING + BILLING + RENAME + MIGRATING +} + +interface RepositoryNode { + repository: Repository! +} + +input RepositoryOrder { + field: RepositoryOrderField! + direction: OrderDirection! +} + +enum RepositoryOrderField { + CREATED_AT + UPDATED_AT + PUSHED_AT + NAME + STARGAZERS +} + +interface RepositoryOwner { + avatarUrl( + size: Int + ): URI! + id: ID! + login: String! + pinnedRepositories( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + ): RepositoryConnection! @deprecated(reason: "pinnedRepositories will be removed Use ProfileOwner.pinnedItems instead. Removal on 2019-10-01 UTC.") + repositories( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + isFork: Boolean + ): RepositoryConnection! + repository( + name: String! + ): Repository + resourcePath: URI! + url: URI! +} + +enum RepositoryPermission { + ADMIN + MAINTAIN + WRITE + TRIAGE + READ +} + +enum RepositoryPrivacy { + PUBLIC + PRIVATE +} + +type RepositoryTopic implements Node, UniformResourceLocatable { + id: ID! + resourcePath: URI! + topic: Topic! + url: URI! +} + +type RepositoryTopicConnection { + edges: [RepositoryTopicEdge] + nodes: [RepositoryTopic] + pageInfo: PageInfo! + totalCount: Int! +} + +type RepositoryTopicEdge { + cursor: String! + node: RepositoryTopic +} + +enum RepositoryVisibility { + PRIVATE + PUBLIC + INTERNAL +} + +type RepositoryVisibilityChangeDisableAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepositoryVisibilityChangeEnableAuditEntry implements Node, AuditEntry, EnterpriseAuditEntryData, OrganizationAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + enterpriseResourcePath: URI + enterpriseSlug: String + enterpriseUrl: URI + id: ID! + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type RepositoryVulnerabilityAlert implements Node, RepositoryNode { + affectedRange: String! @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityVulnerability.vulnerableVersionRange` instead. Removal on 2019-10-01 UTC.") + createdAt: DateTime! + dismissReason: String + dismissedAt: DateTime + dismisser: User + externalIdentifier: String @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityAdvisory.identifiers` instead. Removal on 2019-10-01 UTC.") + externalReference: String! @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityAdvisory.references` instead. Removal on 2019-10-01 UTC.") + fixedIn: String @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityVulnerability.firstPatchedVersion` instead. Removal on 2019-10-01 UTC.") + id: ID! + packageName: String! @deprecated(reason: "advisory specific fields are being removed from repositoryVulnerabilityAlert objects Use `securityVulnerability.package` instead. Removal on 2019-10-01 UTC.") + repository: Repository! + securityAdvisory: SecurityAdvisory + securityVulnerability: SecurityVulnerability + vulnerableManifestFilename: String! + vulnerableManifestPath: String! + vulnerableRequirements: String +} + +type RepositoryVulnerabilityAlertConnection { + edges: [RepositoryVulnerabilityAlertEdge] + nodes: [RepositoryVulnerabilityAlert] + pageInfo: PageInfo! + totalCount: Int! +} + +type RepositoryVulnerabilityAlertEdge { + cursor: String! + node: RepositoryVulnerabilityAlert +} + +input RequestReviewsInput { + pullRequestId: ID! + userIds: [ID!] + teamIds: [ID!] + union: Boolean + clientMutationId: String +} + +type RequestReviewsPayload { + clientMutationId: String + pullRequest: PullRequest + requestedReviewersEdge: UserEdge +} + +union RequestedReviewer = Mannequin | Team | User + +input ResolveReviewThreadInput { + threadId: ID! + clientMutationId: String +} + +type ResolveReviewThreadPayload { + clientMutationId: String + thread: PullRequestReviewThread +} + +type RestrictedContribution implements Contribution { + isRestricted: Boolean! + occurredAt: DateTime! + resourcePath: URI! + url: URI! + user: User! +} + +type ReviewDismissalAllowance implements Node { + actor: ReviewDismissalAllowanceActor + branchProtectionRule: BranchProtectionRule + id: ID! +} + +union ReviewDismissalAllowanceActor = Team | User + +type ReviewDismissalAllowanceConnection { + edges: [ReviewDismissalAllowanceEdge] + nodes: [ReviewDismissalAllowance] + pageInfo: PageInfo! + totalCount: Int! +} + +type ReviewDismissalAllowanceEdge { + cursor: String! + node: ReviewDismissalAllowance +} + +type ReviewDismissedEvent implements Node, UniformResourceLocatable { + actor: Actor + createdAt: DateTime! + databaseId: Int + dismissalMessage: String + dismissalMessageHTML: String + id: ID! + previousReviewState: PullRequestReviewState! + pullRequest: PullRequest! + pullRequestCommit: PullRequestCommit + resourcePath: URI! + review: PullRequestReview + url: URI! +} + +type ReviewRequest implements Node { + databaseId: Int + id: ID! + pullRequest: PullRequest! + requestedReviewer: RequestedReviewer +} + +type ReviewRequestConnection { + edges: [ReviewRequestEdge] + nodes: [ReviewRequest] + pageInfo: PageInfo! + totalCount: Int! +} + +type ReviewRequestEdge { + cursor: String! + node: ReviewRequest +} + +type ReviewRequestRemovedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + pullRequest: PullRequest! + requestedReviewer: RequestedReviewer +} + +type ReviewRequestedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + pullRequest: PullRequest! + requestedReviewer: RequestedReviewer +} + +type ReviewStatusHovercardContext implements HovercardContext { + message: String! + octicon: String! +} + +enum SamlDigestAlgorithm { + SHA1 + SHA256 + SHA384 + SHA512 +} + +enum SamlSignatureAlgorithm { + RSA_SHA1 + RSA_SHA256 + RSA_SHA384 + RSA_SHA512 +} + +type SavedReply implements Node { + body: String! + bodyHTML: HTML! + databaseId: Int + id: ID! + title: String! + user: Actor +} + +type SavedReplyConnection { + edges: [SavedReplyEdge] + nodes: [SavedReply] + pageInfo: PageInfo! + totalCount: Int! +} + +type SavedReplyEdge { + cursor: String! + node: SavedReply +} + +input SavedReplyOrder { + field: SavedReplyOrderField! + direction: OrderDirection! +} + +enum SavedReplyOrderField { + UPDATED_AT +} + +union SearchResultItem = App | Issue | MarketplaceListing | Organization | PullRequest | Repository | User + +type SearchResultItemConnection { + codeCount: Int! + edges: [SearchResultItemEdge] + issueCount: Int! + nodes: [SearchResultItem] + pageInfo: PageInfo! + repositoryCount: Int! + userCount: Int! + wikiCount: Int! +} + +type SearchResultItemEdge { + cursor: String! + node: SearchResultItem + textMatches: [TextMatch] +} + +enum SearchType { + ISSUE + REPOSITORY + USER +} + +type SecurityAdvisory implements Node { + databaseId: Int + description: String! + ghsaId: String! + id: ID! + identifiers: [SecurityAdvisoryIdentifier!]! + origin: String! + publishedAt: DateTime! + references: [SecurityAdvisoryReference!]! + severity: SecurityAdvisorySeverity! + summary: String! + updatedAt: DateTime! + vulnerabilities( + orderBy: SecurityVulnerabilityOrder = {field: UPDATED_AT, direction: DESC} + ecosystem: SecurityAdvisoryEcosystem + package: String + severities: [SecurityAdvisorySeverity!] + after: String + before: String + first: Int + last: Int + ): SecurityVulnerabilityConnection! + withdrawnAt: DateTime +} + +type SecurityAdvisoryConnection { + edges: [SecurityAdvisoryEdge] + nodes: [SecurityAdvisory] + pageInfo: PageInfo! + totalCount: Int! +} + +enum SecurityAdvisoryEcosystem { + RUBYGEMS + NPM + PIP + MAVEN + NUGET + COMPOSER +} + +type SecurityAdvisoryEdge { + cursor: String! + node: SecurityAdvisory +} + +type SecurityAdvisoryIdentifier { + type: String! + value: String! +} + +input SecurityAdvisoryIdentifierFilter { + type: SecurityAdvisoryIdentifierType! + value: String! +} + +enum SecurityAdvisoryIdentifierType { + CVE + GHSA +} + +input SecurityAdvisoryOrder { + field: SecurityAdvisoryOrderField! + direction: OrderDirection! +} + +enum SecurityAdvisoryOrderField { + PUBLISHED_AT + UPDATED_AT +} + +type SecurityAdvisoryPackage { + ecosystem: SecurityAdvisoryEcosystem! + name: String! +} + +type SecurityAdvisoryPackageVersion { + identifier: String! +} + +type SecurityAdvisoryReference { + url: URI! +} + +enum SecurityAdvisorySeverity { + LOW + MODERATE + HIGH + CRITICAL +} + +type SecurityVulnerability { + advisory: SecurityAdvisory! + firstPatchedVersion: SecurityAdvisoryPackageVersion + package: SecurityAdvisoryPackage! + severity: SecurityAdvisorySeverity! + updatedAt: DateTime! + vulnerableVersionRange: String! +} + +type SecurityVulnerabilityConnection { + edges: [SecurityVulnerabilityEdge] + nodes: [SecurityVulnerability] + pageInfo: PageInfo! + totalCount: Int! +} + +type SecurityVulnerabilityEdge { + cursor: String! + node: SecurityVulnerability +} + +input SecurityVulnerabilityOrder { + field: SecurityVulnerabilityOrderField! + direction: OrderDirection! +} + +enum SecurityVulnerabilityOrderField { + UPDATED_AT +} + +type SmimeSignature implements GitSignature { + email: String! + isValid: Boolean! + payload: String! + signature: String! + signer: User + state: GitSignatureState! + wasSignedByGitHub: Boolean! +} + +interface Sponsorable { + sponsorsListing: SponsorsListing + sponsorshipsAsMaintainer( + after: String + before: String + first: Int + last: Int + includePrivate: Boolean = false + orderBy: SponsorshipOrder + ): SponsorshipConnection! + sponsorshipsAsSponsor( + after: String + before: String + first: Int + last: Int + orderBy: SponsorshipOrder + ): SponsorshipConnection! +} + +type SponsorsListing implements Node { + createdAt: DateTime! + fullDescription: String! + fullDescriptionHTML: HTML! + id: ID! + name: String! + shortDescription: String! + slug: String! + tiers( + after: String + before: String + first: Int + last: Int + orderBy: SponsorsTierOrder = {field: MONTHLY_PRICE_IN_CENTS, direction: ASC} + ): SponsorsTierConnection +} + +type SponsorsTier implements Node { + adminInfo: SponsorsTierAdminInfo + createdAt: DateTime! + description: String! + descriptionHTML: HTML! + id: ID! + monthlyPriceInCents: Int! + monthlyPriceInDollars: Int! + name: String! + sponsorsListing: SponsorsListing! + updatedAt: DateTime! +} + +type SponsorsTierAdminInfo { + sponsorships( + after: String + before: String + first: Int + last: Int + includePrivate: Boolean = false + orderBy: SponsorshipOrder + ): SponsorshipConnection! +} + +type SponsorsTierConnection { + edges: [SponsorsTierEdge] + nodes: [SponsorsTier] + pageInfo: PageInfo! + totalCount: Int! +} + +type SponsorsTierEdge { + cursor: String! + node: SponsorsTier +} + +input SponsorsTierOrder { + field: SponsorsTierOrderField! + direction: OrderDirection! +} + +enum SponsorsTierOrderField { + CREATED_AT + MONTHLY_PRICE_IN_CENTS +} + +type Sponsorship implements Node { + createdAt: DateTime! + id: ID! + maintainer: User! @deprecated(reason: "`Sponsorship.maintainer` will be removed. Use `Sponsorship.sponsorable` instead. Removal on 2020-04-01 UTC.") + privacyLevel: SponsorshipPrivacy! + sponsor: User + sponsorable: Sponsorable! + tier: SponsorsTier +} + +type SponsorshipConnection { + edges: [SponsorshipEdge] + nodes: [Sponsorship] + pageInfo: PageInfo! + totalCount: Int! +} + +type SponsorshipEdge { + cursor: String! + node: Sponsorship +} + +input SponsorshipOrder { + field: SponsorshipOrderField! + direction: OrderDirection! +} + +enum SponsorshipOrderField { + CREATED_AT +} + +enum SponsorshipPrivacy { + PUBLIC + PRIVATE +} + +input StarOrder { + field: StarOrderField! + direction: OrderDirection! +} + +enum StarOrderField { + STARRED_AT +} + +type StargazerConnection { + edges: [StargazerEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type StargazerEdge { + cursor: String! + node: User! + starredAt: DateTime! +} + +interface Starrable { + id: ID! + stargazers( + after: String + before: String + first: Int + last: Int + orderBy: StarOrder + ): StargazerConnection! + viewerHasStarred: Boolean! +} + +type StarredRepositoryConnection { + edges: [StarredRepositoryEdge] + nodes: [Repository] + pageInfo: PageInfo! + totalCount: Int! +} + +type StarredRepositoryEdge { + cursor: String! + node: Repository! + starredAt: DateTime! +} + +type Status implements Node { + commit: Commit + context( + name: String! + ): StatusContext + contexts: [StatusContext!]! + id: ID! + state: StatusState! +} + +type StatusContext implements Node { + avatarUrl( + size: Int = 40 + ): URI + commit: Commit + context: String! + createdAt: DateTime! + creator: Actor + description: String + id: ID! + state: StatusState! + targetUrl: URI +} + +enum StatusState { + EXPECTED + ERROR + FAILURE + PENDING + SUCCESS +} + +scalar String + +input SubmitPullRequestReviewInput { + pullRequestReviewId: ID! + event: PullRequestReviewEvent! + body: String + clientMutationId: String +} + +type SubmitPullRequestReviewPayload { + clientMutationId: String + pullRequestReview: PullRequestReview +} + +interface Subscribable { + id: ID! + viewerCanSubscribe: Boolean! + viewerSubscription: SubscriptionState +} + +type SubscribedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + subscribable: Subscribable! +} + +enum SubscriptionState { + UNSUBSCRIBED + SUBSCRIBED + IGNORED +} + +type SuggestedReviewer { + isAuthor: Boolean! + isCommenter: Boolean! + reviewer: User! +} + +type Tag implements Node, GitObject { + abbreviatedOid: String! + commitResourcePath: URI! + commitUrl: URI! + id: ID! + message: String + name: String! + oid: GitObjectID! + repository: Repository! + tagger: GitActor + target: GitObject! +} + +type Team implements Node, Subscribable, MemberStatusable { + ancestors( + after: String + before: String + first: Int + last: Int + ): TeamConnection! + avatarUrl( + size: Int = 400 + ): URI + childTeams( + orderBy: TeamOrder + userLogins: [String!] + immediateOnly: Boolean = true + after: String + before: String + first: Int + last: Int + ): TeamConnection! + combinedSlug: String! + createdAt: DateTime! + description: String + discussion( + number: Int! + ): TeamDiscussion + discussions( + after: String + before: String + first: Int + last: Int + isPinned: Boolean + orderBy: TeamDiscussionOrder + ): TeamDiscussionConnection! + discussionsResourcePath: URI! + discussionsUrl: URI! + editTeamResourcePath: URI! + editTeamUrl: URI! + id: ID! + invitations( + after: String + before: String + first: Int + last: Int + ): OrganizationInvitationConnection + memberStatuses( + after: String + before: String + first: Int + last: Int + orderBy: UserStatusOrder = {field: UPDATED_AT, direction: DESC} + ): UserStatusConnection! + members( + after: String + before: String + first: Int + last: Int + query: String + membership: TeamMembershipType = ALL + role: TeamMemberRole + orderBy: TeamMemberOrder + ): TeamMemberConnection! + membersResourcePath: URI! + membersUrl: URI! + name: String! + newTeamResourcePath: URI! + newTeamUrl: URI! + organization: Organization! + parentTeam: Team + privacy: TeamPrivacy! + repositories( + after: String + before: String + first: Int + last: Int + query: String + orderBy: TeamRepositoryOrder + ): TeamRepositoryConnection! + repositoriesResourcePath: URI! + repositoriesUrl: URI! + resourcePath: URI! + slug: String! + teamsResourcePath: URI! + teamsUrl: URI! + updatedAt: DateTime! + url: URI! + viewerCanAdminister: Boolean! + viewerCanSubscribe: Boolean! + viewerSubscription: SubscriptionState +} + +type TeamAddMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, TeamAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + isLdapMapped: Boolean + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + team: Team + teamName: String + teamResourcePath: URI + teamUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type TeamAddRepositoryAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData, TeamAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + isLdapMapped: Boolean + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + team: Team + teamName: String + teamResourcePath: URI + teamUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +interface TeamAuditEntryData { + team: Team + teamName: String + teamResourcePath: URI + teamUrl: URI +} + +type TeamChangeParentTeamAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, TeamAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + isLdapMapped: Boolean + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + parentTeam: Team + parentTeamName: String + parentTeamNameWas: String + parentTeamResourcePath: URI + parentTeamUrl: URI + parentTeamWas: Team + parentTeamWasResourcePath: URI + parentTeamWasUrl: URI + team: Team + teamName: String + teamResourcePath: URI + teamUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type TeamConnection { + edges: [TeamEdge] + nodes: [Team] + pageInfo: PageInfo! + totalCount: Int! +} + +type TeamDiscussion implements Node, Comment, Deletable, Reactable, Subscribable, UniformResourceLocatable, Updatable, UpdatableComment { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + bodyVersion: String! + comments( + after: String + before: String + first: Int + last: Int + orderBy: TeamDiscussionCommentOrder + fromComment: Int + ): TeamDiscussionCommentConnection! + commentsResourcePath: URI! + commentsUrl: URI! + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + editor: Actor + id: ID! + includesCreatedEdit: Boolean! + isPinned: Boolean! + isPrivate: Boolean! + lastEditedAt: DateTime + number: Int! + publishedAt: DateTime + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + resourcePath: URI! + team: Team! + title: String! + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanDelete: Boolean! + viewerCanPin: Boolean! + viewerCanReact: Boolean! + viewerCanSubscribe: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! + viewerSubscription: SubscriptionState +} + +type TeamDiscussionComment implements Node, Comment, Deletable, Reactable, UniformResourceLocatable, Updatable, UpdatableComment { + author: Actor + authorAssociation: CommentAuthorAssociation! + body: String! + bodyHTML: HTML! + bodyText: String! + bodyVersion: String! + createdAt: DateTime! + createdViaEmail: Boolean! + databaseId: Int + discussion: TeamDiscussion! + editor: Actor + id: ID! + includesCreatedEdit: Boolean! + lastEditedAt: DateTime + number: Int! + publishedAt: DateTime + reactionGroups: [ReactionGroup!] + reactions( + after: String + before: String + first: Int + last: Int + content: ReactionContent + orderBy: ReactionOrder + ): ReactionConnection! + resourcePath: URI! + updatedAt: DateTime! + url: URI! + userContentEdits( + after: String + before: String + first: Int + last: Int + ): UserContentEditConnection + viewerCanDelete: Boolean! + viewerCanReact: Boolean! + viewerCanUpdate: Boolean! + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! + viewerDidAuthor: Boolean! +} + +type TeamDiscussionCommentConnection { + edges: [TeamDiscussionCommentEdge] + nodes: [TeamDiscussionComment] + pageInfo: PageInfo! + totalCount: Int! +} + +type TeamDiscussionCommentEdge { + cursor: String! + node: TeamDiscussionComment +} + +input TeamDiscussionCommentOrder { + field: TeamDiscussionCommentOrderField! + direction: OrderDirection! +} + +enum TeamDiscussionCommentOrderField { + NUMBER +} + +type TeamDiscussionConnection { + edges: [TeamDiscussionEdge] + nodes: [TeamDiscussion] + pageInfo: PageInfo! + totalCount: Int! +} + +type TeamDiscussionEdge { + cursor: String! + node: TeamDiscussion +} + +input TeamDiscussionOrder { + field: TeamDiscussionOrderField! + direction: OrderDirection! +} + +enum TeamDiscussionOrderField { + CREATED_AT +} + +type TeamEdge { + cursor: String! + node: Team +} + +type TeamMemberConnection { + edges: [TeamMemberEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type TeamMemberEdge { + cursor: String! + memberAccessResourcePath: URI! + memberAccessUrl: URI! + node: User! + role: TeamMemberRole! +} + +input TeamMemberOrder { + field: TeamMemberOrderField! + direction: OrderDirection! +} + +enum TeamMemberOrderField { + LOGIN + CREATED_AT +} + +enum TeamMemberRole { + MAINTAINER + MEMBER +} + +enum TeamMembershipType { + IMMEDIATE + CHILD_TEAM + ALL +} + +input TeamOrder { + field: TeamOrderField! + direction: OrderDirection! +} + +enum TeamOrderField { + NAME +} + +enum TeamPrivacy { + SECRET + VISIBLE +} + +type TeamRemoveMemberAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, TeamAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + isLdapMapped: Boolean + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + team: Team + teamName: String + teamResourcePath: URI + teamUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type TeamRemoveRepositoryAuditEntry implements Node, AuditEntry, OrganizationAuditEntryData, RepositoryAuditEntryData, TeamAuditEntryData { + action: String! + actor: AuditEntryActor + actorIp: String + actorLocation: ActorLocation + actorLogin: String + actorResourcePath: URI + actorUrl: URI + createdAt: PreciseDateTime! + id: ID! + isLdapMapped: Boolean + operationType: OperationType + organization: Organization + organizationName: String + organizationResourcePath: URI + organizationUrl: URI + repository: Repository + repositoryName: String + repositoryResourcePath: URI + repositoryUrl: URI + team: Team + teamName: String + teamResourcePath: URI + teamUrl: URI + user: User + userLogin: String + userResourcePath: URI + userUrl: URI +} + +type TeamRepositoryConnection { + edges: [TeamRepositoryEdge] + nodes: [Repository] + pageInfo: PageInfo! + totalCount: Int! +} + +type TeamRepositoryEdge { + cursor: String! + node: Repository! + permission: RepositoryPermission! +} + +input TeamRepositoryOrder { + field: TeamRepositoryOrderField! + direction: OrderDirection! +} + +enum TeamRepositoryOrderField { + CREATED_AT + UPDATED_AT + PUSHED_AT + NAME + PERMISSION + STARGAZERS +} + +enum TeamRole { + ADMIN + MEMBER +} + +type TextMatch { + fragment: String! + highlights: [TextMatchHighlight!]! + property: String! +} + +type TextMatchHighlight { + beginIndice: Int! + endIndice: Int! + text: String! +} + +type Topic implements Node, Starrable { + id: ID! + name: String! + relatedTopics( + first: Int = 3 + ): [Topic!]! + stargazers( + after: String + before: String + first: Int + last: Int + orderBy: StarOrder + ): StargazerConnection! + viewerHasStarred: Boolean! +} + +interface TopicAuditEntryData { + topic: Topic + topicName: String +} + +type TopicConnection { + edges: [TopicEdge] + nodes: [Topic] + pageInfo: PageInfo! + totalCount: Int! +} + +type TopicEdge { + cursor: String! + node: Topic +} + +enum TopicSuggestionDeclineReason { + NOT_RELEVANT + TOO_SPECIFIC + PERSONAL_PREFERENCE + TOO_GENERAL +} + +input TransferIssueInput { + issueId: ID! + repositoryId: ID! + clientMutationId: String +} + +type TransferIssuePayload { + clientMutationId: String + issue: Issue +} + +type TransferredEvent implements Node { + actor: Actor + createdAt: DateTime! + fromRepository: Repository + id: ID! + issue: Issue! +} + +type Tree implements Node, GitObject { + abbreviatedOid: String! + commitResourcePath: URI! + commitUrl: URI! + entries: [TreeEntry!] + id: ID! + oid: GitObjectID! + repository: Repository! +} + +type TreeEntry { + mode: Int! + name: String! + object: GitObject + oid: GitObjectID! + repository: Repository! + type: String! +} + +scalar URI + +input UnarchiveRepositoryInput { + repositoryId: ID! + clientMutationId: String +} + +type UnarchiveRepositoryPayload { + clientMutationId: String + repository: Repository +} + +type UnassignedEvent implements Node { + actor: Actor + assignable: Assignable! + assignee: Assignee + createdAt: DateTime! + id: ID! + user: User @deprecated(reason: "Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC.") +} + +input UnfollowUserInput { + userId: ID! + clientMutationId: String +} + +type UnfollowUserPayload { + clientMutationId: String + user: User +} + +interface UniformResourceLocatable { + resourcePath: URI! + url: URI! +} + +type UnknownSignature implements GitSignature { + email: String! + isValid: Boolean! + payload: String! + signature: String! + signer: User + state: GitSignatureState! + wasSignedByGitHub: Boolean! +} + +type UnlabeledEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + label: Label! + labelable: Labelable! +} + +input UnlinkRepositoryFromProjectInput { + projectId: ID! + repositoryId: ID! + clientMutationId: String +} + +type UnlinkRepositoryFromProjectPayload { + clientMutationId: String + project: Project + repository: Repository +} + +input UnlockLockableInput { + lockableId: ID! + clientMutationId: String +} + +type UnlockLockablePayload { + actor: Actor + clientMutationId: String + unlockedRecord: Lockable +} + +type UnlockedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + lockable: Lockable! +} + +input UnmarkIssueAsDuplicateInput { + duplicateId: ID! + canonicalId: ID! + clientMutationId: String +} + +type UnmarkIssueAsDuplicatePayload { + clientMutationId: String + duplicate: IssueOrPullRequest +} + +input UnminimizeCommentInput { + subjectId: ID! + clientMutationId: String +} + +input UnpinIssueInput { + issueId: ID! + clientMutationId: String +} + +type UnpinnedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + issue: Issue! +} + +input UnresolveReviewThreadInput { + threadId: ID! + clientMutationId: String +} + +type UnresolveReviewThreadPayload { + clientMutationId: String + thread: PullRequestReviewThread +} + +type UnsubscribedEvent implements Node { + actor: Actor + createdAt: DateTime! + id: ID! + subscribable: Subscribable! +} + +interface Updatable { + viewerCanUpdate: Boolean! +} + +interface UpdatableComment { + viewerCannotUpdateReasons: [CommentCannotUpdateReason!]! +} + +input UpdateBranchProtectionRuleInput { + branchProtectionRuleId: ID! + pattern: String + requiresApprovingReviews: Boolean + requiredApprovingReviewCount: Int + requiresCommitSignatures: Boolean + isAdminEnforced: Boolean + requiresStatusChecks: Boolean + requiresStrictStatusChecks: Boolean + requiresCodeOwnerReviews: Boolean + dismissesStaleReviews: Boolean + restrictsReviewDismissals: Boolean + reviewDismissalActorIds: [ID!] + restrictsPushes: Boolean + pushActorIds: [ID!] + requiredStatusCheckContexts: [String!] + clientMutationId: String +} + +type UpdateBranchProtectionRulePayload { + branchProtectionRule: BranchProtectionRule + clientMutationId: String +} + +input UpdateEnterpriseActionExecutionCapabilitySettingInput { + enterpriseId: ID! + capability: ActionExecutionCapabilitySetting! + clientMutationId: String +} + +type UpdateEnterpriseActionExecutionCapabilitySettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseAdministratorRoleInput { + enterpriseId: ID! + login: String! + role: EnterpriseAdministratorRole! + clientMutationId: String +} + +type UpdateEnterpriseAdministratorRolePayload { + clientMutationId: String + message: String +} + +input UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseDefaultRepositoryPermissionSettingInput { + enterpriseId: ID! + settingValue: EnterpriseDefaultRepositoryPermissionSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseDefaultRepositoryPermissionSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanCreateRepositoriesSettingInput { + enterpriseId: ID! + settingValue: EnterpriseMembersCanCreateRepositoriesSettingValue + membersCanCreateRepositoriesPolicyEnabled: Boolean + membersCanCreatePublicRepositories: Boolean + membersCanCreatePrivateRepositories: Boolean + membersCanCreateInternalRepositories: Boolean + clientMutationId: String +} + +type UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanDeleteIssuesSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseMembersCanDeleteIssuesSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanMakePurchasesSettingInput { + enterpriseId: ID! + settingValue: EnterpriseMembersCanMakePurchasesSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseMembersCanMakePurchasesSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseOrganizationProjectsSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseOrganizationProjectsSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseProfileInput { + enterpriseId: ID! + name: String + description: String + websiteUrl: String + location: String + clientMutationId: String +} + +type UpdateEnterpriseProfilePayload { + clientMutationId: String + enterprise: Enterprise +} + +input UpdateEnterpriseRepositoryProjectsSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseRepositoryProjectsSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseTeamDiscussionsSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledDisabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseTeamDiscussionsSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput { + enterpriseId: ID! + settingValue: EnterpriseEnabledSettingValue! + clientMutationId: String +} + +type UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload { + clientMutationId: String + enterprise: Enterprise + message: String +} + +input UpdateIssueCommentInput { + id: ID! + body: String! + clientMutationId: String +} + +type UpdateIssueCommentPayload { + clientMutationId: String + issueComment: IssueComment +} + +input UpdateIssueInput { + id: ID! + title: String + body: String + assigneeIds: [ID!] + milestoneId: ID + labelIds: [ID!] + state: IssueState + projectIds: [ID!] + clientMutationId: String +} + +type UpdateIssuePayload { + actor: Actor + clientMutationId: String + issue: Issue +} + +input UpdateProjectCardInput { + projectCardId: ID! + isArchived: Boolean + note: String + clientMutationId: String +} + +type UpdateProjectCardPayload { + clientMutationId: String + projectCard: ProjectCard +} + +input UpdateProjectColumnInput { + projectColumnId: ID! + name: String! + clientMutationId: String +} + +type UpdateProjectColumnPayload { + clientMutationId: String + projectColumn: ProjectColumn +} + +input UpdateProjectInput { + projectId: ID! + name: String + body: String + state: ProjectState + public: Boolean + clientMutationId: String +} + +type UpdateProjectPayload { + clientMutationId: String + project: Project +} + +input UpdatePullRequestInput { + pullRequestId: ID! + baseRefName: String + title: String + body: String + state: PullRequestUpdateState + maintainerCanModify: Boolean + assigneeIds: [ID!] + milestoneId: ID + labelIds: [ID!] + projectIds: [ID!] + clientMutationId: String +} + +type UpdatePullRequestPayload { + actor: Actor + clientMutationId: String + pullRequest: PullRequest +} + +input UpdatePullRequestReviewCommentInput { + pullRequestReviewCommentId: ID! + body: String! + clientMutationId: String +} + +type UpdatePullRequestReviewCommentPayload { + clientMutationId: String + pullRequestReviewComment: PullRequestReviewComment +} + +input UpdatePullRequestReviewInput { + pullRequestReviewId: ID! + body: String! + clientMutationId: String +} + +type UpdatePullRequestReviewPayload { + clientMutationId: String + pullRequestReview: PullRequestReview +} + +input UpdateRefInput { + refId: ID! + oid: GitObjectID! + force: Boolean = false + clientMutationId: String +} + +type UpdateRefPayload { + clientMutationId: String + ref: Ref +} + +input UpdateRepositoryInput { + repositoryId: ID! + name: String + description: String + template: Boolean + homepageUrl: URI + hasWikiEnabled: Boolean + hasIssuesEnabled: Boolean + hasProjectsEnabled: Boolean + clientMutationId: String +} + +type UpdateRepositoryPayload { + clientMutationId: String + repository: Repository +} + +input UpdateSubscriptionInput { + subscribableId: ID! + state: SubscriptionState! + clientMutationId: String +} + +type UpdateSubscriptionPayload { + clientMutationId: String + subscribable: Subscribable +} + +input UpdateTeamDiscussionCommentInput { + id: ID! + body: String! + bodyVersion: String + clientMutationId: String +} + +type UpdateTeamDiscussionCommentPayload { + clientMutationId: String + teamDiscussionComment: TeamDiscussionComment +} + +input UpdateTeamDiscussionInput { + id: ID! + title: String + body: String + bodyVersion: String + pinned: Boolean + clientMutationId: String +} + +type UpdateTeamDiscussionPayload { + clientMutationId: String + teamDiscussion: TeamDiscussion +} + +input UpdateTopicsInput { + repositoryId: ID! + topicNames: [String!]! + clientMutationId: String +} + +type UpdateTopicsPayload { + clientMutationId: String + invalidTopicNames: [String!] + repository: Repository +} + +type User implements Node, Actor, RegistryPackageOwner, RegistryPackageSearch, ProjectOwner, RepositoryOwner, UniformResourceLocatable, ProfileOwner, Sponsorable { + anyPinnableItems( + type: PinnableItemType + ): Boolean! + avatarUrl( + size: Int + ): URI! + bio: String + bioHTML: HTML! + commitComments( + after: String + before: String + first: Int + last: Int + ): CommitCommentConnection! + company: String + companyHTML: HTML! + contributionsCollection( + organizationID: ID + from: DateTime + to: DateTime + ): ContributionsCollection! + createdAt: DateTime! + databaseId: Int + email: String! + followers( + after: String + before: String + first: Int + last: Int + ): FollowerConnection! + following( + after: String + before: String + first: Int + last: Int + ): FollowingConnection! + gist( + name: String! + ): Gist + gistComments( + after: String + before: String + first: Int + last: Int + ): GistCommentConnection! + gists( + privacy: GistPrivacy + orderBy: GistOrder + after: String + before: String + first: Int + last: Int + ): GistConnection! + hovercard( + primarySubjectId: ID + ): Hovercard! + id: ID! + isBountyHunter: Boolean! + isCampusExpert: Boolean! + isDeveloperProgramMember: Boolean! + isEmployee: Boolean! + isHireable: Boolean! + isSiteAdmin: Boolean! + isViewer: Boolean! + issueComments( + after: String + before: String + first: Int + last: Int + ): IssueCommentConnection! + issues( + orderBy: IssueOrder + labels: [String!] + states: [IssueState!] + filterBy: IssueFilters + after: String + before: String + first: Int + last: Int + ): IssueConnection! + itemShowcase: ProfileItemShowcase! + location: String + login: String! + name: String + organization( + login: String! + ): Organization + organizations( + after: String + before: String + first: Int + last: Int + ): OrganizationConnection! + pinnableItems( + types: [PinnableItemType!] + after: String + before: String + first: Int + last: Int + ): PinnableItemConnection! + pinnedItems( + types: [PinnableItemType!] + after: String + before: String + first: Int + last: Int + ): PinnableItemConnection! + pinnedItemsRemaining: Int! + pinnedRepositories( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + ): RepositoryConnection! @deprecated(reason: "pinnedRepositories will be removed Use ProfileOwner.pinnedItems instead. Removal on 2019-10-01 UTC.") + project( + number: Int! + ): Project + projects( + orderBy: ProjectOrder + search: String + states: [ProjectState!] + after: String + before: String + first: Int + last: Int + ): ProjectConnection! + projectsResourcePath: URI! + projectsUrl: URI! + publicKeys( + after: String + before: String + first: Int + last: Int + ): PublicKeyConnection! + pullRequests( + states: [PullRequestState!] + labels: [String!] + headRefName: String + baseRefName: String + orderBy: IssueOrder + after: String + before: String + first: Int + last: Int + ): PullRequestConnection! + registryPackages( + after: String + before: String + first: Int + last: Int + name: String + names: [String] + repositoryId: ID + packageType: RegistryPackageType + registryPackageType: String + publicOnly: Boolean = false + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageOwner` object instead. Removal on 2020-04-01 UTC.") + registryPackagesForQuery( + after: String + before: String + first: Int + last: Int + query: String + packageType: RegistryPackageType + ): RegistryPackageConnection! @deprecated(reason: "Renaming GitHub Packages fields and objects. Use the `PackageSearch` object instead. Removal on 2020-04-01 UTC.") + repositories( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + isFork: Boolean + ): RepositoryConnection! + repositoriesContributedTo( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + isLocked: Boolean + includeUserRepositories: Boolean + contributionTypes: [RepositoryContributionType] + after: String + before: String + first: Int + last: Int + ): RepositoryConnection! + repository( + name: String! + ): Repository + resourcePath: URI! + savedReplies( + after: String + before: String + first: Int + last: Int + orderBy: SavedReplyOrder = {field: UPDATED_AT, direction: DESC} + ): SavedReplyConnection + sponsorsListing: SponsorsListing + sponsorshipsAsMaintainer( + after: String + before: String + first: Int + last: Int + includePrivate: Boolean = false + orderBy: SponsorshipOrder + ): SponsorshipConnection! + sponsorshipsAsSponsor( + after: String + before: String + first: Int + last: Int + orderBy: SponsorshipOrder + ): SponsorshipConnection! + starredRepositories( + ownedByViewer: Boolean + orderBy: StarOrder + after: String + before: String + first: Int + last: Int + ): StarredRepositoryConnection! + status: UserStatus + topRepositories( + after: String + before: String + first: Int + last: Int + orderBy: RepositoryOrder! + since: DateTime + ): RepositoryConnection! + updatedAt: DateTime! + url: URI! + viewerCanChangePinnedItems: Boolean! + viewerCanCreateProjects: Boolean! + viewerCanFollow: Boolean! + viewerIsFollowing: Boolean! + watching( + privacy: RepositoryPrivacy + orderBy: RepositoryOrder + affiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR, ORGANIZATION_MEMBER] + ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR] + isLocked: Boolean + after: String + before: String + first: Int + last: Int + ): RepositoryConnection! + websiteUrl: URI +} + +enum UserBlockDuration { + ONE_DAY + THREE_DAYS + ONE_WEEK + ONE_MONTH + PERMANENT +} + +type UserBlockedEvent implements Node { + actor: Actor + blockDuration: UserBlockDuration! + createdAt: DateTime! + id: ID! + subject: User +} + +type UserConnection { + edges: [UserEdge] + nodes: [User] + pageInfo: PageInfo! + totalCount: Int! +} + +type UserContentEdit implements Node { + createdAt: DateTime! + deletedAt: DateTime + deletedBy: Actor + diff: String + editedAt: DateTime! + editor: Actor + id: ID! + updatedAt: DateTime! +} + +type UserContentEditConnection { + edges: [UserContentEditEdge] + nodes: [UserContentEdit] + pageInfo: PageInfo! + totalCount: Int! +} + +type UserContentEditEdge { + cursor: String! + node: UserContentEdit +} + +type UserEdge { + cursor: String! + node: User +} + +type UserStatus implements Node { + createdAt: DateTime! + emoji: String + emojiHTML: HTML + expiresAt: DateTime + id: ID! + indicatesLimitedAvailability: Boolean! + message: String + organization: Organization + updatedAt: DateTime! + user: User! +} + +type UserStatusConnection { + edges: [UserStatusEdge] + nodes: [UserStatus] + pageInfo: PageInfo! + totalCount: Int! +} + +type UserStatusEdge { + cursor: String! + node: UserStatus +} + +input UserStatusOrder { + field: UserStatusOrderField! + direction: OrderDirection! +} + +enum UserStatusOrderField { + UPDATED_AT +} + +type ViewerHovercardContext implements HovercardContext { + message: String! + octicon: String! + viewer: User! +} + +scalar X509Certificate + diff --git a/src/GraphQLParser.Benchmarks/Files/introspectionQuery.graphql b/src/GraphQLParser.Benchmarks/Files/introspectionQuery.graphql new file mode 100644 index 00000000..6929b3e1 --- /dev/null +++ b/src/GraphQLParser.Benchmarks/Files/introspectionQuery.graphql @@ -0,0 +1,98 @@ +query IntrospectionQuery { + __schema { + queryType { name } + mutationType { name } + subscriptionType { name } + types { + ...FullType + } + directives { + name + description + locations + args { + ...InputValue + } + } + } +} + +fragment FullType on __Type { + kind + name + description + fields(includeDeprecated: true) { + name + description + args { + ...InputValue + } + type { + ...TypeRef + } + isDeprecated + deprecationReason + directives { + name + args { + name + value + } + } + } + inputFields { + ...InputValue + } + interfaces { + ...TypeRef + } + enumValues(includeDeprecated: true) { + name + description + isDeprecated + deprecationReason + } + possibleTypes { + ...TypeRef + } +} + +fragment InputValue on __InputValue { + name + description + type { ...TypeRef } + defaultValue +} + +fragment TypeRef on __Type { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/GraphQLParser.Benchmarks/Files/kitchenSink.graphql b/src/GraphQLParser.Benchmarks/Files/kitchenSink.graphql new file mode 100644 index 00000000..7081f858 --- /dev/null +++ b/src/GraphQLParser.Benchmarks/Files/kitchenSink.graphql @@ -0,0 +1,50 @@ +query queryName($foo: ComplexType, $site: Site = MOBILE) { + whoever123is: node(id: [123, 456]) { + id , + ... on User @defer { + field2 { + id , + alias: field1(first:10, after:$foo,) @include(if: $foo) { + id, + ...frag + } + } + } + ... @skip(unless: $foo) { + id + } + ... { + id + } + } +} + +mutation likeStory { + like(story: 123) @defer { + story { + id + } + } +} + +subscription StoryLikeSubscription($input: StoryLikeSubscribeInput) { + storyLikeSubscribe(input: $input) { + story { + likers { + count + } + likeSentence { + text + } + } + } +} + +fragment frag on Friend { + foo(size: $size, bar: $b, obj: {key: ""value""}) +} + +{ + unnamed(truthy: true, falsey: false), + query +} diff --git a/src/GraphQLParser.Benchmarks/query_with_many_escape_symbols.txt b/src/GraphQLParser.Benchmarks/Files/query_with_many_escape_symbols.graphql similarity index 100% rename from src/GraphQLParser.Benchmarks/query_with_many_escape_symbols.txt rename to src/GraphQLParser.Benchmarks/Files/query_with_many_escape_symbols.graphql diff --git a/src/GraphQLParser.Benchmarks/GraphQLParser.Benchmarks.Reference.md b/src/GraphQLParser.Benchmarks/GraphQLParser.Benchmarks.Reference.md deleted file mode 100644 index 820375ca..00000000 --- a/src/GraphQLParser.Benchmarks/GraphQLParser.Benchmarks.Reference.md +++ /dev/null @@ -1,145 +0,0 @@ -``` ini - -BenchmarkDotNet=v0.12.0, OS=Windows 10.0.14393.3243 (1607/AnniversaryUpdate/Redstone1) -Intel Core i7-7700 CPU 3.60GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores -Frequency=3515629 Hz, Resolution=284.4441 ns, Timer=TSC -.NET Core SDK=3.1.100 - [Host] : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT - DefaultJob : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT - - -``` - -Baseline (B) to current (C) comparison without cache: - -| Method | query | Mean (B) | Mean (C) | Ratio | Allocated (B) | Allocated (C) | Ratio | -|------- |------- |----------:|----------:|------:|--------------:|--------------:|------:| -| Parse | Params | 13.911 us | 10.291 us | 0.74 | 18.85 KB | 8.59 KB | 0.46 | -| Parse | Schema | 30.629 us | 23.741 us | 0.77 | 36.49 KB | 19.09 KB | 0.52 | -| Parse | Simple | 2.391 us | 1.757 us | 0.73 | 3.58 KB | 1.63 KB | 0.46 | - -Baseline (B) to current (C) comparison with cache: - -| Method | query | Mean (B) | Mean (C) | Ratio | Allocated (B) | Allocated (C) | Ratio | -|------- |------- |----------:|----------:|------:|--------------:|--------------:|------:| -| Parse | Params | 13.911 us | 10.895 us | 0.77 | 18.85 KB | 7.82 KB | 0.41 | -| Parse | Schema | 30.629 us | 26.577 us | 0.85 | 36.49 KB | 15.66 KB | 0.43 | -| Parse | Simple | 2.391 us | 1.884 us | 0.78 | 3.58 KB | 1.35 KB | 0.38 | - -Baseline (B) to current (C) comparison with concurrent cache: - -| Method | query | Mean (B) | Mean (C) | Ratio | Allocated (B) | Allocated (C) | Ratio | -|------- |------- |----------:|----------:|------:|--------------:|--------------:|------:| -| Parse | Params | 13.911 us | 11.113 us | 0.80 | 18.85 KB | 7.82 KB | 0.41 | -| Parse | Schema | 30.629 us | 26.607 us | 0.87 | 36.49 KB | 15.66 KB | 0.43 | -| Parse | Simple | 2.391 us | 1.989 us | 0.83 | 3.58 KB | 1.35 KB | 0.38 | - -___ - -Baseline (710e1b7): - -| Method | query | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------- |------- |----------:|----------:|----------:|-------:|-------:|------:|----------:| -| Parse | Params | 13.911 us | 0.2186 us | 0.1937 us | 4.6082 | - | - | 18.85 KB | -| Parse | Schema | 30.629 us | 0.3194 us | 0.2987 us | 8.9111 | 0.0610 | - | 36.49 KB | -| Parse | Simple | 2.391 us | 0.0257 us | 0.0241 us | 0.8736 | - | - | 3.58 KB | - -Working on cache: - -| Method | query | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|--------:|-------:|------:|----------:| -| **Parse** | **Params** | **14.729 us** | **0.2432 us** | **0.2275 us** | **5.3711** | **0.0153** | **-** | **21.98 KB** | -| Serial | Params | 14.881 us | 0.1291 us | 0.1208 us | 4.6082 | - | - | 18.86 KB | -| **Parse** | **Schema** | **32.302 us** | **0.3633 us** | **0.3398 us** | **10.1318** | **-** | **-** | **41.52 KB** | -| Serial | Schema | 34.417 us | 0.2486 us | 0.2076 us | 8.3618 | - | - | 34.33 KB | -| **Parse** | **Simple** | **2.564 us** | **0.0440 us** | **0.0390 us** | **1.0109** | **-** | **-** | **4.14 KB** | -| Serial | Simple | 2.638 us | 0.0319 us | 0.0299 us | 0.8392 | - | - | 3.44 KB | - -Make `LexerContext` struct and remove `IDisposable`: - -| Method | query | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|-------:|-------:|------:|----------:| -| **Parse** | **Params** | **12.480 us** | **0.0555 us** | **0.0433 us** | **4.4098** | **-** | **-** | **18.07 KB** | -| Serial | Params | 12.602 us | 0.0860 us | 0.0805 us | 3.6469 | - | - | 14.95 KB | -| **Parse** | **Schema** | **28.297 us** | **0.1496 us** | **0.1400 us** | **8.6060** | **0.0305** | **-** | **35.23 KB** | -| Serial | Schema | 30.642 us | 0.6201 us | 0.9469 us | 6.8359 | - | - | 28.04 KB | -| **Parse** | **Simple** | **2.186 us** | **0.0150 us** | **0.0140 us** | **0.8392** | **-** | **-** | **3.44 KB** | -| Serial | Simple | 2.270 us | 0.0178 us | 0.0158 us | 0.6676 | - | - | 2.73 KB | - -Make `Stack` allocation lazy: - -| Method | query | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|-------:|-------:|------:|----------:| -| **Parse** | **Params** | **12.511 us** | **0.1122 us** | **0.1050 us** | **4.4098** | **-** | **-** | **18.04 KB** | -| Serial | Params | 12.579 us | 0.0485 us | 0.0405 us | 3.6469 | - | - | 14.92 KB | -| **Parse** | **Schema** | **28.169 us** | **0.1233 us** | **0.1093 us** | **8.6060** | **0.0916** | **-** | **35.2 KB** | -| Serial | Schema | 30.041 us | 0.1271 us | 0.1127 us | 6.8359 | - | - | 28.01 KB | -| **Parse** | **Simple** | **2.195 us** | **0.0532 us** | **0.0653 us** | **0.8316** | **-** | **-** | **3.41 KB** | -| Serial | Simple | 2.282 us | 0.0208 us | 0.0195 us | 0.6599 | - | - | 2.7 KB | - -Avoid `Func` closure allocation: - -| Method | query | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|------:|--------:|-------:|-------:|------:|----------:| -| **Parse** | **Params** | **12.651 us** | **0.0699 us** | **0.0620 us** | **1.00** | **0.00** | **4.2267** | **0.0153** | **-** | **17.29 KB** | -| Serial | Params | 12.683 us | 0.0965 us | 0.0754 us | 1.00 | 0.01 | 3.4637 | - | - | 14.17 KB | -| **Parse** | **Schema** | **29.192 us** | **0.3598 us** | **0.3366 us** | **1.00** | **0.00** | **8.1482** | **0.0305** | **-** | **33.33 KB** | -| Serial | Schema | 30.558 us | 0.2245 us | 0.1990 us | 1.05 | 0.01 | 6.3782 | 0.0610 | - | 26.13 KB | -| **Parse** | **Simple** | **2.201 us** | **0.0306 us** | **0.0286 us** | **1.00** | **0.00** | **0.7858** | **-** | **-** | **3.22 KB** | -| Serial | Simple | 2.302 us | 0.0171 us | 0.0160 us | 1.05 | 0.02 | 0.6142 | - | - | 2.52 KB | - -Make `GraphQLLocation` struct: - -| Method | query | Mean | Error | StdDev | Ratio | RatioSD | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:| -| **Parse** | **Params** | **11.901 us** | **0.1156 us** | **0.1082 us** | **1.00** | **0.00** | **3.1433** | **-** | **-** | **12.86 KB** | -| Serial | Params | 12.567 us | 0.1518 us | 0.1346 us | 1.06 | 0.01 | 2.9449 | - | - | 12.09 KB | -| **Parse** | **Schema** | **26.922 us** | **0.2194 us** | **0.2052 us** | **1.00** | **0.00** | **6.1340** | **-** | **-** | **25.08 KB** | -| Serial | Schema | 29.734 us | 0.3812 us | 0.3566 us | 1.10 | 0.02 | 5.2795 | - | - | 21.66 KB | -| **Parse** | **Simple** | **2.062 us** | **0.0275 us** | **0.0244 us** | **1.00** | **0.00** | **0.5798** | **-** | **-** | **2.38 KB** | -| Serial | Simple | 2.125 us | 0.0188 us | 0.0147 us | 1.03 | 0.01 | 0.5112 | - | - | 2.09 KB | - -Make `Token` struct: - -| Method | query | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|------:|-------:|------:|------:|----------:| -| **Parse** | **Params** | **11.358 us** | **0.0581 us** | **0.0515 us** | **1.00** | **2.1820** | **-** | **-** | **8.97 KB** | -| Serial | Params | 11.988 us | 0.0729 us | 0.0646 us | 1.06 | 1.9989 | - | - | 8.2 KB | -| **Parse** | **Schema** | **26.159 us** | **0.0621 us** | **0.0581 us** | **1.00** | **4.5776** | **-** | **-** | **18.8 KB** | -| Serial | Schema | 28.185 us | 0.1395 us | 0.1305 us | 1.08 | 3.7537 | - | - | 15.38 KB | -| **Parse** | **Simple** | **1.975 us** | **0.0068 us** | **0.0053 us** | **1.00** | **0.4120** | **-** | **-** | **1.69 KB** | -| Serial | Simple | 2.081 us | 0.0172 us | 0.0161 us | 1.05 | 0.3433 | - | - | 1.41 KB | - -Make `ParserContext` struct and avoid closure allocation in `ParseDefinitionsIfNotEOF` (yield): - -| Method | query | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|------:|-------:|-------:|------:|----------:| -| **Parse** | **Params** | **11.378 us** | **0.1056 us** | **0.0936 us** | **1.00** | **2.1667** | **0.0153** | **-** | **8.87 KB** | -| Serial | Params | 11.619 us | 0.0655 us | 0.0547 us | 1.02 | 1.9684 | - | - | 8.09 KB | -| **Parse** | **Schema** | **25.675 us** | **0.1323 us** | **0.1238 us** | **1.00** | **4.5776** | **-** | **-** | **18.7 KB** | -| Serial | Schema | 27.889 us | 0.1265 us | 0.1121 us | 1.09 | 3.7231 | - | - | 15.28 KB | -| **Parse** | **Simple** | **1.917 us** | **0.0096 us** | **0.0090 us** | **1.00** | **0.3853** | **-** | **-** | **1.59 KB** | -| Serial | Simple | 2.024 us | 0.0142 us | 0.0125 us | 1.06 | 0.3166 | - | - | 1.3 KB | - -Change all `IEnumerable` to `List` to avoid `List.Enumerator` allocations on caller side: - -| Method | query | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated | -|------------------ |------- |----------:|----------:|----------:|------:|-------:|------:|------:|----------:| -| **Parse** | **Params** | **10.235 us** | **0.0286 us** | **0.0267 us** | **1.00** | **2.0905** | **-** | **-** | **8.59 KB** | -| Serial | Params | 10.743 us | 0.0397 us | 0.0371 us | 1.05 | 1.9073 | - | - | 7.82 KB | -| **Parse** | **Schema** | **23.523 us** | **0.1073 us** | **0.0896 us** | **1.00** | **4.6692** | **-** | **-** | **19.09 KB** | -| Serial | Schema | 26.048 us | 0.0814 us | 0.0721 us | 1.11 | 3.8147 | - | - | 15.66 KB | -| **Parse** | **Simple** | **1.754 us** | **0.0140 us** | **0.0124 us** | **1.00** | **0.3986** | **-** | **-** | **1.63 KB** | -| Serial | Simple | 1.860 us | 0.0086 us | 0.0076 us | 1.06 | 0.3300 | - | - | 1.35 KB | - -| Method | query | Mean | Error | StdDev | Ratio | Gen 0 | Gen 1 | Gen 2 | Allocated | -|----------- |------- |----------:|----------:|----------:|------:|-------:|------:|------:|----------:| -| **Parse** | **Params** | **10.271 us** | **0.0408 us** | **0.0382 us** | **1.00** | **2.0905** | **-** | **-** | **8.59 KB** | -| Serial | Params | 10.808 us | 0.0327 us | 0.0306 us | 1.05 | 1.9073 | - | - | 7.82 KB | -| Concurrent | Params | 11.038 us | 0.0991 us | 0.0828 us | 1.07 | 1.9073 | - | - | 7.82 KB | -| **Parse** | **Schema** | **23.688 us** | **0.0536 us** | **0.0501 us** | **1.00** | **4.6692** | **-** | **-** | **19.09 KB** | -| Serial | Schema | 26.225 us | 0.0865 us | 0.0809 us | 1.11 | 3.8147 | - | - | 15.66 KB | -| Concurrent | Schema | 26.738 us | 0.1112 us | 0.0986 us | 1.13 | 3.8147 | - | - | 15.66 KB | -| **Parse** | **Simple** | **1.762 us** | **0.0079 us** | **0.0070 us** | **1.00** | **0.3986** | **-** | **-** | **1.63 KB** | -| Serial | Simple | 1.893 us | 0.0061 us | 0.0054 us | 1.07 | 0.3300 | - | - | 1.35 KB | -| Concurrent | Simple | 1.959 us | 0.0069 us | 0.0061 us | 1.11 | 0.3281 | - | - | 1.35 KB | diff --git a/src/GraphQLParser.Benchmarks/GraphQLParser.Benchmarks.csproj b/src/GraphQLParser.Benchmarks/GraphQLParser.Benchmarks.csproj index 9973320f..f582d80c 100644 --- a/src/GraphQLParser.Benchmarks/GraphQLParser.Benchmarks.csproj +++ b/src/GraphQLParser.Benchmarks/GraphQLParser.Benchmarks.csproj @@ -7,18 +7,11 @@ - - Always - - + Always - - - - diff --git a/src/GraphQLParser.Benchmarks/LexerBenchmark.cs b/src/GraphQLParser.Benchmarks/LexerBenchmark.cs deleted file mode 100644 index 4e1e4e33..00000000 --- a/src/GraphQLParser.Benchmarks/LexerBenchmark.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.IO; -using BenchmarkDotNet.Attributes; - -namespace GraphQLParser.Benchmarks -{ - [MemoryDiagnoser] - public class LexerBenchmark - { - private string _query = null!; - private const string KITCHEN_SINK = @" -query queryName($foo: ComplexType, $site: Site = MOBILE) { - whoever123is: node(id: [123, 456]) { - id , - ... on User @defer { - field2 { - id , - alias: field1(first:10, after:$foo,) @include(if: $foo) { - id, - ...frag - } - } - } - ... @skip(unless: $foo) { - id - } - ... { - id - } - } -} - -mutation likeStory { - like(story: 123) @defer { - story { - id - } - } -} - -subscription StoryLikeSubscription($input: StoryLikeSubscribeInput) { - storyLikeSubscribe(input: $input) { - story { - likers { - count - } - likeSentence { - text - } - } - } -} - -fragment frag on Friend { - foo(size: $size, bar: $b, obj: {key: ""value""}) -} - -{ - unnamed(truthy: true, falsey: false), - query -}"; - - [GlobalSetup] - public void GlobalSetup() - { - _query = File.ReadAllText("query_with_many_escape_symbols.txt"); - } - - [Benchmark] - public void LexKitchenSink() - { - var lexer = new Lexer(); - var source = new Source(KITCHEN_SINK); - int resetPosition = 0; - Token token; - while ((token = lexer.Lex(source, resetPosition)).Kind != TokenKind.EOF) - { - resetPosition = token.End; - } - } - - [Benchmark] - public void LexQueryWithManyEscapeSymbols() - { - var lexer = new Lexer(); - var source = new Source(_query); - int resetPosition = 0; - Token token; - while ((token = lexer.Lex(source, resetPosition)).Kind != TokenKind.EOF) - { - resetPosition = token.End; - } - } - } -} diff --git a/src/GraphQLParser.Benchmarks/Program.cs b/src/GraphQLParser.Benchmarks/Program.cs index c5677923..ced8f4da 100644 --- a/src/GraphQLParser.Benchmarks/Program.cs +++ b/src/GraphQLParser.Benchmarks/Program.cs @@ -1,55 +1,42 @@ -using BenchmarkDotNet.Running; using System; -using System.Linq; +using System.IO; using System.Threading; +using BenchmarkDotNet.Running; namespace GraphQLParser.Benchmarks { internal static class Program { + internal static string ReadGraphQLFile(this string name) => File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory!, "Files", name + ".graphql")); + // Call without args for BenchmarkDotNet // Call with some arbitrary args for any memory profiler - private static void Main(string[] args) + private static void Main(string[] args) => Run(new[] { "args" }); + + private static void Run(string[] args) + where TBenchmark : IBenchmark, new() { if (args.Length == 0) - BenchmarkRunner.Run(); + _ = BenchmarkRunner.Run(); else - RunMemoryProfilerPayload1(); + RunMemoryProfilerPayload(); } - private static void RunMemoryProfilerPayload1() + private static void RunMemoryProfilerPayload() + where TBenchmark : IBenchmark, new() { - var bench = new ParserBenchmark(); + var bench = new TBenchmark(); bench.GlobalSetup(); - var queries = bench.Queries().ToArray(); int count = 0; while (true) { - bench.Concurrent(queries[2]); + bench.Run(); Thread.Sleep(10); - ++count; - if (count == 500) - break; - } - - Console.WriteLine("end"); - Console.ReadLine(); - } - - private static void RunMemoryProfilerPayload2() - { - var bench = new LexerBenchmark(); - bench.GlobalSetup(); - - while (true) - { - bench.LexQueryWithManyEscapeSymbols(); - - Console.WriteLine("press key"); - Console.ReadLine(); + if (++count % 100 == 0) + Console.ReadLine(); } } }