Commit e97e31f7 authored by Mario de la Ossa's avatar Mario de la Ossa

Add a machine-readable GraphQL schema

Use the [built-in Rake Task available as part of the graphql-ruby
gem](https://github.com/rmosolgo/graphql-ruby/blob/master/lib/graphql/rake_task.rb)
in order to generate both
[IDL](https://www.prisma.io/blog/graphql-sdl-schema-definition-language-6755bcb9ce51)
and JSON schema files.

Also adds a rake task that checks to make sure the files are up-to-date
as well as runs the rake task in our CI
parent e8928d60
......@@ -68,7 +68,7 @@ docs lint:
# Check the internal anchor links
- bundle exec nanoc check internal_anchors
graphql-docs-verify:
graphql-reference-verify:
extends:
- .only-ee
- .default-tags
......@@ -83,3 +83,4 @@ graphql-docs-verify:
needs: ["setup-test-env"]
script:
- bundle exec rake gitlab:graphql:check_docs
- bundle exec rake gitlab:graphql:check_schema
......@@ -53,6 +53,11 @@ GitLab's GraphQL reference [is available](reference/index.md).
It is automatically generated from GitLab's GraphQL schema and embedded in a Markdown file.
Machine-readable versions are also available:
- [JSON format](reference/gitlab_schema.json)
- [IDL format](reference/gitlab_schema.graphql)
## GraphiQL
The API can be explored by using the GraphiQL IDE, it is available on your
......
"""
Autogenerated input type of AddAwardEmoji
"""
input AddAwardEmojiInput {
"""
The global id of the awardable resource
"""
awardableId: ID!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The emoji name
"""
name: String!
}
"""
Autogenerated return type of AddAwardEmoji
"""
type AddAwardEmojiPayload {
"""
The award emoji after mutation
"""
awardEmoji: AwardEmoji
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
}
type AwardEmoji {
"""
The emoji description
"""
description: String!
"""
The emoji as an icon
"""
emoji: String!
"""
The emoji name
"""
name: String!
"""
The emoji in unicode
"""
unicode: String!
"""
The unicode version for this emoji
"""
unicodeVersion: String!
"""
The user who awarded the emoji
"""
user: User!
}
type Blob implements Entry {
flatPath: String!
id: ID!
lfsOid: String
name: String!
path: String!
type: EntryType!
webUrl: String
}
"""
The connection type for Blob.
"""
type BlobConnection {
"""
A list of edges.
"""
edges: [BlobEdge]
"""
A list of nodes.
"""
nodes: [Blob]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type BlobEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Blob
}
type Commit {
author: User
authoredDate: Time
description: String
id: ID!
"""
Latest pipeline for this commit
"""
latestPipeline: Pipeline
message: String
sha: String!
"""
Rendered html for the commit signature
"""
signatureHtml: String
title: String
webUrl: String!
}
"""
Autogenerated input type of CreateDiffNote
"""
input CreateDiffNoteInput {
"""
The content note itself
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The global id of the resource to add a note to
"""
noteableId: ID!
"""
The position of this note on a diff
"""
position: DiffPositionInput!
}
"""
Autogenerated return type of CreateDiffNote
"""
type CreateDiffNotePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
The note after mutation
"""
note: Note
}
"""
Autogenerated input type of CreateImageDiffNote
"""
input CreateImageDiffNoteInput {
"""
The content note itself
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The global id of the resource to add a note to
"""
noteableId: ID!
"""
The position of this note on a diff
"""
position: DiffImagePositionInput!
}
"""
Autogenerated return type of CreateImageDiffNote
"""
type CreateImageDiffNotePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
The note after mutation
"""
note: Note
}
"""
Autogenerated input type of CreateNote
"""
input CreateNoteInput {
"""
The content note itself
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The global id of the discussion this note is in reply to
"""
discussionId: ID
"""
The global id of the resource to add a note to
"""
noteableId: ID!
}
"""
Autogenerated return type of CreateNote
"""
type CreateNotePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
The note after mutation
"""
note: Note
}
type Design implements Noteable {
diffRefs: DiffRefs!
"""
All discussions on this noteable
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DiscussionConnection!
"""
The change that happened to the design at this version
"""
event: DesignVersionEvent!
filename: String!
fullPath: String!
id: ID!
image: String!
issue: Issue!
"""
All notes on this noteable
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
"""
The total count of user-created notes for this design
"""
notesCount: Int!
project: Project!
"""
All versions related to this design ordered newest first
"""
versions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DesignVersionConnection!
}
type DesignCollection {
"""
All designs for this collection
"""
designs(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Filters designs to only those that existed at the version. If argument is
omitted or nil then all designs will reflect the latest version.
"""
atVersion: ID
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DesignConnection!
issue: Issue!
project: Project!
"""
All versions related to all designs ordered newest first
"""
versions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DesignVersionConnection!
}
"""
The connection type for Design.
"""
type DesignConnection {
"""
A list of edges.
"""
edges: [DesignEdge]
"""
A list of nodes.
"""
nodes: [Design]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type DesignEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Design
}
"""
Autogenerated input type of DesignManagementDelete
"""
input DesignManagementDeleteInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The filenames of the designs to delete
"""
filenames: [String!]!
"""
The iid of the issue to modify designs for
"""
iid: ID!
"""
The project where the issue is to upload designs for
"""
projectPath: ID!
}
"""
Autogenerated return type of DesignManagementDelete
"""
type DesignManagementDeletePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
The new version in which the designs are deleted
"""
version: DesignVersion
}
"""
Autogenerated input type of DesignManagementUpload
"""
input DesignManagementUploadInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The files to upload
"""
files: [Upload!]!
"""
The iid of the issue to modify designs for
"""
iid: ID!
"""
The project where the issue is to upload designs for
"""
projectPath: ID!
}
"""
Autogenerated return type of DesignManagementUpload
"""
type DesignManagementUploadPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The designs that were uploaded by the mutation
"""
designs: [Design!]!
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
Any designs that were skipped from the upload due to there being no change to their content since their last version
"""
skippedDesigns: [Design!]!
}
type DesignVersion {
"""
All designs that were changed in this version
"""
designs(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DesignConnection!
id: ID!
sha: ID!
}
"""
The connection type for DesignVersion.
"""
type DesignVersionConnection {
"""
A list of edges.
"""
edges: [DesignVersionEdge]
"""
A list of nodes.
"""
nodes: [DesignVersion]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type DesignVersionEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: DesignVersion
}
"""
Mutation event of a Design within a Version
"""
enum DesignVersionEvent {
"""
A creation event
"""
CREATION
"""
A deletion event
"""
DELETION
"""
A modification event
"""
MODIFICATION
"""
No change
"""
NONE
}
"""
Autogenerated input type of DestroyNote
"""
input DestroyNoteInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The global id of the note to destroy
"""
id: ID!
}
"""
Autogenerated return type of DestroyNote
"""
type DestroyNotePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
The note after mutation
"""
note: Note
}
type DetailedStatus {
detailsPath: String!
favicon: String!
group: String!
hasDetails: Boolean!
icon: String!
label: String!
text: String!
tooltip: String!
}
input DiffImagePositionInput {
"""
The merge base of the branch the comment was made on
"""
baseSha: String
"""
The sha of the head at the time the comment was made
"""
headSha: String!
"""
The total height of the image
"""
height: Int!
"""
The paths of the file that was changed. Both of the properties of this input
are optional, but at least one of them is required
"""
paths: DiffPathsInput!
"""
The sha of the branch being compared against
"""
startSha: String!
"""
The total width of the image
"""
width: Int!
"""
The X postion on which the comment was made
"""
x: Int!
"""
The Y position on which the comment was made
"""
y: Int!
}
input DiffPathsInput {
"""
The path of the file on the head sha
"""
newPath: String
"""
The path of the file on the start sha
"""
oldPath: String
}
type DiffPosition {
diffRefs: DiffRefs!
"""
The path of the file that was changed
"""
filePath: String!
"""
The total height of the image
"""
height: Int
"""
The line on head sha that was changed
"""
newLine: Int
"""
The path of the file on the head sha.
"""
newPath: String
"""
The line on start sha that was changed
"""
oldLine: Int
"""
The path of the file on the start sha.
"""
oldPath: String
positionType: DiffPositionType!
"""
The total width of the image
"""
width: Int
"""
The X postion on which the comment was made
"""
x: Int
"""
The Y position on which the comment was made
"""
y: Int
}
input DiffPositionInput {
"""
The merge base of the branch the comment was made on
"""
baseSha: String
"""
The sha of the head at the time the comment was made
"""
headSha: String!
"""
The line on head sha that was changed
"""
newLine: Int!
"""
The line on start sha that was changed
"""
oldLine: Int
"""
The paths of the file that was changed. Both of the properties of this input
are optional, but at least one of them is required
"""
paths: DiffPathsInput!
"""
The sha of the branch being compared against
"""
startSha: String!
}
"""
Type of file the position refers to
"""
enum DiffPositionType {
image
text
}
type DiffRefs {
"""
The merge base of the branch the comment was made on
"""
baseSha: String!
"""
The sha of the head at the time the comment was made
"""
headSha: String!
"""
The sha of the branch being compared against
"""
startSha: String!
}
type Discussion {
createdAt: Time!
id: ID!
"""
All notes in the discussion
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
"""
The ID used to reply to this discussion
"""
replyId: ID!
}
"""
The connection type for Discussion.
"""
type DiscussionConnection {
"""
A list of edges.
"""
edges: [DiscussionEdge]
"""
A list of nodes.
"""
nodes: [Discussion]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type DiscussionEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Discussion
}
interface Entry {
flatPath: String!
id: ID!
name: String!
path: String!
type: EntryType!
}
"""
Type of a tree entry
"""
enum EntryType {
blob
commit
tree
}
type Epic implements Noteable {
author: User!
children(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Filter epics by author
"""
authorUsername: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
List epics within a time frame where epics.end_date is between start_date
and end_date parameters (start_date parameter must be present)
"""
endDate: Time
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The IID of the epic, e.g., "1"
"""
iid: ID
"""
The list of IIDs of epics, e.g., [1, 2]
"""
iids: [ID!]
"""
Filter epics by labels
"""
labelName: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Filter epics by title and description
"""
search: String
"""
List epics by sort order
"""
sort: EpicSort
"""
List epics within a time frame where epics.start_date is between start_date
and end_date parameters (end_date parameter must be present)
"""
startDate: Time
"""
Filter epics by state
"""
state: EpicState
): EpicConnection
closedAt: Time
createdAt: Time
description: String
"""
All discussions on this noteable
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DiscussionConnection!
dueDate: Time
dueDateFixed: Time
dueDateFromMilestones: Time
dueDateIsFixed: Boolean
group: Group!
hasChildren: Boolean!
hasIssues: Boolean!
id: ID!
iid: ID!
issues(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): EpicIssueConnection
"""
All notes on this noteable
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
parent: Epic
"""
List of participants for the epic
"""
participants(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
reference(full: Boolean = false): String!
relationPath: String
"""
The relative position of the epic in the Epic tree
"""
relativePosition: Int
startDate: Time
startDateFixed: Time
startDateFromMilestones: Time
startDateIsFixed: Boolean
state: EpicState!
"""
Boolean flag for whether the currently logged in user is subscribed to this epic
"""
subscribed: Boolean!
title: String
updatedAt: Time
"""
Permissions for the current user on the resource
"""
userPermissions: EpicPermissions!
webPath: String!
webUrl: String!
}
"""
The connection type for Epic.
"""
type EpicConnection {
"""
A list of edges.
"""
edges: [EpicEdge]
"""
A list of nodes.
"""
nodes: [Epic]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type EpicEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Epic
}
type EpicIssue implements Noteable {
assignees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
author: User!
closedAt: Time
confidential: Boolean!
createdAt: Time!
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
designCollection: DesignCollection
designs: DesignCollection @deprecated(reason: "use design_collection")
discussionLocked: Boolean!
"""
All discussions on this noteable
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DiscussionConnection!
downvotes: Int!
dueDate: Time
"""
The epic to which issue belongs
"""
epic: Epic
epicIssueId: ID!
"""
The global id of the epic-issue relation
"""
id: ID
iid: ID!
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): LabelConnection
milestone: Milestone
"""
All notes on this noteable
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
"""
List of participants for the issue
"""
participants(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
reference(full: Boolean = false): String!
relationPath: String
relativePosition: Int
state: IssueState!
taskCompletionStatus: TaskCompletionStatus!
"""
The time estimate on the issue
"""
timeEstimate: Int!
title: String!
"""
The GitLab Flavored Markdown rendering of `title`
"""
titleHtml: String
"""
Total time reported as spent on the issue
"""
totalTimeSpent: Int!
updatedAt: Time!
upvotes: Int!
userNotesCount: Int!
"""
Permissions for the current user on the resource
"""
userPermissions: IssuePermissions!
webPath: String!
webUrl: String!
weight: Int
}
"""
The connection type for EpicIssue.
"""
type EpicIssueConnection {
"""
A list of edges.
"""
edges: [EpicIssueEdge]
"""
A list of nodes.
"""
nodes: [EpicIssue]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type EpicIssueEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: EpicIssue
}
"""
Check permissions for the current user on an epic
"""
type EpicPermissions {
"""
Whether or not a user can perform `admin_epic` on this resource
"""
adminEpic: Boolean!
"""
Whether or not a user can perform `award_emoji` on this resource
"""
awardEmoji: Boolean!
"""
Whether or not a user can perform `create_epic` on this resource
"""
createEpic: Boolean!
"""
Whether or not a user can perform `create_note` on this resource
"""
createNote: Boolean!
"""
Whether or not a user can perform `destroy_epic` on this resource
"""
destroyEpic: Boolean!
"""
Whether or not a user can perform `read_epic` on this resource
"""
readEpic: Boolean!
"""
Whether or not a user can perform `read_epic_iid` on this resource
"""
readEpicIid: Boolean!
"""
Whether or not a user can perform `update_epic` on this resource
"""
updateEpic: Boolean!
}
"""
Roadmap sort values
"""
enum EpicSort {
"""
End date at ascending order
"""
end_date_asc
"""
End date at descending order
"""
end_date_desc
"""
Start date at ascending order
"""
start_date_asc
"""
Start date at descending order
"""
start_date_desc
}
"""
State of a GitLab epic
"""
enum EpicState {
all
closed
opened
}
"""
State event of a GitLab Epic
"""
enum EpicStateEvent {
"""
Close the Epic
"""
CLOSE
"""
Reopen the Epic
"""
REOPEN
}
input EpicTreeNodeFieldsInputType {
"""
The id of the epic_issue or issue that the actual epic or issue is switched with
"""
adjacentReferenceId: ID!
"""
The id of the epic_issue or epic that is being moved
"""
id: ID!
"""
The type of the switch, after or before allowed
"""
relativePosition: MoveType!
}
"""
Autogenerated input type of EpicTreeReorder
"""
input EpicTreeReorderInput {
"""
The id of the base epic of the tree
"""
baseEpicId: ID!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Parameters for updating the tree positions
"""
moved: EpicTreeNodeFieldsInputType!
}
"""
Autogenerated return type of EpicTreeReorder
"""
type EpicTreeReorderPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
}
type ExtendedIssue implements Noteable {
assignees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
author: User!
closedAt: Time
confidential: Boolean!
createdAt: Time!
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
designCollection: DesignCollection
designs: DesignCollection @deprecated(reason: "use design_collection")
discussionLocked: Boolean!
"""
All discussions on this noteable
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DiscussionConnection!
downvotes: Int!
dueDate: Time
"""
The epic to which issue belongs
"""
epic: Epic
iid: ID!
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): LabelConnection
milestone: Milestone
"""
All notes on this noteable
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
"""
List of participants for the issue
"""
participants(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
reference(full: Boolean = false): String!
relativePosition: Int
state: IssueState!
"""
Boolean flag for whether the currently logged in user is subscribed to this issue
"""
subscribed: Boolean!
taskCompletionStatus: TaskCompletionStatus!
"""
The time estimate on the issue
"""
timeEstimate: Int!
title: String!
"""
The GitLab Flavored Markdown rendering of `title`
"""
titleHtml: String
"""
Total time reported as spent on the issue
"""
totalTimeSpent: Int!
updatedAt: Time!
upvotes: Int!
userNotesCount: Int!
"""
Permissions for the current user on the resource
"""
userPermissions: IssuePermissions!
webPath: String!
webUrl: String!
weight: Int
}
type Group {
avatarUrl: String
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
epic(
"""
Filter epics by author
"""
authorUsername: String
"""
List epics within a time frame where epics.end_date is between start_date
and end_date parameters (start_date parameter must be present)
"""
endDate: Time
"""
The IID of the epic, e.g., "1"
"""
iid: ID
"""
The list of IIDs of epics, e.g., [1, 2]
"""
iids: [ID!]
"""
Filter epics by labels
"""
labelName: [String!]
"""
Filter epics by title and description
"""
search: String
"""
List epics by sort order
"""
sort: EpicSort
"""
List epics within a time frame where epics.start_date is between start_date
and end_date parameters (end_date parameter must be present)
"""
startDate: Time
"""
Filter epics by state
"""
state: EpicState
): Epic
epics(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Filter epics by author
"""
authorUsername: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
List epics within a time frame where epics.end_date is between start_date
and end_date parameters (start_date parameter must be present)
"""
endDate: Time
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The IID of the epic, e.g., "1"
"""
iid: ID
"""
The list of IIDs of epics, e.g., [1, 2]
"""
iids: [ID!]
"""
Filter epics by labels
"""
labelName: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Filter epics by title and description
"""
search: String
"""
List epics by sort order
"""
sort: EpicSort
"""
List epics within a time frame where epics.start_date is between start_date
and end_date parameters (end_date parameter must be present)
"""
startDate: Time
"""
Filter epics by state
"""
state: EpicState
): EpicConnection
epicsEnabled: Boolean
fullName: String!
fullPath: ID!
id: ID!
lfsEnabled: Boolean
name: String!
parent: Group
path: String!
projects(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Include also subgroup projects
"""
includeSubgroups: Boolean = false
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProjectConnection!
requestAccessEnabled: Boolean
"""
The aggregated storage statistics. Only available for root namespaces
"""
rootStorageStatistics: RootStorageStatistics
"""
Permissions for the current user on the resource
"""
userPermissions: GroupPermissions!
visibility: String
webUrl: String!
}
type GroupPermissions {
"""
Whether or not a user can perform `read_group` on this resource
"""
readGroup: Boolean!
}
"""
State of a GitLab issue or merge request
"""
enum IssuableState {
closed
locked
opened
}
type Issue implements Noteable {
assignees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
author: User!
closedAt: Time
confidential: Boolean!
createdAt: Time!
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
designCollection: DesignCollection
designs: DesignCollection @deprecated(reason: "use design_collection")
discussionLocked: Boolean!
"""
All discussions on this noteable
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DiscussionConnection!
downvotes: Int!
dueDate: Time
"""
The epic to which issue belongs
"""
epic: Epic
iid: ID!
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): LabelConnection
milestone: Milestone
"""
All notes on this noteable
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
"""
List of participants for the issue
"""
participants(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
reference(full: Boolean = false): String!
relativePosition: Int
state: IssueState!
taskCompletionStatus: TaskCompletionStatus!
"""
The time estimate on the issue
"""
timeEstimate: Int!
title: String!
"""
The GitLab Flavored Markdown rendering of `title`
"""
titleHtml: String
"""
Total time reported as spent on the issue
"""
totalTimeSpent: Int!
updatedAt: Time!
upvotes: Int!
userNotesCount: Int!
"""
Permissions for the current user on the resource
"""
userPermissions: IssuePermissions!
webPath: String!
webUrl: String!
weight: Int
}
"""
The connection type for Issue.
"""
type IssueConnection {
"""
A list of edges.
"""
edges: [IssueEdge]
"""
A list of nodes.
"""
nodes: [Issue]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type IssueEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Issue
}
"""
Check permissions for the current user on a issue
"""
type IssuePermissions {
"""
Whether or not a user can perform `admin_issue` on this resource
"""
adminIssue: Boolean!
"""
Whether or not a user can perform `create_design` on this resource
"""
createDesign: Boolean!
"""
Whether or not a user can perform `create_note` on this resource
"""
createNote: Boolean!
"""
Whether or not a user can perform `destroy_design` on this resource
"""
destroyDesign: Boolean!
"""
Whether or not a user can perform `read_design` on this resource
"""
readDesign: Boolean!
"""
Whether or not a user can perform `read_issue` on this resource
"""
readIssue: Boolean!
"""
Whether or not a user can perform `reopen_issue` on this resource
"""
reopenIssue: Boolean!
"""
Whether or not a user can perform `update_issue` on this resource
"""
updateIssue: Boolean!
}
"""
Values for sorting issues
"""
enum IssueSort {
"""
Created at ascending order
"""
created_asc
"""
Created at descending order
"""
created_desc
"""
Updated at ascending order
"""
updated_asc
"""
Updated at descending order
"""
updated_desc
}
"""
State of a GitLab issue
"""
enum IssueState {
closed
locked
opened
}
type Label {
color: String!
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
textColor: String!
title: String!
}
"""
The connection type for Label.
"""
type LabelConnection {
"""
A list of edges.
"""
edges: [LabelEdge]
"""
A list of nodes.
"""
nodes: [Label]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type LabelEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Label
}
type MergeRequest implements Noteable {
allowCollaboration: Boolean
"""
The list of assignees for the merge request
"""
assignees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
createdAt: Time!
defaultMergeCommitMessage: String
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
diffHeadSha: String
diffRefs: DiffRefs
"""
Boolean flag determining if comments on the merge request are locked to members only
"""
discussionLocked: Boolean!
"""
All discussions on this noteable
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DiscussionConnection!
downvotes: Int!
forceRemoveSourceBranch: Boolean
headPipeline: Pipeline
id: ID!
iid: String!
inProgressMergeCommitSha: String
"""
The list of labels on the merge request
"""
labels(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): LabelConnection
mergeCommitMessage: String @deprecated(reason: "Renamed to defaultMergeCommitMessage")
mergeCommitSha: String
mergeError: String
mergeOngoing: Boolean!
mergeStatus: String
mergeWhenPipelineSucceeds: Boolean
mergeableDiscussionsState: Boolean
"""
The milestone this merge request is linked to
"""
milestone: Milestone
"""
All notes on this noteable
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
"""
The list of participants on the merge request
"""
participants(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): UserConnection
pipelines(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Filter pipelines by the ref they are run for
"""
ref: String
"""
Filter pipelines by the sha of the commit they are run for
"""
sha: String
"""
Filter pipelines by their status
"""
status: PipelineStatusEnum
): PipelineConnection!
project: Project!
projectId: Int!
rebaseCommitSha: String
rebaseInProgress: Boolean!
"""
Internal merge request reference. Returned in shortened format by default
"""
reference(
"""
Boolean option specifying whether the reference should be returned in full
"""
full: Boolean = false
): String!
shouldBeRebased: Boolean!
shouldRemoveSourceBranch: Boolean
sourceBranch: String!
sourceBranchExists: Boolean!
sourceProject: Project
sourceProjectId: Int
state: MergeRequestState!
"""
Boolean flag for whether the currently logged in user is subscribed to this MR
"""
subscribed: Boolean!
targetBranch: String!
targetProject: Project!
targetProjectId: Int!
taskCompletionStatus: TaskCompletionStatus!
"""
The time estimate for the merge request
"""
timeEstimate: Int!
title: String!
"""
The GitLab Flavored Markdown rendering of `title`
"""
titleHtml: String
"""
Total time reported as spent on the merge request
"""
totalTimeSpent: Int!
updatedAt: Time!
upvotes: Int!
userNotesCount: Int
"""
Permissions for the current user on the resource
"""
userPermissions: MergeRequestPermissions!
webUrl: String
workInProgress: Boolean!
}
"""
The connection type for MergeRequest.
"""
type MergeRequestConnection {
"""
A list of edges.
"""
edges: [MergeRequestEdge]
"""
A list of nodes.
"""
nodes: [MergeRequest]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type MergeRequestEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: MergeRequest
}
"""
Check permissions for the current user on a merge request
"""
type MergeRequestPermissions {
"""
Whether or not a user can perform `admin_merge_request` on this resource
"""
adminMergeRequest: Boolean!
"""
Whether or not a user can perform `cherry_pick_on_current_merge_request` on this resource
"""
cherryPickOnCurrentMergeRequest: Boolean!
"""
Whether or not a user can perform `create_note` on this resource
"""
createNote: Boolean!
"""
Whether or not a user can perform `push_to_source_branch` on this resource
"""
pushToSourceBranch: Boolean!
"""
Whether or not a user can perform `read_merge_request` on this resource
"""
readMergeRequest: Boolean!
"""
Whether or not a user can perform `remove_source_branch` on this resource
"""
removeSourceBranch: Boolean!
"""
Whether or not a user can perform `revert_on_current_merge_request` on this resource
"""
revertOnCurrentMergeRequest: Boolean!
"""
Whether or not a user can perform `update_merge_request` on this resource
"""
updateMergeRequest: Boolean!
}
"""
Autogenerated input type of MergeRequestSetWip
"""
input MergeRequestSetWipInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The iid of the merge request to mutate
"""
iid: String!
"""
The project the merge request to mutate is in
"""
projectPath: ID!
"""
Whether or not to set the merge request as a WIP.
"""
wip: Boolean!
}
"""
Autogenerated return type of MergeRequestSetWip
"""
type MergeRequestSetWipPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
The merge request after mutation
"""
mergeRequest: MergeRequest
}
"""
State of a GitLab merge request
"""
enum MergeRequestState {
closed
locked
merged
opened
}
type Metadata {
revision: String!
version: String!
}
type Milestone {
createdAt: Time!
description: String
dueDate: Time
startDate: Time
state: String!
title: String!
updatedAt: Time!
}
"""
The position the adjacent object should be moved.
"""
enum MoveType {
"""
The adjacent object will be moved after the object that is being moved.
"""
after
"""
The adjacent object will be moved before the object that is being moved.
"""
before
}
type Mutation {
addAwardEmoji(input: AddAwardEmojiInput!): AddAwardEmojiPayload
createDiffNote(input: CreateDiffNoteInput!): CreateDiffNotePayload
createImageDiffNote(input: CreateImageDiffNoteInput!): CreateImageDiffNotePayload
createNote(input: CreateNoteInput!): CreateNotePayload
designManagementDelete(input: DesignManagementDeleteInput!): DesignManagementDeletePayload
designManagementUpload(input: DesignManagementUploadInput!): DesignManagementUploadPayload
destroyNote(input: DestroyNoteInput!): DestroyNotePayload
epicTreeReorder(input: EpicTreeReorderInput!): EpicTreeReorderPayload
mergeRequestSetWip(input: MergeRequestSetWipInput!): MergeRequestSetWipPayload
removeAwardEmoji(input: RemoveAwardEmojiInput!): RemoveAwardEmojiPayload
toggleAwardEmoji(input: ToggleAwardEmojiInput!): ToggleAwardEmojiPayload
updateEpic(input: UpdateEpicInput!): UpdateEpicPayload
updateNote(input: UpdateNoteInput!): UpdateNotePayload
}
type Namespace {
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
fullName: String!
fullPath: ID!
id: ID!
lfsEnabled: Boolean
name: String!
path: String!
projects(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Include also subgroup projects
"""
includeSubgroups: Boolean = false
"""
Returns the last _n_ elements from the list.
"""
last: Int
): ProjectConnection!
requestAccessEnabled: Boolean
"""
The aggregated storage statistics. Only available for root namespaces
"""
rootStorageStatistics: RootStorageStatistics
visibility: String
}
type Note {
"""
The user who wrote this note
"""
author: User!
"""
The content note itself
"""
body: String!
"""
The GitLab Flavored Markdown rendering of `note`
"""
bodyHtml: String
createdAt: Time!
"""
The discussion this note is a part of
"""
discussion: Discussion
id: ID!
"""
The position of this note on a diff
"""
position: DiffPosition
"""
The project this note is associated to
"""
project: Project
resolvable: Boolean!
"""
The time the discussion was resolved
"""
resolvedAt: Time
"""
The user that resolved the discussion
"""
resolvedBy: User
"""
Whether or not this note was created by the system or by a user
"""
system: Boolean!
updatedAt: Time!
"""
Permissions for the current user on the resource
"""
userPermissions: NotePermissions!
}
"""
The connection type for Note.
"""
type NoteConnection {
"""
A list of edges.
"""
edges: [NoteEdge]
"""
A list of nodes.
"""
nodes: [Note]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type NoteEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Note
}
type NotePermissions {
"""
Whether or not a user can perform `admin_note` on this resource
"""
adminNote: Boolean!
"""
Whether or not a user can perform `award_emoji` on this resource
"""
awardEmoji: Boolean!
"""
Whether or not a user can perform `create_note` on this resource
"""
createNote: Boolean!
"""
Whether or not a user can perform `read_note` on this resource
"""
readNote: Boolean!
"""
Whether or not a user can perform `resolve_note` on this resource
"""
resolveNote: Boolean!
}
interface Noteable {
"""
All discussions on this noteable
"""
discussions(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): DiscussionConnection!
"""
All notes on this noteable
"""
notes(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): NoteConnection!
}
"""
Information about pagination in a connection.
"""
type PageInfo {
"""
When paginating forwards, the cursor to continue.
"""
endCursor: String
"""
When paginating forwards, are there more items?
"""
hasNextPage: Boolean!
"""
When paginating backwards, are there more items?
"""
hasPreviousPage: Boolean!
"""
When paginating backwards, the cursor to continue.
"""
startCursor: String
}
type Pipeline {
beforeSha: String
committedAt: Time
"""
Coverage percentage
"""
coverage: Float
createdAt: Time!
detailedStatus: DetailedStatus!
"""
Duration of the pipeline in seconds
"""
duration: Int
finishedAt: Time
id: ID!
iid: String!
sha: String!
startedAt: Time
status: PipelineStatusEnum!
updatedAt: Time!
"""
Permissions for the current user on the resource
"""
userPermissions: PipelinePermissions!
}
"""
The connection type for Pipeline.
"""
type PipelineConnection {
"""
A list of edges.
"""
edges: [PipelineEdge]
"""
A list of nodes.
"""
nodes: [Pipeline]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type PipelineEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Pipeline
}
type PipelinePermissions {
"""
Whether or not a user can perform `admin_pipeline` on this resource
"""
adminPipeline: Boolean!
"""
Whether or not a user can perform `destroy_pipeline` on this resource
"""
destroyPipeline: Boolean!
"""
Whether or not a user can perform `update_pipeline` on this resource
"""
updatePipeline: Boolean!
}
enum PipelineStatusEnum {
CANCELED
CREATED
FAILED
MANUAL
PENDING
PREPARING
RUNNING
SCHEDULED
SKIPPED
SUCCESS
}
type Project {
archived: Boolean
avatarUrl: String
containerRegistryEnabled: Boolean
createdAt: Time
description: String
"""
The GitLab Flavored Markdown rendering of `description`
"""
descriptionHtml: String
forksCount: Int!
fullPath: ID!
group: Group
httpUrlToRepo: String
id: ID!
importStatus: String
issue(
"""
Issues closed after this date
"""
closedAfter: Time
"""
Issues closed before this date
"""
closedBefore: Time
"""
Issues created after this date
"""
createdAfter: Time
"""
Issues created before this date
"""
createdBefore: Time
"""
The IID of the issue, e.g., "1"
"""
iid: String
"""
The list of IIDs of issues, e.g., [1, 2]
"""
iids: [String!]
"""
Labels applied to the Issue
"""
labelName: [String]
search: String
"""
Sort issues by this criteria
"""
sort: IssueSort = created_desc
"""
Current state of Issue
"""
state: IssuableState
"""
Issues updated after this date
"""
updatedAfter: Time
"""
Issues updated before this date
"""
updatedBefore: Time
): ExtendedIssue
issues(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Issues closed after this date
"""
closedAfter: Time
"""
Issues closed before this date
"""
closedBefore: Time
"""
Issues created after this date
"""
createdAfter: Time
"""
Issues created before this date
"""
createdBefore: Time
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The IID of the issue, e.g., "1"
"""
iid: String
"""
The list of IIDs of issues, e.g., [1, 2]
"""
iids: [String!]
"""
Labels applied to the Issue
"""
labelName: [String]
"""
Returns the last _n_ elements from the list.
"""
last: Int
search: String
"""
Sort issues by this criteria
"""
sort: IssueSort = created_desc
"""
Current state of Issue
"""
state: IssuableState
"""
Issues updated after this date
"""
updatedAfter: Time
"""
Issues updated before this date
"""
updatedBefore: Time
): IssueConnection
issuesEnabled: Boolean
jobsEnabled: Boolean
lastActivityAt: Time
lfsEnabled: Boolean
mergeRequest(
"""
The IID of the merge request, e.g., "1"
"""
iid: String
"""
The list of IIDs of issues, e.g., [1, 2]
"""
iids: [String!]
): MergeRequest
mergeRequests(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The IID of the merge request, e.g., "1"
"""
iid: String
"""
The list of IIDs of issues, e.g., [1, 2]
"""
iids: [String!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
): MergeRequestConnection
mergeRequestsEnabled: Boolean
mergeRequestsFfOnlyEnabled: Boolean
name: String!
nameWithNamespace: String!
namespace: Namespace
onlyAllowMergeIfAllDiscussionsAreResolved: Boolean
onlyAllowMergeIfPipelineSucceeds: Boolean
openIssuesCount: Int
path: String!
pipelines(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
Filter pipelines by the ref they are run for
"""
ref: String
"""
Filter pipelines by the sha of the commit they are run for
"""
sha: String
"""
Filter pipelines by their status
"""
status: PipelineStatusEnum
): PipelineConnection
printingMergeRequestLinkEnabled: Boolean
publicJobs: Boolean
repository: Repository
requestAccessEnabled: Boolean
sharedRunnersEnabled: Boolean
snippetsEnabled: Boolean
sshUrlToRepo: String
starCount: Int!
statistics: ProjectStatistics
tagList: String
"""
Permissions for the current user on the resource
"""
userPermissions: ProjectPermissions!
visibility: String
webUrl: String
wikiEnabled: Boolean
}
"""
The connection type for Project.
"""
type ProjectConnection {
"""
A list of edges.
"""
edges: [ProjectEdge]
"""
A list of nodes.
"""
nodes: [Project]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type ProjectEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Project
}
type ProjectPermissions {
"""
Whether or not a user can perform `admin_operations` on this resource
"""
adminOperations: Boolean!
"""
Whether or not a user can perform `admin_project` on this resource
"""
adminProject: Boolean!
"""
Whether or not a user can perform `admin_remote_mirror` on this resource
"""
adminRemoteMirror: Boolean!
"""
Whether or not a user can perform `admin_wiki` on this resource
"""
adminWiki: Boolean!
"""
Whether or not a user can perform `archive_project` on this resource
"""
archiveProject: Boolean!
"""
Whether or not a user can perform `change_namespace` on this resource
"""
changeNamespace: Boolean!
"""
Whether or not a user can perform `change_visibility_level` on this resource
"""
changeVisibilityLevel: Boolean!
"""
Whether or not a user can perform `create_deployment` on this resource
"""
createDeployment: Boolean!
"""
Whether or not a user can perform `create_design` on this resource
"""
createDesign: Boolean!
"""
Whether or not a user can perform `create_issue` on this resource
"""
createIssue: Boolean!
"""
Whether or not a user can perform `create_label` on this resource
"""
createLabel: Boolean!
"""
Whether or not a user can perform `create_merge_request_from` on this resource
"""
createMergeRequestFrom: Boolean!
"""
Whether or not a user can perform `create_merge_request_in` on this resource
"""
createMergeRequestIn: Boolean!
"""
Whether or not a user can perform `create_pages` on this resource
"""
createPages: Boolean!
"""
Whether or not a user can perform `create_pipeline` on this resource
"""
createPipeline: Boolean!
"""
Whether or not a user can perform `create_pipeline_schedule` on this resource
"""
createPipelineSchedule: Boolean!
"""
Whether or not a user can perform `create_project_snippet` on this resource
"""
createProjectSnippet: Boolean!
"""
Whether or not a user can perform `create_wiki` on this resource
"""
createWiki: Boolean!
"""
Whether or not a user can perform `destroy_design` on this resource
"""
destroyDesign: Boolean!
"""
Whether or not a user can perform `destroy_pages` on this resource
"""
destroyPages: Boolean!
"""
Whether or not a user can perform `destroy_wiki` on this resource
"""
destroyWiki: Boolean!
"""
Whether or not a user can perform `download_code` on this resource
"""
downloadCode: Boolean!
"""
Whether or not a user can perform `download_wiki_code` on this resource
"""
downloadWikiCode: Boolean!
"""
Whether or not a user can perform `fork_project` on this resource
"""
forkProject: Boolean!
"""
Whether or not a user can perform `push_code` on this resource
"""
pushCode: Boolean!
"""
Whether or not a user can perform `push_to_delete_protected_branch` on this resource
"""
pushToDeleteProtectedBranch: Boolean!
"""
Whether or not a user can perform `read_commit_status` on this resource
"""
readCommitStatus: Boolean!
"""
Whether or not a user can perform `read_cycle_analytics` on this resource
"""
readCycleAnalytics: Boolean!
"""
Whether or not a user can perform `read_design` on this resource
"""
readDesign: Boolean!
"""
Whether or not a user can perform `read_pages_content` on this resource
"""
readPagesContent: Boolean!
"""
Whether or not a user can perform `read_project` on this resource
"""
readProject: Boolean!
"""
Whether or not a user can perform `read_project_member` on this resource
"""
readProjectMember: Boolean!
"""
Whether or not a user can perform `read_wiki` on this resource
"""
readWiki: Boolean!
"""
Whether or not a user can perform `remove_fork_project` on this resource
"""
removeForkProject: Boolean!
"""
Whether or not a user can perform `remove_pages` on this resource
"""
removePages: Boolean!
"""
Whether or not a user can perform `remove_project` on this resource
"""
removeProject: Boolean!
"""
Whether or not a user can perform `rename_project` on this resource
"""
renameProject: Boolean!
"""
Whether or not a user can perform `request_access` on this resource
"""
requestAccess: Boolean!
"""
Whether or not a user can perform `update_pages` on this resource
"""
updatePages: Boolean!
"""
Whether or not a user can perform `update_wiki` on this resource
"""
updateWiki: Boolean!
"""
Whether or not a user can perform `upload_file` on this resource
"""
uploadFile: Boolean!
}
type ProjectStatistics {
buildArtifactsSize: Int!
commitCount: Int!
lfsObjectsSize: Int!
packagesSize: Int!
repositorySize: Int!
storageSize: Int!
wikiSize: Int
}
type Query {
"""
Get information about current user
"""
currentUser: User
"""
Testing endpoint to validate the API with
"""
echo(text: String!): String!
"""
Find a group
"""
group(
"""
The full path of the project, group or namespace, e.g., "gitlab-org/gitlab-foss"
"""
fullPath: ID!
): Group
"""
Metadata about GitLab
"""
metadata: Metadata
"""
Find a namespace
"""
namespace(
"""
The full path of the project, group or namespace, e.g., "gitlab-org/gitlab-foss"
"""
fullPath: ID!
): Namespace
"""
Find a project
"""
project(
"""
The full path of the project, group or namespace, e.g., "gitlab-org/gitlab-foss"
"""
fullPath: ID!
): Project
}
"""
Autogenerated input type of RemoveAwardEmoji
"""
input RemoveAwardEmojiInput {
"""
The global id of the awardable resource
"""
awardableId: ID!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The emoji name
"""
name: String!
}
"""
Autogenerated return type of RemoveAwardEmoji
"""
type RemoveAwardEmojiPayload {
"""
The award emoji after mutation
"""
awardEmoji: AwardEmoji
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
}
type Repository {
empty: Boolean!
exists: Boolean!
rootRef: String
tree(
"""
The path to get the tree for. Default value is the root of the repository
"""
path: String = ""
"""
Used to get a recursive tree. Default is false
"""
recursive: Boolean = false
"""
The commit ref to get the tree for. Default value is HEAD
"""
ref: String = "head"
): Tree
}
type RootStorageStatistics {
"""
The CI artifacts size in bytes
"""
buildArtifactsSize: Int!
"""
The LFS objects size in bytes
"""
lfsObjectsSize: Int!
"""
The packages size in bytes
"""
packagesSize: Int!
"""
The git repository size in bytes
"""
repositorySize: Int!
"""
The total storage in bytes
"""
storageSize: Int!
"""
The wiki size in bytes
"""
wikiSize: Int!
}
type Submodule implements Entry {
flatPath: String!
id: ID!
name: String!
path: String!
treeUrl: String
type: EntryType!
webUrl: String
}
"""
The connection type for Submodule.
"""
type SubmoduleConnection {
"""
A list of edges.
"""
edges: [SubmoduleEdge]
"""
A list of nodes.
"""
nodes: [Submodule]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type SubmoduleEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Submodule
}
"""
Completion status of tasks
"""
type TaskCompletionStatus {
completedCount: Int!
count: Int!
}
"""
Time represented in ISO 8601
"""
scalar Time
"""
Representing a todo entry
"""
type Todo {
"""
Action of the todo
"""
action: TodoActionEnum!
"""
The owner of this todo
"""
author: User!
"""
Body of the todo
"""
body: String!
"""
Timestamp this todo was created
"""
createdAt: Time!
"""
Group this todo is associated with
"""
group: Group
"""
Id of the todo
"""
id: ID!
"""
The project this todo is associated with
"""
project: Project
"""
State of the todo
"""
state: TodoStateEnum!
"""
Target type of the todo
"""
targetType: TodoTargetEnum!
}
enum TodoActionEnum {
approval_required
assigned
build_failed
directly_addressed
marked
mentioned
unmergeable
}
"""
The connection type for Todo.
"""
type TodoConnection {
"""
A list of edges.
"""
edges: [TodoEdge]
"""
A list of nodes.
"""
nodes: [Todo]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type TodoEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: Todo
}
enum TodoStateEnum {
done
pending
}
enum TodoTargetEnum {
Epic
Issue
MergeRequest
}
"""
Autogenerated input type of ToggleAwardEmoji
"""
input ToggleAwardEmojiInput {
"""
The global id of the awardable resource
"""
awardableId: ID!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The emoji name
"""
name: String!
}
"""
Autogenerated return type of ToggleAwardEmoji
"""
type ToggleAwardEmojiPayload {
"""
The award emoji after mutation
"""
awardEmoji: AwardEmoji
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
True when the emoji was awarded, false when it was removed
"""
toggledOn: Boolean!
}
type Tree {
blobs(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): BlobConnection!
"""
Last commit for the tree
"""
lastCommit: Commit
submodules(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): SubmoduleConnection!
trees(
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
Returns the last _n_ elements from the list.
"""
last: Int
): TreeEntryConnection!
}
"""
Represents a directory
"""
type TreeEntry implements Entry {
flatPath: String!
id: ID!
name: String!
path: String!
type: EntryType!
webUrl: String
}
"""
The connection type for TreeEntry.
"""
type TreeEntryConnection {
"""
A list of edges.
"""
edges: [TreeEntryEdge]
"""
A list of nodes.
"""
nodes: [TreeEntry]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type TreeEntryEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: TreeEntry
}
"""
Autogenerated input type of UpdateEpic
"""
input UpdateEpicInput {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The description of the epic
"""
description: String
"""
The end date of the epic
"""
dueDateFixed: String
"""
Indicates end date should be sourced from due_date_fixed field not the issue milestones
"""
dueDateIsFixed: Boolean
"""
The group the epic to mutate is in
"""
groupPath: ID!
"""
The iid of the epic to mutate
"""
iid: String!
"""
The start date of the epic
"""
startDateFixed: String
"""
Indicates start date should be sourced from start_date_fixed field not the issue milestones
"""
startDateIsFixed: Boolean
"""
State event for the epic
"""
stateEvent: EpicStateEvent
"""
The title of the epic
"""
title: String
}
"""
Autogenerated return type of UpdateEpic
"""
type UpdateEpicPayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The epic after mutation
"""
epic: Epic
"""
Reasons why the mutation failed.
"""
errors: [String!]!
}
"""
Autogenerated input type of UpdateNote
"""
input UpdateNoteInput {
"""
The content note itself
"""
body: String!
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
The global id of the note to update
"""
id: ID!
}
"""
Autogenerated return type of UpdateNote
"""
type UpdateNotePayload {
"""
A unique identifier for the client performing the mutation.
"""
clientMutationId: String
"""
Reasons why the mutation failed.
"""
errors: [String!]!
"""
The note after mutation
"""
note: Note
}
scalar Upload
type User {
avatarUrl: String!
name: String!
"""
Todos of this user
"""
todos(
"""
The action to be filtered
"""
action: [TodoActionEnum!]
"""
Returns the elements in the list that come after the specified cursor.
"""
after: String
"""
The ID of an author
"""
authorId: [ID!]
"""
Returns the elements in the list that come before the specified cursor.
"""
before: String
"""
Returns the first _n_ elements from the list.
"""
first: Int
"""
The ID of a group
"""
groupId: [ID!]
"""
Returns the last _n_ elements from the list.
"""
last: Int
"""
The ID of a project
"""
projectId: [ID!]
"""
The state of the todo
"""
state: [TodoStateEnum!]
"""
The type of the todo
"""
type: [TodoTargetEnum!]
): TodoConnection!
username: String!
webUrl: String!
}
"""
The connection type for User.
"""
type UserConnection {
"""
A list of edges.
"""
edges: [UserEdge]
"""
A list of nodes.
"""
nodes: [User]
"""
Information to aid in pagination.
"""
pageInfo: PageInfo!
}
"""
An edge in a connection.
"""
type UserEdge {
"""
A cursor for use in pagination.
"""
cursor: String!
"""
The item at the end of the edge.
"""
node: User
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -547,7 +547,7 @@ it 'returns a successful response' do
end
```
## Documentation
## Documentation and Schema
For information on generating GraphQL documentation, see
[Rake tasks related to GraphQL](rake_tasks.md#update-graphql-documentation).
For information on generating GraphQL documentation and schema files, see
[Rake tasks related to GraphQL](rake_tasks.md#update-graphql-documentation-and-schema-definitions).
......@@ -221,7 +221,7 @@ bundle exec rake db:obsolete_ignored_columns
Feel free to remove their definitions from their `ignored_columns` definitions.
## Update GraphQL Documentation
## Update GraphQL Documentation and Schema definitions
To generate GraphQL documentation based on the GitLab schema, run:
......@@ -243,3 +243,13 @@ The actual renderer is at `Gitlab::Graphql::Docs::Renderer`.
`@parsed_schema` is an instance variable that the `graphql-docs` gem expects to have available.
`Gitlab::Graphql::Docs::Helper` defines the `object` method we currently use. This is also where you
should implement any new methods for new types you'd like to display.
### Update machine-readable schema files
To generate GraphQL schema files based on the GitLab schema, run:
```shell
bundle exec rake gitlab:graphql:schema:dump
```
This uses graphql-ruby's built-in rake tasks to generate files in both [IDL](https://www.prisma.io/blog/graphql-sdl-schema-definition-language-6755bcb9ce51) and JSON formats.
......@@ -2,10 +2,24 @@
return if Rails.env.production?
require 'graphql/rake_task'
namespace :gitlab do
OUTPUT_DIR = Rails.root.join("doc/api/graphql/reference")
TEMPLATES_DIR = 'lib/gitlab/graphql/docs/templates/'
# Defines tasks for dumping the GraphQL schema:
# - gitlab:graphql:schema:dump
# - gitlab:graphql:schema:idl
# - gitlab:graphql:schema:json
GraphQL::RakeTask.new(
schema_name: 'GitlabSchema',
dependencies: [:environment],
directory: OUTPUT_DIR,
idl_outfile: "gitlab_schema.graphql",
json_outfile: "gitlab_schema.json"
)
namespace :graphql do
desc 'GitLab | Generate GraphQL docs'
task compile_docs: :environment do
......@@ -25,11 +39,20 @@ namespace :gitlab do
if doc == renderer.contents
puts "GraphQL documentation is up to date"
else
puts '#' * 10
puts '#'
puts '# GraphQL documentation is outdated! Please update it by running `bundle exec rake gitlab:graphql:compile_docs`.'
puts '#'
puts '#' * 10
format_output('GraphQL documentation is outdated! Please update it by running `bundle exec rake gitlab:graphql:compile_docs`.')
abort
end
end
desc 'GitLab | Check if GraphQL schemas are up to date'
task check_schema: :environment do
idl_doc = File.read(Rails.root.join(OUTPUT_DIR, 'gitlab_schema.graphql'))
json_doc = File.read(Rails.root.join(OUTPUT_DIR, 'gitlab_schema.json'))
if idl_doc == GitlabSchema.to_definition && json_doc == GitlabSchema.to_json
puts "GraphQL schema is up to date"
else
format_output('GraphQL schema is outdated! Please update it by running `bundle exec rake gitlab:graphql:schema:dump`.')
abort
end
end
......@@ -42,3 +65,12 @@ def render_options
template: Rails.root.join(TEMPLATES_DIR, 'default.md.haml')
}
end
def format_output(str)
heading = '#' * 10
puts heading
puts '#'
puts "# #{str}"
puts '#'
puts heading
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment