diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-13 12:09:22 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-13 12:09:22 +0000 |
commit | 286fe61013674fe2d245ffc8d2233baf09923e70 (patch) | |
tree | 2037291f5863105e54e75be056b49f7d62007cae | |
parent | 4cb5e5011abfe8d50ac3a7ebd0018c563c6d7af4 (diff) | |
download | gitlab-ce-286fe61013674fe2d245ffc8d2233baf09923e70.tar.gz |
Add latest changes from gitlab-org/gitlab@master
121 files changed, 14164 insertions, 12572 deletions
@@ -87,7 +87,7 @@ gem 'grape-entity', '~> 0.7.1' gem 'rack-cors', '~> 1.0.6', require: 'rack/cors' # GraphQL API -gem 'graphql', '~> 1.9.12' +gem 'graphql', '~> 1.9.19' # NOTE: graphiql-rails v1.5+ doesn't work: https://gitlab.com/gitlab-org/gitlab/issues/31771 # TODO: remove app/views/graphiql/rails/editors/show.html.erb when https://github.com/rmosolgo/graphiql-rails/pull/71 is released: # https://gitlab.com/gitlab-org/gitlab/issues/31747 diff --git a/Gemfile.lock b/Gemfile.lock index aea7ecc46ee..ef8bffdc592 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -456,7 +456,7 @@ GEM graphiql-rails (1.4.10) railties sprockets-rails - graphql (1.9.12) + graphql (1.9.19) graphql-docs (1.6.0) commonmarker (~> 0.16) escape_utils (~> 1.2) @@ -1252,7 +1252,7 @@ DEPENDENCIES grape-path-helpers (~> 1.2) grape_logging (~> 1.7) graphiql-rails (~> 1.4.10) - graphql (~> 1.9.12) + graphql (~> 1.9.19) graphql-docs (~> 1.6.0) grpc (~> 1.24.0) gssapi diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index c85e5b68f5f..dc6ea148047 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -492,41 +492,6 @@ const Api = { buildUrl(url) { return joinPaths(gon.relative_url_root || '', url.replace(':version', gon.api_version)); }, - - /** - * Returns pods logs for an environment with an optional pod and container - * - * @param {Object} params - * @param {Object} param.environment - Environment object - * @param {string=} params.podName - Pod name, if not set the backend assumes a default one - * @param {string=} params.containerName - Container name, if not set the backend assumes a default one - * @param {string=} params.start - Starting date to query the logs in ISO format - * @param {string=} params.end - Ending date to query the logs in ISO format - * @returns {Promise} Axios promise for the result of a GET request of logs - */ - getPodLogs({ environment, podName, containerName, search, start, end }) { - const url = this.buildUrl(environment.logs_api_path); - - const params = {}; - - if (podName) { - params.pod_name = podName; - } - if (containerName) { - params.container_name = containerName; - } - if (search) { - params.search = search; - } - if (start) { - params.start = start; - } - if (end) { - params.end = end; - } - - return axios.get(url, { params }); - }, }; export default Api; diff --git a/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue b/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue index 3398cd091ba..e618fb3daae 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/editor_header.vue @@ -24,25 +24,19 @@ export default { discardModalTitle() { return sprintf(__('Discard changes to %{path}?'), { path: this.activeFile.path }); }, - actionButtonText() { - return this.activeFile.staged ? __('Unstage') : __('Stage'); - }, isStaged() { return !this.activeFile.changed && this.activeFile.staged; }, }, methods: { ...mapActions(['stageChange', 'unstageChange', 'discardFileChanges']), - actionButtonClicked() { - if (this.activeFile.staged) { - this.unstageChange(this.activeFile.path); - } else { - this.stageChange(this.activeFile.path); - } - }, showDiscardModal() { this.$refs.discardModal.show(); }, + discardChanges(path) { + this.unstageChange(path); + this.discardFileChanges(path); + }, }, }; </script> @@ -65,19 +59,7 @@ export default { class="btn btn-remove btn-inverted append-right-8" @click="showDiscardModal" > - {{ __('Discard') }} - </button> - <button - ref="actionButton" - :class="{ - 'btn-success': !isStaged, - 'btn-warning': isStaged, - }" - type="button" - class="btn btn-inverted" - @click="actionButtonClicked" - > - {{ actionButtonText }} + {{ __('Discard changes') }} </button> </div> <gl-modal @@ -87,7 +69,7 @@ export default { :ok-title="__('Discard changes')" :modal-id="discardModalId" :title="discardModalTitle" - @ok="discardFileChanges(activeFile.path)" + @ok="discardChanges(activeFile.path)" > {{ __("You will lose all changes you've made to this file. This action cannot be undone.") }} </gl-modal> diff --git a/app/assets/javascripts/ide/components/commit_sidebar/form.vue b/app/assets/javascripts/ide/components/commit_sidebar/form.vue index 5ec3fc4041b..f6ca728defc 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/form.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/form.vue @@ -1,6 +1,6 @@ <script> import { mapState, mapActions, mapGetters } from 'vuex'; -import { sprintf, __ } from '~/locale'; +import { n__, __ } from '~/locale'; import LoadingButton from '~/vue_shared/components/loading_button.vue'; import CommitMessageField from './message_field.vue'; import Actions from './actions.vue'; @@ -26,15 +26,7 @@ export default { ...mapGetters(['hasChanges']), ...mapGetters('commit', ['discardDraftButtonDisabled', 'preBuiltCommitMessage']), overviewText() { - return sprintf( - __( - '<strong>%{stagedFilesLength} staged</strong> and <strong>%{changedFilesLength} unstaged</strong> changes', - ), - { - stagedFilesLength: this.stagedFiles.length, - changedFilesLength: this.changedFiles.length, - }, - ); + return n__('%d changed file', '%d changed files', this.stagedFiles.length); }, commitButtonText() { return this.stagedFiles.length ? __('Commit') : __('Stage & Commit'); @@ -125,7 +117,7 @@ export default { > {{ __('Commit…') }} </button> - <p class="text-center" v-html="overviewText"></p> + <p class="text-center bold">{{ overviewText }}</p> </div> <form v-if="!isCompact" ref="formEl" @submit.prevent.stop="commitChanges"> <transition name="fade"> <success-message v-show="lastCommitMsg" /> </transition> diff --git a/app/assets/javascripts/ide/components/commit_sidebar/list.vue b/app/assets/javascripts/ide/components/commit_sidebar/list.vue index d9a385a9d31..2e273d45506 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/list.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/list.vue @@ -17,10 +17,6 @@ export default { tooltip, }, props: { - title: { - type: String, - required: true, - }, fileList: { type: Array, required: true, @@ -29,18 +25,6 @@ export default { type: String, required: true, }, - action: { - type: String, - required: true, - }, - actionBtnText: { - type: String, - required: true, - }, - actionBtnIcon: { - type: String, - required: true, - }, stagedList: { type: Boolean, required: false, @@ -63,9 +47,9 @@ export default { }, computed: { titleText() { - return sprintf(__('%{title} changes'), { - title: this.title, - }); + if (!this.title) return __('Changes'); + + return sprintf(__('%{title} changes'), { title: this.title }); }, filesLength() { return this.fileList.length; @@ -73,17 +57,16 @@ export default { }, methods: { ...mapActions(['stageAllChanges', 'unstageAllChanges', 'discardAllChanges']), - actionBtnClicked() { - this[this.action](); - - $(this.$refs.actionBtn).tooltip('hide'); - }, openDiscardModal() { $('#discard-all-changes').modal('show'); }, + unstageAndDiscardAllChanges() { + this.unstageAllChanges(); + this.discardAllChanges(); + }, }, discardModalText: __( - "You will lose all the unstaged changes you've made in this project. This action cannot be undone.", + "You will lose all uncommitted changes you've made in this project. This action cannot be undone.", ), }; </script> @@ -96,24 +79,6 @@ export default { <strong> {{ titleText }} </strong> <div class="d-flex ml-auto"> <button - ref="actionBtn" - v-tooltip - :title="actionBtnText" - :aria-label="actionBtnText" - :disabled="!filesLength" - :class="{ - 'disabled-content': !filesLength, - }" - type="button" - class="d-flex ide-staged-action-btn p-0 border-0 align-items-center" - data-placement="bottom" - data-container="body" - data-boundary="viewport" - @click="actionBtnClicked" - > - <icon :name="actionBtnIcon" :size="16" class="ml-auto mr-auto" /> - </button> - <button v-if="!stagedList" v-tooltip :title="__('Discard all changes')" @@ -151,9 +116,9 @@ export default { v-if="!stagedList" id="discard-all-changes" :footer-primary-button-text="__('Discard all changes')" - :header-title-text="__('Discard all unstaged changes?')" + :header-title-text="__('Discard all changes?')" footer-primary-button-variant="danger" - @submit="discardAllChanges" + @submit="unstageAndDiscardAllChanges" > {{ $options.discardModalText }} </gl-modal> diff --git a/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue b/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue index 726e2b7e1fc..e49d96efe50 100644 --- a/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue +++ b/app/assets/javascripts/ide/components/commit_sidebar/list_item.vue @@ -57,13 +57,7 @@ export default { }, }, methods: { - ...mapActions([ - 'discardFileChanges', - 'updateViewer', - 'openPendingTab', - 'unstageChange', - 'stageChange', - ]), + ...mapActions(['discardFileChanges', 'updateViewer', 'openPendingTab']), openFileInEditor() { if (this.file.type === 'tree') return null; @@ -76,13 +70,6 @@ export default { } }); }, - fileAction() { - if (this.file.staged) { - this.unstageChange(this.file.path); - } else { - this.stageChange(this.file.path); - } - }, }, }; </script> @@ -97,7 +84,6 @@ export default { }" class="multi-file-commit-list-path w-100 border-0 ml-0 mr-0" role="button" - @dblclick="fileAction" @click="openFileInEditor" > <span class="multi-file-commit-list-file-path d-flex align-items-center"> diff --git a/app/assets/javascripts/ide/components/file_row_extra.vue b/app/assets/javascripts/ide/components/file_row_extra.vue index 3ef7d863bd5..32822a75772 100644 --- a/app/assets/javascripts/ide/components/file_row_extra.vue +++ b/app/assets/javascripts/ide/components/file_row_extra.vue @@ -1,6 +1,6 @@ <script> import { mapGetters } from 'vuex'; -import { n__, __, sprintf } from '~/locale'; +import { n__ } from '~/locale'; import tooltip from '~/vue_shared/directives/tooltip'; import Icon from '~/vue_shared/components/icon.vue'; import ChangedFileIcon from '~/vue_shared/components/changed_file_icon.vue'; @@ -49,16 +49,7 @@ export default { folderChangesTooltip() { if (this.changesCount === 0) return undefined; - if (this.folderUnstagedCount > 0 && this.folderStagedCount === 0) { - return n__('%d unstaged change', '%d unstaged changes', this.folderUnstagedCount); - } else if (this.folderUnstagedCount === 0 && this.folderStagedCount > 0) { - return n__('%d staged change', '%d staged changes', this.folderStagedCount); - } - - return sprintf(__('%{staged} staged and %{unstaged} unstaged changes'), { - unstaged: this.folderUnstagedCount, - staged: this.folderStagedCount, - }); + return n__('%d changed file', '%d changed files', this.changesCount); }, showTreeChangesCount() { return this.isTree && this.changesCount > 0 && !this.file.opened; diff --git a/app/assets/javascripts/ide/components/repo_commit_section.vue b/app/assets/javascripts/ide/components/repo_commit_section.vue index 62fb0b03975..b8dca2709c8 100644 --- a/app/assets/javascripts/ide/components/repo_commit_section.vue +++ b/app/assets/javascripts/ide/components/repo_commit_section.vue @@ -86,28 +86,12 @@ export default { </deprecated-modal> <template v-if="showStageUnstageArea"> <commit-files-list - :title="__('Unstaged')" - :key-prefix="$options.stageKeys.unstaged" - :file-list="changedFiles" - :action-btn-text="__('Stage all changes')" - :active-file-key="activeFileKey" - :empty-state-text="__('There are no unstaged changes')" - action="stageAllChanges" - action-btn-icon="stage-all" - class="is-first" - icon-name="unstaged" - /> - <commit-files-list - :title="__('Staged')" :key-prefix="$options.stageKeys.staged" :file-list="stagedFiles" - :action-btn-text="__('Unstage all changes')" - :staged-list="true" :active-file-key="activeFileKey" - :empty-state-text="__('There are no staged changes')" - action="unstageAllChanges" - action-btn-icon="unstage-all" - icon-name="staged" + :empty-state-text="__('There are no changes')" + class="is-first" + icon-name="unstaged" /> </template> <empty-state v-if="unusedSeal" /> diff --git a/app/assets/javascripts/logs/components/environment_logs.vue b/app/assets/javascripts/logs/components/environment_logs.vue index b94cd2bcec4..b0acd69bae0 100644 --- a/app/assets/javascripts/logs/components/environment_logs.vue +++ b/app/assets/javascripts/logs/components/environment_logs.vue @@ -1,23 +1,37 @@ <script> +import { throttle } from 'lodash'; import { mapActions, mapState, mapGetters } from 'vuex'; -import { GlDropdown, GlDropdownItem, GlFormGroup, GlSearchBoxByClick, GlAlert } from '@gitlab/ui'; +import { + GlSprintf, + GlAlert, + GlDropdown, + GlDropdownItem, + GlFormGroup, + GlSearchBoxByClick, + GlInfiniteScroll, +} from '@gitlab/ui'; import DateTimePicker from '~/vue_shared/components/date_time_picker/date_time_picker.vue'; -import { scrollDown } from '~/lib/utils/scroll_utils'; import LogControlButtons from './log_control_buttons.vue'; import { timeRanges, defaultTimeRange } from '~/monitoring/constants'; import { timeRangeFromUrl } from '~/monitoring/utils'; +import { formatDate } from '../utils'; export default { components: { + GlSprintf, GlAlert, GlDropdown, GlDropdownItem, GlFormGroup, GlSearchBoxByClick, + GlInfiniteScroll, DateTimePicker, LogControlButtons, }, + filters: { + formatDate, + }, props: { environmentName: { type: String, @@ -39,11 +53,13 @@ export default { required: true, }, }, + traceHeight: 600, data() { return { searchQuery: '', timeRanges, isElasticStackCalloutDismissed: false, + scrollDownButtonDisabled: true, }; }, computed: { @@ -52,7 +68,7 @@ export default { timeRangeModel: { get() { - return this.timeRange.current; + return this.timeRange.selected; }, set(val) { this.setTimeRange(val); @@ -60,7 +76,7 @@ export default { }, showLoader() { - return this.logs.isLoading || !this.logs.isComplete; + return this.logs.isLoading; }, advancedFeaturesEnabled() { const environment = this.environments.options.find( @@ -75,16 +91,6 @@ export default { return !this.isElasticStackCalloutDismissed && this.disableAdvancedControls; }, }, - watch: { - trace(val) { - this.$nextTick(() => { - if (val) { - scrollDown(); - } - this.$refs.scrollButtons.update(); - }); - }, - }, mounted() { this.setInitData({ timeRange: timeRangeFromUrl() || defaultTimeRange, @@ -102,12 +108,26 @@ export default { 'showPodLogs', 'showEnvironment', 'fetchEnvironments', + 'fetchMoreLogsPrepend', ]), + + topReached() { + if (!this.logs.isLoading) { + this.fetchMoreLogsPrepend(); + } + }, + scrollDown() { + this.$refs.infiniteScroll.scrollDown(); + }, + scroll: throttle(function scrollThrottled({ target = {} }) { + const { scrollTop = 0, clientHeight = 0, scrollHeight = 0 } = target; + this.scrollDownButtonDisabled = scrollTop + clientHeight === scrollHeight; + }, 200), }, }; </script> <template> - <div class="build-page-pod-logs mt-3"> + <div class="environment-logs-viewer mt-3"> <gl-alert v-if="shouldShowElasticStackCallout" class="mb-3 js-elasticsearch-alert" @@ -209,14 +229,50 @@ export default { <log-control-buttons ref="scrollButtons" class="controllers align-self-end mb-1" + :scroll-down-button-disabled="scrollDownButtonDisabled" @refresh="showPodLogs(pods.current)" + @scrollDown="scrollDown" /> </div> - <pre class="build-trace js-log-trace"><code class="bash js-build-output">{{trace}} - <div v-if="showLoader" class="build-loader-animation js-build-loader-animation"> - <div class="dot"></div> - <div class="dot"></div> - <div class="dot"></div> - </div></code></pre> + + <gl-infinite-scroll + ref="infiniteScroll" + class="log-lines" + :style="{ height: `${$options.traceHeight}px` }" + :max-list-height="$options.traceHeight" + :fetched-items="logs.lines.length" + @topReached="topReached" + @scroll="scroll" + > + <template #items> + <pre + class="build-trace js-log-trace" + ><code class="bash js-build-output"><div v-if="showLoader" class="build-loader-animation js-build-loader-animation"> + <div class="dot"></div> + <div class="dot"></div> + <div class="dot"></div> + </div>{{trace}} + </code></pre> + </template> + <template #default + ><div></div + ></template> + </gl-infinite-scroll> + + <div ref="logFooter" class="log-footer py-2 px-3"> + <gl-sprintf :message="s__('Environments|Logs from %{start} to %{end}.')"> + <template #start>{{ timeRange.current.start | formatDate }}</template> + <template #end>{{ timeRange.current.end | formatDate }}</template> + </gl-sprintf> + <gl-sprintf + v-if="!logs.isComplete" + :message="s__('Environments|Currently showing %{fetched} results.')" + > + <template #fetched>{{ logs.lines.length }}</template> + </gl-sprintf> + <template v-else> + {{ s__('Environments|Currently showing all results.') }}</template + > + </div> </div> </template> diff --git a/app/assets/javascripts/logs/components/log_control_buttons.vue b/app/assets/javascripts/logs/components/log_control_buttons.vue index d55c2f7cd4c..170d0474447 100644 --- a/app/assets/javascripts/logs/components/log_control_buttons.vue +++ b/app/assets/javascripts/logs/components/log_control_buttons.vue @@ -1,12 +1,5 @@ <script> import { GlButton, GlTooltipDirective } from '@gitlab/ui'; -import { - canScroll, - isScrolledToTop, - isScrolledToBottom, - scrollDown, - scrollUp, -} from '~/lib/utils/scroll_utils'; import Icon from '~/vue_shared/components/icon.vue'; export default { @@ -17,32 +10,34 @@ export default { directives: { GlTooltip: GlTooltipDirective, }, + props: { + scrollUpButtonDisabled: { + type: Boolean, + required: false, + default: false, + }, + scrollDownButtonDisabled: { + type: Boolean, + required: false, + default: false, + }, + }, data() { return { - scrollToTopEnabled: false, - scrollToBottomEnabled: false, + scrollUpAvailable: Boolean(this.$listeners.scrollUp), + scrollDownAvailable: Boolean(this.$listeners.scrollDown), }; }, - created() { - window.addEventListener('scroll', this.update); - }, - destroyed() { - window.removeEventListener('scroll', this.update); - }, methods: { - /** - * Checks if page can be scrolled and updates - * enabled/disabled state of buttons accordingly - */ - update() { - this.scrollToTopEnabled = canScroll() && !isScrolledToTop(); - this.scrollToBottomEnabled = canScroll() && !isScrolledToBottom(); - }, handleRefreshClick() { this.$emit('refresh'); }, - scrollUp, - scrollDown, + handleScrollUp() { + this.$emit('scrollUp'); + }, + handleScrollDown() { + this.$emit('scrollDown'); + }, }, }; </script> @@ -50,6 +45,7 @@ export default { <template> <div> <div + v-if="scrollUpAvailable" v-gl-tooltip class="controllers-buttons" :title="__('Scroll to top')" @@ -59,13 +55,15 @@ export default { id="scroll-to-top" class="btn-blank js-scroll-to-top" :aria-label="__('Scroll to top')" - :disabled="!scrollToTopEnabled" - @click="scrollUp()" + :disabled="scrollUpButtonDisabled" + @click="handleScrollUp()" ><icon name="scroll_up" /></gl-button> </div> <div + v-if="scrollDownAvailable" v-gl-tooltip + :disabled="scrollUpButtonDisabled" class="controllers-buttons" :title="__('Scroll to bottom')" aria-labelledby="scroll-to-bottom" @@ -74,8 +72,9 @@ export default { id="scroll-to-bottom" class="btn-blank js-scroll-to-bottom" :aria-label="__('Scroll to bottom')" - :disabled="!scrollToBottomEnabled" - @click="scrollDown()" + :v-if="scrollDownAvailable" + :disabled="scrollDownButtonDisabled" + @click="handleScrollDown()" ><icon name="scroll_down" /></gl-button> </div> diff --git a/app/assets/javascripts/logs/stores/actions.js b/app/assets/javascripts/logs/stores/actions.js index 89a896b9dec..4544ebdfec1 100644 --- a/app/assets/javascripts/logs/stores/actions.js +++ b/app/assets/javascripts/logs/stores/actions.js @@ -1,4 +1,3 @@ -import Api from '~/api'; import { backOff } from '~/lib/utils/common_utils'; import httpStatusCodes from '~/lib/utils/http_status'; import axios from '~/lib/utils/axios_utils'; @@ -16,9 +15,10 @@ const flashLogsError = () => { flash(s__('Metrics|There was an error fetching the logs, please try again')); }; -const requestLogsUntilData = params => +const requestUntilData = (url, params) => backOff((next, stop) => { - Api.getPodLogs(params) + axios + .get(url, { params }) .then(res => { if (res.status === httpStatusCodes.ACCEPTED) { next(); @@ -31,10 +31,36 @@ const requestLogsUntilData = params => }); }); -export const setInitData = ({ commit }, { timeRange, environmentName, podName }) => { - if (timeRange) { - commit(types.SET_TIME_RANGE, timeRange); +const requestLogsUntilData = state => { + const params = {}; + const { logs_api_path } = state.environments.options.find( + ({ name }) => name === state.environments.current, + ); + + if (state.pods.current) { + params.pod_name = state.pods.current; + } + if (state.search) { + params.search = state.search; + } + if (state.timeRange.current) { + try { + const { start, end } = convertToFixedRange(state.timeRange.current); + params.start = start; + params.end = end; + } catch { + flashTimeRangeWarning(); + } + } + if (state.logs.cursor) { + params.cursor = state.logs.cursor; } + + return requestUntilData(logs_api_path, params); +}; + +export const setInitData = ({ commit }, { timeRange, environmentName, podName }) => { + commit(types.SET_TIME_RANGE, timeRange); commit(types.SET_PROJECT_ENVIRONMENT, environmentName); commit(types.SET_CURRENT_POD_NAME, podName); }; @@ -60,10 +86,15 @@ export const showEnvironment = ({ dispatch, commit }, environmentName) => { dispatch('fetchLogs'); }; +/** + * Fetch environments data and initial logs + * @param {Object} store + * @param {String} environmentsPath + */ export const fetchEnvironments = ({ commit, dispatch }, environmentsPath) => { commit(types.REQUEST_ENVIRONMENTS_DATA); - axios + return axios .get(environmentsPath) .then(({ data }) => { commit(types.RECEIVE_ENVIRONMENTS_DATA_SUCCESS, data.environments); @@ -76,32 +107,16 @@ export const fetchEnvironments = ({ commit, dispatch }, environmentsPath) => { }; export const fetchLogs = ({ commit, state }) => { - const params = { - environment: state.environments.options.find(({ name }) => name === state.environments.current), - podName: state.pods.current, - search: state.search, - }; - - if (state.timeRange.current) { - try { - const { start, end } = convertToFixedRange(state.timeRange.current); - params.start = start; - params.end = end; - } catch { - flashTimeRangeWarning(); - } - } - commit(types.REQUEST_PODS_DATA); commit(types.REQUEST_LOGS_DATA); - return requestLogsUntilData(params) + return requestLogsUntilData(state) .then(({ data }) => { - const { pod_name, pods, logs } = data; + const { pod_name, pods, logs, cursor } = data; commit(types.SET_CURRENT_POD_NAME, pod_name); commit(types.RECEIVE_PODS_DATA_SUCCESS, pods); - commit(types.RECEIVE_LOGS_DATA_SUCCESS, logs); + commit(types.RECEIVE_LOGS_DATA_SUCCESS, { logs, cursor }); }) .catch(() => { commit(types.RECEIVE_PODS_DATA_ERROR); @@ -110,5 +125,24 @@ export const fetchLogs = ({ commit, state }) => { }); }; +export const fetchMoreLogsPrepend = ({ commit, state }) => { + if (state.logs.isComplete) { + // return when all logs are loaded + return Promise.resolve(); + } + + commit(types.REQUEST_LOGS_DATA_PREPEND); + + return requestLogsUntilData(state) + .then(({ data }) => { + const { logs, cursor } = data; + commit(types.RECEIVE_LOGS_DATA_PREPEND_SUCCESS, { logs, cursor }); + }) + .catch(() => { + commit(types.RECEIVE_LOGS_DATA_PREPEND_ERROR); + flashLogsError(); + }); +}; + // prevent babel-plugin-rewire from generating an invalid default during karma tests export default () => {}; diff --git a/app/assets/javascripts/logs/stores/getters.js b/app/assets/javascripts/logs/stores/getters.js index c7dbb72ce3d..58f2dbf4835 100644 --- a/app/assets/javascripts/logs/stores/getters.js +++ b/app/assets/javascripts/logs/stores/getters.js @@ -1,9 +1,9 @@ -import dateFormat from 'dateformat'; +import { formatDate } from '../utils'; -export const trace = state => - state.logs.lines - .map(item => [dateFormat(item.timestamp, 'UTC:mmm dd HH:MM:ss.l"Z"'), item.message].join(' | ')) - .join('\n'); +const mapTrace = ({ timestamp = null, message = '' }) => + [timestamp ? formatDate(timestamp) : '', message].join(' | '); + +export const trace = state => state.logs.lines.map(mapTrace).join('\n'); // prevent babel-plugin-rewire from generating an invalid default during karma tests export default () => {}; diff --git a/app/assets/javascripts/logs/stores/mutation_types.js b/app/assets/javascripts/logs/stores/mutation_types.js index b8e70f95d92..5ff49135e41 100644 --- a/app/assets/javascripts/logs/stores/mutation_types.js +++ b/app/assets/javascripts/logs/stores/mutation_types.js @@ -10,6 +10,9 @@ export const RECEIVE_ENVIRONMENTS_DATA_ERROR = 'RECEIVE_ENVIRONMENTS_DATA_ERROR' export const REQUEST_LOGS_DATA = 'REQUEST_LOGS_DATA'; export const RECEIVE_LOGS_DATA_SUCCESS = 'RECEIVE_LOGS_DATA_SUCCESS'; export const RECEIVE_LOGS_DATA_ERROR = 'RECEIVE_LOGS_DATA_ERROR'; +export const REQUEST_LOGS_DATA_PREPEND = 'REQUEST_LOGS_DATA_PREPEND'; +export const RECEIVE_LOGS_DATA_PREPEND_SUCCESS = 'RECEIVE_LOGS_DATA_PREPEND_SUCCESS'; +export const RECEIVE_LOGS_DATA_PREPEND_ERROR = 'RECEIVE_LOGS_DATA_PREPEND_ERROR'; export const REQUEST_PODS_DATA = 'REQUEST_PODS_DATA'; export const RECEIVE_PODS_DATA_SUCCESS = 'RECEIVE_PODS_DATA_SUCCESS'; diff --git a/app/assets/javascripts/logs/stores/mutations.js b/app/assets/javascripts/logs/stores/mutations.js index ca31dd3bc20..d94d71cd25a 100644 --- a/app/assets/javascripts/logs/stores/mutations.js +++ b/app/assets/javascripts/logs/stores/mutations.js @@ -1,17 +1,24 @@ import * as types from './mutation_types'; +import { convertToFixedRange } from '~/lib/utils/datetime_range'; + +const mapLine = ({ timestamp, message }) => ({ + timestamp, + message, +}); export default { - /** Search data */ + // Search Data [types.SET_SEARCH](state, searchQuery) { state.search = searchQuery; }, - /** Time Range data */ + // Time Range Data [types.SET_TIME_RANGE](state, timeRange) { - state.timeRange.current = timeRange; + state.timeRange.selected = timeRange; + state.timeRange.current = convertToFixedRange(timeRange); }, - /** Environments data */ + // Environments Data [types.SET_PROJECT_ENVIRONMENT](state, environmentName) { state.environments.current = environmentName; }, @@ -28,24 +35,49 @@ export default { state.environments.isLoading = false; }, - /** Logs data */ + // Logs data [types.REQUEST_LOGS_DATA](state) { + state.timeRange.current = convertToFixedRange(state.timeRange.selected); + state.logs.lines = []; state.logs.isLoading = true; + + // start pagination from the beginning + state.logs.cursor = null; state.logs.isComplete = false; }, - [types.RECEIVE_LOGS_DATA_SUCCESS](state, lines) { - state.logs.lines = lines; + [types.RECEIVE_LOGS_DATA_SUCCESS](state, { logs = [], cursor }) { + state.logs.lines = logs.map(mapLine); state.logs.isLoading = false; - state.logs.isComplete = true; + state.logs.cursor = cursor; + + if (!cursor) { + state.logs.isComplete = true; + } }, [types.RECEIVE_LOGS_DATA_ERROR](state) { state.logs.lines = []; state.logs.isLoading = false; - state.logs.isComplete = true; }, - /** Pods data */ + [types.REQUEST_LOGS_DATA_PREPEND](state) { + state.logs.isLoading = true; + }, + [types.RECEIVE_LOGS_DATA_PREPEND_SUCCESS](state, { logs = [], cursor }) { + const lines = logs.map(mapLine); + state.logs.lines = lines.concat(state.logs.lines); + state.logs.isLoading = false; + state.logs.cursor = cursor; + + if (!cursor) { + state.logs.isComplete = true; + } + }, + [types.RECEIVE_LOGS_DATA_PREPEND_ERROR](state) { + state.logs.isLoading = false; + }, + + // Pods data [types.SET_CURRENT_POD_NAME](state, podName) { state.pods.current = podName; }, diff --git a/app/assets/javascripts/logs/stores/state.js b/app/assets/javascripts/logs/stores/state.js index eaf1b1bdd93..e058f15b6b4 100644 --- a/app/assets/javascripts/logs/stores/state.js +++ b/app/assets/javascripts/logs/stores/state.js @@ -1,4 +1,5 @@ import { timeRanges, defaultTimeRange } from '~/monitoring/constants'; +import { convertToFixedRange } from '~/lib/utils/datetime_range'; export default () => ({ /** @@ -11,7 +12,10 @@ export default () => ({ */ timeRange: { options: timeRanges, - current: defaultTimeRange, + // Selected time range, can be fixed or relative + selected: defaultTimeRange, + // Current time range, must be fixed + current: convertToFixedRange(defaultTimeRange), }, /** @@ -29,7 +33,12 @@ export default () => ({ logs: { lines: [], isLoading: false, - isComplete: true, + /** + * Logs `cursor` represents the current pagination position, + * Should be sent in next batch (page) of logs to be fetched + */ + cursor: null, + isComplete: false, }, /** diff --git a/app/assets/javascripts/logs/utils.js b/app/assets/javascripts/logs/utils.js index 668efee74e8..30213dbc130 100644 --- a/app/assets/javascripts/logs/utils.js +++ b/app/assets/javascripts/logs/utils.js @@ -1,4 +1,7 @@ import { secondsToMilliseconds } from '~/lib/utils/datetime_utility'; +import dateFormat from 'dateformat'; + +const dateFormatMask = 'UTC:mmm dd HH:MM:ss.l"Z"'; /** * Returns a time range (`start`, `end`) where `start` is the @@ -20,4 +23,6 @@ export const getTimeRange = (seconds = 0) => { }; }; +export const formatDate = timestamp => dateFormat(timestamp, dateFormatMask); + export default {}; diff --git a/app/assets/javascripts/pages/admin/sessions/index.js b/app/assets/javascripts/pages/admin/sessions/index.js new file mode 100644 index 00000000000..680ebd19a9f --- /dev/null +++ b/app/assets/javascripts/pages/admin/sessions/index.js @@ -0,0 +1 @@ +import '~/pages/sessions/index'; diff --git a/app/assets/javascripts/releases/components/app_index.vue b/app/assets/javascripts/releases/components/app_index.vue index b9e80899e25..511b3cda9c8 100644 --- a/app/assets/javascripts/releases/components/app_index.vue +++ b/app/assets/javascripts/releases/components/app_index.vue @@ -1,11 +1,12 @@ <script> import { mapState, mapActions } from 'vuex'; -import { GlSkeletonLoading, GlEmptyState } from '@gitlab/ui'; +import { GlSkeletonLoading, GlEmptyState, GlLink } from '@gitlab/ui'; import { getParameterByName, historyPushState, buildUrlWithCurrentLocation, } from '~/lib/utils/common_utils'; +import { __ } from '~/locale'; import TablePagination from '~/vue_shared/components/pagination/table_pagination.vue'; import ReleaseBlock from './release_block.vue'; @@ -16,13 +17,14 @@ export default { GlEmptyState, ReleaseBlock, TablePagination, + GlLink, }, props: { projectId: { type: String, required: true, }, - documentationLink: { + documentationPath: { type: String, required: true, }, @@ -30,6 +32,11 @@ export default { type: String, required: true, }, + newReleasePath: { + type: String, + required: false, + default: '', + }, }, computed: { ...mapState('list', ['isLoading', 'releases', 'hasError', 'pageInfo']), @@ -39,6 +46,11 @@ export default { shouldRenderSuccessState() { return this.releases.length && !this.isLoading && !this.hasError; }, + emptyStateText() { + return __( + "Releases are based on Git tags and mark specific points in a project's development history. They can contain information about the type of changes and can also deliver binaries, like compiled versions of your software.", + ); + }, }, created() { this.fetchReleases({ @@ -56,7 +68,16 @@ export default { }; </script> <template> - <div class="prepend-top-default"> + <div class="flex flex-column mt-2"> + <gl-link + v-if="newReleasePath" + :href="newReleasePath" + :aria-describedby="shouldRenderEmptyState && 'releases-description'" + class="btn btn-success align-self-end mb-2 js-new-release-btn" + > + {{ __('New release') }} + </gl-link> + <gl-skeleton-loading v-if="isLoading" class="js-loading" /> <gl-empty-state @@ -64,14 +85,20 @@ export default { class="js-empty-state" :title="__('Getting started with releases')" :svg-path="illustrationPath" - :description=" - __( - 'Releases are based on Git tags and mark specific points in a project\'s development history. They can contain information about the type of changes and can also deliver binaries, like compiled versions of your software.', - ) - " - :primary-button-link="documentationLink" - :primary-button-text="__('Open Documentation')" - /> + > + <template #description> + <span id="releases-description"> + {{ emptyStateText }} + <gl-link + :href="documentationPath" + :aria-label="__('Releases documentation')" + target="_blank" + > + {{ __('More information') }} + </gl-link> + </span> + </template> + </gl-empty-state> <div v-else-if="shouldRenderSuccessState" class="js-success-state"> <release-block diff --git a/app/assets/javascripts/releases/mount_index.js b/app/assets/javascripts/releases/mount_index.js index ad82d9a65d6..5f0bf3b6459 100644 --- a/app/assets/javascripts/releases/mount_index.js +++ b/app/assets/javascripts/releases/mount_index.js @@ -15,11 +15,7 @@ export default () => { }), render: h => h(ReleaseListApp, { - props: { - projectId: el.dataset.projectId, - documentationLink: el.dataset.documentationPath, - illustrationPath: el.dataset.illustrationPath, - }, + props: el.dataset, }), }); }; diff --git a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue index 9ec99ac93d7..7acbe949151 100644 --- a/app/assets/javascripts/vue_shared/components/changed_file_icon.vue +++ b/app/assets/javascripts/vue_shared/components/changed_file_icon.vue @@ -1,7 +1,7 @@ <script> import { GlTooltipDirective } from '@gitlab/ui'; import Icon from '~/vue_shared/components/icon.vue'; -import { __, sprintf } from '~/locale'; +import { __ } from '~/locale'; import { getCommitIconMap } from '~/ide/utils'; export default { @@ -51,17 +51,7 @@ export default { tooltipTitle() { if (!this.showTooltip || !this.file.changed) return undefined; - const type = this.file.tempFile ? 'addition' : 'modification'; - - if (this.file.staged) { - return sprintf(__('Staged %{type}'), { - type, - }); - } - - return sprintf(__('Unstaged %{type}'), { - type, - }); + return this.file.tempFile ? __('Added') : __('Modified'); }, showIcon() { return ( diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss index d54648cc34b..fd448ee24ed 100644 --- a/app/assets/stylesheets/framework/mixins.scss +++ b/app/assets/stylesheets/framework/mixins.scss @@ -257,7 +257,6 @@ width: 15px; height: 15px; display: $svg-display; - fill: $gl-text-color; top: $svg-top; } diff --git a/app/assets/stylesheets/pages/builds.scss b/app/assets/stylesheets/pages/builds.scss index 59266af96b4..c829695621c 100644 --- a/app/assets/stylesheets/pages/builds.scss +++ b/app/assets/stylesheets/pages/builds.scss @@ -358,17 +358,30 @@ } } -.build-page-pod-logs { +.environment-logs-viewer { .build-trace-container { position: relative; } + .log-lines, + .gl-infinite-scroll-container { + // makes scrollbar visible by creating contrast + background: $black; + } + + .gl-infinite-scroll-legend { + margin: 0; + } + .build-trace { @include build-trace(); + margin: 0; } .top-bar { @include build-trace-top-bar($gl-line-height * 5); + position: relative; + top: 0; .dropdown-menu-toggle { width: 200px; @@ -395,4 +408,9 @@ .build-loader-animation { @include build-loader-animation; } + + .log-footer { + color: $white-normal; + background-color: $gray-900; + } } diff --git a/app/controllers/admin/concerns/authenticates_2fa_for_admin_mode.rb b/app/controllers/admin/concerns/authenticates_2fa_for_admin_mode.rb new file mode 100644 index 00000000000..c6fd1d55e51 --- /dev/null +++ b/app/controllers/admin/concerns/authenticates_2fa_for_admin_mode.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +module Authenticates2FAForAdminMode + extend ActiveSupport::Concern + + included do + include AuthenticatesWithTwoFactor + end + + def admin_mode_prompt_for_two_factor(user) + return handle_locked_user(user) unless user.can?(:log_in) + + session[:otp_user_id] = user.id + setup_u2f_authentication(user) + + render 'admin/sessions/two_factor', layout: 'application' + end + + def admin_mode_authenticate_with_two_factor + user = current_user + + return handle_locked_user(user) unless user.can?(:log_in) + + if user_params[:otp_attempt].present? && session[:otp_user_id] + admin_mode_authenticate_with_two_factor_via_otp(user) + elsif user_params[:device_response].present? && session[:otp_user_id] + admin_mode_authenticate_with_two_factor_via_u2f(user) + elsif user && user.valid_password?(user_params[:password]) + admin_mode_prompt_for_two_factor(user) + else + invalid_login_redirect + end + end + + def admin_mode_authenticate_with_two_factor_via_otp(user) + if valid_otp_attempt?(user) + # Remove any lingering user data from login + session.delete(:otp_user_id) + + user.save! + + # The admin user has successfully passed 2fa, enable admin mode ignoring password + enable_admin_mode + else + user.increment_failed_attempts! + Gitlab::AppLogger.info("Failed Admin Mode Login: user=#{user.username} ip=#{request.remote_ip} method=OTP") + flash.now[:alert] = _('Invalid two-factor code.') + + admin_mode_prompt_for_two_factor(user) + end + end + + def admin_mode_authenticate_with_two_factor_via_u2f(user) + if U2fRegistration.authenticate(user, u2f_app_id, user_params[:device_response], session[:challenge]) + # Remove any lingering user data from login + session.delete(:otp_user_id) + session.delete(:challenge) + + # The admin user has successfully passed 2fa, enable admin mode ignoring password + enable_admin_mode + else + user.increment_failed_attempts! + Gitlab::AppLogger.info("Failed Admin Mode Login: user=#{user.username} ip=#{request.remote_ip} method=U2F") + flash.now[:alert] = _('Authentication via U2F device failed.') + + admin_mode_prompt_for_two_factor(user) + end + end + + private + + def enable_admin_mode + if current_user_mode.enable_admin_mode!(skip_password_validation: true) + redirect_to redirect_path, notice: _('Admin mode enabled') + else + invalid_login_redirect + end + end + + def invalid_login_redirect + flash.now[:alert] = _('Invalid login or password') + render :new + end +end diff --git a/app/controllers/admin/sessions_controller.rb b/app/controllers/admin/sessions_controller.rb index f9587655a8d..841ad46b47e 100644 --- a/app/controllers/admin/sessions_controller.rb +++ b/app/controllers/admin/sessions_controller.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true class Admin::SessionsController < ApplicationController + include Authenticates2FAForAdminMode include InternalRedirect before_action :user_is_admin! @@ -15,7 +16,9 @@ class Admin::SessionsController < ApplicationController end def create - if current_user_mode.enable_admin_mode!(password: params[:password]) + if two_factor_enabled_for_user? + admin_mode_authenticate_with_two_factor + elsif current_user_mode.enable_admin_mode!(password: user_params[:password]) redirect_to redirect_path, notice: _('Admin mode enabled') else flash.now[:alert] = _('Invalid login or password') @@ -37,6 +40,10 @@ class Admin::SessionsController < ApplicationController render_404 unless current_user&.admin? end + def two_factor_enabled_for_user? + current_user&.two_factor_enabled? + end + def redirect_path redirect_to_path = safe_redirect_path(stored_location_for(:redirect)) || safe_redirect_path_for_url(request.referer) @@ -51,4 +58,13 @@ class Admin::SessionsController < ApplicationController def excluded_redirect_paths [new_admin_session_path, admin_session_path] end + + def user_params + params.fetch(:user, {}).permit(:password, :otp_attempt, :device_response) + end + + def valid_otp_attempt?(user) + user.validate_and_consume_otp!(user_params[:otp_attempt]) || + user.invalidate_otp_backup_code!(user_params[:otp_attempt]) + end end diff --git a/app/controllers/concerns/authenticates_with_two_factor.rb b/app/controllers/concerns/authenticates_with_two_factor.rb index 6f0c7abac16..b885e55f902 100644 --- a/app/controllers/concerns/authenticates_with_two_factor.rb +++ b/app/controllers/concerns/authenticates_with_two_factor.rb @@ -3,8 +3,6 @@ # == AuthenticatesWithTwoFactor # # Controller concern to handle two-factor authentication -# -# Upon inclusion, skips `require_no_authentication` on `:create`. module AuthenticatesWithTwoFactor extend ActiveSupport::Concern diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index bc3308fd6c6..d82a46e57ea 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -2,6 +2,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController include AuthenticatesWithTwoFactor + include Authenticates2FAForAdminMode include Devise::Controllers::Rememberable include AuthHelper include InitializesCurrentUserMode @@ -97,7 +98,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController log_audit_event(current_user, with: oauth['provider']) if Feature.enabled?(:user_mode_in_session) - return admin_mode_flow if current_user_mode.admin_mode_requested? + return admin_mode_flow(auth_module::User) if current_user_mode.admin_mode_requested? end identity_linker ||= auth_module::IdentityLinker.new(current_user, oauth, session) @@ -245,13 +246,19 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController end end - def admin_mode_flow - if omniauth_identity_matches_current_user? + def admin_mode_flow(auth_user_class) + auth_user = build_auth_user(auth_user_class) + + return fail_admin_mode_invalid_credentials unless omniauth_identity_matches_current_user? + + if current_user.two_factor_enabled? && !auth_user.bypass_two_factor? + admin_mode_prompt_for_two_factor(current_user) + else + # Can only reach here if the omniauth identity matches current user + # and current_user is an admin that requested admin mode current_user_mode.enable_admin_mode!(skip_password_validation: true) redirect_to stored_location_for(:redirect) || admin_root_path, notice: _('Admin mode enabled') - else - fail_admin_mode_invalid_credentials end end diff --git a/app/controllers/projects/import/jira_controller.rb b/app/controllers/projects/import/jira_controller.rb new file mode 100644 index 00000000000..c74c180fa20 --- /dev/null +++ b/app/controllers/projects/import/jira_controller.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +module Projects + module Import + class JiraController < Projects::ApplicationController + before_action :jira_import_enabled? + before_action :jira_integration_configured? + + def show + unless @project.import_state&.in_progress? + jira_client = @project.jira_service.client + @jira_projects = jira_client.Project.all.map { |p| ["#{p.name} (#{p.key})", p.key] } + end + + flash[:notice] = _("Import %{status}") % { status: @project.import_state.status } if @project.import_state.present? && !@project.import_state.none? + end + + def import + import_state = @project.import_state || @project.create_import_state + + schedule_import(jira_import_params) unless import_state.in_progress? + + redirect_to project_import_jira_path(@project) + end + + private + + def jira_import_enabled? + return if Feature.enabled?(:jira_issue_import, @project) + + redirect_to project_issues_path(@project) + end + + def jira_integration_configured? + return if @project.jira_service + + flash[:notice] = _("Configure the Jira integration first on your project's %{strong_start} Settings > Integrations > Jira%{strong_end} page." % + { strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe }) + redirect_to project_issues_path(@project) + end + + def schedule_import(params) + import_data = @project.create_or_update_import_data(data: {}).becomes(JiraImportData) + + import_data << JiraImportData::JiraProjectDetails.new( + params[:jira_project_key], + Time.now.strftime('%Y-%m-%d %H:%M:%S'), + { user_id: current_user.id, name: current_user.name } + ) + + @project.import_type = 'jira' + @project.import_state.schedule if @project.save + end + + def jira_import_params + params.permit(:jira_project_key) + end + end + end +end diff --git a/app/graphql/mutations/concerns/mutations/resolves_group.rb b/app/graphql/mutations/concerns/mutations/resolves_group.rb index d5a040c84e9..11d7b34217d 100644 --- a/app/graphql/mutations/concerns/mutations/resolves_group.rb +++ b/app/graphql/mutations/concerns/mutations/resolves_group.rb @@ -9,7 +9,7 @@ module Mutations end def group_resolver - Resolvers::GroupResolver.new(object: nil, context: context) + Resolvers::GroupResolver.new(object: nil, context: context, field: nil) end end end diff --git a/app/graphql/mutations/concerns/mutations/resolves_issuable.rb b/app/graphql/mutations/concerns/mutations/resolves_issuable.rb index 4146bf8fdc8..3a4db5ae18d 100644 --- a/app/graphql/mutations/concerns/mutations/resolves_issuable.rb +++ b/app/graphql/mutations/concerns/mutations/resolves_issuable.rb @@ -14,7 +14,7 @@ module Mutations def issuable_resolver(type, parent, context) resolver_class = "Resolvers::#{type.to_s.classify.pluralize}Resolver".constantize - resolver_class.single.new(object: parent, context: context) + resolver_class.single.new(object: parent, context: context, field: nil) end def resolve_issuable_parent(parent_path) diff --git a/app/graphql/mutations/concerns/mutations/resolves_project.rb b/app/graphql/mutations/concerns/mutations/resolves_project.rb index 0e91a25b803..e223e3edd94 100644 --- a/app/graphql/mutations/concerns/mutations/resolves_project.rb +++ b/app/graphql/mutations/concerns/mutations/resolves_project.rb @@ -9,7 +9,7 @@ module Mutations end def project_resolver - Resolvers::ProjectResolver.new(object: nil, context: context) + Resolvers::ProjectResolver.new(object: nil, context: context, field: nil) end end end diff --git a/app/helpers/releases_helper.rb b/app/helpers/releases_helper.rb index c4fe40a0875..6fbef800faa 100644 --- a/app/helpers/releases_helper.rb +++ b/app/helpers/releases_helper.rb @@ -17,7 +17,9 @@ module ReleasesHelper project_id: @project.id, illustration_path: illustration, documentation_path: help_page - } + }.tap do |data| + data[:new_release_path] = new_project_tag_path(@project) if can?(current_user, :create_release, @project) + end end def data_for_edit_release_page diff --git a/app/models/concerns/bulk_insert_safe.rb b/app/models/concerns/bulk_insert_safe.rb index d8587ea78ec..a4814fc0d48 100644 --- a/app/models/concerns/bulk_insert_safe.rb +++ b/app/models/concerns/bulk_insert_safe.rb @@ -100,7 +100,13 @@ module BulkInsertSafe def _bulk_insert_item_attributes(items, validate_items) items.map do |item| item.validate! if validate_items - attributes = item.attributes + + attributes = {} + column_names.each do |name| + value = item.read_attribute(name) + value = item.type_for_attribute(name).serialize(value) # rubocop:disable Cop/ActiveRecordSerialize + attributes[name] = value + end _bulk_insert_reject_primary_key!(attributes, item.class.primary_key) diff --git a/app/models/jira_import_data.rb b/app/models/jira_import_data.rb new file mode 100644 index 00000000000..3f882deb24d --- /dev/null +++ b/app/models/jira_import_data.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class JiraImportData < ProjectImportData + JiraProjectDetails = Struct.new(:key, :scheduled_at, :scheduled_by) + + def projects + return [] unless data + + projects = data.dig('jira', 'projects').map do |p| + JiraProjectDetails.new(p['key'], p['scheduled_at'], p['scheduled_by']) + end + projects.sort_by { |jp| jp.scheduled_at } + end + + def <<(project) + self.data ||= { jira: { projects: [] } } + self.data['jira']['projects'] << project.to_h.deep_stringify_keys! + end +end diff --git a/app/views/admin/sessions/_new_base.html.haml b/app/views/admin/sessions/_new_base.html.haml index 50fa48855c0..a8d678d2b61 100644 --- a/app/views/admin/sessions/_new_base.html.haml +++ b/app/views/admin/sessions/_new_base.html.haml @@ -1,7 +1,7 @@ = form_tag(admin_session_path, method: :post, html: { class: 'new_user gl-show-field-errors', 'aria-live': 'assertive'}) do .form-group - = label_tag :password, _('Password'), class: 'label-bold' - = password_field_tag :password, nil, class: 'form-control', required: true, title: _('This field is required.'), data: { qa_selector: 'password_field' } + = label_tag :user_password, _('Password'), class: 'label-bold' + = password_field_tag 'user[password]', nil, class: 'form-control', required: true, title: _('This field is required.'), data: { qa_selector: 'password_field' } .submit-container.move-submit-down = submit_tag _('Enter Admin Mode'), class: 'btn btn-success', data: { qa_selector: 'enter_admin_mode_button' } diff --git a/app/views/admin/sessions/_tabs_normal.html.haml b/app/views/admin/sessions/_tabs_normal.html.haml index 20830051d31..2e279013720 100644 --- a/app/views/admin/sessions/_tabs_normal.html.haml +++ b/app/views/admin/sessions/_tabs_normal.html.haml @@ -1,3 +1,3 @@ %ul.nav-links.new-session-tabs.nav-tabs.nav{ role: 'tablist' } %li.nav-item{ role: 'presentation' } - %a.nav-link.active{ href: '#login-pane', data: { toggle: 'tab', qa_selector: 'sign_in_tab' }, role: 'tab' }= _('Enter Admin Mode') + %a.nav-link.active{ href: '#login-pane', data: { toggle: 'tab', qa_selector: 'sign_in_tab' }, role: 'tab' }= tab_title diff --git a/app/views/admin/sessions/_two_factor_otp.html.haml b/app/views/admin/sessions/_two_factor_otp.html.haml new file mode 100644 index 00000000000..9d4acbf1b99 --- /dev/null +++ b/app/views/admin/sessions/_two_factor_otp.html.haml @@ -0,0 +1,9 @@ += form_tag(admin_session_path, { method: :post, class: "edit_user gl-show-field-errors js-2fa-form #{'hidden' if current_user.two_factor_u2f_enabled?}" }) do + .form-group + = label_tag :user_otp_attempt, _('Two-Factor Authentication code') + = text_field_tag 'user[otp_attempt]', nil, class: 'form-control', required: true, autofocus: true, autocomplete: 'off', title: _('This field is required.') + %p.form-text.text-muted.hint + = _("Enter the code from the two-factor app on your mobile device. If you've lost your device, you may enter one of your recovery codes.") + + .submit-container.move-submit-down + = submit_tag 'Verify code', class: 'btn btn-success' diff --git a/app/views/admin/sessions/_two_factor_u2f.html.haml b/app/views/admin/sessions/_two_factor_u2f.html.haml new file mode 100644 index 00000000000..09b91d76295 --- /dev/null +++ b/app/views/admin/sessions/_two_factor_u2f.html.haml @@ -0,0 +1,17 @@ +#js-authenticate-u2f +%a.btn.btn-block.btn-info#js-login-2fa-device{ href: '#' }= _("Sign in via 2FA code") + +%script#js-authenticate-u2f-in-progress{ type: "text/template" } + %p= _("Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now.") + +-# haml-lint:disable NoPlainNodes +%script#js-authenticate-u2f-error{ type: "text/template" } + %div + %p <%= error_message %> (#{_("error code:")} <%= error_code %>) + %a.btn.btn-block.btn-warning#js-u2f-try-again= _("Try again?") + +%script#js-authenticate-u2f-authenticated{ type: "text/template" } + %div + %p= _("We heard back from your U2F device. You have been authenticated.") + = form_tag(admin_session_path, method: :post, id: 'js-login-u2f-form') do |f| + = hidden_field_tag 'user[device_response]', nil, class: 'form-control', required: true, id: "js-device-response" diff --git a/app/views/admin/sessions/new.html.haml b/app/views/admin/sessions/new.html.haml index a1d440f2cfd..0a7f20b861e 100644 --- a/app/views/admin/sessions/new.html.haml +++ b/app/views/admin/sessions/new.html.haml @@ -2,10 +2,10 @@ - page_title _('Enter Admin Mode') .row.justify-content-center - .col-6.new-session-forms-container + .col-md-5.new-session-forms-container .login-page #signin-container - = render 'admin/sessions/tabs_normal' + = render 'admin/sessions/tabs_normal', tab_title: _('Enter Admin Mode') .tab-content - if !current_user.require_password_creation_for_web? .login-box.tab-pane.active{ id: 'login-pane', role: 'tabpanel' } @@ -14,7 +14,7 @@ - if omniauth_enabled? && button_based_providers_enabled? .clearfix - = render 'devise/shared/omniauth_box' + = render 'devise/shared/omniauth_box', hide_remember_me: true -# Show a message if none of the mechanisms above are enabled - if current_user.require_password_creation_for_web? && !omniauth_enabled? diff --git a/app/views/admin/sessions/two_factor.html.haml b/app/views/admin/sessions/two_factor.html.haml new file mode 100644 index 00000000000..3a0cbe3facb --- /dev/null +++ b/app/views/admin/sessions/two_factor.html.haml @@ -0,0 +1,15 @@ +- @hide_breadcrumbs = true +- page_title _('Enter 2FA for Admin Mode') + +.row.justify-content-center + .col-md-5.new-session-forms-container + .login-page + #signin-container + = render 'admin/sessions/tabs_normal', tab_title: _('Enter Admin Mode') + .tab-content + .login-box.tab-pane.active{ id: 'login-pane', role: 'tabpanel' } + .login-body + - if current_user.two_factor_otp_enabled? + = render 'admin/sessions/two_factor_otp' + - if current_user.two_factor_u2f_enabled? + = render 'admin/sessions/two_factor_u2f' diff --git a/app/views/devise/shared/_omniauth_box.html.haml b/app/views/devise/shared/_omniauth_box.html.haml index 1b583ea85d6..cca0f756e76 100644 --- a/app/views/devise/shared/_omniauth_box.html.haml +++ b/app/views/devise/shared/_omniauth_box.html.haml @@ -10,8 +10,9 @@ = provider_image_tag(provider) %span = label_for_provider(provider) - %fieldset.remember-me - %label - = check_box_tag :remember_me, nil, false, class: 'remember-me-checkbox' - %span - Remember me + - unless defined?(hide_remember_me) && hide_remember_me + %fieldset.remember-me + %label + = check_box_tag :remember_me, nil, false, class: 'remember-me-checkbox' + %span + Remember me diff --git a/app/views/projects/import/jira/show.html.haml b/app/views/projects/import/jira/show.html.haml new file mode 100644 index 00000000000..f295a241113 --- /dev/null +++ b/app/views/projects/import/jira/show.html.haml @@ -0,0 +1,24 @@ +- title = _('Jira Issue Import') +- page_title title +- breadcrumb_title title +- header_title _("Projects"), root_path + += render 'import/shared/errors' + +- if @project.import_state&.in_progress? + %h3.page-title.d-flex.align-items-center + = sprite_icon('issues', size: 16, css_class: 'mr-1') + = _('Import in progress') +- else + %h3.page-title.d-flex.align-items-center + = sprite_icon('issues', size: 16, css_class: 'mr-1') + = _('Import issues from Jira') + + = form_tag import_project_import_jira_path(@project), method: :post do + .form-group.row + = label_tag :jira_project_key, _('From project'), class: 'col-form-label col-md-2' + .col-md-4 + = select_tag :jira_project_key, options_for_select(@jira_projects, ''), { class: 'select2' } + .form-actions + = submit_tag _('Import issues'), class: 'btn btn-success' + = link_to _('Cancel'), project_issues_path(@project), class: 'btn btn-cancel' diff --git a/app/views/projects/issues/import_csv/_button.html.haml b/app/views/projects/issues/import_csv/_button.html.haml index fe89d2fb748..78c561e81ef 100644 --- a/app/views/projects/issues/import_csv/_button.html.haml +++ b/app/views/projects/issues/import_csv/_button.html.haml @@ -7,3 +7,5 @@ - else = _('Import CSV') +- if Feature.enabled?(:jira_issue_import, @project) + = link_to _("Import Jira issues"), project_import_jira_path(@project), class: "btn btn-default" diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml index a7f739ab13d..1b3b0972744 100644 --- a/app/views/projects/tags/new.html.haml +++ b/app/views/projects/tags/new.html.haml @@ -36,11 +36,19 @@ .form-group.row = label_tag :release_description, s_('TagsPage|Release notes'), class: 'col-form-label col-sm-2' .col-sm-10 + .form-text.mb-3 + - link_start = '<a href="%{url}" rel="noopener noreferrer" target="_blank">'.html_safe + - releases_page_path = project_releases_path(@project) + - releases_page_link_start = link_start % { url: releases_page_path } + - docs_url = help_page_path('user/project/releases/index.md', anchor: 'creating-a-release') + - docs_link_start = link_start % { url: docs_url } + - link_end = '</a>'.html_safe + - replacements = { releases_page_link_start: releases_page_link_start, docs_link_start: docs_link_start, link_end: link_end } + = s_('TagsPage|Optionally, create a public Release of your project, based on this tag. Release notes are displayed on the %{releases_page_link_start}Releases%{link_end} page. %{docs_link_start}More information%{link_end}').html_safe % replacements + = render layout: 'projects/md_preview', locals: { url: preview_markdown_path(@project), referenced_users: true } do = render 'projects/zen', attr: :release_description, classes: 'note-textarea', placeholder: s_('TagsPage|Write your release notes or drag files here…'), current_text: @release_description = render 'shared/notes/hints' - .form-text.text-muted - = s_('TagsPage|Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page.') .form-actions = button_tag s_('TagsPage|Create tag'), class: 'btn btn-success' = link_to s_('TagsPage|Cancel'), project_tags_path(@project), class: 'btn btn-cancel' diff --git a/app/views/u2f/_authenticate.html.haml b/app/views/u2f/_authenticate.html.haml index 979f6862de3..51018428b1b 100644 --- a/app/views/u2f/_authenticate.html.haml +++ b/app/views/u2f/_authenticate.html.haml @@ -1,7 +1,6 @@ #js-authenticate-u2f %a.btn.btn-block.btn-info#js-login-2fa-device{ href: '#' }= _("Sign in via 2FA code") --# haml-lint:disable InlineJavaScript %script#js-authenticate-u2f-in-progress{ type: "text/template" } %p= _("Trying to communicate with your device. Plug it in (if you haven't already) and press the button on the device now.") diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index 545e8886d61..49dcc441780 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -856,7 +856,7 @@ :urgency: :high :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: true - :name: background_migration :feature_category: :not_owned :has_external_dependencies: diff --git a/app/workers/authorized_projects_worker.rb b/app/workers/authorized_projects_worker.rb index 17537cdaa26..a35e0320553 100644 --- a/app/workers/authorized_projects_worker.rb +++ b/app/workers/authorized_projects_worker.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class AuthorizedProjectsWorker # rubocop:disable Scalability/IdempotentWorker +class AuthorizedProjectsWorker include ApplicationWorker prepend WaitableWorker @@ -8,6 +8,8 @@ class AuthorizedProjectsWorker # rubocop:disable Scalability/IdempotentWorker urgency :high weight 2 + idempotent! + # This is a workaround for a Ruby 2.3.7 bug. rspec-mocks cannot restore the # visibility of prepended modules. See https://github.com/rspec/rspec-mocks/issues/1231 # for more details. diff --git a/changelogs/unreleased/196609-remove-staging.yml b/changelogs/unreleased/196609-remove-staging.yml new file mode 100644 index 00000000000..fc60091ba4d --- /dev/null +++ b/changelogs/unreleased/196609-remove-staging.yml @@ -0,0 +1,5 @@ +--- +title: Remove staging from commit workflow in the Web IDE +merge_request: 26151 +author: +type: removed diff --git a/changelogs/unreleased/198050-frontend-pagination-in-log-explorer.yml b/changelogs/unreleased/198050-frontend-pagination-in-log-explorer.yml new file mode 100644 index 00000000000..a8c8466a613 --- /dev/null +++ b/changelogs/unreleased/198050-frontend-pagination-in-log-explorer.yml @@ -0,0 +1,5 @@ +--- +title: More logs entries are loaded when logs are scrolled to the top +merge_request: 26254 +author: +type: added diff --git a/changelogs/unreleased/208890-optimize-notes-counters.yml b/changelogs/unreleased/208890-optimize-notes-counters.yml new file mode 100644 index 00000000000..ac1c1359ddf --- /dev/null +++ b/changelogs/unreleased/208890-optimize-notes-counters.yml @@ -0,0 +1,5 @@ +--- +title: Optimize notes counters in usage data +merge_request: 26871 +author: +type: performance diff --git a/changelogs/unreleased/55487-backfill-lfs-objects-projects.yml b/changelogs/unreleased/55487-backfill-lfs-objects-projects.yml new file mode 100644 index 00000000000..fc892457c9e --- /dev/null +++ b/changelogs/unreleased/55487-backfill-lfs-objects-projects.yml @@ -0,0 +1,5 @@ +--- +title: Backfill LfsObjectsProject records of forks +merge_request: 26964 +author: +type: other diff --git a/changelogs/unreleased/feat-2fa-for-admin-mode.yml b/changelogs/unreleased/feat-2fa-for-admin-mode.yml new file mode 100644 index 00000000000..c95f80da045 --- /dev/null +++ b/changelogs/unreleased/feat-2fa-for-admin-mode.yml @@ -0,0 +1,5 @@ +--- +title: Add 2FA support to admin mode feature +merge_request: 22281 +author: Diego Louzán +type: added diff --git a/changelogs/unreleased/nfriend-create-release-through-ui.yml b/changelogs/unreleased/nfriend-create-release-through-ui.yml new file mode 100644 index 00000000000..230bc3b31a7 --- /dev/null +++ b/changelogs/unreleased/nfriend-create-release-through-ui.yml @@ -0,0 +1,5 @@ +--- +title: Add "New release" button to Releases page +merge_request: 24516 +author: +type: added diff --git a/changelogs/unreleased/update-ruby-version-on-official-ci-templates.yml b/changelogs/unreleased/update-ruby-version-on-official-ci-templates.yml new file mode 100644 index 00000000000..73e98808301 --- /dev/null +++ b/changelogs/unreleased/update-ruby-version-on-official-ci-templates.yml @@ -0,0 +1,5 @@ +--- +title: Update Ruby version in official CI templates +merge_request: 23585 +author: Takuya Noguchi +type: other diff --git a/config/routes/project.rb b/config/routes/project.rb index 23a13202cd7..c37b5528f71 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -295,6 +295,12 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do draw :repository_scoped draw :repository draw :wiki + + namespace :import do + resource :jira, only: [:show], controller: :jira do + post :import + end + end end # End of the /-/ scope. diff --git a/db/migrate/20200310133822_add_index_on_author_id_and_id_and_created_at_to_notes.rb b/db/migrate/20200310133822_add_index_on_author_id_and_id_and_created_at_to_notes.rb new file mode 100644 index 00000000000..8005da5fbae --- /dev/null +++ b/db/migrate/20200310133822_add_index_on_author_id_and_id_and_created_at_to_notes.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class AddIndexOnAuthorIdAndIdAndCreatedAtToNotes < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index :notes, [:author_id, :created_at] + remove_concurrent_index :notes, [:author_id] + end + + def down + add_concurrent_index :notes, [:author_id] + remove_concurrent_index :notes, [:author_id, :created_at] + end +end diff --git a/db/post_migrate/20200310075115_schedule_link_lfs_objects_projects.rb b/db/post_migrate/20200310075115_schedule_link_lfs_objects_projects.rb new file mode 100644 index 00000000000..d1ed53d8e70 --- /dev/null +++ b/db/post_migrate/20200310075115_schedule_link_lfs_objects_projects.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class ScheduleLinkLfsObjectsProjects < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + MIGRATION = 'LinkLfsObjectsProjects' + BATCH_SIZE = 1000 + + disable_ddl_transaction! + + def up + lfs_objects_projects = Gitlab::BackgroundMigration::LinkLfsObjectsProjects::LfsObjectsProject.linkable + + queue_background_migration_jobs_by_range_at_intervals( + lfs_objects_projects, + MIGRATION, + BackgroundMigrationWorker.minimum_interval, + batch_size: BATCH_SIZE + ) + end + + def down + # No-op. No need to make this reversible. In case the jobs enqueued runs and + # fails at some point, some records will be created. When rescheduled, those + # records won't be re-created. It's also hard to track which records to clean + # up if ever. + end +end diff --git a/db/schema.rb b/db/schema.rb index ca12b77bd2e..0b261a2461d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2829,7 +2829,7 @@ ActiveRecord::Schema.define(version: 2020_03_11_165635) do t.boolean "resolved_by_push" t.bigint "review_id" t.boolean "confidential" - t.index ["author_id"], name: "index_notes_on_author_id" + t.index ["author_id", "created_at"], name: "index_notes_on_author_id_and_created_at" t.index ["commit_id"], name: "index_notes_on_commit_id" t.index ["created_at"], name: "index_notes_on_created_at" t.index ["discussion_id"], name: "index_notes_on_discussion_id" diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json index 81452c49398..829fa5ab0df 100644 --- a/doc/api/graphql/reference/gitlab_schema.json +++ b/doc/api/graphql/reference/gitlab_schema.json @@ -10,70 +10,100 @@ "subscriptionType": null, "types": [ { - "kind": "SCALAR", - "name": "Boolean", - "description": "Represents `true` or `false` values.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "String", - "description": "Represents textual data as UTF-8 character sequences. This type is most often used by GraphQL to represent free-form human-readable text.", + "kind": "INPUT_OBJECT", + "name": "AddAwardEmojiInput", + "description": "Autogenerated input type of AddAwardEmoji", "fields": null, - "inputFields": null, + "inputFields": [ + { + "name": "awardableId", + "description": "The global id of the awardable resource", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "name", + "description": "The emoji name", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "Query", - "description": null, + "name": "AddAwardEmojiPayload", + "description": "Autogenerated return type of AddAwardEmoji", "fields": [ { - "name": "currentUser", - "description": "Get information about current user", + "name": "awardEmoji", + "description": "The award emoji after mutation", "args": [ ], "type": { "kind": "OBJECT", - "name": "User", + "name": "AwardEmoji", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "designManagement", - "description": "Fields related to design management", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DesignManagement", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "echo", - "description": "Text to echo back", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ - { - "name": "text", - "description": "Text to echo back", - "type": { + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { "kind": "NON_NULL", "name": null, "ofType": { @@ -81,10 +111,79 @@ "name": "String", "ofType": null } - }, - "defaultValue": null + } } - ], + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "AdminSidekiqQueuesDeleteJobsInput", + "description": "Autogenerated input type of AdminSidekiqQueuesDeleteJobs", + "fields": null, + "inputFields": [ + { + "name": "user", + "description": "Delete jobs matching user in the context metadata", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "project", + "description": "Delete jobs matching project in the context metadata", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "rootNamespace", + "description": "Delete jobs matching root_namespace in the context metadata", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "subscriptionPlan", + "description": "Delete jobs matching subscription_plan in the context metadata", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "callerId", + "description": "Delete jobs matching caller_id in the context metadata", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "queueName", + "description": "The name of the queue to delete jobs from", "type": { "kind": "NON_NULL", "name": null, @@ -94,220 +193,77 @@ "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "group", - "description": "Find a group", - "args": [ - { - "name": "fullPath", - "description": "The full path of the project, group or namespace, e.g., \"gitlab-org/gitlab-foss\"", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { - "kind": "OBJECT", - "name": "Group", + "kind": "SCALAR", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AdminSidekiqQueuesDeleteJobsPayload", + "description": "Autogenerated return type of AdminSidekiqQueuesDeleteJobs", + "fields": [ { - "name": "metadata", - "description": "Metadata about GitLab", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Metadata", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "namespace", - "description": "Find a namespace", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ - { - "name": "fullPath", - "description": "The full path of the project, group or namespace, e.g., \"gitlab-org/gitlab-foss\"", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "Namespace", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "project", - "description": "Find a project", - "args": [ - { - "name": "fullPath", - "description": "The full path of the project, group or namespace, e.g., \"gitlab-org/gitlab-foss\"", - "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } - }, - "defaultValue": null + } } - ], - "type": { - "kind": "OBJECT", - "name": "Project", - "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "snippets", - "description": "Find Snippets visible to the current user", + "name": "result", + "description": "Information about the status of the deletion request", "args": [ - { - "name": "ids", - "description": "Array of global snippet ids, e.g., \"gid://gitlab/ProjectSnippet/1\"", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "visibility", - "description": "The visibility of the snippet", - "type": { - "kind": "ENUM", - "name": "VisibilityScopesEnum", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "authorId", - "description": "The ID of an author", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "projectId", - "description": "The ID of a project", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "type", - "description": "The type of snippet", - "type": { - "kind": "ENUM", - "name": "TypeEnum", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "explore", - "description": "Explore personal snippets", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "OBJECT", - "name": "SnippetConnection", + "name": "DeleteJobsResponse", "ofType": null }, "isDeprecated": false, @@ -323,182 +279,169 @@ }, { "kind": "OBJECT", - "name": "Project", - "description": null, + "name": "AwardEmoji", + "description": "An emoji awarded by a user.", "fields": [ { - "name": "archived", - "description": "Indicates the archived status of the project", + "name": "description", + "description": "The emoji description", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "autocloseReferencedIssues", - "description": "Indicates if issues referenced by merge requests and commits within the default branch are closed automatically", + "name": "emoji", + "description": "The emoji as an icon", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "avatarUrl", - "description": "URL to avatar image file of the project", + "name": "name", + "description": "The emoji name", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "board", - "description": "A single board of the project", + "name": "unicode", + "description": "The emoji in unicode", "args": [ - { - "name": "id", - "description": "Find a board by its ID", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "Board", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "boards", - "description": "Boards of the project", + "name": "unicodeVersion", + "description": "The unicode version for this emoji", "args": [ - { - "name": "id", - "description": "Find a board by its ID", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "BoardConnection", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "containerRegistryEnabled", - "description": "Indicates if the project stores Docker container images in a container registry", + "name": "user", + "description": "The user who awarded the emoji", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "User", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Blob", + "description": null, + "fields": [ { - "name": "createdAt", - "description": "Timestamp of the project creation", + "name": "flatPath", + "description": "Flat path of the entry", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "description", - "description": "Short description of the project", + "name": "id", + "description": "ID of the entry", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "descriptionHtml", - "description": "The GitLab Flavored Markdown rendering of `description`", + "name": "lfsOid", + "description": "LFS ID of the blob", "args": [ ], @@ -511,81 +454,26 @@ "deprecationReason": null }, { - "name": "environments", - "description": "Environments of the project", + "name": "name", + "description": "Name of the entry", "args": [ - { - "name": "name", - "description": "Name of the environment", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "search", - "description": "Search query", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "EnvironmentConnection", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "forksCount", - "description": "Number of times the project has been forked", + "name": "path", + "description": "Path of the entry", "args": [ ], @@ -594,7 +482,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -602,8 +490,8 @@ "deprecationReason": null }, { - "name": "fullPath", - "description": "Full path of the project", + "name": "sha", + "description": "Last commit sha for the entry", "args": [ ], @@ -612,7 +500,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, @@ -620,59 +508,84 @@ "deprecationReason": null }, { - "name": "grafanaIntegration", - "description": "Grafana integration details for the project", + "name": "type", + "description": "Type of tree entry", "args": [ ], "type": { - "kind": "OBJECT", - "name": "GrafanaIntegration", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "EntryType", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "group", - "description": "Group of the project", + "name": "webUrl", + "description": "Web URL of the blob", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Group", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ { - "name": "httpUrlToRepo", - "description": "URL to connect to the project via HTTPS", + "kind": "INTERFACE", + "name": "Entry", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BlobConnection", + "description": "The connection type for Blob.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BlobEdge", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "id", - "description": "ID of the project", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "Blob", "ofType": null } }, @@ -680,626 +593,239 @@ "deprecationReason": null }, { - "name": "importStatus", - "description": "Status of project import background job of the project", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BlobEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "issue", - "description": "A single issue of the project", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ - { - "name": "iid", - "description": "IID of the issue. For example, \"1\"", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "iids", - "description": "List of IIDs of issues. For example, [1, 2]", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "Current state of this issue", - "type": { - "kind": "ENUM", - "name": "IssuableState", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "labelName", - "description": "Labels applied to this issue", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "milestoneTitle", - "description": "Milestones applied to this issue", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "assigneeUsername", - "description": "Username of a user assigned to the issues", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "assigneeId", - "description": "ID of a user assigned to the issues, \"none\" and \"any\" values supported", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "createdBefore", - "description": "Issues created before this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "createdAfter", - "description": "Issues created after this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "updatedBefore", - "description": "Issues updated before this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "updatedAfter", - "description": "Issues updated after this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "closedBefore", - "description": "Issues closed before this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "closedAfter", - "description": "Issues closed after this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "search", - "description": "Search query for finding issues by title or description", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sort", - "description": "Sort issues by this criteria", - "type": { - "kind": "ENUM", - "name": "IssueSort", - "ofType": null - }, - "defaultValue": "created_desc" - } + ], "type": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issues", - "description": "Issues of the project", + "name": "node", + "description": "The item at the end of the edge.", "args": [ - { - "name": "iid", - "description": "IID of the issue. For example, \"1\"", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "iids", - "description": "List of IIDs of issues. For example, [1, 2]", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "Current state of this issue", - "type": { - "kind": "ENUM", - "name": "IssuableState", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "labelName", - "description": "Labels applied to this issue", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "milestoneTitle", - "description": "Milestones applied to this issue", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "assigneeUsername", - "description": "Username of a user assigned to the issues", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "assigneeId", - "description": "ID of a user assigned to the issues, \"none\" and \"any\" values supported", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "createdBefore", - "description": "Issues created before this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "createdAfter", - "description": "Issues created after this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "updatedBefore", - "description": "Issues updated before this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "updatedAfter", - "description": "Issues updated after this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "closedBefore", - "description": "Issues closed before this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "closedAfter", - "description": "Issues closed after this date", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "search", - "description": "Search query for finding issues by title or description", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sort", - "description": "Sort issues by this criteria", - "type": { - "kind": "ENUM", - "name": "IssueSort", - "ofType": null - }, - "defaultValue": "created_desc" - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "OBJECT", - "name": "IssueConnection", + "name": "Blob", "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "issuesEnabled", - "description": "(deprecated) Does this project have issues enabled?. Use `issues_access_level` instead", - "args": [ + } + ], + "inputFields": null, + "interfaces": [ - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "BlobViewersType", + "description": "Types of blob viewers", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "rich", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "jobsEnabled", - "description": "(deprecated) Enable jobs for this project. Use `builds_access_level` instead", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, + "name": "simple", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "lastActivityAt", - "description": "Timestamp of the project last activity", + "name": "auxiliary", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Board", + "description": "Represents a project or group board", + "fields": [ + { + "name": "id", + "description": "ID (global ID) of the board", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "lfsEnabled", - "description": "Indicates if the project has Large File Storage (LFS) enabled", + "name": "name", + "description": "Name of the board", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequest", - "description": "A single merge request of the project", + "name": "weight", + "description": "Weight of the board", "args": [ - { - "name": "iid", - "description": "The IID of the merge request, e.g., \"1\"", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "iids", - "description": "The list of IIDs of issues, e.g., [1, 2]", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequest", + "kind": "SCALAR", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BoardConnection", + "description": "The connection type for Board.", + "fields": [ { - "name": "mergeRequests", - "description": "Merge requests of the project", + "name": "edges", + "description": "A list of edges.", "args": [ - { - "name": "iid", - "description": "The IID of the merge request, e.g., \"1\"", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "iids", - "description": "The list of IIDs of issues, e.g., [1, 2]", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequestConnection", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BoardEdge", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequestsEnabled", - "description": "(deprecated) Does this project have merge_requests enabled?. Use `merge_requests_access_level` instead", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Board", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequestsFfOnlyEnabled", - "description": "Indicates if no merge commits should be created and all merges should instead be fast-forwarded, which means that merging is only allowed if the branch could be fast-forwarded.", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "BoardEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "name", - "description": "Name of the project (without namespace)", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -1316,82 +842,115 @@ "deprecationReason": null }, { - "name": "nameWithNamespace", - "description": "Full name of the project with its namespace", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "Board", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "Boolean", + "description": "Represents `true` or `false` values.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Commit", + "description": null, + "fields": [ { - "name": "namespace", - "description": "Namespace of the project", + "name": "author", + "description": "Author of the commit", "args": [ ], "type": { "kind": "OBJECT", - "name": "Namespace", + "name": "User", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "onlyAllowMergeIfAllDiscussionsAreResolved", - "description": "Indicates if merge requests of the project can only be merged when all the discussions are resolved", + "name": "authorGravatar", + "description": "Commit authors gravatar", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "onlyAllowMergeIfPipelineSucceeds", - "description": "Indicates if merge requests of the project can only be merged with successful jobs", + "name": "authorName", + "description": "Commit authors name", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "openIssuesCount", - "description": "Number of open issues for the project", + "name": "authoredDate", + "description": "Timestamp of when the commit was authored", "args": [ ], "type": { "kind": "SCALAR", - "name": "Int", + "name": "Time", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "path", - "description": "Path of the project", + "name": "description", + "description": "Description of the commit message", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ID (global ID) of the commit", "args": [ ], @@ -1400,7 +959,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, @@ -1408,8 +967,65 @@ "deprecationReason": null }, { + "name": "latestPipeline", + "description": "Latest pipeline of the commit", + "args": [ + { + "name": "status", + "description": "Filter pipelines by their status", + "type": { + "kind": "ENUM", + "name": "PipelineStatusEnum", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "ref", + "description": "Filter pipelines by the ref they are run for", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sha", + "description": "Filter pipelines by the sha of the commit they are run for", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Pipeline", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Use pipelines" + }, + { + "name": "message", + "description": "Raw commit message", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "pipelines", - "description": "Build pipelines of the project", + "description": "Pipelines of the commit ordered latest first", "args": [ { "name": "status", @@ -1491,302 +1107,346 @@ "deprecationReason": null }, { - "name": "printingMergeRequestLinkEnabled", - "description": "Indicates if a link to create or view a merge request should display after a push to Git repositories of the project from the command line", + "name": "sha", + "description": "SHA1 ID of the commit", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "publicJobs", - "description": "Indicates if there is public access to pipelines and job details of the project, including output logs and artifacts", + "name": "signatureHtml", + "description": "Rendered HTML of the commit signature", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "removeSourceBranchAfterMerge", - "description": "Indicates if `Delete source branch` option should be enabled by default for all new merge requests of the project", + "name": "title", + "description": "Title of the commit message", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "repository", - "description": "Git repository of the project", + "name": "webUrl", + "description": "Web URL of the commit", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Repository", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CreateDiffNoteInput", + "description": "Autogenerated input type of CreateDiffNote", + "fields": null, + "inputFields": [ + { + "name": "noteableId", + "description": "The global id of the resource to add a note to", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null }, { - "name": "requestAccessEnabled", - "description": "Indicates if users can request member access to the project", + "name": "body", + "description": "Content of the note", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "position", + "description": "The position of this note on a diff", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DiffPositionInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CreateDiffNotePayload", + "description": "Autogenerated return type of CreateDiffNote", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "sentryDetailedError", - "description": "Detailed version of a Sentry error on the project", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ - { - "name": "id", - "description": "ID of the Sentry issue", - "type": { + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } - }, - "defaultValue": null + } } - ], - "type": { - "kind": "OBJECT", - "name": "SentryDetailedError", - "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "sentryErrors", - "description": "Paginated collection of Sentry errors on the project", + "name": "note", + "description": "The note after mutation", "args": [ ], "type": { "kind": "OBJECT", - "name": "SentryErrorCollection", + "name": "Note", "ofType": null }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CreateEpicInput", + "description": "Autogenerated input type of CreateEpic", + "fields": null, + "inputFields": [ + { + "name": "groupPath", + "description": "The group the epic to mutate is in", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null }, { - "name": "serviceDeskAddress", - "description": "E-mail address of the service desk.", - "args": [ - - ], + "name": "title", + "description": "The title of the epic", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "serviceDeskEnabled", - "description": "Indicates if the project has service desk enabled.", - "args": [ - - ], + "name": "description", + "description": "The description of the epic", "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "sharedRunnersEnabled", - "description": "Indicates if shared runners are enabled on the project", - "args": [ - - ], + "name": "startDateFixed", + "description": "The start date of the epic", "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "snippets", - "description": "Snippets of the project", - "args": [ - { - "name": "ids", - "description": "Array of global snippet ids, e.g., \"gid://gitlab/ProjectSnippet/1\"", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "visibility", - "description": "The visibility of the snippet", - "type": { - "kind": "ENUM", - "name": "VisibilityScopesEnum", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], + "name": "dueDateFixed", + "description": "The end date of the epic", "type": { - "kind": "OBJECT", - "name": "SnippetConnection", + "kind": "SCALAR", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "snippetsEnabled", - "description": "(deprecated) Does this project have snippets enabled?. Use `snippets_access_level` instead", - "args": [ - - ], + "name": "startDateIsFixed", + "description": "Indicates start date should be sourced from start_date_fixed field not the issue milestones", "type": { "kind": "SCALAR", "name": "Boolean", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "sshUrlToRepo", - "description": "URL to connect to the project via SSH", - "args": [ - - ], + "name": "dueDateIsFixed", + "description": "Indicates end date should be sourced from due_date_fixed field not the issue milestones", "type": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "starCount", - "description": "Number of times the project has been starred", - "args": [ - - ], + "name": "addLabelIds", + "description": "The IDs of labels to be added to the epic.", "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "statistics", - "description": "Statistics of the project", - "args": [ - - ], + "name": "removeLabelIds", + "description": "The IDs of labels to be removed from the epic.", "type": { - "kind": "OBJECT", - "name": "ProjectStatistics", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "suggestionCommitMessage", - "description": "The commit message used to apply merge request suggestions", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CreateEpicPayload", + "description": "Autogenerated return type of CreateEpic", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], @@ -1799,22 +1459,22 @@ "deprecationReason": null }, { - "name": "tagList", - "description": "List of project tags", + "name": "epic", + "description": "The created epic", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Epic", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -1822,17 +1482,101 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "ProjectPermissions", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CreateImageDiffNoteInput", + "description": "Autogenerated input type of CreateImageDiffNote", + "fields": null, + "inputFields": [ + { + "name": "noteableId", + "description": "The global id of the resource to add a note to", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null }, { - "name": "visibility", - "description": "Visibility of the project", + "name": "body", + "description": "Content of the note", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "position", + "description": "The position of this note on a diff", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DiffImagePositionInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CreateImageDiffNotePayload", + "description": "Autogenerated return type of CreateImageDiffNote", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], @@ -1845,28 +1589,40 @@ "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the project", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "wikiEnabled", - "description": "(deprecated) Does this project have wiki enabled?. Use `wiki_access_level` instead", + "name": "note", + "description": "The note after mutation", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "Note", "ofType": null }, "isDeprecated": false, @@ -1881,67 +1637,86 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "ProjectPermissions", - "description": null, - "fields": [ + "kind": "INPUT_OBJECT", + "name": "CreateNoteInput", + "description": "Autogenerated input type of CreateNote", + "fields": null, + "inputFields": [ { - "name": "adminOperations", - "description": "Indicates the user can perform `admin_operations` on this resource", - "args": [ - - ], + "name": "noteableId", + "description": "The global id of the resource to add a note to", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "adminProject", - "description": "Indicates the user can perform `admin_project` on this resource", - "args": [ - - ], + "name": "body", + "description": "Content of the note", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "adminRemoteMirror", - "description": "Indicates the user can perform `admin_remote_mirror` on this resource", + "name": "discussionId", + "description": "The global id of the discussion this note is in reply to", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CreateNotePayload", + "description": "Autogenerated return type of CreateNote", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "adminWiki", - "description": "Indicates the user can perform `admin_wiki` on this resource", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -1949,107 +1724,159 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "archiveProject", - "description": "Indicates the user can perform `archive_project` on this resource", + "name": "note", + "description": "The note after mutation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "OBJECT", + "name": "Note", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "changeNamespace", - "description": "Indicates the user can perform `change_namespace` on this resource", - "args": [ + } + ], + "inputFields": null, + "interfaces": [ - ], + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "CreateSnippetInput", + "description": "Autogenerated input type of CreateSnippet", + "fields": null, + "inputFields": [ + { + "name": "title", + "description": "Title of the snippet", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "changeVisibilityLevel", - "description": "Indicates the user can perform `change_visibility_level` on this resource", - "args": [ - - ], + "name": "fileName", + "description": "File name of the snippet", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "content", + "description": "Content of the snippet", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "createDeployment", - "description": "Indicates the user can perform `create_deployment` on this resource", - "args": [ - - ], + "name": "description", + "description": "Description of the snippet", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "visibilityLevel", + "description": "The visibility level of the snippet", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "ENUM", + "name": "VisibilityLevelsEnum", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "createDesign", - "description": "Indicates the user can perform `create_design` on this resource", + "name": "projectPath", + "description": "The project full path the snippet is associated with", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CreateSnippetPayload", + "description": "Autogenerated return type of CreateSnippet", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createIssue", - "description": "Indicates the user can perform `create_issue` on this resource", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -2057,89 +1884,107 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createLabel", - "description": "Indicates the user can perform `create_label` on this resource", + "name": "snippet", + "description": "The snippet after mutation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "OBJECT", + "name": "Snippet", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DeleteJobsResponse", + "description": "The response from the AdminSidekiqQueuesDeleteJobs mutation.", + "fields": [ { - "name": "createMergeRequestFrom", - "description": "Indicates the user can perform `create_merge_request_from` on this resource", + "name": "completed", + "description": "Whether or not the entire queue was processed in time; if not, retrying the same request is safe", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createMergeRequestIn", - "description": "Indicates the user can perform `create_merge_request_in` on this resource", + "name": "deletedJobs", + "description": "The number of matching jobs deleted", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createPages", - "description": "Indicates the user can perform `create_pages` on this resource", + "name": "queueSize", + "description": "The queue size after processing", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Design", + "description": "A single design", + "fields": [ { - "name": "createPipeline", - "description": "Indicates the user can perform `create_pipeline` on this resource", + "name": "diffRefs", + "description": "The diff refs for this design", "args": [ ], @@ -2147,8 +1992,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DiffRefs", "ofType": null } }, @@ -2156,17 +2001,56 @@ "deprecationReason": null }, { - "name": "createPipelineSchedule", - "description": "Indicates the user can perform `create_pipeline_schedule` on this resource", + "name": "discussions", + "description": "All discussions on this noteable", "args": [ - + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DiscussionConnection", "ofType": null } }, @@ -2174,8 +2058,8 @@ "deprecationReason": null }, { - "name": "createSnippet", - "description": "Indicates the user can perform `create_snippet` on this resource", + "name": "event", + "description": "How this design was changed in the current version", "args": [ ], @@ -2183,8 +2067,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "ENUM", + "name": "DesignVersionEvent", "ofType": null } }, @@ -2192,8 +2076,8 @@ "deprecationReason": null }, { - "name": "createWiki", - "description": "Indicates the user can perform `create_wiki` on this resource", + "name": "filename", + "description": "The filename of the design", "args": [ ], @@ -2202,7 +2086,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -2210,8 +2094,8 @@ "deprecationReason": null }, { - "name": "destroyDesign", - "description": "Indicates the user can perform `destroy_design` on this resource", + "name": "fullPath", + "description": "The full path to the design file", "args": [ ], @@ -2220,7 +2104,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -2228,8 +2112,8 @@ "deprecationReason": null }, { - "name": "destroyPages", - "description": "Indicates the user can perform `destroy_pages` on this resource", + "name": "id", + "description": "The ID of this design", "args": [ ], @@ -2238,7 +2122,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "ID", "ofType": null } }, @@ -2246,8 +2130,8 @@ "deprecationReason": null }, { - "name": "destroyWiki", - "description": "Indicates the user can perform `destroy_wiki` on this resource", + "name": "image", + "description": "The URL of the image", "args": [ ], @@ -2256,7 +2140,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -2264,8 +2148,8 @@ "deprecationReason": null }, { - "name": "downloadCode", - "description": "Indicates the user can perform `download_code` on this resource", + "name": "issue", + "description": "The issue the design belongs to", "args": [ ], @@ -2273,8 +2157,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "Issue", "ofType": null } }, @@ -2282,17 +2166,56 @@ "deprecationReason": null }, { - "name": "downloadWikiCode", - "description": "Indicates the user can perform `download_wiki_code` on this resource", + "name": "notes", + "description": "All notes on this noteable", "args": [ - + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "NoteConnection", "ofType": null } }, @@ -2300,8 +2223,8 @@ "deprecationReason": null }, { - "name": "forkProject", - "description": "Indicates the user can perform `fork_project` on this resource", + "name": "notesCount", + "description": "The total count of user-created notes for this design", "args": [ ], @@ -2310,7 +2233,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "Int", "ofType": null } }, @@ -2318,8 +2241,8 @@ "deprecationReason": null }, { - "name": "pushCode", - "description": "Indicates the user can perform `push_code` on this resource", + "name": "project", + "description": "The project the design belongs to", "args": [ ], @@ -2327,8 +2250,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "Project", "ofType": null } }, @@ -2336,26 +2259,107 @@ "deprecationReason": null }, { - "name": "pushToDeleteProtectedBranch", - "description": "Indicates the user can perform `push_to_delete_protected_branch` on this resource", + "name": "versions", + "description": "All versions related to this design ordered newest first", "args": [ - + { + "name": "earlierOrEqualToSha", + "description": "The SHA256 of the most recent acceptable version", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "earlierOrEqualToId", + "description": "The Global ID of the most recent acceptable version", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DesignVersionConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Noteable", + "ofType": null }, { - "name": "readCommitStatus", - "description": "Indicates the user can perform `read_commit_status` on this resource", + "kind": "INTERFACE", + "name": "DesignFields", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignAtVersion", + "description": "A design pinned to a specific version. The image field reflects the design as of the associated version.", + "fields": [ + { + "name": "design", + "description": "The underlying design.", "args": [ ], @@ -2363,8 +2367,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "Design", "ofType": null } }, @@ -2372,8 +2376,8 @@ "deprecationReason": null }, { - "name": "readCycleAnalytics", - "description": "Indicates the user can perform `read_cycle_analytics` on this resource", + "name": "diffRefs", + "description": "The diff refs for this design", "args": [ ], @@ -2381,8 +2385,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DiffRefs", "ofType": null } }, @@ -2390,8 +2394,8 @@ "deprecationReason": null }, { - "name": "readDesign", - "description": "Indicates the user can perform `read_design` on this resource", + "name": "event", + "description": "How this design was changed in the current version", "args": [ ], @@ -2399,8 +2403,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "ENUM", + "name": "DesignVersionEvent", "ofType": null } }, @@ -2408,8 +2412,8 @@ "deprecationReason": null }, { - "name": "readMergeRequest", - "description": "Indicates the user can perform `read_merge_request` on this resource", + "name": "filename", + "description": "The filename of the design", "args": [ ], @@ -2418,7 +2422,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -2426,8 +2430,8 @@ "deprecationReason": null }, { - "name": "readPagesContent", - "description": "Indicates the user can perform `read_pages_content` on this resource", + "name": "fullPath", + "description": "The full path to the design file", "args": [ ], @@ -2436,7 +2440,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -2444,8 +2448,8 @@ "deprecationReason": null }, { - "name": "readProject", - "description": "Indicates the user can perform `read_project` on this resource", + "name": "id", + "description": "The ID of this design", "args": [ ], @@ -2454,7 +2458,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "ID", "ofType": null } }, @@ -2462,8 +2466,8 @@ "deprecationReason": null }, { - "name": "readProjectMember", - "description": "Indicates the user can perform `read_project_member` on this resource", + "name": "image", + "description": "The URL of the image", "args": [ ], @@ -2472,7 +2476,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -2480,8 +2484,8 @@ "deprecationReason": null }, { - "name": "readWiki", - "description": "Indicates the user can perform `read_wiki` on this resource", + "name": "issue", + "description": "The issue the design belongs to", "args": [ ], @@ -2489,8 +2493,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "Issue", "ofType": null } }, @@ -2498,8 +2502,8 @@ "deprecationReason": null }, { - "name": "removeForkProject", - "description": "Indicates the user can perform `remove_fork_project` on this resource", + "name": "notesCount", + "description": "The total count of user-created notes for this design", "args": [ ], @@ -2508,7 +2512,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "Int", "ofType": null } }, @@ -2516,8 +2520,8 @@ "deprecationReason": null }, { - "name": "removePages", - "description": "Indicates the user can perform `remove_pages` on this resource", + "name": "project", + "description": "The project the design belongs to", "args": [ ], @@ -2525,8 +2529,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "Project", "ofType": null } }, @@ -2534,8 +2538,8 @@ "deprecationReason": null }, { - "name": "removeProject", - "description": "Indicates the user can perform `remove_project` on this resource", + "name": "version", + "description": "The version this design-at-versions is pinned to", "args": [ ], @@ -2543,26 +2547,43 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DesignVersion", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ { - "name": "renameProject", - "description": "Indicates the user can perform `rename_project` on this resource", + "kind": "INTERFACE", + "name": "DesignFields", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignAtVersionConnection", + "description": "The connection type for DesignAtVersion.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DesignAtVersionEdge", "ofType": null } }, @@ -2570,17 +2591,17 @@ "deprecationReason": null }, { - "name": "requestAccess", - "description": "Indicates the user can perform `request_access` on this resource", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DesignAtVersion", "ofType": null } }, @@ -2588,8 +2609,8 @@ "deprecationReason": null }, { - "name": "updatePages", - "description": "Indicates the user can perform `update_pages` on this resource", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], @@ -2597,17 +2618,30 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignAtVersionEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "updateWiki", - "description": "Indicates the user can perform `update_wiki` on this resource", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -2616,7 +2650,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -2624,19 +2658,15 @@ "deprecationReason": null }, { - "name": "uploadFile", - "description": "Indicates the user can perform `upload_file` on this resource", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "OBJECT", + "name": "DesignAtVersion", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -2650,98 +2680,167 @@ "possibleTypes": null }, { - "kind": "SCALAR", - "name": "ID", - "description": "Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"VXNlci0xMA==\"`) or integer (such as `4`) input value will be accepted as an ID.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Int", - "description": "Represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Time", - "description": "Time represented in ISO 8601", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { "kind": "OBJECT", - "name": "Namespace", - "description": null, + "name": "DesignCollection", + "description": "A collection of designs.", "fields": [ { - "name": "description", - "description": "Description of the namespace", + "name": "design", + "description": "Find a specific design", "args": [ - + { + "name": "id", + "description": "Find a design by its ID", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "filename", + "description": "Find a design by its filename", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Design", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "descriptionHtml", - "description": "The GitLab Flavored Markdown rendering of `description`", + "name": "designAtVersion", + "description": "Find a design as of a version", "args": [ - + { + "name": "id", + "description": "The Global ID of the design at this version", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "DesignAtVersion", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "fullName", - "description": "Full name of the namespace", + "name": "designs", + "description": "All designs for the design collection", "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null + { + "name": "ids", + "description": "Filters designs by their ID", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "filenames", + "description": "Filters designs by their filename", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "atVersion", + "description": "Filters designs to only those that existed at the version. If argument is omitted or nil then all designs will reflect the latest version", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fullPath", - "description": "Full path of the namespace", - "args": [ - ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "DesignConnection", "ofType": null } }, @@ -2749,8 +2848,8 @@ "deprecationReason": null }, { - "name": "id", - "description": "ID of the namespace", + "name": "issue", + "description": "Issue associated with the design collection", "args": [ ], @@ -2758,8 +2857,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "Issue", "ofType": null } }, @@ -2767,22 +2866,8 @@ "deprecationReason": null }, { - "name": "lfsEnabled", - "description": "Indicates if Large File Storage (LFS) is enabled for namespace", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Name of the namespace", + "name": "project", + "description": "Project associated with the design collection", "args": [ ], @@ -2790,8 +2875,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Project", "ofType": null } }, @@ -2799,36 +2884,61 @@ "deprecationReason": null }, { - "name": "path", - "description": "Path of the namespace", + "name": "version", + "description": "A specific version", "args": [ - + { + "name": "sha", + "description": "The SHA256 of a specific version", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "id", + "description": "The Global ID of the version", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "DesignVersion", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "projects", - "description": "Projects within this namespace", + "name": "versions", + "description": "All versions related to all designs, ordered newest first", "args": [ { - "name": "includeSubgroups", - "description": "Include also subgroup projects", + "name": "earlierOrEqualToSha", + "description": "The SHA256 of the most recent acceptable version", "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, - "defaultValue": "false" + "defaultValue": null + }, + { + "name": "earlierOrEqualToId", + "description": "The Global ID of the most recent acceptable version", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null }, { "name": "after", @@ -2876,7 +2986,38 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "ProjectConnection", + "name": "DesignVersionConnection", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignConnection", + "description": "The connection type for Design.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DesignEdge", "ofType": null } }, @@ -2884,42 +3025,81 @@ "deprecationReason": null }, { - "name": "requestAccessEnabled", - "description": "Indicates if users can request access to namespace", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Design", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "rootStorageStatistics", - "description": "Aggregated storage statistics of the namespace. Only available for root namespaces", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "RootStorageStatistics", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "visibility", - "description": "Visibility of the namespace", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Design", "ofType": null }, "isDeprecated": false, @@ -2934,13 +3114,13 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "RootStorageStatistics", + "kind": "INTERFACE", + "name": "DesignFields", "description": null, "fields": [ { - "name": "buildArtifactsSize", - "description": "The CI artifacts size in bytes", + "name": "diffRefs", + "description": "The diff refs for this design", "args": [ ], @@ -2948,8 +3128,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "DiffRefs", "ofType": null } }, @@ -2957,8 +3137,8 @@ "deprecationReason": null }, { - "name": "lfsObjectsSize", - "description": "The LFS objects size in bytes", + "name": "event", + "description": "How this design was changed in the current version", "args": [ ], @@ -2966,8 +3146,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Int", + "kind": "ENUM", + "name": "DesignVersionEvent", "ofType": null } }, @@ -2975,8 +3155,8 @@ "deprecationReason": null }, { - "name": "packagesSize", - "description": "The packages size in bytes", + "name": "filename", + "description": "The filename of the design", "args": [ ], @@ -2985,7 +3165,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -2993,8 +3173,8 @@ "deprecationReason": null }, { - "name": "repositorySize", - "description": "The Git repository size in bytes", + "name": "fullPath", + "description": "The full path to the design file", "args": [ ], @@ -3003,7 +3183,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -3011,8 +3191,8 @@ "deprecationReason": null }, { - "name": "storageSize", - "description": "The total storage in bytes", + "name": "id", + "description": "The ID of this design", "args": [ ], @@ -3021,7 +3201,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "ID", "ofType": null } }, @@ -3029,8 +3209,8 @@ "deprecationReason": null }, { - "name": "wikiSize", - "description": "The wiki size in bytes", + "name": "image", + "description": "The URL of the image", "args": [ ], @@ -3039,38 +3219,25 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectConnection", - "description": "The connection type for Project.", - "fields": [ + }, { - "name": "edges", - "description": "A list of edges.", + "name": "issue", + "description": "The issue the design belongs to", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", - "name": "ProjectEdge", + "name": "Issue", "ofType": null } }, @@ -3078,17 +3245,17 @@ "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "notesCount", + "description": "The total count of user-created notes for this design", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Project", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -3096,8 +3263,8 @@ "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "project", + "description": "The project the design belongs to", "args": [ ], @@ -3106,7 +3273,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "PageInfo", + "name": "Project", "ofType": null } }, @@ -3115,97 +3282,181 @@ } ], "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, - "possibleTypes": null + "possibleTypes": [ + { + "kind": "OBJECT", + "name": "Design", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "DesignAtVersion", + "ofType": null + } + ] }, { "kind": "OBJECT", - "name": "PageInfo", - "description": "Information about pagination in a connection.", + "name": "DesignManagement", + "description": null, "fields": [ { - "name": "endCursor", - "description": "When paginating forwards, the cursor to continue.", + "name": "designAtVersion", + "description": "Find a design as of a version", "args": [ - + { + "name": "id", + "description": "The Global ID of the design at this version", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "DesignAtVersion", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "hasNextPage", - "description": "When paginating forwards, are there more items?", + "name": "version", + "description": "Find a version", "args": [ - + { + "name": "id", + "description": "The Global ID of the version", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { + "kind": "OBJECT", + "name": "DesignVersion", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "DesignManagementDeleteInput", + "description": "Autogenerated input type of DesignManagementDelete", + "fields": null, + "inputFields": [ + { + "name": "projectPath", + "description": "The project where the issue is to upload designs for", + "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "hasPreviousPage", - "description": "When paginating backwards, are there more items?", - "args": [ - - ], + "name": "iid", + "description": "The iid of the issue to modify designs for", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "startCursor", - "description": "When paginating backwards, the cursor to continue.", - "args": [ - - ], + "name": "filenames", + "description": "The filenames of the designs to delete", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null } ], - "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "ProjectEdge", - "description": "An edge in a connection.", + "name": "DesignManagementDeletePayload", + "description": "Autogenerated return type of DesignManagementDelete", "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -3213,23 +3464,31 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "version", + "description": "The new version in which the designs are deleted", "args": [ ], "type": { "kind": "OBJECT", - "name": "Project", + "name": "DesignVersion", "ofType": null }, "isDeprecated": false, @@ -3244,193 +3503,203 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "Group", - "description": null, - "fields": [ + "kind": "INPUT_OBJECT", + "name": "DesignManagementUploadInput", + "description": "Autogenerated input type of DesignManagementUpload", + "fields": null, + "inputFields": [ { - "name": "autoDevopsEnabled", - "description": "Indicates whether Auto DevOps is enabled for all projects within this group", - "args": [ - - ], + "name": "projectPath", + "description": "The project where the issue is to upload designs for", "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "avatarUrl", - "description": "Avatar URL of the group", - "args": [ - - ], + "name": "iid", + "description": "The iid of the issue to modify designs for", "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "board", - "description": "A single board of the group", - "args": [ - { - "name": "id", - "description": "Find a board by its ID", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null + "name": "files", + "description": "The files to upload", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Upload", + "ofType": null + } + } } - ], + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { - "kind": "OBJECT", - "name": "Board", + "kind": "SCALAR", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignManagementUploadPayload", + "description": "Autogenerated return type of DesignManagementUpload", + "fields": [ { - "name": "boards", - "description": "Boards of the group", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ - { - "name": "id", - "description": "Find a board by its ID", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "BoardConnection", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "description", - "description": "Description of the namespace", + "name": "designs", + "description": "The designs that were uploaded by the mutation", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Design", + "ofType": null + } + } + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "descriptionHtml", - "description": "The GitLab Flavored Markdown rendering of `description`", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "emailsDisabled", - "description": "Indicates if a group has email notifications disabled", + "name": "skippedDesigns", + "description": "Any designs that were skipped from the upload due to there being no change to their content since their last version", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Design", + "ofType": null + } + } + } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignVersion", + "description": "A specific version in which designs were added, modified or deleted", + "fields": [ { - "name": "epic", - "description": "Find a single epic", + "name": "designAtVersion", + "description": "A particular design as of this version, provided it is visible at this version", "args": [ { - "name": "startDate", - "description": "List items within a time frame where items.start_date is between startDate and endDate parameters (endDate parameter must be present)", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "endDate", - "description": "List items within a time frame where items.end_date is between startDate and endDate parameters (startDate parameter must be present)", + "name": "id", + "description": "The ID of the DesignAtVersion", "type": { "kind": "SCALAR", - "name": "Time", + "name": "ID", "ofType": null }, "defaultValue": null }, { - "name": "iid", - "description": "IID of the epic, e.g., \"1\"", + "name": "designId", + "description": "The ID of a specific design", "type": { "kind": "SCALAR", "name": "ID", @@ -3439,56 +3708,45 @@ "defaultValue": null }, { - "name": "iids", - "description": "List of IIDs of epics, e.g., [1, 2]", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "Filter epics by state", - "type": { - "kind": "ENUM", - "name": "EpicState", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "search", - "description": "Filter epics by title and description", + "name": "filename", + "description": "The filename of a specific design", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null - }, + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DesignAtVersion", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "designs", + "description": "All designs that were changed in the version", + "args": [ { - "name": "sort", - "description": "List epics by sort order", + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", "type": { - "kind": "ENUM", - "name": "EpicSort", + "kind": "SCALAR", + "name": "String", "ofType": null }, "defaultValue": null }, { - "name": "authorUsername", - "description": "Filter epics by author", + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", "type": { "kind": "SCALAR", "name": "String", @@ -3497,79 +3755,45 @@ "defaultValue": null }, { - "name": "labelName", - "description": "Filter epics by labels", + "name": "first", + "description": "Returns the first _n_ elements from the list.", "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "defaultValue": null }, { - "name": "iidStartsWith", - "description": "Filter epics by iid for autocomplete", + "name": "last", + "description": "Returns the last _n_ elements from the list.", "type": { "kind": "SCALAR", - "name": "String", + "name": "Int", "ofType": null }, "defaultValue": null } ], "type": { - "kind": "OBJECT", - "name": "Epic", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DesignConnection", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "epics", - "description": "Find epics", + "name": "designsAtVersion", + "description": "All designs that are visible at this version, as of this version", "args": [ { - "name": "startDate", - "description": "List items within a time frame where items.start_date is between startDate and endDate parameters (endDate parameter must be present)", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "endDate", - "description": "List items within a time frame where items.end_date is between startDate and endDate parameters (startDate parameter must be present)", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "iid", - "description": "IID of the epic, e.g., \"1\"", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "iids", - "description": "List of IIDs of epics, e.g., [1, 2]", + "name": "ids", + "description": "Filters designs by their ID", "type": { "kind": "LIST", "name": null, @@ -3586,48 +3810,8 @@ "defaultValue": null }, { - "name": "state", - "description": "Filter epics by state", - "type": { - "kind": "ENUM", - "name": "EpicState", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "search", - "description": "Filter epics by title and description", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "sort", - "description": "List epics by sort order", - "type": { - "kind": "ENUM", - "name": "EpicSort", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "authorUsername", - "description": "Filter epics by author", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "labelName", - "description": "Filter epics by labels", + "name": "filenames", + "description": "Filters designs by their filename", "type": { "kind": "LIST", "name": null, @@ -3644,16 +3828,6 @@ "defaultValue": null }, { - "name": "iidStartsWith", - "description": "Filter epics by iid for autocomplete", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { "name": "after", "description": "Returns the elements in the list that come after the specified cursor.", "type": { @@ -3695,30 +3869,38 @@ } ], "type": { - "kind": "OBJECT", - "name": "EpicConnection", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DesignAtVersionConnection", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "epicsEnabled", - "description": "Indicates if Epics are enabled for namespace", + "name": "id", + "description": "ID of the design version", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "fullName", - "description": "Full name of the namespace", + "name": "sha", + "description": "SHA of the design version", "args": [ ], @@ -3727,7 +3909,38 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignVersionConnection", + "description": "The connection type for DesignVersion.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DesignVersionEdge", "ofType": null } }, @@ -3735,8 +3948,57 @@ "deprecationReason": null }, { - "name": "fullPath", - "description": "Full path of the namespace", + "name": "nodes", + "description": "A list of nodes.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DesignVersion", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DesignVersionEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -3745,7 +4007,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, @@ -3753,25 +4015,71 @@ "deprecationReason": null }, { - "name": "groupTimelogsEnabled", - "description": "Indicates if Group timelogs are enabled for namespace", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "DesignVersion", "ofType": null }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "DesignVersionEvent", + "description": "Mutation event of a design within a version", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "NONE", + "description": "No change", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CREATION", + "description": "A creation event", + "isDeprecated": false, + "deprecationReason": null }, { + "name": "MODIFICATION", + "description": "A modification event", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DELETION", + "description": "A deletion event", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "DestroyNoteInput", + "description": "Autogenerated input type of DestroyNote", + "fields": null, + "inputFields": [ + { "name": "id", - "description": "ID of the namespace", - "args": [ - - ], + "description": "The global id of the note to destroy", "type": { "kind": "NON_NULL", "name": null, @@ -3781,123 +4089,218 @@ "ofType": null } }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DestroyNotePayload", + "description": "Autogenerated return type of DestroyNote", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "lfsEnabled", - "description": "Indicates if Large File Storage (LFS) is enabled for namespace", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "note", + "description": "The note after mutation", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Note", "ofType": null }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "DestroySnippetInput", + "description": "Autogenerated input type of DestroySnippet", + "fields": null, + "inputFields": [ + { + "name": "id", + "description": "The global id of the snippet to destroy", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null }, { - "name": "mentionsDisabled", - "description": "Indicates if a group is disabled from getting mentioned", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DestroySnippetPayload", + "description": "Autogenerated return type of DestroySnippet", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "milestones", - "description": "Find milestones", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ - { - "name": "startDate", - "description": "List items within a time frame where items.start_date is between startDate and endDate parameters (endDate parameter must be present)", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "endDate", - "description": "List items within a time frame where items.end_date is between startDate and endDate parameters (startDate parameter must be present)", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "state", - "description": "Filter milestones by state", - "type": { - "kind": "ENUM", - "name": "MilestoneStateEnum", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "snippet", + "description": "The snippet after mutation", + "args": [ + ], "type": { "kind": "OBJECT", - "name": "MilestoneConnection", + "name": "Snippet", "ofType": null }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DetailedStatus", + "description": null, + "fields": [ + { + "name": "detailsPath", + "description": "Path of the details for the pipeline status", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "name", - "description": "Name of the namespace", + "name": "favicon", + "description": "Favicon of the pipeline status", "args": [ ], @@ -3914,22 +4317,44 @@ "deprecationReason": null }, { - "name": "parent", - "description": "Parent group", + "name": "group", + "description": "Group of the pipeline status", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Group", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "path", - "description": "Path of the namespace", + "name": "hasDetails", + "description": "Indicates if the pipeline status has further details", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "icon", + "description": "Icon of the pipeline status", "args": [ ], @@ -3946,80 +4371,252 @@ "deprecationReason": null }, { - "name": "projectCreationLevel", - "description": "The permission level required to create projects in the group", + "name": "label", + "description": "Label of the pipeline status", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "text", + "description": "Text of the pipeline status", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tooltip", + "description": "Tooltip associated with the pipeline status", "args": [ ], "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "DiffImagePositionInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "headSha", + "description": "SHA of the HEAD at the time the comment was made", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "baseSha", + "description": "Merge base of the branch the comment was made on", + "type": { "kind": "SCALAR", "name": "String", "ofType": null }, + "defaultValue": null + }, + { + "name": "startSha", + "description": "SHA of the branch being compared against", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "paths", + "description": "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", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DiffPathsInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "x", + "description": "X position of the note", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "y", + "description": "Y position of the note", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "width", + "description": "Total width of the image", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "height", + "description": "Total height of the image", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "DiffPathsInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "oldPath", + "description": "The path of the file on the start sha", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "newPath", + "description": "The path of the file on the head sha", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DiffPosition", + "description": null, + "fields": [ + { + "name": "diffRefs", + "description": "Information about the branch, HEAD, and base at the time of commenting", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DiffRefs", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "projects", - "description": "Projects within this namespace", + "name": "filePath", + "description": "Path of the file that was changed", "args": [ - { - "name": "includeSubgroups", - "description": "Include also subgroup projects", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "ProjectConnection", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -4027,64 +4624,64 @@ "deprecationReason": null }, { - "name": "requestAccessEnabled", - "description": "Indicates if users can request access to namespace", + "name": "height", + "description": "Total height of the image", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "requireTwoFactorAuthentication", - "description": "Indicates if all users in this group are required to set up two-factor authentication", + "name": "newLine", + "description": "Line on HEAD SHA that was changed", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "rootStorageStatistics", - "description": "Aggregated storage statistics of the namespace. Only available for root namespaces", + "name": "newPath", + "description": "Path of the file on the HEAD SHA", "args": [ ], "type": { - "kind": "OBJECT", - "name": "RootStorageStatistics", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "shareWithGroupLock", - "description": "Indicates if sharing a project with another group within this group is prevented", + "name": "oldLine", + "description": "Line on start SHA that was changed", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "subgroupCreationLevel", - "description": "The permission level required to create subgroups within the group", + "name": "oldPath", + "description": "Path of the file on the start SHA", "args": [ ], @@ -4097,84 +4694,17 @@ "deprecationReason": null }, { - "name": "timelogs", - "description": "Time logged in issues by group members", + "name": "positionType", + "description": "Type of file the position refers to", "args": [ - { - "name": "startDate", - "description": "List time logs within a time range where the logged date is after start_date parameter.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "endDate", - "description": "List time logs within a time range where the logged date is before end_date parameter.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "TimelogConnection", + "kind": "ENUM", + "name": "DiffPositionType", "ofType": null } }, @@ -4182,8 +4712,8 @@ "deprecationReason": null }, { - "name": "twoFactorGracePeriod", - "description": "Time before two-factor authentication is enforced", + "name": "width", + "description": "Total width of the image", "args": [ ], @@ -4196,26 +4726,159 @@ "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "x", + "description": "X position of the note", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "y", + "description": "Y position of the note", "args": [ ], "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "DiffPositionInput", + "description": null, + "fields": null, + "inputFields": [ + { + "name": "headSha", + "description": "SHA of the HEAD at the time the comment was made", + "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "GroupPermissions", + "kind": "SCALAR", + "name": "String", "ofType": null } }, + "defaultValue": null + }, + { + "name": "baseSha", + "description": "Merge base of the branch the comment was made on", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "startSha", + "description": "SHA of the branch being compared against", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "paths", + "description": "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", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DiffPathsInput", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "oldLine", + "description": "Line on start SHA that was changed", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "newLine", + "description": "Line on HEAD SHA that was changed", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "DiffPositionType", + "description": "Type of file the position refers to", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "text", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "visibility", - "description": "Visibility of the namespace", + "name": "image", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "DiffRefs", + "description": null, + "fields": [ + { + "name": "baseSha", + "description": "Merge base of the branch the comment was made on", "args": [ ], @@ -4228,8 +4891,26 @@ "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the group", + "name": "headSha", + "description": "SHA of the HEAD at the time the comment was made", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startSha", + "description": "SHA of the branch being compared against", "args": [ ], @@ -4255,12 +4936,12 @@ }, { "kind": "OBJECT", - "name": "GroupPermissions", + "name": "Discussion", "description": null, "fields": [ { - "name": "readGroup", - "description": "Indicates the user can perform `read_group` on this resource", + "name": "createdAt", + "description": "Timestamp of the discussion's creation", "args": [ ], @@ -4269,7 +4950,100 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "Time", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ID of this discussion", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notes", + "description": "All notes in the discussion", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "NoteConnection", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "replyId", + "description": "ID used to reply to this discussion", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", "ofType": null } }, @@ -4286,8 +5060,8 @@ }, { "kind": "OBJECT", - "name": "MilestoneConnection", - "description": "The connection type for Milestone.", + "name": "DiscussionConnection", + "description": "The connection type for Discussion.", "fields": [ { "name": "edges", @@ -4300,7 +5074,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "MilestoneEdge", + "name": "DiscussionEdge", "ofType": null } }, @@ -4318,7 +5092,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "Milestone", + "name": "Discussion", "ofType": null } }, @@ -4353,7 +5127,7 @@ }, { "kind": "OBJECT", - "name": "MilestoneEdge", + "name": "DiscussionEdge", "description": "An edge in a connection.", "fields": [ { @@ -4382,7 +5156,7 @@ ], "type": { "kind": "OBJECT", - "name": "Milestone", + "name": "Discussion", "ofType": null }, "isDeprecated": false, @@ -4397,13 +5171,13 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "Milestone", - "description": "Represents a milestone.", + "kind": "INTERFACE", + "name": "Entry", + "description": null, "fields": [ { - "name": "createdAt", - "description": "Timestamp of milestone creation", + "name": "flatPath", + "description": "Flat path of the entry", "args": [ ], @@ -4412,7 +5186,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "String", "ofType": null } }, @@ -4420,36 +5194,8 @@ "deprecationReason": null }, { - "name": "description", - "description": "Description of the milestone", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dueDate", - "description": "Timestamp of the milestone due date", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { "name": "id", - "description": "ID of the milestone", + "description": "ID of the entry", "args": [ ], @@ -4466,22 +5212,8 @@ "deprecationReason": null }, { - "name": "startDate", - "description": "Timestamp of the milestone start date", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "State of the milestone", + "name": "name", + "description": "Name of the entry", "args": [ ], @@ -4489,8 +5221,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "MilestoneStateEnum", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -4498,8 +5230,8 @@ "deprecationReason": null }, { - "name": "title", - "description": "Title of the milestone", + "name": "path", + "description": "Path of the entry", "args": [ ], @@ -4516,8 +5248,8 @@ "deprecationReason": null }, { - "name": "updatedAt", - "description": "Timestamp of last milestone update", + "name": "sha", + "description": "Last commit sha for the entry", "args": [ ], @@ -4526,7 +5258,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "String", "ofType": null } }, @@ -4534,8 +5266,8 @@ "deprecationReason": null }, { - "name": "webPath", - "description": "Web path of the milestone", + "name": "type", + "description": "Type of tree entry", "args": [ ], @@ -4543,8 +5275,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "ENUM", + "name": "EntryType", "ofType": null } }, @@ -4553,28 +5285,48 @@ } ], "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, - "possibleTypes": null + "possibleTypes": [ + { + "kind": "OBJECT", + "name": "Blob", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Submodule", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "TreeEntry", + "ofType": null + } + ] }, { "kind": "ENUM", - "name": "MilestoneStateEnum", - "description": null, + "name": "EntryType", + "description": "Type of a tree entry", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { - "name": "active", + "name": "tree", "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "closed", + "name": "blob", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "commit", "description": null, "isDeprecated": false, "deprecationReason": null @@ -4584,39 +5336,21 @@ }, { "kind": "OBJECT", - "name": "BoardConnection", - "description": "The connection type for Board.", + "name": "Environment", + "description": "Describes where code is deployed for a project", "fields": [ { - "name": "edges", - "description": "A list of edges.", - "args": [ - - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "BoardEdge", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A list of nodes.", + "name": "id", + "description": "ID of the environment", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Board", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, @@ -4624,8 +5358,8 @@ "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "name", + "description": "Human-readable name of the environment", "args": [ ], @@ -4633,8 +5367,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -4651,21 +5385,21 @@ }, { "kind": "OBJECT", - "name": "BoardEdge", - "description": "An edge in a connection.", + "name": "EnvironmentConnection", + "description": "The connection type for Environment.", "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "EnvironmentEdge", "ofType": null } }, @@ -4673,15 +5407,37 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Board", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Environment", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -4696,12 +5452,12 @@ }, { "kind": "OBJECT", - "name": "Board", - "description": "Represents a project or group board", + "name": "EnvironmentEdge", + "description": "An edge in a connection.", "fields": [ { - "name": "id", - "description": "ID (global ID) of the board", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -4710,7 +5466,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, @@ -4718,28 +5474,14 @@ "deprecationReason": null }, { - "name": "name", - "description": "Name of the board", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "weight", - "description": "Weight of the board", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "Environment", "ofType": null }, "isDeprecated": false, @@ -5740,239 +6482,56 @@ "possibleTypes": null }, { - "kind": "INTERFACE", - "name": "Noteable", - "description": null, - "fields": [ + "kind": "INPUT_OBJECT", + "name": "EpicAddIssueInput", + "description": "Autogenerated input type of EpicAddIssue", + "fields": null, + "inputFields": [ { - "name": "discussions", - "description": "All discussions on this noteable", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], + "name": "iid", + "description": "The iid of the epic to mutate", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DiscussionConnection", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "notes", - "description": "All notes on this noteable", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], + "name": "groupPath", + "description": "The group the epic to mutate belongs to", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "NoteConnection", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Design", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Epic", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "EpicIssue", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Issue", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Snippet", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "NoteConnection", - "description": "The connection type for Note.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [ - - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "NoteEdge", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodes", - "description": "A list of nodes.", - "args": [ - - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Note", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [ - - ], + "name": "projectPath", + "description": "The project the issue belongs to", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "NoteEdge", - "description": "An edge in a connection.", - "fields": [ + "defaultValue": null + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [ - - ], + "name": "issueIid", + "description": "The iid of the issue to be added", "type": { "kind": "NON_NULL", "name": null, @@ -5982,89 +6541,73 @@ "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "node", - "description": "The item at the end of the edge.", - "args": [ - - ], + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { - "kind": "OBJECT", - "name": "Note", + "kind": "SCALAR", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null } ], - "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "Note", - "description": null, + "name": "EpicAddIssuePayload", + "description": "Autogenerated return type of EpicAddIssue", "fields": [ { - "name": "author", - "description": "User who wrote this note", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "body", - "description": "Content of the note", + "name": "epic", + "description": "The epic after mutation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "Epic", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "bodyHtml", - "description": "The GitLab Flavored Markdown rendering of `note`", + "name": "epicIssue", + "description": "The epic-issue relation", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "EpicIssue", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createdAt", - "description": "Timestamp of the note creation", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -6072,40 +6615,47 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "discussion", - "description": "The discussion this note is a part of", - "args": [ + } + ], + "inputFields": null, + "interfaces": [ - ], - "type": { - "kind": "OBJECT", - "name": "Discussion", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EpicConnection", + "description": "The connection type for Epic.", + "fields": [ { - "name": "id", - "description": "ID of the note", + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "EpicEdge", "ofType": null } }, @@ -6113,36 +6663,26 @@ "deprecationReason": null }, { - "name": "position", - "description": "The position of this note on a diff", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "DiffPosition", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "project", - "description": "Project associated with the note", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Project", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Epic", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "resolvable", - "description": "Indicates if this note can be resolved. That is, if it is a resolvable discussion or simply a standalone note", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], @@ -6150,92 +6690,79 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EpicDescendantCount", + "description": "Counts of descendent epics.", + "fields": [ { - "name": "resolvedAt", - "description": "Timestamp of the note's resolution", + "name": "closedEpics", + "description": "Number of closed sub-epics", "args": [ ], "type": { "kind": "SCALAR", - "name": "Time", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "resolvedBy", - "description": "User that resolved the discussion", + "name": "closedIssues", + "description": "Number of closed epic issues", "args": [ ], "type": { - "kind": "OBJECT", - "name": "User", + "kind": "SCALAR", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "system", - "description": "Indicates whether this note was created by the system or by a user", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "Timestamp of the note's last activity", + "name": "openedEpics", + "description": "Number of opened sub-epics", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "openedIssues", + "description": "Number of opened epic issues", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "NotePermissions", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -6250,66 +6777,53 @@ }, { "kind": "OBJECT", - "name": "NotePermissions", - "description": null, + "name": "EpicDescendantWeights", + "description": "Total weight of open and closed descendant issues", "fields": [ { - "name": "adminNote", - "description": "Indicates the user can perform `admin_note` on this resource", + "name": "closedIssues", + "description": "Total weight of completed (closed) issues in this epic, including epic descendants", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "awardEmoji", - "description": "Indicates the user can perform `award_emoji` on this resource", + "name": "openedIssues", + "description": "Total weight of opened issues in this epic, including epic descendants", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "createNote", - "description": "Indicates the user can perform `create_note` on this resource", - "args": [ + } + ], + "inputFields": null, + "interfaces": [ - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EpicEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "readNote", - "description": "Indicates the user can perform `read_note` on this resource", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -6318,7 +6832,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -6326,19 +6840,15 @@ "deprecationReason": null }, { - "name": "resolveNote", - "description": "Indicates the user can perform `resolve_note` on this resource", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "OBJECT", + "name": "Epic", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -6353,245 +6863,69 @@ }, { "kind": "OBJECT", - "name": "User", - "description": null, + "name": "EpicHealthStatus", + "description": "Health status of child issues", "fields": [ { - "name": "avatarUrl", - "description": "URL of the user's avatar", + "name": "issuesAtRisk", + "description": "Number of issues at risk", "args": [ ], "type": { "kind": "SCALAR", - "name": "String", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "name", - "description": "Human-readable name of the user", + "name": "issuesNeedingAttention", + "description": "Number of issues that need attention", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "snippets", - "description": "Snippets authored by the user", + "name": "issuesOnTrack", + "description": "Number of issues on track", "args": [ - { - "name": "ids", - "description": "Array of global snippet ids, e.g., \"gid://gitlab/ProjectSnippet/1\"", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "visibility", - "description": "The visibility of the snippet", - "type": { - "kind": "ENUM", - "name": "VisibilityScopesEnum", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "type", - "description": "The type of snippet", - "type": { - "kind": "ENUM", - "name": "TypeEnum", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "SnippetConnection", + "kind": "SCALAR", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EpicIssue", + "description": "Relationship between an epic and an issue", + "fields": [ { - "name": "todos", - "description": "Todos of the user", + "name": "assignees", + "description": "Assignees of the issue", "args": [ { - "name": "action", - "description": "The action to be filtered", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "TodoActionEnum", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "authorId", - "description": "The ID of an author", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "projectId", - "description": "The ID of a project", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "groupId", - "description": "The ID of a group", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "The state of the todo", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "TodoStateEnum", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "type", - "description": "The type of the todo", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "TodoTargetEnum", - "ofType": null - } - } - }, - "defaultValue": null - }, - { "name": "after", "description": "Returns the elements in the list that come after the specified cursor.", "type": { @@ -6633,20 +6967,16 @@ } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "TodoConnection", - "ofType": null - } + "kind": "OBJECT", + "name": "UserConnection", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "author", + "description": "User that created the issue", "args": [ ], @@ -6655,7 +6985,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "UserPermissions", + "name": "User", "ofType": null } }, @@ -6663,57 +6993,22 @@ "deprecationReason": null }, { - "name": "username", - "description": "Username of the user. Unique within this instance of GitLab", + "name": "closedAt", + "description": "Timestamp of when the issue was closed", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the user", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UserPermissions", - "description": null, - "fields": [ - { - "name": "createSnippet", - "description": "Indicates the user can perform `create_snippet` on this resource", + "name": "confidential", + "description": "Indicates the issue is confidential", "args": [ ], @@ -6728,90 +7023,10 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "TodoConnection", - "description": "The connection type for Todo.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", - "args": [ - - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "TodoEdge", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", - "args": [ - - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Todo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "TodoEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "createdAt", + "description": "Timestamp of when the issue was created", "args": [ ], @@ -6820,7 +7035,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Time", "ofType": null } }, @@ -6828,121 +7043,64 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "description", + "description": "Description of the issue", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Todo", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Todo", - "description": "Representing a todo entry", - "fields": [ - { - "name": "action", - "description": "Action of the todo", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "TodoActionEnum", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "author", - "description": "The owner of this todo", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null }, { - "name": "body", - "description": "Body of the todo", + "name": "descriptionHtml", + "description": "The GitLab Flavored Markdown rendering of `description`", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createdAt", - "description": "Timestamp this todo was created", + "name": "designCollection", + "description": "Collection of design images associated with this issue", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - } + "kind": "OBJECT", + "name": "DesignCollection", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "group", - "description": "Group this todo is associated with", + "name": "designs", + "description": "Deprecated. Use `designCollection`", "args": [ ], "type": { "kind": "OBJECT", - "name": "Group", + "name": "DesignCollection", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "isDeprecated": true, + "deprecationReason": "Use designCollection" }, { - "name": "id", - "description": "Id of the todo", + "name": "discussionLocked", + "description": "Indicates discussion is locked on the issue", "args": [ ], @@ -6951,7 +7109,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, @@ -6959,31 +7117,56 @@ "deprecationReason": null }, { - "name": "project", - "description": "The project this todo is associated with", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "State of the todo", + "name": "discussions", + "description": "All discussions on this noteable", "args": [ - + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "TodoStateEnum", + "kind": "OBJECT", + "name": "DiscussionConnection", "ofType": null } }, @@ -6991,8 +7174,8 @@ "deprecationReason": null }, { - "name": "targetType", - "description": "Target type of the todo", + "name": "downvotes", + "description": "Number of downvotes the issue has received", "args": [ ], @@ -7000,214 +7183,45 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "TodoTargetEnum", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "TodoActionEnum", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "assigned", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mentioned", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "build_failed", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "marked", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "approval_required", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "unmergeable", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "directly_addressed", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "TodoTargetEnum", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "COMMIT", - "description": "A Commit", - "isDeprecated": false, - "deprecationReason": null }, { - "name": "ISSUE", - "description": "An Issue", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "MERGEREQUEST", - "description": "A MergeRequest", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DESIGN", - "description": "A Design", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "EPIC", - "description": "An Epic", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "TodoStateEnum", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "pending", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "done", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SnippetConnection", - "description": "The connection type for Snippet.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", + "name": "dueDate", + "description": "Due date of the issue", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SnippetEdge", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "epic", + "description": "Epic to which this issue belongs", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Snippet", - "ofType": null - } + "kind": "OBJECT", + "name": "Epic", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SnippetEdge", - "description": "An edge in a connection.", - "fields": [ - { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "epicIssueId", + "description": "ID of the epic-issue relation", "args": [ ], @@ -7216,7 +7230,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, @@ -7224,71 +7238,36 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "healthStatus", + "description": "Current health status. Available only when feature flag `save_issuable_health_status` is enabled.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Snippet", + "kind": "ENUM", + "name": "HealthStatus", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Snippet", - "description": "Represents a snippet entry", - "fields": [ - { - "name": "author", - "description": "The owner of the snippet", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null }, { - "name": "blob", - "description": "Snippet blob", + "name": "id", + "description": "Global ID of the epic-issue relation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SnippetBlob", - "ofType": null - } + "kind": "SCALAR", + "name": "ID", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createdAt", - "description": "Timestamp this snippet was created", + "name": "iid", + "description": "Internal ID of the issue", "args": [ ], @@ -7297,7 +7276,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "ID", "ofType": null } }, @@ -7305,36 +7284,75 @@ "deprecationReason": null }, { - "name": "description", - "description": "Description of the snippet", + "name": "labels", + "description": "Labels of the issue", "args": [ - + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "LabelConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "descriptionHtml", - "description": "The GitLab Flavored Markdown rendering of `description`", + "name": "milestone", + "description": "Milestone of the issue", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Milestone", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "discussions", - "description": "All discussions on this noteable", + "name": "notes", + "description": "All notes on this noteable", "args": [ { "name": "after", @@ -7382,39 +7400,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "DiscussionConnection", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fileName", - "description": "File Name of the snippet", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "Id of the snippet", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", + "name": "NoteConnection", "ofType": null } }, @@ -7422,8 +7408,8 @@ "deprecationReason": null }, { - "name": "notes", - "description": "All notes on this noteable", + "name": "participants", + "description": "List of participants in the issue", "args": [ { "name": "after", @@ -7467,11 +7453,34 @@ } ], "type": { + "kind": "OBJECT", + "name": "UserConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "reference", + "description": "Internal reference of the issue. Returned in shortened format by default", + "args": [ + { + "name": "full", + "description": "Boolean option specifying whether the reference should be returned in full", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + } + ], + "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "NoteConnection", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -7479,40 +7488,36 @@ "deprecationReason": null }, { - "name": "project", - "description": "The project the snippet is associated with", + "name": "relationPath", + "description": "URI path of the epic-issue relation", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Project", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "rawUrl", - "description": "Raw URL of the snippet", + "name": "relativePosition", + "description": "Relative position of the issue (used for positioning in epic tree and issue boards)", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "title", - "description": "Title of the snippet", + "name": "state", + "description": "State of the issue", "args": [ ], @@ -7520,8 +7525,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "ENUM", + "name": "IssueState", "ofType": null } }, @@ -7529,8 +7534,8 @@ "deprecationReason": null }, { - "name": "updatedAt", - "description": "Timestamp this snippet was updated", + "name": "subscribed", + "description": "Indicates the currently logged in user is subscribed to the issue", "args": [ ], @@ -7539,7 +7544,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "Boolean", "ofType": null } }, @@ -7547,8 +7552,8 @@ "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "taskCompletionStatus", + "description": "Task completion status of the issue", "args": [ ], @@ -7557,7 +7562,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "SnippetPermissions", + "name": "TaskCompletionStatus", "ofType": null } }, @@ -7565,8 +7570,8 @@ "deprecationReason": null }, { - "name": "visibilityLevel", - "description": "Visibility Level of the snippet", + "name": "timeEstimate", + "description": "Time estimate of the issue", "args": [ ], @@ -7574,8 +7579,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "VisibilityLevelsEnum", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -7583,8 +7588,8 @@ "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the snippet", + "name": "title", + "description": "Title of the issue", "args": [ ], @@ -7599,54 +7604,33 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Noteable", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DiscussionConnection", - "description": "The connection type for Discussion.", - "fields": [ + }, { - "name": "edges", - "description": "A list of edges.", + "name": "titleHtml", + "description": "The GitLab Flavored Markdown rendering of `title`", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DiscussionEdge", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "totalTimeSpent", + "description": "Total time reported as spent on the issue", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Discussion", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -7654,8 +7638,8 @@ "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "updatedAt", + "description": "Timestamp of when the issue was last updated", "args": [ ], @@ -7663,30 +7647,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "Time", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DiscussionEdge", - "description": "An edge in a connection.", - "fields": [ + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "upvotes", + "description": "Number of upvotes the issue has received", "args": [ ], @@ -7695,7 +7666,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Int", "ofType": null } }, @@ -7703,35 +7674,26 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "userNotesCount", + "description": "Number of user notes of the issue", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Discussion", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Discussion", - "description": null, - "fields": [ + }, { - "name": "createdAt", - "description": "Timestamp of the discussion's creation", + "name": "userPermissions", + "description": "Permissions for the current user on the resource", "args": [ ], @@ -7739,8 +7701,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Time", + "kind": "OBJECT", + "name": "IssuePermissions", "ofType": null } }, @@ -7748,8 +7710,8 @@ "deprecationReason": null }, { - "name": "id", - "description": "ID of this discussion", + "name": "webPath", + "description": "Web path of the issue", "args": [ ], @@ -7758,7 +7720,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, @@ -7766,56 +7728,17 @@ "deprecationReason": null }, { - "name": "notes", - "description": "All notes in the discussion", + "name": "webUrl", + "description": "Web URL of the issue", "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "NoteConnection", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -7823,19 +7746,15 @@ "deprecationReason": null }, { - "name": "replyId", - "description": "ID used to reply to this discussion", + "name": "weight", + "description": "Weight of the issue", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -7843,28 +7762,32 @@ ], "inputFields": null, "interfaces": [ - + { + "kind": "INTERFACE", + "name": "Noteable", + "ofType": null + } ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "SnippetPermissions", - "description": null, + "name": "EpicIssueConnection", + "description": "The connection type for EpicIssue.", "fields": [ { - "name": "adminSnippet", - "description": "Indicates the user can perform `admin_snippet` on this resource", + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "EpicIssueEdge", "ofType": null } }, @@ -7872,17 +7795,17 @@ "deprecationReason": null }, { - "name": "awardEmoji", - "description": "Indicates the user can perform `award_emoji` on this resource", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "EpicIssue", "ofType": null } }, @@ -7890,8 +7813,8 @@ "deprecationReason": null }, { - "name": "createNote", - "description": "Indicates the user can perform `create_note` on this resource", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], @@ -7899,35 +7822,30 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "readSnippet", - "description": "Indicates the user can perform `read_snippet` on this resource", - "args": [ + } + ], + "inputFields": null, + "interfaces": [ - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EpicIssueEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "reportSnippet", - "description": "Indicates the user can perform `report_snippet` on this resource", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -7936,7 +7854,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -7944,19 +7862,15 @@ "deprecationReason": null }, { - "name": "updateSnippet", - "description": "Indicates the user can perform `update_snippet` on this resource", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "OBJECT", + "name": "EpicIssue", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -7970,42 +7884,13 @@ "possibleTypes": null }, { - "kind": "ENUM", - "name": "VisibilityLevelsEnum", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "private", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "internal", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "public", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { "kind": "OBJECT", - "name": "SnippetBlob", - "description": "Represents the snippet blob", + "name": "EpicPermissions", + "description": "Check permissions for the current user on an epic", "fields": [ { - "name": "binary", - "description": "Shows whether the blob is binary", + "name": "adminEpic", + "description": "Indicates the user can perform `admin_epic` on this resource", "args": [ ], @@ -8022,64 +7907,44 @@ "deprecationReason": null }, { - "name": "mode", - "description": "Blob mode", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Blob name", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "path", - "description": "Blob path", + "name": "awardEmoji", + "description": "Indicates the user can perform `award_emoji` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "plainData", - "description": "Blob plain highlighted data", + "name": "createEpic", + "description": "Indicates the user can perform `create_epic` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "rawPath", - "description": "Blob raw content endpoint path", + "name": "createNote", + "description": "Indicates the user can perform `create_note` on this resource", "args": [ ], @@ -8088,7 +7953,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -8096,36 +7961,44 @@ "deprecationReason": null }, { - "name": "richData", - "description": "Blob highlighted data", + "name": "destroyEpic", + "description": "Indicates the user can perform `destroy_epic` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "richViewer", - "description": "Blob content rich viewer", + "name": "readEpic", + "description": "Indicates the user can perform `read_epic` on this resource", "args": [ ], "type": { - "kind": "OBJECT", - "name": "SnippetBlobViewer", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "simpleViewer", - "description": "Blob content simple viewer", + "name": "readEpicIid", + "description": "Indicates the user can perform `read_epic_iid` on this resource", "args": [ ], @@ -8133,8 +8006,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "SnippetBlobViewer", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -8142,8 +8015,8 @@ "deprecationReason": null }, { - "name": "size", - "description": "Blob size", + "name": "updateEpic", + "description": "Indicates the user can perform `update_epic` on this resource", "args": [ ], @@ -8152,7 +8025,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "Boolean", "ofType": null } }, @@ -8168,52 +8041,42 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "SnippetBlobViewer", - "description": "Represents how the blob content should be displayed", - "fields": [ + "kind": "INPUT_OBJECT", + "name": "EpicSetSubscriptionInput", + "description": "Autogenerated input type of EpicSetSubscription", + "fields": null, + "inputFields": [ { - "name": "collapsed", - "description": "Shows whether the blob should be displayed collapsed", - "args": [ - - ], + "name": "iid", + "description": "The iid of the epic to mutate", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "fileType", - "description": "Content file type", - "args": [ - - ], + "name": "groupPath", + "description": "The group the epic to mutate belongs to", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "loadAsync", - "description": "Shows whether the blob content is loaded async", - "args": [ - - ], + "name": "subscribedState", + "description": "The desired state of the subscription", "type": { "kind": "NON_NULL", "name": null, @@ -8223,30 +8086,31 @@ "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "loadingPartialName", - "description": "Loading partial name", - "args": [ - - ], + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "EpicSetSubscriptionPayload", + "description": "Autogenerated return type of EpicSetSubscription", + "fields": [ { - "name": "renderError", - "description": "Error rendering the blob content", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], @@ -8259,26 +8123,22 @@ "deprecationReason": null }, { - "name": "tooLarge", - "description": "Shows whether the blob too large to be displayed", + "name": "epic", + "description": "The epic after mutation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "OBJECT", + "name": "Epic", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "type", - "description": "Type of blob viewer", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -8286,9 +8146,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "BlobViewersType", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, @@ -8304,27 +8172,33 @@ }, { "kind": "ENUM", - "name": "BlobViewersType", - "description": "Types of blob viewers", + "name": "EpicSort", + "description": "Roadmap sort values", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { - "name": "rich", - "description": null, + "name": "start_date_desc", + "description": "Start date at descending order", "isDeprecated": false, "deprecationReason": null }, { - "name": "simple", - "description": null, + "name": "start_date_asc", + "description": "Start date at ascending order", "isDeprecated": false, "deprecationReason": null }, { - "name": "auxiliary", - "description": null, + "name": "end_date_desc", + "description": "End date at descending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "end_date_asc", + "description": "End date at ascending order", "isDeprecated": false, "deprecationReason": null } @@ -8333,26 +8207,26 @@ }, { "kind": "ENUM", - "name": "VisibilityScopesEnum", - "description": null, + "name": "EpicState", + "description": "State of an epic.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { - "name": "private", + "name": "all", "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "internal", + "name": "opened", "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "public", + "name": "closed", "description": null, "isDeprecated": false, "deprecationReason": null @@ -8362,21 +8236,21 @@ }, { "kind": "ENUM", - "name": "TypeEnum", - "description": null, + "name": "EpicStateEvent", + "description": "State event of an epic", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { - "name": "personal", - "description": null, + "name": "REOPEN", + "description": "Reopen the epic", "isDeprecated": false, "deprecationReason": null }, { - "name": "project", - "description": null, + "name": "CLOSE", + "description": "Close the epic", "isDeprecated": false, "deprecationReason": null } @@ -8384,192 +8258,115 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "DiffPosition", - "description": null, - "fields": [ + "kind": "INPUT_OBJECT", + "name": "EpicTreeNodeFieldsInputType", + "description": "A node of an epic tree.", + "fields": null, + "inputFields": [ { - "name": "diffRefs", - "description": "Information about the branch, HEAD, and base at the time of commenting", - "args": [ - - ], + "name": "id", + "description": "The id of the epic_issue or epic that is being moved", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DiffRefs", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "filePath", - "description": "Path of the file that was changed", - "args": [ - - ], + "name": "adjacentReferenceId", + "description": "The id of the epic_issue or issue that the actual epic or issue is switched with", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "height", - "description": "Total height of the image", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newLine", - "description": "Line on HEAD SHA that was changed", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newPath", - "description": "Path of the file on the HEAD SHA", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "oldLine", - "description": "Line on start SHA that was changed", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "oldPath", - "description": "Path of the file on the start SHA", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "positionType", - "description": "Type of file the position refers to", - "args": [ - - ], + "name": "relativePosition", + "description": "The type of the switch, after or before allowed", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "ENUM", - "name": "DiffPositionType", + "name": "MoveType", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null - }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "EpicTreeReorderInput", + "description": "Autogenerated input type of EpicTreeReorder", + "fields": null, + "inputFields": [ { - "name": "width", - "description": "Total width of the image", - "args": [ - - ], + "name": "baseEpicId", + "description": "The id of the base epic of the tree", "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "x", - "description": "X position of the note", - "args": [ - - ], + "name": "moved", + "description": "Parameters for updating the tree positions", "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "EpicTreeNodeFieldsInputType", + "ofType": null + } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "y", - "description": "Y position of the note", - "args": [ - - ], + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null } ], - "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "DiffRefs", - "description": null, + "name": "EpicTreeReorderPayload", + "description": "Autogenerated return type of EpicTreeReorder", "fields": [ { - "name": "baseSha", - "description": "Merge base of the branch the comment was made on", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], @@ -8582,26 +8379,8 @@ "deprecationReason": null }, { - "name": "headSha", - "description": "SHA of the HEAD at the time the comment was made", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startSha", - "description": "SHA of the branch being compared against", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -8609,9 +8388,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, @@ -8626,36 +8413,23 @@ "possibleTypes": null }, { - "kind": "ENUM", - "name": "DiffPositionType", - "description": "Type of file the position refers to", + "kind": "SCALAR", + "name": "Float", + "description": "Represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).", "fields": null, "inputFields": null, "interfaces": null, - "enumValues": [ - { - "name": "text", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "image", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], + "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "EpicPermissions", - "description": "Check permissions for the current user on an epic", + "name": "GrafanaIntegration", + "description": null, "fields": [ { - "name": "adminEpic", - "description": "Indicates the user can perform `admin_epic` on this resource", + "name": "createdAt", + "description": "Timestamp of the issue's creation", "args": [ ], @@ -8664,7 +8438,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "Time", "ofType": null } }, @@ -8672,8 +8446,8 @@ "deprecationReason": null }, { - "name": "awardEmoji", - "description": "Indicates the user can perform `award_emoji` on this resource", + "name": "enabled", + "description": "Indicates whether Grafana integration is enabled", "args": [ ], @@ -8690,8 +8464,8 @@ "deprecationReason": null }, { - "name": "createEpic", - "description": "Indicates the user can perform `create_epic` on this resource", + "name": "grafanaUrl", + "description": "Url for the Grafana host for the Grafana integration", "args": [ ], @@ -8700,7 +8474,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -8708,8 +8482,8 @@ "deprecationReason": null }, { - "name": "createNote", - "description": "Indicates the user can perform `create_note` on this resource", + "name": "id", + "description": "Internal ID of the Grafana integration", "args": [ ], @@ -8718,7 +8492,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "ID", "ofType": null } }, @@ -8726,8 +8500,8 @@ "deprecationReason": null }, { - "name": "destroyEpic", - "description": "Indicates the user can perform `destroy_epic` on this resource", + "name": "token", + "description": "API token for the Grafana integration. Field is permanently masked.", "args": [ ], @@ -8736,16 +8510,16 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "isDeprecated": true, + "deprecationReason": "Plain text token has been masked for security reasons" }, { - "name": "readEpic", - "description": "Indicates the user can perform `read_epic` on this resource", + "name": "updatedAt", + "description": "Timestamp of the issue's last activity", "args": [ ], @@ -8754,181 +8528,302 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "Time", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Group", + "description": null, + "fields": [ { - "name": "readEpicIid", - "description": "Indicates the user can perform `read_epic_iid` on this resource", + "name": "autoDevopsEnabled", + "description": "Indicates whether Auto DevOps is enabled for all projects within this group", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "updateEpic", - "description": "Indicates the user can perform `update_epic` on this resource", + "name": "avatarUrl", + "description": "Avatar URL of the group", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "EpicState", - "description": "State of an epic.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "all", - "description": null, - "isDeprecated": false, - "deprecationReason": null }, { - "name": "opened", - "description": null, + "name": "board", + "description": "A single board of the group", + "args": [ + { + "name": "id", + "description": "Find a board by its ID", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Board", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "closed", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EpicConnection", - "description": "The connection type for Epic.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", + "name": "boards", + "description": "Boards of the group", "args": [ - + { + "name": "id", + "description": "Find a board by its ID", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "EpicEdge", - "ofType": null - } + "kind": "OBJECT", + "name": "BoardConnection", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "description", + "description": "Description of the namespace", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Epic", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "descriptionHtml", + "description": "The GitLab Flavored Markdown rendering of `description`", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EpicEdge", - "description": "An edge in a connection.", - "fields": [ + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "emailsDisabled", + "description": "Indicates if a group has email notifications disabled", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "epic", + "description": "Find a single epic", "args": [ - + { + "name": "startDate", + "description": "List items within a time frame where items.start_date is between startDate and endDate parameters (endDate parameter must be present)", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "endDate", + "description": "List items within a time frame where items.end_date is between startDate and endDate parameters (startDate parameter must be present)", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iid", + "description": "IID of the epic, e.g., \"1\"", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iids", + "description": "List of IIDs of epics, e.g., [1, 2]", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "state", + "description": "Filter epics by state", + "type": { + "kind": "ENUM", + "name": "EpicState", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "search", + "description": "Filter epics by title and description", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sort", + "description": "List epics by sort order", + "type": { + "kind": "ENUM", + "name": "EpicSort", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "authorUsername", + "description": "Filter epics by author", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "labelName", + "description": "Filter epics by labels", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "iidStartsWith", + "description": "Filter epics by iid for autocomplete", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "OBJECT", @@ -8937,94 +8832,193 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "EpicSort", - "description": "Roadmap sort values", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "start_date_desc", - "description": "Start date at descending order", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "start_date_asc", - "description": "Start date at ascending order", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "end_date_desc", - "description": "End date at descending order", - "isDeprecated": false, - "deprecationReason": null }, { - "name": "end_date_asc", - "description": "End date at ascending order", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "LabelConnection", - "description": "The connection type for Label.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", + "name": "epics", + "description": "Find epics", "args": [ - + { + "name": "startDate", + "description": "List items within a time frame where items.start_date is between startDate and endDate parameters (endDate parameter must be present)", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "endDate", + "description": "List items within a time frame where items.end_date is between startDate and endDate parameters (startDate parameter must be present)", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iid", + "description": "IID of the epic, e.g., \"1\"", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iids", + "description": "List of IIDs of epics, e.g., [1, 2]", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "state", + "description": "Filter epics by state", + "type": { + "kind": "ENUM", + "name": "EpicState", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "search", + "description": "Filter epics by title and description", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sort", + "description": "List epics by sort order", + "type": { + "kind": "ENUM", + "name": "EpicSort", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "authorUsername", + "description": "Filter epics by author", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "labelName", + "description": "Filter epics by labels", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "iidStartsWith", + "description": "Filter epics by iid for autocomplete", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "LabelEdge", - "ofType": null - } + "kind": "OBJECT", + "name": "EpicConnection", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "epicsEnabled", + "description": "Indicates if Epics are enabled for namespace", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Label", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "fullName", + "description": "Full name of the namespace", "args": [ ], @@ -9032,30 +9026,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "LabelEdge", - "description": "An edge in a connection.", - "fields": [ + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "fullPath", + "description": "Full path of the namespace", "args": [ ], @@ -9064,7 +9045,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, @@ -9072,35 +9053,22 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "groupTimelogsEnabled", + "description": "Indicates if Group timelogs are enabled for namespace", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Label", + "kind": "SCALAR", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Label", - "description": null, - "fields": [ + }, { - "name": "color", - "description": "Background color of the label", + "name": "id", + "description": "ID of the namespace", "args": [ ], @@ -9109,7 +9077,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, @@ -9117,54 +9085,119 @@ "deprecationReason": null }, { - "name": "description", - "description": "Description of the label (Markdown rendered as HTML for caching)", + "name": "lfsEnabled", + "description": "Indicates if Large File Storage (LFS) is enabled for namespace", "args": [ ], "type": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "descriptionHtml", - "description": "The GitLab Flavored Markdown rendering of `description`", + "name": "mentionsDisabled", + "description": "Indicates if a group is disabled from getting mentioned", "args": [ ], "type": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "id", - "description": "Label ID", + "name": "milestones", + "description": "Find milestones", "args": [ - + { + "name": "startDate", + "description": "List items within a time frame where items.start_date is between startDate and endDate parameters (endDate parameter must be present)", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "endDate", + "description": "List items within a time frame where items.end_date is between startDate and endDate parameters (startDate parameter must be present)", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "state", + "description": "Filter milestones by state", + "type": { + "kind": "ENUM", + "name": "MilestoneStateEnum", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "OBJECT", + "name": "MilestoneConnection", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "textColor", - "description": "Text color of the label", + "name": "name", + "description": "Name of the namespace", "args": [ ], @@ -9181,8 +9214,22 @@ "deprecationReason": null }, { - "name": "title", - "description": "Content of the label", + "name": "parent", + "description": "Parent group", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Group", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "path", + "description": "Path of the namespace", "args": [ ], @@ -9197,50 +9244,82 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UserConnection", - "description": "The connection type for User.", - "fields": [ + }, { - "name": "edges", - "description": "A list of edges.", + "name": "projectCreationLevel", + "description": "The permission level required to create projects in the group", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "UserEdge", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "projects", + "description": "Projects within this namespace", "args": [ - + { + "name": "includeSubgroups", + "description": "Include also subgroup projects", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", - "name": "User", + "name": "ProjectConnection", "ofType": null } }, @@ -9248,93 +9327,154 @@ "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "requestAccessEnabled", + "description": "Indicates if users can request access to namespace", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UserEdge", - "description": "An edge in a connection.", - "fields": [ + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "requireTwoFactorAuthentication", + "description": "Indicates if all users in this group are required to set up two-factor authentication", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "rootStorageStatistics", + "description": "Aggregated storage statistics of the namespace. Only available for root namespaces", "args": [ ], "type": { "kind": "OBJECT", - "name": "User", + "name": "RootStorageStatistics", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ + }, + { + "name": "shareWithGroupLock", + "description": "Indicates if sharing a project with another group within this group is prevented", + "args": [ - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EpicIssueConnection", - "description": "The connection type for EpicIssue.", - "fields": [ + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { - "name": "edges", - "description": "A list of edges.", + "name": "subgroupCreationLevel", + "description": "The permission level required to create subgroups within the group", "args": [ ], "type": { - "kind": "LIST", + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "timelogs", + "description": "Time logged in issues by group members", + "args": [ + { + "name": "startDate", + "description": "List time logs within a time range where the logged date is after start_date parameter.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "endDate", + "description": "List time logs within a time range where the logged date is before end_date parameter.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", - "name": "EpicIssueEdge", + "name": "TimelogConnection", "ofType": null } }, @@ -9342,17 +9482,31 @@ "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "twoFactorGracePeriod", + "description": "Time before two-factor authentication is enforced", "args": [ ], "type": { - "kind": "LIST", + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "userPermissions", + "description": "Permissions for the current user on the resource", + "args": [ + + ], + "type": { + "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", - "name": "EpicIssue", + "name": "GroupPermissions", "ofType": null } }, @@ -9360,8 +9514,22 @@ "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "visibility", + "description": "Visibility of the namespace", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "webUrl", + "description": "Web URL of the group", "args": [ ], @@ -9369,8 +9537,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -9387,12 +9555,12 @@ }, { "kind": "OBJECT", - "name": "EpicIssueEdge", - "description": "An edge in a connection.", + "name": "GroupPermissions", + "description": null, "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "readGroup", + "description": "Indicates the user can perform `read_group` on this resource", "args": [ ], @@ -9401,39 +9569,103 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "HealthStatus", + "description": "Health status of an issue or epic", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "onTrack", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "EpicIssue", - "ofType": null - }, + "name": "needsAttention", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "atRisk", + "description": null, "isDeprecated": false, "deprecationReason": null } ], + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "ID", + "description": "Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"VXNlci0xMA==\"`) or integer (such as `4`) input value will be accepted as an ID.", + "fields": null, "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { + "kind": "SCALAR", + "name": "Int", + "description": "Represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "IssuableState", + "description": "State of a GitLab issue or merge request", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "opened", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "closed", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "locked", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { "kind": "OBJECT", - "name": "EpicIssue", - "description": "Relationship between an epic and an issue", + "name": "Issue", + "description": null, "fields": [ { "name": "assignees", @@ -9734,24 +9966,6 @@ "deprecationReason": null }, { - "name": "epicIssueId", - "description": "ID of the epic-issue relation", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { "name": "healthStatus", "description": "Current health status. Available only when feature flag `save_issuable_health_status` is enabled.", "args": [ @@ -9766,20 +9980,6 @@ "deprecationReason": null }, { - "name": "id", - "description": "Global ID of the epic-issue relation", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { "name": "iid", "description": "Internal ID of the issue", "args": [ @@ -10002,20 +10202,6 @@ "deprecationReason": null }, { - "name": "relationPath", - "description": "URI path of the epic-issue relation", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { "name": "relativePosition", "description": "Relative position of the issue (used for positioning in epic tree and issue boards)", "args": [ @@ -10287,6 +10473,118 @@ }, { "kind": "OBJECT", + "name": "IssueConnection", + "description": "The connection type for Issue.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "IssueEdge", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A list of nodes.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Issue", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "IssueEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "node", + "description": "The item at the end of the edge.", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Issue", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", "name": "IssuePermissions", "description": "Check permissions for the current user on a issue", "fields": [ @@ -10443,6 +10741,461 @@ "possibleTypes": null }, { + "kind": "INPUT_OBJECT", + "name": "IssueSetConfidentialInput", + "description": "Autogenerated input type of IssueSetConfidential", + "fields": null, + "inputFields": [ + { + "name": "projectPath", + "description": "The project the issue to mutate is in", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "iid", + "description": "The iid of the issue to mutate", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "confidential", + "description": "Whether or not to set the issue as a confidential.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "IssueSetConfidentialPayload", + "description": "Autogenerated return type of IssueSetConfidential", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "errors", + "description": "Reasons why the mutation failed.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "issue", + "description": "The issue after mutation", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Issue", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "IssueSetDueDateInput", + "description": "Autogenerated input type of IssueSetDueDate", + "fields": null, + "inputFields": [ + { + "name": "projectPath", + "description": "The project the issue to mutate is in", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "iid", + "description": "The iid of the issue to mutate", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "dueDate", + "description": "The desired due date for the issue", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "IssueSetDueDatePayload", + "description": "Autogenerated return type of IssueSetDueDate", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "errors", + "description": "Reasons why the mutation failed.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "issue", + "description": "The issue after mutation", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Issue", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "IssueSetWeightInput", + "description": "Autogenerated input type of IssueSetWeight", + "fields": null, + "inputFields": [ + { + "name": "projectPath", + "description": "The project the issue to mutate is in", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "iid", + "description": "The iid of the issue to mutate", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "weight", + "description": "The desired weight for the issue", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "IssueSetWeightPayload", + "description": "Autogenerated return type of IssueSetWeight", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "errors", + "description": "Reasons why the mutation failed.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "issue", + "description": "The issue after mutation", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Issue", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "IssueSort", + "description": "Values for sorting issues", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "updated_desc", + "description": "Updated at descending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "updated_asc", + "description": "Updated at ascending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_desc", + "description": "Created at descending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "created_asc", + "description": "Created at ascending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DUE_DATE_ASC", + "description": "Due date by ascending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "DUE_DATE_DESC", + "description": "Due date by descending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RELATIVE_POSITION_ASC", + "description": "Relative position by ascending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "WEIGHT_ASC", + "description": "Weight by ascending order", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "WEIGHT_DESC", + "description": "Weight by descending order", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { "kind": "ENUM", "name": "IssueState", "description": "State of a GitLab issue", @@ -10473,12 +11226,12 @@ }, { "kind": "OBJECT", - "name": "TaskCompletionStatus", - "description": "Completion status of tasks", + "name": "Label", + "description": null, "fields": [ { - "name": "completedCount", - "description": "Number of completed tasks", + "name": "color", + "description": "Background color of the label", "args": [ ], @@ -10487,7 +11240,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -10495,8 +11248,36 @@ "deprecationReason": null }, { - "name": "count", - "description": "Number of total tasks", + "name": "description", + "description": "Description of the label (Markdown rendered as HTML for caching)", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "descriptionHtml", + "description": "The GitLab Flavored Markdown rendering of `description`", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "Label ID", "args": [ ], @@ -10505,7 +11286,43 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "ID", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "textColor", + "description": "Text color of the label", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "Content of the label", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -10522,175 +11339,79 @@ }, { "kind": "OBJECT", - "name": "DesignCollection", - "description": "A collection of designs.", + "name": "LabelConnection", + "description": "The connection type for Label.", "fields": [ { - "name": "design", - "description": "Find a specific design", + "name": "edges", + "description": "A list of edges.", "args": [ - { - "name": "id", - "description": "Find a design by its ID", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "filename", - "description": "Find a design by its filename", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "Design", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "LabelEdge", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "designAtVersion", - "description": "Find a design as of a version", + "name": "nodes", + "description": "A list of nodes.", "args": [ - { - "name": "id", - "description": "The Global ID of the design at this version", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "DesignAtVersion", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Label", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "designs", - "description": "All designs for the design collection", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ - { - "name": "ids", - "description": "Filters designs by their ID", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "filenames", - "description": "Filters designs by their filename", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "atVersion", - "description": "Filters designs to only those that existed at the version. If argument is omitted or nil then all designs will reflect the latest version", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", - "name": "DesignConnection", + "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "LabelEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "issue", - "description": "Issue associated with the design collection", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -10698,8 +11419,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Issue", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -10707,132 +11428,120 @@ "deprecationReason": null }, { - "name": "project", - "description": "Project associated with the design collection", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { + "kind": "OBJECT", + "name": "Label", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "MarkAsSpamSnippetInput", + "description": "Autogenerated input type of MarkAsSpamSnippet", + "fields": null, + "inputFields": [ + { + "name": "id", + "description": "The global id of the snippet to update", + "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Project", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "version", - "description": "A specific version", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "MarkAsSpamSnippetPayload", + "description": "Autogenerated return type of MarkAsSpamSnippet", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ - { - "name": "sha", - "description": "The SHA256 of a specific version", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "id", - "description": "The Global ID of the version", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "DesignVersion", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "versions", - "description": "All versions related to all designs, ordered newest first", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ - { - "name": "earlierOrEqualToSha", - "description": "The SHA256 of the most recent acceptable version", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "earlierOrEqualToId", - "description": "The Global ID of the most recent acceptable version", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignVersionConnection", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null + }, + { + "name": "snippet", + "description": "The snippet after mutation", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Snippet", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null } ], "inputFields": null, @@ -10844,12 +11553,26 @@ }, { "kind": "OBJECT", - "name": "Issue", + "name": "MergeRequest", "description": null, "fields": [ { + "name": "allowCollaboration", + "description": "Indicates if members of the target project can push to the fork", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "assignees", - "description": "Assignees of the issue", + "description": "Assignees of the merge request", "args": [ { "name": "after", @@ -10901,8 +11624,8 @@ "deprecationReason": null }, { - "name": "author", - "description": "User that created the issue", + "name": "createdAt", + "description": "Timestamp of when the merge request was created", "args": [ ], @@ -10910,8 +11633,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "User", + "kind": "SCALAR", + "name": "Time", "ofType": null } }, @@ -10919,58 +11642,22 @@ "deprecationReason": null }, { - "name": "closedAt", - "description": "Timestamp of when the issue was closed", + "name": "defaultMergeCommitMessage", + "description": "Default merge commit message of the merge request", "args": [ ], "type": { "kind": "SCALAR", - "name": "Time", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "confidential", - "description": "Indicates the issue is confidential", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "Timestamp of when the issue was created", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { "name": "description", - "description": "Description of the issue", + "description": "Description of the merge request (Markdown rendered as HTML for caching)", "args": [ ], @@ -10997,36 +11684,36 @@ "deprecationReason": null }, { - "name": "designCollection", - "description": "Collection of design images associated with this issue", + "name": "diffHeadSha", + "description": "Diff head SHA of the merge request", "args": [ ], "type": { - "kind": "OBJECT", - "name": "DesignCollection", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "designs", - "description": "Deprecated. Use `designCollection`", + "name": "diffRefs", + "description": "References of the base SHA, the head SHA, and the start SHA for this merge request", "args": [ ], "type": { "kind": "OBJECT", - "name": "DesignCollection", + "name": "DiffRefs", "ofType": null }, - "isDeprecated": true, - "deprecationReason": "Use designCollection" + "isDeprecated": false, + "deprecationReason": null }, { "name": "discussionLocked", - "description": "Indicates discussion is locked on the issue", + "description": "Indicates if comments on the merge request are locked to members only", "args": [ ], @@ -11101,7 +11788,7 @@ }, { "name": "downvotes", - "description": "Number of downvotes the issue has received", + "description": "Number of downvotes for the merge request", "args": [ ], @@ -11118,50 +11805,54 @@ "deprecationReason": null }, { - "name": "dueDate", - "description": "Due date of the issue", + "name": "forceRemoveSourceBranch", + "description": "Indicates if the project settings will lead to source branch deletion after merge", "args": [ ], "type": { "kind": "SCALAR", - "name": "Time", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "epic", - "description": "Epic to which this issue belongs", + "name": "headPipeline", + "description": "The pipeline running on the branch HEAD of the merge request", "args": [ ], "type": { "kind": "OBJECT", - "name": "Epic", + "name": "Pipeline", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "healthStatus", - "description": "Current health status. Available only when feature flag `save_issuable_health_status` is enabled.", + "name": "id", + "description": "ID of the merge request", "args": [ ], "type": { - "kind": "ENUM", - "name": "HealthStatus", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { "name": "iid", - "description": "Internal ID of the issue", + "description": "Internal ID of the merge request", "args": [ ], @@ -11178,8 +11869,22 @@ "deprecationReason": null }, { + "name": "inProgressMergeCommitSha", + "description": "Commit SHA of the merge request if merge is in progress", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "labels", - "description": "Labels of the issue", + "description": "Labels of the merge request", "args": [ { "name": "after", @@ -11231,8 +11936,110 @@ "deprecationReason": null }, { + "name": "mergeCommitMessage", + "description": "Deprecated - renamed to defaultMergeCommitMessage", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": true, + "deprecationReason": "Renamed to defaultMergeCommitMessage" + }, + { + "name": "mergeCommitSha", + "description": "SHA of the merge request commit (set once merged)", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeError", + "description": "Error message due to a merge error", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeOngoing", + "description": "Indicates if a merge is currently occurring", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeStatus", + "description": "Status of the merge request", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeWhenPipelineSucceeds", + "description": "Indicates if the merge has been set to be merged when its pipeline succeeds (MWPS)", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeableDiscussionsState", + "description": "Indicates if all discussions in the merge request have been resolved, allowing the merge request to be merged", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "milestone", - "description": "Milestone of the issue", + "description": "The milestone of the merge request", "args": [ ], @@ -11303,7 +12110,7 @@ }, { "name": "participants", - "description": "List of participants in the issue", + "description": "Participants in the merge request", "args": [ { "name": "after", @@ -11355,26 +12162,86 @@ "deprecationReason": null }, { - "name": "reference", - "description": "Internal reference of the issue. Returned in shortened format by default", + "name": "pipelines", + "description": "Pipelines for the merge request", "args": [ { - "name": "full", - "description": "Boolean option specifying whether the reference should be returned in full", + "name": "status", + "description": "Filter pipelines by their status", + "type": { + "kind": "ENUM", + "name": "PipelineStatusEnum", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "ref", + "description": "Filter pipelines by the ref they are run for", "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, - "defaultValue": "false" + "defaultValue": null + }, + { + "name": "sha", + "description": "Filter pipelines by the sha of the commit they are run for", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "PipelineConnection", "ofType": null } }, @@ -11382,22 +12249,26 @@ "deprecationReason": null }, { - "name": "relativePosition", - "description": "Relative position of the issue (used for positioning in epic tree and issue boards)", + "name": "project", + "description": "Alias for target_project", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Project", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "state", - "description": "State of the issue", + "name": "projectId", + "description": "ID of the merge request project", "args": [ ], @@ -11405,8 +12276,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "IssueState", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -11414,26 +12285,22 @@ "deprecationReason": null }, { - "name": "subscribed", - "description": "Indicates the currently logged in user is subscribed to the issue", + "name": "rebaseCommitSha", + "description": "Rebase commit SHA of the merge request", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "taskCompletionStatus", - "description": "Task completion status of the issue", + "name": "rebaseInProgress", + "description": "Indicates if there is a rebase currently in progress for the merge request", "args": [ ], @@ -11441,8 +12308,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "TaskCompletionStatus", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -11450,17 +12317,26 @@ "deprecationReason": null }, { - "name": "timeEstimate", - "description": "Time estimate of the issue", + "name": "reference", + "description": "Internal reference of the merge request. Returned in shortened format by default", "args": [ - + { + "name": "full", + "description": "Boolean option specifying whether the reference should be returned in full", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -11468,8 +12344,8 @@ "deprecationReason": null }, { - "name": "title", - "description": "Title of the issue", + "name": "shouldBeRebased", + "description": "Indicates if the merge request will be rebased", "args": [ ], @@ -11478,7 +12354,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -11486,22 +12362,22 @@ "deprecationReason": null }, { - "name": "titleHtml", - "description": "The GitLab Flavored Markdown rendering of `title`", + "name": "shouldRemoveSourceBranch", + "description": "Indicates if the source branch of the merge request will be deleted after merge", "args": [ ], "type": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "totalTimeSpent", - "description": "Total time reported as spent on the issue", + "name": "sourceBranch", + "description": "Source branch of the merge request", "args": [ ], @@ -11510,7 +12386,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -11518,8 +12394,8 @@ "deprecationReason": null }, { - "name": "updatedAt", - "description": "Timestamp of when the issue was last updated", + "name": "sourceBranchExists", + "description": "Indicates if the source branch of the merge request exists", "args": [ ], @@ -11528,7 +12404,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "Boolean", "ofType": null } }, @@ -11536,44 +12412,36 @@ "deprecationReason": null }, { - "name": "upvotes", - "description": "Number of upvotes the issue has received", + "name": "sourceProject", + "description": "Source project of the merge request", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } + "kind": "OBJECT", + "name": "Project", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "userNotesCount", - "description": "Number of user notes of the issue", + "name": "sourceProjectId", + "description": "ID of the merge request source project", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "state", + "description": "State of the merge request", "args": [ ], @@ -11581,8 +12449,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "IssuePermissions", + "kind": "ENUM", + "name": "MergeRequestState", "ofType": null } }, @@ -11590,8 +12458,8 @@ "deprecationReason": null }, { - "name": "webPath", - "description": "Web path of the issue", + "name": "subscribed", + "description": "Indicates if the currently logged in user is subscribed to this merge request", "args": [ ], @@ -11600,7 +12468,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -11608,8 +12476,8 @@ "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the issue", + "name": "targetBranch", + "description": "Target branch of the merge request", "args": [ ], @@ -11626,77 +12494,35 @@ "deprecationReason": null }, { - "name": "weight", - "description": "Weight of the issue", + "name": "targetProject", + "description": "Target project of the merge request", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Project", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Noteable", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "HealthStatus", - "description": "Health status of an issue or epic", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "onTrack", - "description": null, - "isDeprecated": false, - "deprecationReason": null }, { - "name": "needsAttention", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "atRisk", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DesignConnection", - "description": "The connection type for Design.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", + "name": "targetProjectId", + "description": "ID of the merge request target project", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignEdge", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -11704,17 +12530,17 @@ "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "taskCompletionStatus", + "description": "Completion status of tasks", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", - "name": "Design", + "name": "TaskCompletionStatus", "ofType": null } }, @@ -11722,8 +12548,8 @@ "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "timeEstimate", + "description": "Time estimate of the merge request", "args": [ ], @@ -11731,30 +12557,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DesignEdge", - "description": "An edge in a connection.", - "fields": [ + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "title", + "description": "Title of the merge request", "args": [ ], @@ -11771,35 +12584,22 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "titleHtml", + "description": "The GitLab Flavored Markdown rendering of `title`", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Design", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Design", - "description": "A single design", - "fields": [ + }, { - "name": "diffRefs", - "description": "The diff refs for this design", + "name": "totalTimeSpent", + "description": "Total time reported as spent on the merge request", "args": [ ], @@ -11807,8 +12607,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DiffRefs", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -11816,56 +12616,17 @@ "deprecationReason": null }, { - "name": "discussions", - "description": "All discussions on this noteable", + "name": "updatedAt", + "description": "Timestamp of when the merge request was last updated", "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DiscussionConnection", + "kind": "SCALAR", + "name": "Time", "ofType": null } }, @@ -11873,8 +12634,8 @@ "deprecationReason": null }, { - "name": "event", - "description": "How this design was changed in the current version", + "name": "upvotes", + "description": "Number of upvotes for the merge request", "args": [ ], @@ -11882,8 +12643,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "DesignVersionEvent", + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -11891,26 +12652,22 @@ "deprecationReason": null }, { - "name": "filename", - "description": "The filename of the design", + "name": "userNotesCount", + "description": "User notes count of the merge request", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "fullPath", - "description": "The full path to the design file", + "name": "userPermissions", + "description": "Permissions for the current user on the resource", "args": [ ], @@ -11918,8 +12675,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "MergeRequestPermissions", "ofType": null } }, @@ -11927,26 +12684,22 @@ "deprecationReason": null }, { - "name": "id", - "description": "The ID of this design", + "name": "webUrl", + "description": "Web URL of the merge request", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "image", - "description": "The URL of the image", + "name": "workInProgress", + "description": "Indicates if the merge request is a work in progress (WIP)", "args": [ ], @@ -11955,25 +12708,42 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ { - "name": "issue", - "description": "The issue the design belongs to", + "kind": "INTERFACE", + "name": "Noteable", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "MergeRequestConnection", + "description": "The connection type for MergeRequest.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", - "name": "Issue", + "name": "MergeRequestEdge", "ofType": null } }, @@ -11981,56 +12751,17 @@ "deprecationReason": null }, { - "name": "notes", - "description": "All notes on this noteable", + "name": "nodes", + "description": "A list of nodes.", "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", - "name": "NoteConnection", + "name": "MergeRequest", "ofType": null } }, @@ -12038,8 +12769,8 @@ "deprecationReason": null }, { - "name": "notesCount", - "description": "The total count of user-created notes for this design", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], @@ -12047,17 +12778,30 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "PageInfo", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "MergeRequestEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "project", - "description": "The project the design belongs to", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -12065,8 +12809,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Project", + "kind": "SCALAR", + "name": "String", "ofType": null } }, @@ -12074,78 +12818,15 @@ "deprecationReason": null }, { - "name": "versions", - "description": "All versions related to this design ordered newest first", + "name": "node", + "description": "The item at the end of the edge.", "args": [ - { - "name": "earlierOrEqualToSha", - "description": "The SHA256 of the most recent acceptable version", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "earlierOrEqualToId", - "description": "The Global ID of the most recent acceptable version", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } + ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DesignVersionConnection", - "ofType": null - } + "kind": "OBJECT", + "name": "MergeRequest", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -12153,46 +12834,19 @@ ], "inputFields": null, "interfaces": [ - { - "kind": "INTERFACE", - "name": "Noteable", - "ofType": null - }, - { - "kind": "INTERFACE", - "name": "DesignFields", - "ofType": null - } + ], "enumValues": null, "possibleTypes": null }, { - "kind": "INTERFACE", - "name": "DesignFields", - "description": null, + "kind": "OBJECT", + "name": "MergeRequestPermissions", + "description": "Check permissions for the current user on a merge request", "fields": [ { - "name": "diffRefs", - "description": "The diff refs for this design", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DiffRefs", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "event", - "description": "How this design was changed in the current version", + "name": "adminMergeRequest", + "description": "Indicates the user can perform `admin_merge_request` on this resource", "args": [ ], @@ -12200,8 +12854,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "DesignVersionEvent", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -12209,8 +12863,8 @@ "deprecationReason": null }, { - "name": "filename", - "description": "The filename of the design", + "name": "cherryPickOnCurrentMergeRequest", + "description": "Indicates the user can perform `cherry_pick_on_current_merge_request` on this resource", "args": [ ], @@ -12219,7 +12873,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -12227,8 +12881,8 @@ "deprecationReason": null }, { - "name": "fullPath", - "description": "The full path to the design file", + "name": "createNote", + "description": "Indicates the user can perform `create_note` on this resource", "args": [ ], @@ -12237,7 +12891,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -12245,8 +12899,8 @@ "deprecationReason": null }, { - "name": "id", - "description": "The ID of this design", + "name": "pushToSourceBranch", + "description": "Indicates the user can perform `push_to_source_branch` on this resource", "args": [ ], @@ -12255,7 +12909,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, @@ -12263,8 +12917,8 @@ "deprecationReason": null }, { - "name": "image", - "description": "The URL of the image", + "name": "readMergeRequest", + "description": "Indicates the user can perform `read_merge_request` on this resource", "args": [ ], @@ -12273,7 +12927,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -12281,8 +12935,8 @@ "deprecationReason": null }, { - "name": "issue", - "description": "The issue the design belongs to", + "name": "removeSourceBranch", + "description": "Indicates the user can perform `remove_source_branch` on this resource", "args": [ ], @@ -12290,8 +12944,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Issue", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -12299,8 +12953,8 @@ "deprecationReason": null }, { - "name": "notesCount", - "description": "The total count of user-created notes for this design", + "name": "revertOnCurrentMergeRequest", + "description": "Indicates the user can perform `revert_on_current_merge_request` on this resource", "args": [ ], @@ -12309,7 +12963,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "Boolean", "ofType": null } }, @@ -12317,8 +12971,8 @@ "deprecationReason": null }, { - "name": "project", - "description": "The project the design belongs to", + "name": "updateMergeRequest", + "description": "Indicates the user can perform `update_merge_request` on this resource", "args": [ ], @@ -12326,8 +12980,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Project", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -12336,131 +12990,115 @@ } ], "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Design", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "DesignAtVersion", - "ofType": null - } - ] - }, - { - "kind": "ENUM", - "name": "DesignVersionEvent", - "description": "Mutation event of a design within a version", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "NONE", - "description": "No change", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CREATION", - "description": "A creation event", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "MODIFICATION", - "description": "A modification event", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DELETION", - "description": "A deletion event", - "isDeprecated": false, - "deprecationReason": null - } + "interfaces": [ + ], + "enumValues": null, "possibleTypes": null }, { - "kind": "OBJECT", - "name": "DesignVersionConnection", - "description": "The connection type for DesignVersion.", - "fields": [ + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetAssigneesInput", + "description": "Autogenerated input type of MergeRequestSetAssignees", + "fields": null, + "inputFields": [ { - "name": "edges", - "description": "A list of edges.", - "args": [ - - ], + "name": "projectPath", + "description": "The project the merge request to mutate is in", "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignVersionEdge", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "nodes", - "description": "A list of nodes.", - "args": [ - - ], + "name": "iid", + "description": "The iid of the merge request to mutate", "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignVersion", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [ - - ], + "name": "assigneeUsernames", + "description": "The usernames to assign to the merge request. Replaces existing assignees by default.\n", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null + }, + { + "name": "operationMode", + "description": "The operation to perform. Defaults to REPLACE.\n", + "type": { + "kind": "ENUM", + "name": "MutationOperationMode", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null } ], - "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "DesignVersionEdge", - "description": "An edge in a connection.", + "name": "MergeRequestSetAssigneesPayload", + "description": "Autogenerated return type of MergeRequestSetAssignees", "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -12468,23 +13106,31 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "mergeRequest", + "description": "The merge request after mutation", "args": [ ], "type": { "kind": "OBJECT", - "name": "DesignVersion", + "name": "MergeRequest", "ofType": null }, "isDeprecated": false, @@ -12499,210 +13145,108 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "DesignVersion", - "description": "A specific version in which designs were added, modified or deleted", - "fields": [ + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetLabelsInput", + "description": "Autogenerated input type of MergeRequestSetLabels", + "fields": null, + "inputFields": [ { - "name": "designAtVersion", - "description": "A particular design as of this version, provided it is visible at this version", - "args": [ - { - "name": "id", - "description": "The ID of the DesignAtVersion", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "designId", - "description": "The ID of a specific design", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "filename", - "description": "The filename of a specific design", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], + "name": "projectPath", + "description": "The project the merge request to mutate is in", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignAtVersion", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "designs", - "description": "All designs that were changed in the version", - "args": [ - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], + "name": "iid", + "description": "The iid of the merge request to mutate", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignConnection", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "designsAtVersion", - "description": "All designs that are visible at this version, as of this version", - "args": [ - { - "name": "ids", - "description": "Filters designs by their ID", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "filenames", - "description": "Filters designs by their filename", - "type": { - "kind": "LIST", + "name": "labelIds", + "description": "The Label IDs to set. Replaces existing labels by default.\n", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "ID", + "ofType": null } - }, - "defaultValue": null - }, - { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null + } } + }, + "defaultValue": null + }, + { + "name": "operationMode", + "description": "Changes the operation mode. Defaults to REPLACE.\n", + "type": { + "kind": "ENUM", + "name": "MutationOperationMode", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "MergeRequestSetLabelsPayload", + "description": "Autogenerated return type of MergeRequestSetLabels", + "fields": [ + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DesignAtVersionConnection", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "id", - "description": "ID of the design version", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -12710,28 +13254,32 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "sha", - "description": "SHA of the design version", + "name": "mergeRequest", + "description": "The merge request after mutation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "OBJECT", + "name": "MergeRequest", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -12745,80 +13293,90 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "DesignAtVersionConnection", - "description": "The connection type for DesignAtVersion.", - "fields": [ + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetLockedInput", + "description": "Autogenerated input type of MergeRequestSetLocked", + "fields": null, + "inputFields": [ { - "name": "edges", - "description": "A list of edges.", - "args": [ - - ], + "name": "projectPath", + "description": "The project the merge request to mutate is in", "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignAtVersionEdge", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "nodes", - "description": "A list of nodes.", - "args": [ - - ], + "name": "iid", + "description": "The iid of the merge request to mutate", "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DesignAtVersion", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [ - - ], + "name": "locked", + "description": "Whether or not to lock the merge request.\n", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null } ], - "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "DesignAtVersionEdge", - "description": "An edge in a connection.", + "name": "MergeRequestSetLockedPayload", + "description": "Autogenerated return type of MergeRequestSetLocked", "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -12826,23 +13384,31 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "mergeRequest", + "description": "The merge request after mutation", "args": [ ], "type": { "kind": "OBJECT", - "name": "DesignAtVersion", + "name": "MergeRequest", "ofType": null }, "isDeprecated": false, @@ -12857,103 +13423,86 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "DesignAtVersion", - "description": "A design pinned to a specific version. The image field reflects the design as of the associated version.", - "fields": [ + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetMilestoneInput", + "description": "Autogenerated input type of MergeRequestSetMilestone", + "fields": null, + "inputFields": [ { - "name": "design", - "description": "The underlying design.", - "args": [ - - ], + "name": "projectPath", + "description": "The project the merge request to mutate is in", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Design", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "diffRefs", - "description": "The diff refs for this design", - "args": [ - - ], + "name": "iid", + "description": "The iid of the merge request to mutate", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DiffRefs", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "event", - "description": "How this design was changed in the current version", - "args": [ - - ], + "name": "milestoneId", + "description": "The milestone to assign to the merge request.\n", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "DesignVersionEvent", - "ofType": null - } + "kind": "SCALAR", + "name": "ID", + "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "filename", - "description": "The filename of the design", - "args": [ - - ], + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - }, + "defaultValue": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "MergeRequestSetMilestonePayload", + "description": "Autogenerated return type of MergeRequestSetMilestone", + "fields": [ { - "name": "fullPath", - "description": "The full path to the design file", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "id", - "description": "The ID of this design", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -12961,172 +13510,161 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "image", - "description": "The URL of the image", + "name": "mergeRequest", + "description": "The merge request after mutation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "MergeRequest", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "issue", - "description": "The issue the design belongs to", - "args": [ + } + ], + "inputFields": null, + "interfaces": [ - ], + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetSubscriptionInput", + "description": "Autogenerated input type of MergeRequestSetSubscription", + "fields": null, + "inputFields": [ + { + "name": "projectPath", + "description": "The project the merge request to mutate is in", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Issue", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "notesCount", - "description": "The total count of user-created notes for this design", - "args": [ - - ], + "name": "iid", + "description": "The iid of the merge request to mutate", "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "ID", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "project", - "description": "The project the design belongs to", - "args": [ - - ], + "name": "subscribedState", + "description": "The desired state of the subscription", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Project", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "version", - "description": "The version this design-at-versions is pinned to", - "args": [ - - ], + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DesignVersion", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "DesignFields", - "ofType": null + "defaultValue": null } ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "EpicDescendantCount", - "description": "Counts of descendent epics.", + "name": "MergeRequestSetSubscriptionPayload", + "description": "Autogenerated return type of MergeRequestSetSubscription", "fields": [ { - "name": "closedEpics", - "description": "Number of closed sub-epics", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "closedIssues", - "description": "Number of closed epic issues", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "openedEpics", - "description": "Number of opened sub-epics", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "openedIssues", - "description": "Number of opened epic issues", + "name": "mergeRequest", + "description": "The merge request after mutation", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "MergeRequest", "ofType": null }, "isDeprecated": false, @@ -13141,88 +13679,122 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "EpicDescendantWeights", - "description": "Total weight of open and closed descendant issues", - "fields": [ + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetWipInput", + "description": "Autogenerated input type of MergeRequestSetWip", + "fields": null, + "inputFields": [ { - "name": "closedIssues", - "description": "Total weight of completed (closed) issues in this epic, including epic descendants", - "args": [ - - ], + "name": "projectPath", + "description": "The project the merge request to mutate is in", "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "openedIssues", - "description": "Total weight of opened issues in this epic, including epic descendants", - "args": [ - - ], + "name": "iid", + "description": "The iid of the merge request to mutate", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "wip", + "description": "Whether or not to set the merge request as a WIP.\n", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "type": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null } ], - "inputFields": null, - "interfaces": [ - - ], + "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "EpicHealthStatus", - "description": "Health status of child issues", + "name": "MergeRequestSetWipPayload", + "description": "Autogenerated return type of MergeRequestSetWip", "fields": [ { - "name": "issuesAtRisk", - "description": "Number of issues at risk", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issuesNeedingAttention", - "description": "Number of issues that need attention", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issuesOnTrack", - "description": "Number of issues on track", + "name": "mergeRequest", + "description": "The merge request after mutation", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "MergeRequest", "ofType": null }, "isDeprecated": false, @@ -13237,80 +13809,48 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "TimelogConnection", - "description": "The connection type for Timelog.", - "fields": [ + "kind": "ENUM", + "name": "MergeRequestState", + "description": "State of a GitLab merge request", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ { - "name": "edges", - "description": "A list of edges.", - "args": [ - - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "TimelogEdge", - "ofType": null - } - }, + "name": "opened", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", - "args": [ - - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Timelog", - "ofType": null - } - }, + "name": "closed", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } - }, + "name": "locked", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "merged", + "description": null, "isDeprecated": false, "deprecationReason": null } ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "TimelogEdge", - "description": "An edge in a connection.", + "name": "Metadata", + "description": null, "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "revision", + "description": "Revision", "args": [ ], @@ -13327,15 +13867,19 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "version", + "description": "Version", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Timelog", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -13350,12 +13894,12 @@ }, { "kind": "OBJECT", - "name": "Timelog", - "description": null, + "name": "Milestone", + "description": "Represents a milestone.", "fields": [ { - "name": "date", - "description": "The date when the time tracked was spent at", + "name": "createdAt", + "description": "Timestamp of milestone creation", "args": [ ], @@ -13372,40 +13916,36 @@ "deprecationReason": null }, { - "name": "issue", - "description": "The issue that logged time was added to", + "name": "description", + "description": "Description of the milestone", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Issue", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "timeSpent", - "description": "The time spent displayed in seconds", + "name": "dueDate", + "description": "Timestamp of the milestone due date", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "user", - "description": "The user that logged the time", + "name": "id", + "description": "ID of the milestone", "args": [ ], @@ -13413,30 +13953,31 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "User", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ + }, + { + "name": "startDate", + "description": "Timestamp of the milestone start date", + "args": [ - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectStatistics", - "description": null, - "fields": [ + ], + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { - "name": "buildArtifactsSize", - "description": "Build artifacts size of the project", + "name": "state", + "description": "State of the milestone", "args": [ ], @@ -13444,8 +13985,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Int", + "kind": "ENUM", + "name": "MilestoneStateEnum", "ofType": null } }, @@ -13453,8 +13994,8 @@ "deprecationReason": null }, { - "name": "commitCount", - "description": "Commit count of the project", + "name": "title", + "description": "Title of the milestone", "args": [ ], @@ -13463,7 +14004,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -13471,8 +14012,8 @@ "deprecationReason": null }, { - "name": "lfsObjectsSize", - "description": "Large File Storage (LFS) object size of the project", + "name": "updatedAt", + "description": "Timestamp of last milestone update", "args": [ ], @@ -13481,7 +14022,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "Time", "ofType": null } }, @@ -13489,8 +14030,8 @@ "deprecationReason": null }, { - "name": "packagesSize", - "description": "Packages size of the project", + "name": "webPath", + "description": "Web path of the milestone", "args": [ ], @@ -13499,25 +14040,38 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "MilestoneConnection", + "description": "The connection type for Milestone.", + "fields": [ { - "name": "repositorySize", - "description": "Repository size of the project", + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "MilestoneEdge", "ofType": null } }, @@ -13525,17 +14079,17 @@ "deprecationReason": null }, { - "name": "storageSize", - "description": "Storage size of the project", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "Milestone", "ofType": null } }, @@ -13543,15 +14097,19 @@ "deprecationReason": null }, { - "name": "wikiSize", - "description": "Wiki size of the project", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -13566,12 +14124,12 @@ }, { "kind": "OBJECT", - "name": "Repository", - "description": null, + "name": "MilestoneEdge", + "description": "An edge in a connection.", "fields": [ { - "name": "empty", - "description": "Indicates repository has no visible content", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -13580,7 +14138,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -13588,646 +14146,1019 @@ "deprecationReason": null }, { - "name": "exists", - "description": "Indicates a corresponding Git repository exists on disk", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } + "kind": "OBJECT", + "name": "Milestone", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "rootRef", - "description": "Default branch of the repository", - "args": [ + } + ], + "inputFields": null, + "interfaces": [ - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "MilestoneStateEnum", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "active", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "tree", - "description": "Tree of the repository", - "args": [ - { - "name": "path", - "description": "The path to get the tree for. Default value is the root of the repository", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": "\"\"" - }, - { - "name": "ref", - "description": "The commit ref to get the tree for. Default value is HEAD", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": "\"head\"" - }, - { - "name": "recursive", - "description": "Used to get a recursive tree. Default is false", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "OBJECT", - "name": "Tree", - "ofType": null - }, + "name": "closed", + "description": null, "isDeprecated": false, "deprecationReason": null } ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "MoveType", + "description": "The position to which the adjacent object should be moved", + "fields": null, "inputFields": null, - "interfaces": [ - + "interfaces": null, + "enumValues": [ + { + "name": "before", + "description": "The adjacent object will be moved before the object that is being moved", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "after", + "description": "The adjacent object will be moved after the object that is being moved", + "isDeprecated": false, + "deprecationReason": null + } ], - "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "Tree", + "name": "Mutation", "description": null, "fields": [ { - "name": "blobs", - "description": "Blobs of the tree", + "name": "addAwardEmoji", + "description": null, "args": [ { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "first", - "description": "Returns the first _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AddAwardEmojiInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "AddAwardEmojiPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "adminSidekiqQueuesDeleteJobs", + "description": null, + "args": [ { - "name": "last", - "description": "Returns the last _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AdminSidekiqQueuesDeleteJobsInput", + "ofType": null + } }, "defaultValue": null } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "BlobConnection", - "ofType": null - } + "kind": "OBJECT", + "name": "AdminSidekiqQueuesDeleteJobsPayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "lastCommit", - "description": "Last commit for the tree", + "name": "createDiffNote", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CreateDiffNoteInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { "kind": "OBJECT", - "name": "Commit", + "name": "CreateDiffNotePayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "submodules", - "description": "Sub-modules of the tree", + "name": "createEpic", + "description": null, "args": [ { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CreateEpicInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "CreateEpicPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createImageDiffNote", + "description": null, + "args": [ { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CreateImageDiffNoteInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "CreateImageDiffNotePayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createNote", + "description": null, + "args": [ { - "name": "first", - "description": "Returns the first _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CreateNoteInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "CreateNotePayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createSnippet", + "description": null, + "args": [ { - "name": "last", - "description": "Returns the last _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CreateSnippetInput", + "ofType": null + } }, "defaultValue": null } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubmoduleConnection", - "ofType": null - } + "kind": "OBJECT", + "name": "CreateSnippetPayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "trees", - "description": "Trees of the tree", + "name": "designManagementDelete", + "description": null, "args": [ { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DesignManagementDeleteInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "DesignManagementDeletePayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "designManagementUpload", + "description": null, + "args": [ { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DesignManagementUploadInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "DesignManagementUploadPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "destroyNote", + "description": null, + "args": [ { - "name": "first", - "description": "Returns the first _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DestroyNoteInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "DestroyNotePayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "destroySnippet", + "description": null, + "args": [ { - "name": "last", - "description": "Returns the last _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "DestroySnippetInput", + "ofType": null + } }, "defaultValue": null } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "TreeEntryConnection", - "ofType": null - } + "kind": "OBJECT", + "name": "DestroySnippetPayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Commit", - "description": null, - "fields": [ + }, { - "name": "author", - "description": "Author of the commit", + "name": "epicAddIssue", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "EpicAddIssueInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { "kind": "OBJECT", - "name": "User", + "name": "EpicAddIssuePayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "authorGravatar", - "description": "Commit authors gravatar", + "name": "epicSetSubscription", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "EpicSetSubscriptionInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "EpicSetSubscriptionPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "authorName", - "description": "Commit authors name", + "name": "epicTreeReorder", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "EpicTreeReorderInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "EpicTreeReorderPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "authoredDate", - "description": "Timestamp of when the commit was authored", + "name": "issueSetConfidential", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "IssueSetConfidentialInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "Time", + "kind": "OBJECT", + "name": "IssueSetConfidentialPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "description", - "description": "Description of the commit message", + "name": "issueSetDueDate", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "IssueSetDueDateInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "IssueSetDueDatePayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "id", - "description": "ID (global ID) of the commit", + "name": "issueSetWeight", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "IssueSetWeightInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "OBJECT", + "name": "IssueSetWeightPayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "latestPipeline", - "description": "Latest pipeline of the commit", + "name": "markAsSpamSnippet", + "description": null, "args": [ { - "name": "status", - "description": "Filter pipelines by their status", + "name": "input", + "description": null, "type": { - "kind": "ENUM", - "name": "PipelineStatusEnum", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "MarkAsSpamSnippetInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "MarkAsSpamSnippetPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeRequestSetAssignees", + "description": null, + "args": [ { - "name": "ref", - "description": "Filter pipelines by the ref they are run for", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetAssigneesInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "MergeRequestSetAssigneesPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeRequestSetLabels", + "description": null, + "args": [ { - "name": "sha", - "description": "Filter pipelines by the sha of the commit they are run for", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetLabelsInput", + "ofType": null + } }, "defaultValue": null } ], "type": { "kind": "OBJECT", - "name": "Pipeline", + "name": "MergeRequestSetLabelsPayload", "ofType": null }, - "isDeprecated": true, - "deprecationReason": "Use pipelines" + "isDeprecated": false, + "deprecationReason": null }, { - "name": "message", - "description": "Raw commit message", + "name": "mergeRequestSetLocked", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetLockedInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "MergeRequestSetLockedPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pipelines", - "description": "Pipelines of the commit ordered latest first", + "name": "mergeRequestSetMilestone", + "description": null, "args": [ { - "name": "status", - "description": "Filter pipelines by their status", + "name": "input", + "description": null, "type": { - "kind": "ENUM", - "name": "PipelineStatusEnum", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetMilestoneInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "MergeRequestSetMilestonePayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeRequestSetSubscription", + "description": null, + "args": [ { - "name": "ref", - "description": "Filter pipelines by the ref they are run for", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetSubscriptionInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "MergeRequestSetSubscriptionPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "mergeRequestSetWip", + "description": null, + "args": [ { - "name": "sha", - "description": "Filter pipelines by the sha of the commit they are run for", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "MergeRequestSetWipInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "MergeRequestSetWipPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "removeAwardEmoji", + "description": null, + "args": [ { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "RemoveAwardEmojiInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "RemoveAwardEmojiPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "todoMarkDone", + "description": null, + "args": [ { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "TodoMarkDoneInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "TodoMarkDonePayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "todoRestore", + "description": null, + "args": [ { - "name": "first", - "description": "Returns the first _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "TodoRestoreInput", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "TodoRestorePayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "todoRestoreMany", + "description": null, + "args": [ { - "name": "last", - "description": "Returns the last _n_ elements from the list.", + "name": "input", + "description": null, "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "TodoRestoreManyInput", + "ofType": null + } }, "defaultValue": null } ], "type": { "kind": "OBJECT", - "name": "PipelineConnection", + "name": "TodoRestoreManyPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "sha", - "description": "SHA1 ID of the commit", + "name": "todosMarkAllDone", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "TodosMarkAllDoneInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "TodosMarkAllDonePayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "signatureHtml", - "description": "Rendered HTML of the commit signature", + "name": "toggleAwardEmoji", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "ToggleAwardEmojiInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "ToggleAwardEmojiPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "title", - "description": "Title of the commit message", + "name": "updateEpic", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UpdateEpicInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "UpdateEpicPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the commit", + "name": "updateImageDiffNote", + "description": "Updates a DiffNote on an image (a `Note` where the `position.positionType` is `\"image\"`). If the body of the Note contains only quick actions, the Note will be destroyed during the update, and no Note will be returned", "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UpdateImageDiffNoteInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "UpdateImageDiffNotePayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PipelineConnection", - "description": "The connection type for Pipeline.", - "fields": [ + }, { - "name": "edges", - "description": "A list of edges.", + "name": "updateIssue", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UpdateIssueInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PipelineEdge", - "ofType": null - } + "kind": "OBJECT", + "name": "UpdateIssuePayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "updateNote", + "description": "Updates a Note. If the body of the Note contains only quick actions, the Note will be destroyed during the update, and no Note will be returned", "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UpdateNoteInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Pipeline", - "ofType": null - } + "kind": "OBJECT", + "name": "UpdateNotePayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "updateSnippet", + "description": null, "args": [ - + { + "name": "input", + "description": null, + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UpdateSnippetInput", + "ofType": null + } + }, + "defaultValue": null + } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } + "kind": "OBJECT", + "name": "UpdateSnippetPayload", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -14241,58 +15172,42 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "PipelineEdge", - "description": "An edge in a connection.", - "fields": [ + "kind": "ENUM", + "name": "MutationOperationMode", + "description": "Different toggles for changing mutator behavior.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, + "name": "REPLACE", + "description": "Performs a replace operation", "isDeprecated": false, "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "Pipeline", - "ofType": null - }, + "name": "APPEND", + "description": "Performs an append operation", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "REMOVE", + "description": "Performs a removal operation", "isDeprecated": false, "deprecationReason": null } ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "Pipeline", + "name": "Namespace", "description": null, "fields": [ { - "name": "beforeSha", - "description": "Base SHA of the source branch", + "name": "description", + "description": "Description of the namespace", "args": [ ], @@ -14305,36 +15220,22 @@ "deprecationReason": null }, { - "name": "committedAt", - "description": "Timestamp of the pipeline's commit", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "coverage", - "description": "Coverage percentage", + "name": "descriptionHtml", + "description": "The GitLab Flavored Markdown rendering of `description`", "args": [ ], "type": { "kind": "SCALAR", - "name": "Float", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createdAt", - "description": "Timestamp of the pipeline's creation", + "name": "fullName", + "description": "Full name of the namespace", "args": [ ], @@ -14343,7 +15244,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "String", "ofType": null } }, @@ -14351,8 +15252,8 @@ "deprecationReason": null }, { - "name": "detailedStatus", - "description": "Detailed status of the pipeline", + "name": "fullPath", + "description": "Full path of the namespace", "args": [ ], @@ -14360,8 +15261,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "DetailedStatus", + "kind": "SCALAR", + "name": "ID", "ofType": null } }, @@ -14369,36 +15270,40 @@ "deprecationReason": null }, { - "name": "duration", - "description": "Duration of the pipeline in seconds", + "name": "id", + "description": "ID of the namespace", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "finishedAt", - "description": "Timestamp of the pipeline's completion", + "name": "lfsEnabled", + "description": "Indicates if Large File Storage (LFS) is enabled for namespace", "args": [ ], "type": { "kind": "SCALAR", - "name": "Time", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "id", - "description": "ID of the pipeline", + "name": "name", + "description": "Name of the namespace", "args": [ ], @@ -14407,7 +15312,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, @@ -14415,8 +15320,8 @@ "deprecationReason": null }, { - "name": "iid", - "description": "Internal ID of the pipeline", + "name": "path", + "description": "Path of the namespace", "args": [ ], @@ -14425,7 +15330,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, @@ -14433,17 +15338,66 @@ "deprecationReason": null }, { - "name": "sha", - "description": "SHA of the pipeline's commit", + "name": "projects", + "description": "Projects within this namespace", "args": [ - + { + "name": "includeSubgroups", + "description": "Include also subgroup projects", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "ProjectConnection", "ofType": null } }, @@ -14451,69 +15405,43 @@ "deprecationReason": null }, { - "name": "startedAt", - "description": "Timestamp when the pipeline was started", + "name": "requestAccessEnabled", + "description": "Indicates if users can request access to namespace", "args": [ ], "type": { "kind": "SCALAR", - "name": "Time", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "status", - "description": "Status of the pipeline (CREATED, WAITING_FOR_RESOURCE, PREPARING, PENDING, RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED)", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "PipelineStatusEnum", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "Timestamp of the pipeline's last activity", + "name": "rootStorageStatistics", + "description": "Aggregated storage statistics of the namespace. Only available for root namespaces", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - } + "kind": "OBJECT", + "name": "RootStorageStatistics", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "visibility", + "description": "Visibility of the namespace", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PipelinePermissions", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -14528,12 +15456,12 @@ }, { "kind": "OBJECT", - "name": "PipelinePermissions", + "name": "Note", "description": null, "fields": [ { - "name": "adminPipeline", - "description": "Indicates the user can perform `admin_pipeline` on this resource", + "name": "author", + "description": "User who wrote this note", "args": [ ], @@ -14541,8 +15469,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "User", "ofType": null } }, @@ -14550,8 +15478,8 @@ "deprecationReason": null }, { - "name": "destroyPipeline", - "description": "Indicates the user can perform `destroy_pipeline` on this resource", + "name": "body", + "description": "Content of the note", "args": [ ], @@ -14560,7 +15488,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -14568,8 +15496,22 @@ "deprecationReason": null }, { - "name": "updatePipeline", - "description": "Indicates the user can perform `update_pipeline` on this resource", + "name": "bodyHtml", + "description": "The GitLab Flavored Markdown rendering of `note`", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createdAt", + "description": "Timestamp of the note creation", "args": [ ], @@ -14578,106 +15520,30 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "Time", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "PipelineStatusEnum", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "CREATED", - "description": null, - "isDeprecated": false, - "deprecationReason": null }, { - "name": "WAITING_FOR_RESOURCE", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PREPARING", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "PENDING", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "RUNNING", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FAILED", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SUCCESS", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CANCELED", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SKIPPED", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "MANUAL", - "description": null, + "name": "discussion", + "description": "The discussion this note is a part of", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Discussion", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "SCHEDULED", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DetailedStatus", - "description": null, - "fields": [ - { - "name": "detailsPath", - "description": "Path of the details for the pipeline status", + "name": "id", + "description": "ID of the note", "args": [ ], @@ -14686,7 +15552,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, @@ -14694,44 +15560,36 @@ "deprecationReason": null }, { - "name": "favicon", - "description": "Favicon of the pipeline status", + "name": "position", + "description": "The position of this note on a diff", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "DiffPosition", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "group", - "description": "Group of the pipeline status", + "name": "project", + "description": "Project associated with the note", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "OBJECT", + "name": "Project", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "hasDetails", - "description": "Indicates if the pipeline status has further details", + "name": "resolvable", + "description": "Indicates if this note can be resolved. That is, if it is a resolvable discussion or simply a standalone note", "args": [ ], @@ -14748,26 +15606,36 @@ "deprecationReason": null }, { - "name": "icon", - "description": "Icon of the pipeline status", + "name": "resolvedAt", + "description": "Timestamp of the note's resolution", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "label", - "description": "Label of the pipeline status", + "name": "resolvedBy", + "description": "User that resolved the discussion", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "User", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "system", + "description": "Indicates whether this note was created by the system or by a user", "args": [ ], @@ -14776,7 +15644,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -14784,8 +15652,8 @@ "deprecationReason": null }, { - "name": "text", - "description": "Text of the pipeline status", + "name": "updatedAt", + "description": "Timestamp of the note's last activity", "args": [ ], @@ -14794,7 +15662,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Time", "ofType": null } }, @@ -14802,8 +15670,8 @@ "deprecationReason": null }, { - "name": "tooltip", - "description": "Tooltip associated with the pipeline status", + "name": "userPermissions", + "description": "Permissions for the current user on the resource", "args": [ ], @@ -14811,8 +15679,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "NotePermissions", "ofType": null } }, @@ -14828,19 +15696,9 @@ "possibleTypes": null }, { - "kind": "SCALAR", - "name": "Float", - "description": "Represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { "kind": "OBJECT", - "name": "TreeEntryConnection", - "description": "The connection type for TreeEntry.", + "name": "NoteConnection", + "description": "The connection type for Note.", "fields": [ { "name": "edges", @@ -14853,7 +15711,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "TreeEntryEdge", + "name": "NoteEdge", "ofType": null } }, @@ -14871,7 +15729,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "TreeEntry", + "name": "Note", "ofType": null } }, @@ -14906,7 +15764,7 @@ }, { "kind": "OBJECT", - "name": "TreeEntryEdge", + "name": "NoteEdge", "description": "An edge in a connection.", "fields": [ { @@ -14935,7 +15793,7 @@ ], "type": { "kind": "OBJECT", - "name": "TreeEntry", + "name": "Note", "ofType": null }, "isDeprecated": false, @@ -14951,12 +15809,12 @@ }, { "kind": "OBJECT", - "name": "TreeEntry", - "description": "Represents a directory", + "name": "NotePermissions", + "description": null, "fields": [ { - "name": "flatPath", - "description": "Flat path of the entry", + "name": "adminNote", + "description": "Indicates the user can perform `admin_note` on this resource", "args": [ ], @@ -14965,7 +15823,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -14973,8 +15831,8 @@ "deprecationReason": null }, { - "name": "id", - "description": "ID of the entry", + "name": "awardEmoji", + "description": "Indicates the user can perform `award_emoji` on this resource", "args": [ ], @@ -14983,7 +15841,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, @@ -14991,8 +15849,8 @@ "deprecationReason": null }, { - "name": "name", - "description": "Name of the entry", + "name": "createNote", + "description": "Indicates the user can perform `create_note` on this resource", "args": [ ], @@ -15001,7 +15859,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -15009,8 +15867,8 @@ "deprecationReason": null }, { - "name": "path", - "description": "Path of the entry", + "name": "readNote", + "description": "Indicates the user can perform `read_note` on this resource", "args": [ ], @@ -15019,7 +15877,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -15027,8 +15885,8 @@ "deprecationReason": null }, { - "name": "sha", - "description": "Last commit sha for the entry", + "name": "resolveNote", + "description": "Indicates the user can perform `resolve_note` on this resource", "args": [ ], @@ -15037,74 +15895,77 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "Type of tree entry", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EntryType", + "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "webUrl", - "description": "Web URL for the tree entry (directory)", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null } ], "inputFields": null, "interfaces": [ - { - "kind": "INTERFACE", - "name": "Entry", - "ofType": null - } + ], "enumValues": null, "possibleTypes": null }, { "kind": "INTERFACE", - "name": "Entry", + "name": "Noteable", "description": null, "fields": [ { - "name": "flatPath", - "description": "Flat path of the entry", + "name": "discussions", + "description": "All discussions on this noteable", "args": [ - + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "DiscussionConnection", "ofType": null } }, @@ -15112,44 +15973,121 @@ "deprecationReason": null }, { - "name": "id", - "description": "ID of the entry", + "name": "notes", + "description": "All notes on this noteable", "args": [ - + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "NoteConnection", "ofType": null } }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": [ + { + "kind": "OBJECT", + "name": "Design", + "ofType": null }, { - "name": "name", - "description": "Name of the entry", + "kind": "OBJECT", + "name": "Epic", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "EpicIssue", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Issue", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "MergeRequest", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Snippet", + "ofType": null + } + ] + }, + { + "kind": "OBJECT", + "name": "PageInfo", + "description": "Information about pagination in a connection.", + "fields": [ + { + "name": "endCursor", + "description": "When paginating forwards, the cursor to continue.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "path", - "description": "Path of the entry", + "name": "hasNextPage", + "description": "When paginating forwards, are there more items?", "args": [ ], @@ -15158,7 +16096,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -15166,8 +16104,8 @@ "deprecationReason": null }, { - "name": "sha", - "description": "Last commit sha for the entry", + "name": "hasPreviousPage", + "description": "When paginating backwards, are there more items?", "args": [ ], @@ -15176,7 +16114,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -15184,118 +16122,77 @@ "deprecationReason": null }, { - "name": "type", - "description": "Type of tree entry", + "name": "startCursor", + "description": "When paginating backwards, the cursor to continue.", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EntryType", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null } ], "inputFields": null, - "interfaces": null, + "interfaces": [ + + ], "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Blob", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Submodule", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "TreeEntry", - "ofType": null - } - ] + "possibleTypes": null }, { - "kind": "ENUM", - "name": "EntryType", - "description": "Type of a tree entry", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "tree", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, + "kind": "OBJECT", + "name": "Pipeline", + "description": null, + "fields": [ { - "name": "blob", - "description": null, + "name": "beforeSha", + "description": "Base SHA of the source branch", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "commit", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SubmoduleConnection", - "description": "The connection type for Submodule.", - "fields": [ - { - "name": "edges", - "description": "A list of edges.", + "name": "committedAt", + "description": "Timestamp of the pipeline's commit", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubmoduleEdge", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "coverage", + "description": "Coverage percentage", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Submodule", - "ofType": null - } + "kind": "SCALAR", + "name": "Float", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "createdAt", + "description": "Timestamp of the pipeline's creation", "args": [ ], @@ -15303,30 +16200,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "Time", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SubmoduleEdge", - "description": "An edge in a connection.", - "fields": [ + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "detailedStatus", + "description": "Detailed status of the pipeline", "args": [ ], @@ -15334,8 +16218,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "DetailedStatus", "ofType": null } }, @@ -15343,53 +16227,36 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "duration", + "description": "Duration of the pipeline in seconds", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Submodule", + "kind": "SCALAR", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Submodule", - "description": null, - "fields": [ + }, { - "name": "flatPath", - "description": "Flat path of the entry", + "name": "finishedAt", + "description": "Timestamp of the pipeline's completion", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { "name": "id", - "description": "ID of the entry", + "description": "ID of the pipeline", "args": [ ], @@ -15406,8 +16273,8 @@ "deprecationReason": null }, { - "name": "name", - "description": "Name of the entry", + "name": "iid", + "description": "Internal ID of the pipeline", "args": [ ], @@ -15416,7 +16283,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, @@ -15424,8 +16291,8 @@ "deprecationReason": null }, { - "name": "path", - "description": "Path of the entry", + "name": "sha", + "description": "SHA of the pipeline's commit", "args": [ ], @@ -15442,40 +16309,40 @@ "deprecationReason": null }, { - "name": "sha", - "description": "Last commit sha for the entry", + "name": "startedAt", + "description": "Timestamp when the pipeline was started", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "treeUrl", - "description": "Tree URL for the sub-module", + "name": "status", + "description": "Status of the pipeline (CREATED, WAITING_FOR_RESOURCE, PREPARING, PENDING, RUNNING, FAILED, SUCCESS, CANCELED, SKIPPED, MANUAL, SCHEDULED)", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "PipelineStatusEnum", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "type", - "description": "Type of tree entry", + "name": "updatedAt", + "description": "Timestamp of the pipeline's last activity", "args": [ ], @@ -15483,8 +16350,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "EntryType", + "kind": "SCALAR", + "name": "Time", "ofType": null } }, @@ -15492,15 +16359,19 @@ "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL for the sub-module", + "name": "userPermissions", + "description": "Permissions for the current user on the resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PipelinePermissions", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -15508,19 +16379,15 @@ ], "inputFields": null, "interfaces": [ - { - "kind": "INTERFACE", - "name": "Entry", - "ofType": null - } + ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "BlobConnection", - "description": "The connection type for Blob.", + "name": "PipelineConnection", + "description": "The connection type for Pipeline.", "fields": [ { "name": "edges", @@ -15533,7 +16400,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "BlobEdge", + "name": "PipelineEdge", "ofType": null } }, @@ -15551,7 +16418,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "Blob", + "name": "Pipeline", "ofType": null } }, @@ -15586,7 +16453,7 @@ }, { "kind": "OBJECT", - "name": "BlobEdge", + "name": "PipelineEdge", "description": "An edge in a connection.", "fields": [ { @@ -15615,7 +16482,7 @@ ], "type": { "kind": "OBJECT", - "name": "Blob", + "name": "Pipeline", "ofType": null }, "isDeprecated": false, @@ -15631,12 +16498,12 @@ }, { "kind": "OBJECT", - "name": "Blob", + "name": "PipelinePermissions", "description": null, "fields": [ { - "name": "flatPath", - "description": "Flat path of the entry", + "name": "adminPipeline", + "description": "Indicates the user can perform `admin_pipeline` on this resource", "args": [ ], @@ -15645,7 +16512,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -15653,8 +16520,8 @@ "deprecationReason": null }, { - "name": "id", - "description": "ID of the entry", + "name": "destroyPipeline", + "description": "Indicates the user can perform `destroy_pipeline` on this resource", "args": [ ], @@ -15663,7 +16530,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, @@ -15671,22 +16538,8 @@ "deprecationReason": null }, { - "name": "lfsOid", - "description": "LFS ID of the blob", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Name of the entry", + "name": "updatePipeline", + "description": "Indicates the user can perform `update_pipeline` on this resource", "args": [ ], @@ -15695,70 +16548,134 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "PipelineStatusEnum", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "CREATED", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "path", - "description": "Path of the entry", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, + "name": "WAITING_FOR_RESOURCE", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "sha", - "description": "Last commit sha for the entry", + "name": "PREPARING", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "PENDING", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RUNNING", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "FAILED", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SUCCESS", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "CANCELED", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SKIPPED", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "MANUAL", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "SCHEDULED", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Project", + "description": null, + "fields": [ + { + "name": "archived", + "description": "Indicates the archived status of the project", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "type", - "description": "Type of tree entry", + "name": "autocloseReferencedIssues", + "description": "Indicates if issues referenced by merge requests and commits within the default branch are closed automatically", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EntryType", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the blob", + "name": "avatarUrl", + "description": "URL to avatar image file of the project", "args": [ ], @@ -15769,155 +16686,174 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - { - "kind": "INTERFACE", - "name": "Entry", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MergeRequestConnection", - "description": "The connection type for MergeRequest.", - "fields": [ + }, { - "name": "edges", - "description": "A list of edges.", + "name": "board", + "description": "A single board of the project", "args": [ - + { + "name": "id", + "description": "Find a board by its ID", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequestEdge", - "ofType": null - } + "kind": "OBJECT", + "name": "Board", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "boards", + "description": "Boards of the project", "args": [ - + { + "name": "id", + "description": "Find a board by its ID", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } + "kind": "OBJECT", + "name": "BoardConnection", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "containerRegistryEnabled", + "description": "Indicates if the project stores Docker container images in a container registry", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MergeRequestEdge", - "description": "An edge in a connection.", - "fields": [ + }, { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "createdAt", + "description": "Timestamp of the project creation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "description", + "description": "Short description of the project", "args": [ ], "type": { - "kind": "OBJECT", - "name": "MergeRequest", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MergeRequest", - "description": null, - "fields": [ + }, { - "name": "allowCollaboration", - "description": "Indicates if members of the target project can push to the fork", + "name": "descriptionHtml", + "description": "The GitLab Flavored Markdown rendering of `description`", "args": [ ], "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "assignees", - "description": "Assignees of the merge request", + "name": "environments", + "description": "Environments of the project", "args": [ { + "name": "name", + "description": "Name of the environment", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "search", + "description": "Search query", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { "name": "after", "description": "Returns the elements in the list that come after the specified cursor.", "type": { @@ -15960,15 +16896,15 @@ ], "type": { "kind": "OBJECT", - "name": "UserConnection", + "name": "EnvironmentConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createdAt", - "description": "Timestamp of when the merge request was created", + "name": "forksCount", + "description": "Number of times the project has been forked", "args": [ ], @@ -15977,7 +16913,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "Int", "ofType": null } }, @@ -15985,50 +16921,54 @@ "deprecationReason": null }, { - "name": "defaultMergeCommitMessage", - "description": "Default merge commit message of the merge request", + "name": "fullPath", + "description": "Full path of the project", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "description", - "description": "Description of the merge request (Markdown rendered as HTML for caching)", + "name": "grafanaIntegration", + "description": "Grafana integration details for the project", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "GrafanaIntegration", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "descriptionHtml", - "description": "The GitLab Flavored Markdown rendering of `description`", + "name": "group", + "description": "Group of the project", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Group", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "diffHeadSha", - "description": "Diff head SHA of the merge request", + "name": "httpUrlToRepo", + "description": "URL to connect to the project via HTTPS", "args": [ ], @@ -16041,42 +16981,387 @@ "deprecationReason": null }, { - "name": "diffRefs", - "description": "References of the base SHA, the head SHA, and the start SHA for this merge request", + "name": "id", + "description": "ID of the project", "args": [ ], "type": { - "kind": "OBJECT", - "name": "DiffRefs", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "discussionLocked", - "description": "Indicates if comments on the merge request are locked to members only", + "name": "importStatus", + "description": "Status of project import background job of the project", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "issue", + "description": "A single issue of the project", + "args": [ + { + "name": "iid", + "description": "IID of the issue. For example, \"1\"", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iids", + "description": "List of IIDs of issues. For example, [1, 2]", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "state", + "description": "Current state of this issue", + "type": { + "kind": "ENUM", + "name": "IssuableState", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "labelName", + "description": "Labels applied to this issue", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "milestoneTitle", + "description": "Milestones applied to this issue", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "assigneeUsername", + "description": "Username of a user assigned to the issues", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "assigneeId", + "description": "ID of a user assigned to the issues, \"none\" and \"any\" values supported", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "createdBefore", + "description": "Issues created before this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "createdAfter", + "description": "Issues created after this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "updatedBefore", + "description": "Issues updated before this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "updatedAfter", + "description": "Issues updated after this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "closedBefore", + "description": "Issues closed before this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "closedAfter", + "description": "Issues closed after this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "search", + "description": "Search query for finding issues by title or description", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sort", + "description": "Sort issues by this criteria", + "type": { + "kind": "ENUM", + "name": "IssueSort", + "ofType": null + }, + "defaultValue": "created_desc" } + ], + "type": { + "kind": "OBJECT", + "name": "Issue", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "discussions", - "description": "All discussions on this noteable", + "name": "issues", + "description": "Issues of the project", "args": [ { + "name": "iid", + "description": "IID of the issue. For example, \"1\"", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iids", + "description": "List of IIDs of issues. For example, [1, 2]", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "state", + "description": "Current state of this issue", + "type": { + "kind": "ENUM", + "name": "IssuableState", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "labelName", + "description": "Labels applied to this issue", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "milestoneTitle", + "description": "Milestones applied to this issue", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "assigneeUsername", + "description": "Username of a user assigned to the issues", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "assigneeId", + "description": "ID of a user assigned to the issues, \"none\" and \"any\" values supported", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "createdBefore", + "description": "Issues created before this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "createdAfter", + "description": "Issues created after this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "updatedBefore", + "description": "Issues updated before this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "updatedAfter", + "description": "Issues updated after this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "closedBefore", + "description": "Issues closed before this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "closedAfter", + "description": "Issues closed after this date", + "type": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "search", + "description": "Search query for finding issues by title or description", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "sort", + "description": "Sort issues by this criteria", + "type": { + "kind": "ENUM", + "name": "IssueSort", + "ofType": null + }, + "defaultValue": "created_desc" + }, + { "name": "after", "description": "Returns the elements in the list that come after the specified cursor.", "type": { @@ -16118,38 +17403,30 @@ } ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DiscussionConnection", - "ofType": null - } + "kind": "OBJECT", + "name": "IssueConnection", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "downvotes", - "description": "Number of downvotes for the merge request", + "name": "issuesEnabled", + "description": "(deprecated) Does this project have issues enabled?. Use `issues_access_level` instead", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "forceRemoveSourceBranch", - "description": "Indicates if the project settings will lead to source branch deletion after merge", + "name": "jobsEnabled", + "description": "(deprecated) Enable jobs for this project. Use `builds_access_level` instead", "args": [ ], @@ -16162,74 +17439,107 @@ "deprecationReason": null }, { - "name": "headPipeline", - "description": "The pipeline running on the branch HEAD of the merge request", + "name": "lastActivityAt", + "description": "Timestamp of the project last activity", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Pipeline", + "kind": "SCALAR", + "name": "Time", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "id", - "description": "ID of the merge request", + "name": "lfsEnabled", + "description": "Indicates if the project has Large File Storage (LFS) enabled", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "iid", - "description": "Internal ID of the merge request", + "name": "mergeRequest", + "description": "A single merge request of the project", "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null + { + "name": "iid", + "description": "The IID of the merge request, e.g., \"1\"", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iids", + "description": "The list of IIDs of issues, e.g., [1, 2]", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "inProgressMergeCommitSha", - "description": "Commit SHA of the merge request if merge is in progress", - "args": [ - ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "MergeRequest", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "labels", - "description": "Labels of the merge request", + "name": "mergeRequests", + "description": "Merge requests of the project", "args": [ { + "name": "iid", + "description": "The IID of the merge request, e.g., \"1\"", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "iids", + "description": "The list of IIDs of issues, e.g., [1, 2]", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { "name": "after", "description": "Returns the elements in the list that come after the specified cursor.", "type": { @@ -16272,57 +17582,61 @@ ], "type": { "kind": "OBJECT", - "name": "LabelConnection", + "name": "MergeRequestConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeCommitMessage", - "description": "Deprecated - renamed to defaultMergeCommitMessage", + "name": "mergeRequestsEnabled", + "description": "(deprecated) Does this project have merge_requests enabled?. Use `merge_requests_access_level` instead", "args": [ ], "type": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null }, - "isDeprecated": true, - "deprecationReason": "Renamed to defaultMergeCommitMessage" + "isDeprecated": false, + "deprecationReason": null }, { - "name": "mergeCommitSha", - "description": "SHA of the merge request commit (set once merged)", + "name": "mergeRequestsFfOnlyEnabled", + "description": "Indicates if no merge commits should be created and all merges should instead be fast-forwarded, which means that merging is only allowed if the branch could be fast-forwarded.", "args": [ ], "type": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeError", - "description": "Error message due to a merge error", + "name": "name", + "description": "Name of the project (without namespace)", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeOngoing", - "description": "Indicates if a merge is currently occurring", + "name": "nameWithNamespace", + "description": "Full name of the project with its namespace", "args": [ ], @@ -16331,7 +17645,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -16339,22 +17653,22 @@ "deprecationReason": null }, { - "name": "mergeStatus", - "description": "Status of the merge request", + "name": "namespace", + "description": "Namespace of the project", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Namespace", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeWhenPipelineSucceeds", - "description": "Indicates if the merge has been set to be merged when its pipeline succeeds (MWPS)", + "name": "onlyAllowMergeIfAllDiscussionsAreResolved", + "description": "Indicates if merge requests of the project can only be merged when all the discussions are resolved", "args": [ ], @@ -16367,8 +17681,8 @@ "deprecationReason": null }, { - "name": "mergeableDiscussionsState", - "description": "Indicates if all discussions in the merge request have been resolved, allowing the merge request to be merged", + "name": "onlyAllowMergeIfPipelineSucceeds", + "description": "Indicates if merge requests of the project can only be merged with successful jobs", "args": [ ], @@ -16381,36 +17695,54 @@ "deprecationReason": null }, { - "name": "milestone", - "description": "The milestone of the merge request", + "name": "openIssuesCount", + "description": "Number of open issues for the project", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Milestone", + "kind": "SCALAR", + "name": "Int", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "notes", - "description": "All notes on this noteable", + "name": "path", + "description": "Path of the project", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "pipelines", + "description": "Build pipelines of the project", "args": [ { - "name": "after", - "description": "Returns the elements in the list that come after the specified cursor.", + "name": "status", + "description": "Filter pipelines by their status", "type": { - "kind": "SCALAR", - "name": "String", + "kind": "ENUM", + "name": "PipelineStatusEnum", "ofType": null }, "defaultValue": null }, { - "name": "before", - "description": "Returns the elements in the list that come before the specified cursor.", + "name": "ref", + "description": "Filter pipelines by the ref they are run for", "type": { "kind": "SCALAR", "name": "String", @@ -16419,43 +17751,16 @@ "defaultValue": null }, { - "name": "first", - "description": "Returns the first _n_ elements from the list.", + "name": "sha", + "description": "Filter pipelines by the sha of the commit they are run for", "type": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null }, "defaultValue": null }, { - "name": "last", - "description": "Returns the last _n_ elements from the list.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "NoteConnection", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "participants", - "description": "Participants in the merge request", - "args": [ - { "name": "after", "description": "Returns the elements in the list that come after the specified cursor.", "type": { @@ -16498,42 +17803,193 @@ ], "type": { "kind": "OBJECT", - "name": "UserConnection", + "name": "PipelineConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pipelines", - "description": "Pipelines for the merge request", + "name": "printingMergeRequestLinkEnabled", + "description": "Indicates if a link to create or view a merge request should display after a push to Git repositories of the project from the command line", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "publicJobs", + "description": "Indicates if there is public access to pipelines and job details of the project, including output logs and artifacts", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "removeSourceBranchAfterMerge", + "description": "Indicates if `Delete source branch` option should be enabled by default for all new merge requests of the project", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "repository", + "description": "Git repository of the project", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Repository", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "requestAccessEnabled", + "description": "Indicates if users can request member access to the project", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sentryDetailedError", + "description": "Detailed version of a Sentry error on the project", "args": [ { - "name": "status", - "description": "Filter pipelines by their status", + "name": "id", + "description": "ID of the Sentry issue", "type": { - "kind": "ENUM", - "name": "PipelineStatusEnum", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "defaultValue": null - }, + } + ], + "type": { + "kind": "OBJECT", + "name": "SentryDetailedError", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sentryErrors", + "description": "Paginated collection of Sentry errors on the project", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "SentryErrorCollection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "serviceDeskAddress", + "description": "E-mail address of the service desk.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "serviceDeskEnabled", + "description": "Indicates if the project has service desk enabled.", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sharedRunnersEnabled", + "description": "Indicates if shared runners are enabled on the project", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "snippets", + "description": "Snippets of the project", + "args": [ { - "name": "ref", - "description": "Filter pipelines by the ref they are run for", + "name": "ids", + "description": "Array of global snippet ids, e.g., \"gid://gitlab/ProjectSnippet/1\"", "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } }, "defaultValue": null }, { - "name": "sha", - "description": "Filter pipelines by the sha of the commit they are run for", + "name": "visibility", + "description": "The visibility of the snippet", "type": { - "kind": "SCALAR", - "name": "String", + "kind": "ENUM", + "name": "VisibilityScopesEnum", "ofType": null }, "defaultValue": null @@ -16580,11 +18036,113 @@ } ], "type": { + "kind": "OBJECT", + "name": "SnippetConnection", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "snippetsEnabled", + "description": "(deprecated) Does this project have snippets enabled?. Use `snippets_access_level` instead", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "sshUrlToRepo", + "description": "URL to connect to the project via SSH", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "starCount", + "description": "Number of times the project has been starred", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "statistics", + "description": "Statistics of the project", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "ProjectStatistics", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "suggestionCommitMessage", + "description": "The commit message used to apply merge request suggestions", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tagList", + "description": "List of project tags", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "userPermissions", + "description": "Permissions for the current user on the resource", + "args": [ + + ], + "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "OBJECT", - "name": "PipelineConnection", + "name": "ProjectPermissions", "ofType": null } }, @@ -16592,13 +18150,86 @@ "deprecationReason": null }, { - "name": "project", - "description": "Alias for target_project", + "name": "visibility", + "description": "Visibility of the project", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "webUrl", + "description": "Web URL of the project", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "wikiEnabled", + "description": "(deprecated) Does this project have wiki enabled?. Use `wiki_access_level` instead", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProjectConnection", + "description": "The connection type for Project.", + "fields": [ + { + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "ProjectEdge", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodes", + "description": "A list of nodes.", + "args": [ + + ], + "type": { + "kind": "LIST", "name": null, "ofType": { "kind": "OBJECT", @@ -16610,8 +18241,39 @@ "deprecationReason": null }, { - "name": "projectId", - "description": "ID of the merge request project", + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProjectEdge", + "description": "An edge in a connection.", + "fields": [ + { + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -16620,7 +18282,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -16628,22 +18290,35 @@ "deprecationReason": null }, { - "name": "rebaseCommitSha", - "description": "Rebase commit SHA of the merge request", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Project", "ofType": null }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "ProjectPermissions", + "description": null, + "fields": [ { - "name": "rebaseInProgress", - "description": "Indicates if there is a rebase currently in progress for the merge request", + "name": "adminOperations", + "description": "Indicates the user can perform `admin_operations` on this resource", "args": [ ], @@ -16660,26 +18335,17 @@ "deprecationReason": null }, { - "name": "reference", - "description": "Internal reference of the merge request. Returned in shortened format by default", + "name": "adminProject", + "description": "Indicates the user can perform `admin_project` on this resource", "args": [ - { - "name": "full", - "description": "Boolean option specifying whether the reference should be returned in full", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -16687,8 +18353,8 @@ "deprecationReason": null }, { - "name": "shouldBeRebased", - "description": "Indicates if the merge request will be rebased", + "name": "adminRemoteMirror", + "description": "Indicates the user can perform `admin_remote_mirror` on this resource", "args": [ ], @@ -16705,22 +18371,26 @@ "deprecationReason": null }, { - "name": "shouldRemoveSourceBranch", - "description": "Indicates if the source branch of the merge request will be deleted after merge", + "name": "adminWiki", + "description": "Indicates the user can perform `admin_wiki` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "sourceBranch", - "description": "Source branch of the merge request", + "name": "archiveProject", + "description": "Indicates the user can perform `archive_project` on this resource", "args": [ ], @@ -16729,7 +18399,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -16737,8 +18407,8 @@ "deprecationReason": null }, { - "name": "sourceBranchExists", - "description": "Indicates if the source branch of the merge request exists", + "name": "changeNamespace", + "description": "Indicates the user can perform `change_namespace` on this resource", "args": [ ], @@ -16755,36 +18425,44 @@ "deprecationReason": null }, { - "name": "sourceProject", - "description": "Source project of the merge request", + "name": "changeVisibilityLevel", + "description": "Indicates the user can perform `change_visibility_level` on this resource", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Project", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "sourceProjectId", - "description": "ID of the merge request source project", + "name": "createDeployment", + "description": "Indicates the user can perform `create_deployment` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "state", - "description": "State of the merge request", + "name": "createDesign", + "description": "Indicates the user can perform `create_design` on this resource", "args": [ ], @@ -16792,8 +18470,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "MergeRequestState", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -16801,8 +18479,8 @@ "deprecationReason": null }, { - "name": "subscribed", - "description": "Indicates if the currently logged in user is subscribed to this merge request", + "name": "createIssue", + "description": "Indicates the user can perform `create_issue` on this resource", "args": [ ], @@ -16819,8 +18497,8 @@ "deprecationReason": null }, { - "name": "targetBranch", - "description": "Target branch of the merge request", + "name": "createLabel", + "description": "Indicates the user can perform `create_label` on this resource", "args": [ ], @@ -16829,7 +18507,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -16837,8 +18515,8 @@ "deprecationReason": null }, { - "name": "targetProject", - "description": "Target project of the merge request", + "name": "createMergeRequestFrom", + "description": "Indicates the user can perform `create_merge_request_from` on this resource", "args": [ ], @@ -16846,8 +18524,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Project", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -16855,8 +18533,8 @@ "deprecationReason": null }, { - "name": "targetProjectId", - "description": "ID of the merge request target project", + "name": "createMergeRequestIn", + "description": "Indicates the user can perform `create_merge_request_in` on this resource", "args": [ ], @@ -16865,7 +18543,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "Boolean", "ofType": null } }, @@ -16873,8 +18551,8 @@ "deprecationReason": null }, { - "name": "taskCompletionStatus", - "description": "Completion status of tasks", + "name": "createPages", + "description": "Indicates the user can perform `create_pages` on this resource", "args": [ ], @@ -16882,8 +18560,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "TaskCompletionStatus", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -16891,8 +18569,8 @@ "deprecationReason": null }, { - "name": "timeEstimate", - "description": "Time estimate of the merge request", + "name": "createPipeline", + "description": "Indicates the user can perform `create_pipeline` on this resource", "args": [ ], @@ -16901,7 +18579,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "Boolean", "ofType": null } }, @@ -16909,8 +18587,8 @@ "deprecationReason": null }, { - "name": "title", - "description": "Title of the merge request", + "name": "createPipelineSchedule", + "description": "Indicates the user can perform `create_pipeline_schedule` on this resource", "args": [ ], @@ -16919,7 +18597,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -16927,22 +18605,26 @@ "deprecationReason": null }, { - "name": "titleHtml", - "description": "The GitLab Flavored Markdown rendering of `title`", + "name": "createSnippet", + "description": "Indicates the user can perform `create_snippet` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "totalTimeSpent", - "description": "Total time reported as spent on the merge request", + "name": "createWiki", + "description": "Indicates the user can perform `create_wiki` on this resource", "args": [ ], @@ -16951,7 +18633,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "Boolean", "ofType": null } }, @@ -16959,8 +18641,8 @@ "deprecationReason": null }, { - "name": "updatedAt", - "description": "Timestamp of when the merge request was last updated", + "name": "destroyDesign", + "description": "Indicates the user can perform `destroy_design` on this resource", "args": [ ], @@ -16969,7 +18651,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "Boolean", "ofType": null } }, @@ -16977,8 +18659,8 @@ "deprecationReason": null }, { - "name": "upvotes", - "description": "Number of upvotes for the merge request", + "name": "destroyPages", + "description": "Indicates the user can perform `destroy_pages` on this resource", "args": [ ], @@ -16987,7 +18669,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "Boolean", "ofType": null } }, @@ -16995,22 +18677,26 @@ "deprecationReason": null }, { - "name": "userNotesCount", - "description": "User notes count of the merge request", + "name": "destroyWiki", + "description": "Indicates the user can perform `destroy_wiki` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "userPermissions", - "description": "Permissions for the current user on the resource", + "name": "downloadCode", + "description": "Indicates the user can perform `download_code` on this resource", "args": [ ], @@ -17018,8 +18704,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "MergeRequestPermissions", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -17027,22 +18713,26 @@ "deprecationReason": null }, { - "name": "webUrl", - "description": "Web URL of the merge request", + "name": "downloadWikiCode", + "description": "Indicates the user can perform `download_wiki_code` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "workInProgress", - "description": "Indicates if the merge request is a work in progress (WIP)", + "name": "forkProject", + "description": "Indicates the user can perform `fork_project` on this resource", "args": [ ], @@ -17057,27 +18747,28 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ + }, { - "kind": "INTERFACE", - "name": "Noteable", - "ofType": null - } - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MergeRequestPermissions", - "description": "Check permissions for the current user on a merge request", - "fields": [ + "name": "pushCode", + "description": "Indicates the user can perform `push_code` on this resource", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, { - "name": "adminMergeRequest", - "description": "Indicates the user can perform `admin_merge_request` on this resource", + "name": "pushToDeleteProtectedBranch", + "description": "Indicates the user can perform `push_to_delete_protected_branch` on this resource", "args": [ ], @@ -17094,8 +18785,8 @@ "deprecationReason": null }, { - "name": "cherryPickOnCurrentMergeRequest", - "description": "Indicates the user can perform `cherry_pick_on_current_merge_request` on this resource", + "name": "readCommitStatus", + "description": "Indicates the user can perform `read_commit_status` on this resource", "args": [ ], @@ -17112,8 +18803,8 @@ "deprecationReason": null }, { - "name": "createNote", - "description": "Indicates the user can perform `create_note` on this resource", + "name": "readCycleAnalytics", + "description": "Indicates the user can perform `read_cycle_analytics` on this resource", "args": [ ], @@ -17130,8 +18821,8 @@ "deprecationReason": null }, { - "name": "pushToSourceBranch", - "description": "Indicates the user can perform `push_to_source_branch` on this resource", + "name": "readDesign", + "description": "Indicates the user can perform `read_design` on this resource", "args": [ ], @@ -17166,8 +18857,8 @@ "deprecationReason": null }, { - "name": "removeSourceBranch", - "description": "Indicates the user can perform `remove_source_branch` on this resource", + "name": "readPagesContent", + "description": "Indicates the user can perform `read_pages_content` on this resource", "args": [ ], @@ -17184,8 +18875,8 @@ "deprecationReason": null }, { - "name": "revertOnCurrentMergeRequest", - "description": "Indicates the user can perform `revert_on_current_merge_request` on this resource", + "name": "readProject", + "description": "Indicates the user can perform `read_project` on this resource", "args": [ ], @@ -17202,8 +18893,8 @@ "deprecationReason": null }, { - "name": "updateMergeRequest", - "description": "Indicates the user can perform `update_merge_request` on this resource", + "name": "readProjectMember", + "description": "Indicates the user can perform `read_project_member` on this resource", "args": [ ], @@ -17218,67 +18909,109 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ + }, + { + "name": "readWiki", + "description": "Indicates the user can perform `read_wiki` on this resource", + "args": [ - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "MergeRequestState", - "description": "State of a GitLab merge request", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, { - "name": "opened", - "description": null, + "name": "removeForkProject", + "description": "Indicates the user can perform `remove_fork_project` on this resource", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "closed", - "description": null, + "name": "removePages", + "description": "Indicates the user can perform `remove_pages` on this resource", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "locked", - "description": null, + "name": "removeProject", + "description": "Indicates the user can perform `remove_project` on this resource", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "merged", - "description": null, + "name": "renameProject", + "description": "Indicates the user can perform `rename_project` on this resource", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "IssueConnection", - "description": "The connection type for Issue.", - "fields": [ + }, { - "name": "edges", - "description": "A list of edges.", + "name": "requestAccess", + "description": "Indicates the user can perform `request_access` on this resource", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "IssueEdge", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -17286,17 +19019,17 @@ "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "updatePages", + "description": "Indicates the user can perform `update_pages` on this resource", "args": [ ], "type": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Issue", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -17304,8 +19037,8 @@ "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "updateWiki", + "description": "Indicates the user can perform `update_wiki` on this resource", "args": [ ], @@ -17313,8 +19046,26 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "uploadFile", + "description": "Indicates the user can perform `upload_file` on this resource", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, @@ -17331,12 +19082,12 @@ }, { "kind": "OBJECT", - "name": "IssueEdge", - "description": "An edge in a connection.", + "name": "ProjectStatistics", + "description": null, "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "buildArtifactsSize", + "description": "Build artifacts size of the project", "args": [ ], @@ -17345,7 +19096,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Int", "ofType": null } }, @@ -17353,165 +19104,494 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "commitCount", + "description": "Commit count of the project", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ + }, + { + "name": "lfsObjectsSize", + "description": "Large File Storage (LFS) object size of the project", + "args": [ - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "IssuableState", - "description": "State of a GitLab issue or merge request", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, { - "name": "opened", - "description": null, + "name": "packagesSize", + "description": "Packages size of the project", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "closed", - "description": null, + "name": "repositorySize", + "description": "Repository size of the project", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "locked", - "description": null, + "name": "storageSize", + "description": "Storage size of the project", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "wikiSize", + "description": "Wiki size of the project", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null } ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, "possibleTypes": null }, { - "kind": "ENUM", - "name": "IssueSort", - "description": "Values for sorting issues", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ + "kind": "OBJECT", + "name": "Query", + "description": null, + "fields": [ { - "name": "updated_desc", - "description": "Updated at descending order", + "name": "currentUser", + "description": "Get information about current user", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "User", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "updated_asc", - "description": "Updated at ascending order", + "name": "designManagement", + "description": "Fields related to design management", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DesignManagement", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "created_desc", - "description": "Created at descending order", + "name": "echo", + "description": "Text to echo back", + "args": [ + { + "name": "text", + "description": "Text to echo back", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "created_asc", - "description": "Created at ascending order", + "name": "group", + "description": "Find a group", + "args": [ + { + "name": "fullPath", + "description": "The full path of the project, group or namespace, e.g., \"gitlab-org/gitlab-foss\"", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Group", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "DUE_DATE_ASC", - "description": "Due date by ascending order", + "name": "metadata", + "description": "Metadata about GitLab", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Metadata", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "DUE_DATE_DESC", - "description": "Due date by descending order", + "name": "namespace", + "description": "Find a namespace", + "args": [ + { + "name": "fullPath", + "description": "The full path of the project, group or namespace, e.g., \"gitlab-org/gitlab-foss\"", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Namespace", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "RELATIVE_POSITION_ASC", - "description": "Relative position by ascending order", + "name": "project", + "description": "Find a project", + "args": [ + { + "name": "fullPath", + "description": "The full path of the project, group or namespace, e.g., \"gitlab-org/gitlab-foss\"", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "Project", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "WEIGHT_ASC", - "description": "Weight by ascending order", + "name": "snippets", + "description": "Find Snippets visible to the current user", + "args": [ + { + "name": "ids", + "description": "Array of global snippet ids, e.g., \"gid://gitlab/ProjectSnippet/1\"", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "visibility", + "description": "The visibility of the snippet", + "type": { + "kind": "ENUM", + "name": "VisibilityScopesEnum", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "authorId", + "description": "The ID of an author", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "projectId", + "description": "The ID of a project", + "type": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "type", + "description": "The type of snippet", + "type": { + "kind": "ENUM", + "name": "TypeEnum", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "explore", + "description": "Explore personal snippets", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], + "type": { + "kind": "OBJECT", + "name": "SnippetConnection", + "ofType": null + }, "isDeprecated": false, "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "RemoveAwardEmojiInput", + "description": "Autogenerated input type of RemoveAwardEmoji", + "fields": null, + "inputFields": [ + { + "name": "awardableId", + "description": "The global id of the awardable resource", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null }, { - "name": "WEIGHT_DESC", - "description": "Weight by descending order", - "isDeprecated": false, - "deprecationReason": null + "name": "name", + "description": "The emoji name", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null } ], + "interfaces": null, + "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "EnvironmentConnection", - "description": "The connection type for Environment.", + "name": "RemoveAwardEmojiPayload", + "description": "Autogenerated return type of RemoveAwardEmoji", "fields": [ { - "name": "edges", - "description": "A list of edges.", + "name": "awardEmoji", + "description": "The award emoji after mutation", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "EnvironmentEdge", - "ofType": null - } + "kind": "OBJECT", + "name": "AwardEmoji", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodes", - "description": "A list of nodes.", + "name": "clientMutationId", + "description": "A unique identifier for the client performing the mutation.", "args": [ ], "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Environment", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "pageInfo", - "description": "Information to aid in pagination.", + "name": "errors", + "description": "Reasons why the mutation failed.", "args": [ ], @@ -17519,9 +19599,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "OBJECT", - "name": "PageInfo", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } } }, "isDeprecated": false, @@ -17537,12 +19625,12 @@ }, { "kind": "OBJECT", - "name": "EnvironmentEdge", - "description": "An edge in a connection.", + "name": "Repository", + "description": null, "fields": [ { - "name": "cursor", - "description": "A cursor for use in pagination.", + "name": "empty", + "description": "Indicates repository has no visible content", "args": [ ], @@ -17551,7 +19639,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, @@ -17559,14 +19647,75 @@ "deprecationReason": null }, { - "name": "node", - "description": "The item at the end of the edge.", + "name": "exists", + "description": "Indicates a corresponding Git repository exists on disk", "args": [ ], "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "rootRef", + "description": "Default branch of the repository", + "args": [ + + ], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tree", + "description": "Tree of the repository", + "args": [ + { + "name": "path", + "description": "The path to get the tree for. Default value is the root of the repository", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": "\"\"" + }, + { + "name": "ref", + "description": "The commit ref to get the tree for. Default value is HEAD", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": "\"head\"" + }, + { + "name": "recursive", + "description": "Used to get a recursive tree. Default is false", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": "false" + } + ], + "type": { "kind": "OBJECT", - "name": "Environment", + "name": "Tree", "ofType": null }, "isDeprecated": false, @@ -17582,12 +19731,12 @@ }, { "kind": "OBJECT", - "name": "Environment", - "description": "Describes where code is deployed for a project", + "name": "RootStorageStatistics", + "description": null, "fields": [ { - "name": "id", - "description": "ID of the environment", + "name": "buildArtifactsSize", + "description": "The CI artifacts size in bytes", "args": [ ], @@ -17596,7 +19745,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Int", "ofType": null } }, @@ -17604,8 +19753,8 @@ "deprecationReason": null }, { - "name": "name", - "description": "Human-readable name of the environment", + "name": "lfsObjectsSize", + "description": "The LFS objects size in bytes", "args": [ ], @@ -17614,7 +19763,79 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "packagesSize", + "description": "The packages size in bytes", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "repositorySize", + "description": "The Git repository size in bytes", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "storageSize", + "description": "The total storage in bytes", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "wikiSize", + "description": "The wiki size in bytes", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", "ofType": null } }, @@ -18087,48 +20308,111 @@ "possibleTypes": null }, { - "kind": "ENUM", - "name": "SentryErrorStatus", - "description": "State of a Sentry error", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ + "kind": "OBJECT", + "name": "SentryError", + "description": "A Sentry error. A simplified version of SentryDetailedError.", + "fields": [ { - "name": "RESOLVED", - "description": "Error has been resolved", + "name": "count", + "description": "Count of occurrences", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "RESOLVED_IN_NEXT_RELEASE", - "description": "Error has been ignored until next release", + "name": "culprit", + "description": "Culprit of the error", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "UNRESOLVED", - "description": "Error is unresolved", + "name": "externalUrl", + "description": "External URL of the error", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null }, { - "name": "IGNORED", - "description": "Error has been ignored", + "name": "firstSeen", + "description": "Timestamp when the error was first seen", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + } + }, "isDeprecated": false, "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SentryErrorFrequency", - "description": null, - "fields": [ + }, { - "name": "count", - "description": "Count of errors received since the previously recorded time", + "name": "frequency", + "description": "Last 24hr stats of the error", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SentryErrorFrequency", + "ofType": null + } + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "ID (global ID) of the error", "args": [ ], @@ -18137,7 +20421,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "ID", "ofType": null } }, @@ -18145,8 +20429,8 @@ "deprecationReason": null }, { - "name": "time", - "description": "Time the error frequency stats were recorded", + "name": "lastSeen", + "description": "Timestamp when the error was last seen", "args": [ ], @@ -18161,23 +20445,10 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SentryErrorTags", - "description": "State of a Sentry error", - "fields": [ + }, { - "name": "level", - "description": "Severity level of the Sentry Error", + "name": "message", + "description": "Sentry metadata message of the error", "args": [ ], @@ -18190,35 +20461,44 @@ "deprecationReason": null }, { - "name": "logger", - "description": "Logger of the Sentry Error", + "name": "sentryId", + "description": "ID (Sentry ID) of the error", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ + }, + { + "name": "sentryProjectId", + "description": "ID of the project (Sentry project)", + "args": [ - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "GrafanaIntegration", - "description": null, - "fields": [ + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, { - "name": "createdAt", - "description": "Timestamp of the issue's creation", + "name": "sentryProjectName", + "description": "Name of the project affected by the error", "args": [ ], @@ -18227,7 +20507,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "String", "ofType": null } }, @@ -18235,8 +20515,8 @@ "deprecationReason": null }, { - "name": "enabled", - "description": "Indicates whether Grafana integration is enabled", + "name": "sentryProjectSlug", + "description": "Slug of the project affected by the error", "args": [ ], @@ -18245,7 +20525,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null } }, @@ -18253,8 +20533,8 @@ "deprecationReason": null }, { - "name": "grafanaUrl", - "description": "Url for the Grafana host for the Grafana integration", + "name": "shortId", + "description": "Short ID (Sentry ID) of the error", "args": [ ], @@ -18271,8 +20551,26 @@ "deprecationReason": null }, { - "name": "id", - "description": "Internal ID of the Grafana integration", + "name": "status", + "description": "Status of the error", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "SentryErrorStatus", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "title", + "description": "Title of the error", "args": [ ], @@ -18281,7 +20579,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, @@ -18289,8 +20587,8 @@ "deprecationReason": null }, { - "name": "token", - "description": "API token for the Grafana integration. Field is permanently masked.", + "name": "type", + "description": "Type of the error", "args": [ ], @@ -18303,12 +20601,12 @@ "ofType": null } }, - "isDeprecated": true, - "deprecationReason": "Plain text token has been masked for security reasons" + "isDeprecated": false, + "deprecationReason": null }, { - "name": "updatedAt", - "description": "Timestamp of the issue's last activity", + "name": "userCount", + "description": "Count of users affected by the error", "args": [ ], @@ -18317,7 +20615,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "Int", "ofType": null } }, @@ -18600,12 +20898,12 @@ }, { "kind": "OBJECT", - "name": "SentryError", - "description": "A Sentry error. A simplified version of SentryDetailedError.", + "name": "SentryErrorFrequency", + "description": null, "fields": [ { "name": "count", - "description": "Count of occurrences", + "description": "Count of errors received since the previously recorded time", "args": [ ], @@ -18622,8 +20920,8 @@ "deprecationReason": null }, { - "name": "culprit", - "description": "Culprit of the error", + "name": "time", + "description": "Time the error frequency stats were recorded", "args": [ ], @@ -18632,16 +20930,29 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Time", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SentryErrorStackTrace", + "description": "An object containing a stack trace entry for a Sentry error.", + "fields": [ { - "name": "externalUrl", - "description": "External URL of the error", + "name": "dateReceived", + "description": "Time the stack trace was received by Sentry", "args": [ ], @@ -18658,8 +20969,8 @@ "deprecationReason": null }, { - "name": "firstSeen", - "description": "Timestamp when the error was first seen", + "name": "issueId", + "description": "ID of the Sentry error", "args": [ ], @@ -18668,7 +20979,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "String", "ofType": null } }, @@ -18676,8 +20987,8 @@ "deprecationReason": null }, { - "name": "frequency", - "description": "Last 24hr stats of the error", + "name": "stackTraceEntries", + "description": "Stack trace entries for the Sentry error", "args": [ ], @@ -18692,7 +21003,7 @@ "name": null, "ofType": { "kind": "OBJECT", - "name": "SentryErrorFrequency", + "name": "SentryErrorStackTraceEntry", "ofType": null } } @@ -18700,218 +21011,6 @@ }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "id", - "description": "ID (global ID) of the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastSeen", - "description": "Timestamp when the error was last seen", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "message", - "description": "Sentry metadata message of the error", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sentryId", - "description": "ID (Sentry ID) of the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sentryProjectId", - "description": "ID of the project (Sentry project)", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sentryProjectName", - "description": "Name of the project affected by the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sentryProjectSlug", - "description": "Slug of the project affected by the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shortId", - "description": "Short ID (Sentry ID) of the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": "Status of the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SentryErrorStatus", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "Title of the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "Type of the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "userCount", - "description": "Count of users affected by the error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null } ], "inputFields": null, @@ -18923,12 +21022,12 @@ }, { "kind": "OBJECT", - "name": "SentryErrorStackTrace", - "description": "An object containing a stack trace entry for a Sentry error.", + "name": "SentryErrorStackTraceContext", + "description": "An object context for a Sentry error stack trace", "fields": [ { - "name": "dateReceived", - "description": "Time the stack trace was received by Sentry", + "name": "code", + "description": "Code number of the context", "args": [ ], @@ -18945,8 +21044,8 @@ "deprecationReason": null }, { - "name": "issueId", - "description": "ID of the Sentry error", + "name": "line", + "description": "Line number of the context", "args": [ ], @@ -18955,38 +21054,12 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Int", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "stackTraceEntries", - "description": "Stack trace entries for the Sentry error", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SentryErrorStackTraceEntry", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null } ], "inputFields": null, @@ -19088,42 +21161,69 @@ "possibleTypes": null }, { + "kind": "ENUM", + "name": "SentryErrorStatus", + "description": "State of a Sentry error", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "RESOLVED", + "description": "Error has been resolved", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "RESOLVED_IN_NEXT_RELEASE", + "description": "Error has been ignored until next release", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "UNRESOLVED", + "description": "Error is unresolved", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "IGNORED", + "description": "Error has been ignored", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { "kind": "OBJECT", - "name": "SentryErrorStackTraceContext", - "description": "An object context for a Sentry error stack trace", + "name": "SentryErrorTags", + "description": "State of a Sentry error", "fields": [ { - "name": "code", - "description": "Code number of the context", + "name": "level", + "description": "Severity level of the Sentry Error", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "line", - "description": "Line number of the context", + "name": "logger", + "description": "Logger of the Sentry Error", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -19138,12 +21238,12 @@ }, { "kind": "OBJECT", - "name": "Metadata", - "description": null, + "name": "Snippet", + "description": "Represents a snippet entry", "fields": [ { - "name": "revision", - "description": "Revision", + "name": "author", + "description": "The owner of the snippet", "args": [ ], @@ -19151,8 +21251,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "User", "ofType": null } }, @@ -19160,8 +21260,8 @@ "deprecationReason": null }, { - "name": "version", - "description": "Version", + "name": "blob", + "description": "Snippet blob", "args": [ ], @@ -19169,1035 +21269,632 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "SnippetBlob", "ofType": null } }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DesignManagement", - "description": null, - "fields": [ + }, { - "name": "designAtVersion", - "description": "Find a design as of a version", + "name": "createdAt", + "description": "Timestamp this snippet was created", "args": [ - { - "name": "id", - "description": "The Global ID of the design at this version", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "DesignAtVersion", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "version", - "description": "Find a version", + "name": "description", + "description": "Description of the snippet", "args": [ - { - "name": "id", - "description": "The Global ID of the version", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "DesignVersion", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Mutation", - "description": null, - "fields": [ + }, { - "name": "addAwardEmoji", - "description": null, + "name": "descriptionHtml", + "description": "The GitLab Flavored Markdown rendering of `description`", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AddAwardEmojiInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "AddAwardEmojiPayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "adminSidekiqQueuesDeleteJobs", - "description": null, + "name": "discussions", + "description": "All discussions on this noteable", "args": [ { - "name": "input", - "description": null, + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AdminSidekiqQueuesDeleteJobsInput", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "AdminSidekiqQueuesDeleteJobsPayload", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createDiffNote", - "description": null, - "args": [ + }, { - "name": "input", - "description": null, + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CreateDiffNoteInput", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CreateDiffNotePayload", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createEpic", - "description": null, - "args": [ + }, { - "name": "input", - "description": null, + "name": "first", + "description": "Returns the first _n_ elements from the list.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CreateEpicInput", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "CreateEpicPayload", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createImageDiffNote", - "description": null, - "args": [ + }, { - "name": "input", - "description": null, + "name": "last", + "description": "Returns the last _n_ elements from the list.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CreateImageDiffNoteInput", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "defaultValue": null } ], "type": { - "kind": "OBJECT", - "name": "CreateImageDiffNotePayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "DiscussionConnection", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createNote", - "description": null, + "name": "fileName", + "description": "File Name of the snippet", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CreateNoteInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "CreateNotePayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createSnippet", - "description": null, + "name": "id", + "description": "Id of the snippet", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CreateSnippetInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "CreateSnippetPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "designManagementDelete", - "description": null, + "name": "notes", + "description": "All notes on this noteable", "args": [ { - "name": "input", - "description": null, + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DesignManagementDeleteInput", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "DesignManagementDeletePayload", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "designManagementUpload", - "description": null, - "args": [ + }, { - "name": "input", - "description": null, + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DesignManagementUploadInput", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "DesignManagementUploadPayload", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "destroyNote", - "description": null, - "args": [ + }, { - "name": "input", - "description": null, + "name": "first", + "description": "Returns the first _n_ elements from the list.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DestroyNoteInput", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "DestroyNotePayload", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "destroySnippet", - "description": null, - "args": [ + }, { - "name": "input", - "description": null, + "name": "last", + "description": "Returns the last _n_ elements from the list.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DestroySnippetInput", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, "defaultValue": null } ], "type": { - "kind": "OBJECT", - "name": "DestroySnippetPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "NoteConnection", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "epicAddIssue", - "description": null, + "name": "project", + "description": "The project the snippet is associated with", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "EpicAddIssueInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { "kind": "OBJECT", - "name": "EpicAddIssuePayload", + "name": "Project", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "epicSetSubscription", - "description": null, + "name": "rawUrl", + "description": "Raw URL of the snippet", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "EpicSetSubscriptionInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "EpicSetSubscriptionPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "epicTreeReorder", - "description": null, + "name": "title", + "description": "Title of the snippet", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "EpicTreeReorderInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "EpicTreeReorderPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issueSetConfidential", - "description": null, + "name": "updatedAt", + "description": "Timestamp this snippet was updated", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "IssueSetConfidentialInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "IssueSetConfidentialPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Time", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issueSetDueDate", - "description": null, + "name": "userPermissions", + "description": "Permissions for the current user on the resource", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "IssueSetDueDateInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "IssueSetDueDatePayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SnippetPermissions", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issueSetWeight", - "description": null, + "name": "visibilityLevel", + "description": "Visibility Level of the snippet", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "IssueSetWeightInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "IssueSetWeightPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "VisibilityLevelsEnum", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "markAsSpamSnippet", - "description": null, + "name": "webUrl", + "description": "Web URL of the snippet", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "MarkAsSpamSnippetInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MarkAsSpamSnippetPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ { - "name": "mergeRequestSetAssignees", - "description": null, + "kind": "INTERFACE", + "name": "Noteable", + "ofType": null + } + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SnippetBlob", + "description": "Represents the snippet blob", + "fields": [ + { + "name": "binary", + "description": "Shows whether the blob is binary", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetAssigneesInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequestSetAssigneesPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequestSetLabels", - "description": null, + "name": "mode", + "description": "Blob mode", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetLabelsInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequestSetLabelsPayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequestSetLocked", - "description": null, + "name": "name", + "description": "Blob name", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetLockedInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequestSetLockedPayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequestSetMilestone", - "description": null, + "name": "path", + "description": "Blob path", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetMilestoneInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequestSetMilestonePayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequestSetSubscription", - "description": null, + "name": "plainData", + "description": "Blob plain highlighted data", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetSubscriptionInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequestSetSubscriptionPayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequestSetWip", - "description": null, + "name": "rawPath", + "description": "Blob raw content endpoint path", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetWipInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "MergeRequestSetWipPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "removeAwardEmoji", - "description": null, + "name": "richData", + "description": "Blob highlighted data", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "RemoveAwardEmojiInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "RemoveAwardEmojiPayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "todoMarkDone", - "description": null, + "name": "richViewer", + "description": "Blob content rich viewer", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "TodoMarkDoneInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { "kind": "OBJECT", - "name": "TodoMarkDonePayload", + "name": "SnippetBlobViewer", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "todoRestore", - "description": null, + "name": "simpleViewer", + "description": "Blob content simple viewer", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "TodoRestoreInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "TodoRestorePayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SnippetBlobViewer", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "todoRestoreMany", - "description": null, + "name": "size", + "description": "Blob size", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "TodoRestoreManyInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "TodoRestoreManyPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SnippetBlobViewer", + "description": "Represents how the blob content should be displayed", + "fields": [ { - "name": "todosMarkAllDone", - "description": null, + "name": "collapsed", + "description": "Shows whether the blob should be displayed collapsed", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "TodosMarkAllDoneInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "TodosMarkAllDonePayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "toggleAwardEmoji", - "description": null, + "name": "fileType", + "description": "Content file type", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ToggleAwardEmojiInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "ToggleAwardEmojiPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "updateEpic", - "description": null, + "name": "loadAsync", + "description": "Shows whether the blob content is loaded async", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UpdateEpicInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "UpdateEpicPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "updateImageDiffNote", - "description": "Updates a DiffNote on an image (a `Note` where the `position.positionType` is `\"image\"`). If the body of the Note contains only quick actions, the Note will be destroyed during the update, and no Note will be returned", + "name": "loadingPartialName", + "description": "Loading partial name", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UpdateImageDiffNoteInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "UpdateImageDiffNotePayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "updateIssue", - "description": null, + "name": "renderError", + "description": "Error rendering the blob content", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UpdateIssueInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "UpdateIssuePayload", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "updateNote", - "description": "Updates a Note. If the body of the Note contains only quick actions, the Note will be destroyed during the update, and no Note will be returned", + "name": "tooLarge", + "description": "Shows whether the blob too large to be displayed", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UpdateNoteInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "UpdateNotePayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "updateSnippet", - "description": null, + "name": "type", + "description": "Type of blob viewer", "args": [ - { - "name": "input", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UpdateSnippetInput", - "ofType": null - } - }, - "defaultValue": null - } + ], "type": { - "kind": "OBJECT", - "name": "UpdateSnippetPayload", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "BlobViewersType", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -20212,59 +21909,59 @@ }, { "kind": "OBJECT", - "name": "AdminSidekiqQueuesDeleteJobsPayload", - "description": "Autogenerated return type of AdminSidekiqQueuesDeleteJobs", + "name": "SnippetConnection", + "description": "The connection type for Snippet.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SnippetEdge", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "OBJECT", + "name": "Snippet", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "result", - "description": "Information about the status of the deletion request", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "DeleteJobsResponse", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -20279,46 +21976,36 @@ }, { "kind": "OBJECT", - "name": "DeleteJobsResponse", - "description": "The response from the AdminSidekiqQueuesDeleteJobs mutation.", + "name": "SnippetEdge", + "description": "An edge in a connection.", "fields": [ { - "name": "completed", - "description": "Whether or not the entire queue was processed in time; if not, retrying the same request is safe", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deletedJobs", - "description": "The number of matching jobs deleted", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "queueSize", - "description": "The queue size after processing", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "Snippet", "ofType": null }, "isDeprecated": false, @@ -20333,126 +22020,103 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "AdminSidekiqQueuesDeleteJobsInput", - "description": "Autogenerated input type of AdminSidekiqQueuesDeleteJobs", - "fields": null, - "inputFields": [ - { - "name": "user", - "description": "Delete jobs matching user in the context metadata", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "project", - "description": "Delete jobs matching project in the context metadata", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "rootNamespace", - "description": "Delete jobs matching root_namespace in the context metadata", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, + "kind": "OBJECT", + "name": "SnippetPermissions", + "description": null, + "fields": [ { - "name": "subscriptionPlan", - "description": "Delete jobs matching subscription_plan in the context metadata", + "name": "adminSnippet", + "description": "Indicates the user can perform `admin_snippet` on this resource", + "args": [ + + ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "callerId", - "description": "Delete jobs matching caller_id in the context metadata", + "name": "awardEmoji", + "description": "Indicates the user can perform `award_emoji` on this resource", + "args": [ + + ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "queueName", - "description": "The name of the queue to delete jobs from", + "name": "createNote", + "description": "Indicates the user can perform `create_note` on this resource", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Boolean", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AddAwardEmojiPayload", - "description": "Autogenerated return type of AddAwardEmoji", - "fields": [ - { - "name": "awardEmoji", - "description": "The award emoji after mutation", + "name": "readSnippet", + "description": "Indicates the user can perform `read_snippet` on this resource", "args": [ ], "type": { - "kind": "OBJECT", - "name": "AwardEmoji", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "reportSnippet", + "description": "Indicates the user can perform `report_snippet` on this resource", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "updateSnippet", + "description": "Indicates the user can perform `update_snippet` on this resource", "args": [ ], @@ -20460,17 +22124,9 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null } }, "isDeprecated": false, @@ -20485,13 +22141,23 @@ "possibleTypes": null }, { + "kind": "SCALAR", + "name": "String", + "description": "Represents textual data as UTF-8 character sequences. This type is most often used by GraphQL to represent free-form human-readable text.", + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { "kind": "OBJECT", - "name": "AwardEmoji", - "description": "An emoji awarded by a user.", + "name": "Submodule", + "description": null, "fields": [ { - "name": "description", - "description": "The emoji description", + "name": "flatPath", + "description": "Flat path of the entry", "args": [ ], @@ -20508,8 +22174,8 @@ "deprecationReason": null }, { - "name": "emoji", - "description": "The emoji as an icon", + "name": "id", + "description": "ID of the entry", "args": [ ], @@ -20518,7 +22184,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } }, @@ -20527,7 +22193,7 @@ }, { "name": "name", - "description": "The emoji name", + "description": "Name of the entry", "args": [ ], @@ -20544,8 +22210,8 @@ "deprecationReason": null }, { - "name": "unicode", - "description": "The emoji in unicode", + "name": "path", + "description": "Path of the entry", "args": [ ], @@ -20562,8 +22228,8 @@ "deprecationReason": null }, { - "name": "unicodeVersion", - "description": "The unicode version for this emoji", + "name": "sha", + "description": "Last commit sha for the entry", "args": [ ], @@ -20580,116 +22246,107 @@ "deprecationReason": null }, { - "name": "user", - "description": "The user who awarded the emoji", + "name": "treeUrl", + "description": "Tree URL for the sub-module", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "AddAwardEmojiInput", - "description": "Autogenerated input type of AddAwardEmoji", - "fields": null, - "inputFields": [ - { - "name": "awardableId", - "description": "The global id of the awardable resource", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null }, { - "name": "name", - "description": "The emoji name", + "name": "type", + "description": "Type of tree entry", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "ENUM", + "name": "EntryType", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "webUrl", + "description": "Web URL for the sub-module", + "args": [ + + ], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + { + "kind": "INTERFACE", + "name": "Entry", + "ofType": null } ], - "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "RemoveAwardEmojiPayload", - "description": "Autogenerated return type of RemoveAwardEmoji", + "name": "SubmoduleConnection", + "description": "The connection type for Submodule.", "fields": [ { - "name": "awardEmoji", - "description": "The award emoji after mutation", + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "AwardEmoji", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "SubmoduleEdge", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Submodule", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], @@ -20697,17 +22354,9 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null } }, "isDeprecated": false, @@ -20722,28 +22371,16 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "RemoveAwardEmojiInput", - "description": "Autogenerated input type of RemoveAwardEmoji", - "fields": null, - "inputFields": [ - { - "name": "awardableId", - "description": "The global id of the awardable resource", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, + "kind": "OBJECT", + "name": "SubmoduleEdge", + "description": "An edge in a connection.", + "fields": [ { - "name": "name", - "description": "The emoji name", + "name": "cursor", + "description": "A cursor for use in pagination.", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, @@ -20753,59 +22390,39 @@ "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "node", + "description": "The item at the end of the edge.", + "args": [ + + ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Submodule", "ofType": null }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, + "inputFields": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "ToggleAwardEmojiPayload", - "description": "Autogenerated return type of ToggleAwardEmoji", + "name": "TaskCompletionStatus", + "description": "Completion status of tasks", "fields": [ { - "name": "awardEmoji", - "description": "The award emoji after mutation", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "AwardEmoji", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "completedCount", + "description": "Number of completed tasks", "args": [ ], @@ -20813,25 +22430,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "Int", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "toggledOn", - "description": "Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji.", + "name": "count", + "description": "Number of total tasks", "args": [ ], @@ -20840,7 +22449,7 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "Boolean", + "name": "Int", "ofType": null } }, @@ -20856,76 +22465,55 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "ToggleAwardEmojiInput", - "description": "Autogenerated input type of ToggleAwardEmoji", + "kind": "SCALAR", + "name": "Time", + "description": "Time represented in ISO 8601", "fields": null, - "inputFields": [ - { - "name": "awardableId", - "description": "The global id of the awardable resource", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Timelog", + "description": null, + "fields": [ { - "name": "name", - "description": "The emoji name", + "name": "date", + "description": "The date when the time tracked was spent at", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "Time", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "IssueSetConfidentialPayload", - "description": "Autogenerated return type of IssueSetConfidential", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "issue", + "description": "The issue that logged time was added to", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Issue", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "timeSpent", + "description": "The time spent displayed in seconds", "args": [ ], @@ -20933,32 +22521,28 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "Int", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issue", - "description": "The issue after mutation", + "name": "user", + "description": "The user that logged the time", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "User", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -20972,90 +22556,80 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "IssueSetConfidentialInput", - "description": "Autogenerated input type of IssueSetConfidential", - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "TimelogConnection", + "description": "The connection type for Timelog.", + "fields": [ { - "name": "projectPath", - "description": "The project the issue to mutate is in", + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "TimelogEdge", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "iid", - "description": "The iid of the issue to mutate", + "name": "nodes", + "description": "A list of nodes.", + "args": [ + + ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "Timelog", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "confidential", - "description": "Whether or not to set the issue as a confidential.", + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "PageInfo", "ofType": null } }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, + "inputFields": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "IssueSetDueDatePayload", - "description": "Autogenerated return type of IssueSetDueDate", + "name": "TimelogEdge", + "description": "An edge in a connection.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -21063,31 +22637,23 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issue", - "description": "The issue after mutation", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { "kind": "OBJECT", - "name": "Issue", + "name": "Timelog", "ofType": null }, "isDeprecated": false, @@ -21102,90 +22668,67 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "IssueSetDueDateInput", - "description": "Autogenerated input type of IssueSetDueDate", - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "Todo", + "description": "Representing a todo entry", + "fields": [ { - "name": "projectPath", - "description": "The project the issue to mutate is in", + "name": "action", + "description": "Action of the todo", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "ENUM", + "name": "TodoActionEnum", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "iid", - "description": "The iid of the issue to mutate", + "name": "author", + "description": "The owner of this todo", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "User", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "dueDate", - "description": "The desired due date for the issue", + "name": "body", + "description": "Body of the todo", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Time", + "name": "String", "ofType": null } }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UpdateIssuePayload", - "description": "Autogenerated return type of UpdateIssue", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "createdAt", + "description": "Timestamp this todo was created", "args": [ ], @@ -21193,67 +22736,34 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "Time", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "issue", - "description": "The issue after mutation", + "name": "group", + "description": "Group this todo is associated with", "args": [ ], "type": { "kind": "OBJECT", - "name": "Issue", + "name": "Group", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "UpdateIssueInput", - "description": "Autogenerated input type of UpdateIssue", - "fields": null, - "inputFields": [ - { - "name": "projectPath", - "description": "The project the issue to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null }, { - "name": "iid", - "description": "The iid of the issue to mutate", + "name": "id", + "description": "Id of the todo", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, @@ -21263,95 +22773,26 @@ "ofType": null } }, - "defaultValue": null - }, - { - "name": "title", - "description": "Title of the issue", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "description", - "description": "Description of the issue", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "dueDate", - "description": "Due date of the issue", - "type": { - "kind": "SCALAR", - "name": "Time", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "confidential", - "description": "Indicates the issue is confidential", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "healthStatus", - "description": "The desired health status", - "type": { - "kind": "ENUM", - "name": "HealthStatus", - "ofType": null - }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MergeRequestSetLabelsPayload", - "description": "Autogenerated return type of MergeRequestSetLabels", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "project", + "description": "The project this todo is associated with", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Project", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "state", + "description": "State of the todo", "args": [ ], @@ -21359,32 +22800,28 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "ENUM", + "name": "TodoStateEnum", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequest", - "description": "The merge request after mutation", + "name": "targetType", + "description": "Target type of the todo", "args": [ ], "type": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "TodoTargetEnum", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -21398,109 +22835,52 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetLabelsInput", - "description": "Autogenerated input type of MergeRequestSetLabels", + "kind": "ENUM", + "name": "TodoActionEnum", + "description": null, "fields": null, - "inputFields": [ + "inputFields": null, + "interfaces": null, + "enumValues": [ { - "name": "projectPath", - "description": "The project the merge request to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null + "name": "assigned", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "iid", - "description": "The iid of the merge request to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null + "name": "mentioned", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "labelIds", - "description": "The Label IDs to set. Replaces existing labels by default.\n", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - } - }, - "defaultValue": null + "name": "build_failed", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "operationMode", - "description": "Changes the operation mode. Defaults to REPLACE.\n", - "type": { - "kind": "ENUM", - "name": "MutationOperationMode", - "ofType": null - }, - "defaultValue": null + "name": "marked", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "MutationOperationMode", - "description": "Different toggles for changing mutator behavior.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "REPLACE", - "description": "Performs a replace operation", + "name": "approval_required", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "APPEND", - "description": "Performs an append operation", + "name": "unmergeable", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "REMOVE", - "description": "Performs a removal operation", + "name": "directly_addressed", + "description": null, "isDeprecated": false, "deprecationReason": null } @@ -21509,59 +22889,59 @@ }, { "kind": "OBJECT", - "name": "MergeRequestSetLockedPayload", - "description": "Autogenerated return type of MergeRequestSetLocked", + "name": "TodoConnection", + "description": "The connection type for Todo.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "edges", + "description": "A list of edges.", "args": [ ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "TodoEdge", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "nodes", + "description": "A list of nodes.", "args": [ ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "OBJECT", + "name": "Todo", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequest", - "description": "The merge request after mutation", + "name": "pageInfo", + "description": "Information to aid in pagination.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -21575,90 +22955,13 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetLockedInput", - "description": "Autogenerated input type of MergeRequestSetLocked", - "fields": null, - "inputFields": [ - { - "name": "projectPath", - "description": "The project the merge request to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "iid", - "description": "The iid of the merge request to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "locked", - "description": "Whether or not to lock the merge request.\n", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { "kind": "OBJECT", - "name": "MergeRequestSetMilestonePayload", - "description": "Autogenerated return type of MergeRequestSetMilestone", + "name": "TodoEdge", + "description": "An edge in a connection.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -21666,31 +22969,23 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "mergeRequest", - "description": "The merge request after mutation", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { "kind": "OBJECT", - "name": "MergeRequest", + "name": "Todo", "ofType": null }, "isDeprecated": false, @@ -21706,27 +23001,13 @@ }, { "kind": "INPUT_OBJECT", - "name": "MergeRequestSetMilestoneInput", - "description": "Autogenerated input type of MergeRequestSetMilestone", + "name": "TodoMarkDoneInput", + "description": "Autogenerated input type of TodoMarkDone", "fields": null, "inputFields": [ { - "name": "projectPath", - "description": "The project the merge request to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "iid", - "description": "The iid of the merge request to mutate", + "name": "id", + "description": "The global id of the todo to mark as done", "type": { "kind": "NON_NULL", "name": null, @@ -21739,16 +23020,6 @@ "defaultValue": null }, { - "name": "milestoneId", - "description": "The milestone to assign to the merge request.\n", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { @@ -21765,8 +23036,8 @@ }, { "kind": "OBJECT", - "name": "MergeRequestSetSubscriptionPayload", - "description": "Autogenerated return type of MergeRequestSetSubscription", + "name": "TodoMarkDonePayload", + "description": "Autogenerated return type of TodoMarkDone", "fields": [ { "name": "clientMutationId", @@ -21809,15 +23080,19 @@ "deprecationReason": null }, { - "name": "mergeRequest", - "description": "The merge request after mutation", + "name": "todo", + "description": "The requested todo", "args": [ ], "type": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Todo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -21832,27 +23107,13 @@ }, { "kind": "INPUT_OBJECT", - "name": "MergeRequestSetSubscriptionInput", - "description": "Autogenerated input type of MergeRequestSetSubscription", + "name": "TodoRestoreInput", + "description": "Autogenerated input type of TodoRestore", "fields": null, "inputFields": [ { - "name": "projectPath", - "description": "The project the merge request to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "iid", - "description": "The iid of the merge request to mutate", + "name": "id", + "description": "The global id of the todo to restore", "type": { "kind": "NON_NULL", "name": null, @@ -21865,20 +23126,6 @@ "defaultValue": null }, { - "name": "subscribedState", - "description": "The desired state of the subscription", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - }, - { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { @@ -21894,30 +23141,14 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "MergeRequestSetWipPayload", - "description": "Autogenerated return type of MergeRequestSetWip", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, + "kind": "INPUT_OBJECT", + "name": "TodoRestoreManyInput", + "description": "Autogenerated input type of TodoRestoreMany", + "fields": null, + "inputFields": [ { - "name": "errors", - "description": "Reasons why the mutation failed.", - "args": [ - - ], + "name": "ids", + "description": "The global ids of the todos to restore (a maximum of 50 is supported at once)", "type": { "kind": "NON_NULL", "name": null, @@ -21929,83 +23160,12 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } } } }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mergeRequest", - "description": "The merge request after mutation", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetWipInput", - "description": "Autogenerated input type of MergeRequestSetWip", - "fields": null, - "inputFields": [ - { - "name": "projectPath", - "description": "The project the merge request to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "iid", - "description": "The iid of the merge request to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "wip", - "description": "Whether or not to set the merge request as a WIP.\n", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, "defaultValue": null }, { @@ -22025,8 +23185,8 @@ }, { "kind": "OBJECT", - "name": "MergeRequestSetAssigneesPayload", - "description": "Autogenerated return type of MergeRequestSetAssignees", + "name": "TodoRestoreManyPayload", + "description": "Autogenerated return type of TodoRestoreMany", "fields": [ { "name": "clientMutationId", @@ -22069,65 +23229,12 @@ "deprecationReason": null }, { - "name": "mergeRequest", - "description": "The merge request after mutation", + "name": "updatedIds", + "description": "The ids of the updated todo items", "args": [ ], "type": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "MergeRequestSetAssigneesInput", - "description": "Autogenerated input type of MergeRequestSetAssignees", - "fields": null, - "inputFields": [ - { - "name": "projectPath", - "description": "The project the merge request to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "iid", - "description": "The iid of the merge request to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "assigneeUsernames", - "description": "The usernames to assign to the merge request. Replaces existing assignees by default.\n", - "type": { "kind": "NON_NULL", "name": null, "ofType": { @@ -22138,43 +23245,27 @@ "name": null, "ofType": { "kind": "SCALAR", - "name": "String", + "name": "ID", "ofType": null } } } }, - "defaultValue": null - }, - { - "name": "operationMode", - "description": "The operation to perform. Defaults to REPLACE.\n", - "type": { - "kind": "ENUM", - "name": "MutationOperationMode", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, + "inputFields": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "CreateNotePayload", - "description": "Autogenerated return type of CreateNote", + "name": "TodoRestorePayload", + "description": "Autogenerated return type of TodoRestore", "fields": [ { "name": "clientMutationId", @@ -22217,15 +23308,19 @@ "deprecationReason": null }, { - "name": "note", - "description": "The note after mutation", + "name": "todo", + "description": "The requested todo", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Note", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "Todo", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -22239,50 +23334,76 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "CreateNoteInput", - "description": "Autogenerated input type of CreateNote", + "kind": "ENUM", + "name": "TodoStateEnum", + "description": null, "fields": null, - "inputFields": [ + "inputFields": null, + "interfaces": null, + "enumValues": [ { - "name": "noteableId", - "description": "The global id of the resource to add a note to", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null + "name": "pending", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "body", - "description": "Content of the note", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null + "name": "done", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "TodoTargetEnum", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ + { + "name": "COMMIT", + "description": "A Commit", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "discussionId", - "description": "The global id of the discussion this note is in reply to", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null + "name": "ISSUE", + "description": "An Issue", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "MERGEREQUEST", + "description": "A MergeRequest", + "isDeprecated": false, + "deprecationReason": null }, { + "name": "DESIGN", + "description": "A Design", + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "EPIC", + "description": "An Epic", + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "TodosMarkAllDoneInput", + "description": "Autogenerated input type of TodosMarkAllDone", + "fields": null, + "inputFields": [ + { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { @@ -22299,8 +23420,8 @@ }, { "kind": "OBJECT", - "name": "CreateDiffNotePayload", - "description": "Autogenerated return type of CreateDiffNote", + "name": "TodosMarkAllDonePayload", + "description": "Autogenerated return type of TodosMarkAllDone", "fields": [ { "name": "clientMutationId", @@ -22343,15 +23464,27 @@ "deprecationReason": null }, { - "name": "note", - "description": "The note after mutation", + "name": "updatedIds", + "description": "Ids of the updated todos", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Note", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + } }, "isDeprecated": false, "deprecationReason": null @@ -22366,13 +23499,13 @@ }, { "kind": "INPUT_OBJECT", - "name": "CreateDiffNoteInput", - "description": "Autogenerated input type of CreateDiffNote", + "name": "ToggleAwardEmojiInput", + "description": "Autogenerated input type of ToggleAwardEmoji", "fields": null, "inputFields": [ { - "name": "noteableId", - "description": "The global id of the resource to add a note to", + "name": "awardableId", + "description": "The global id of the awardable resource", "type": { "kind": "NON_NULL", "name": null, @@ -22385,8 +23518,8 @@ "defaultValue": null }, { - "name": "body", - "description": "Content of the note", + "name": "name", + "description": "The emoji name", "type": { "kind": "NON_NULL", "name": null, @@ -22399,20 +23532,6 @@ "defaultValue": null }, { - "name": "position", - "description": "The position of this note on a diff", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DiffPositionInput", - "ofType": null - } - }, - "defaultValue": null - }, - { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { @@ -22428,129 +23547,25 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "DiffPositionInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "headSha", - "description": "SHA of the HEAD at the time the comment was made", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "baseSha", - "description": "Merge base of the branch the comment was made on", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "startSha", - "description": "SHA of the branch being compared against", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "paths", - "description": "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", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DiffPathsInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "oldLine", - "description": "Line on start SHA that was changed", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "newLine", - "description": "Line on HEAD SHA that was changed", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DiffPathsInput", - "description": null, - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "ToggleAwardEmojiPayload", + "description": "Autogenerated return type of ToggleAwardEmoji", + "fields": [ { - "name": "oldPath", - "description": "The path of the file on the start sha", + "name": "awardEmoji", + "description": "The award emoji after mutation", + "args": [ + + ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "AwardEmoji", "ofType": null }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "newPath", - "description": "The path of the file on the head sha", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CreateImageDiffNotePayload", - "description": "Autogenerated return type of CreateImageDiffNote", - "fields": [ - { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "args": [ @@ -22591,15 +23606,19 @@ "deprecationReason": null }, { - "name": "note", - "description": "The note after mutation", + "name": "toggledOn", + "description": "Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji.", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Note", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null @@ -22613,101 +23632,214 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "CreateImageDiffNoteInput", - "description": "Autogenerated input type of CreateImageDiffNote", - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "Tree", + "description": null, + "fields": [ { - "name": "noteableId", - "description": "The global id of the resource to add a note to", + "name": "blobs", + "description": "Blobs of the tree", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "BlobConnection", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "body", - "description": "Content of the note", + "name": "lastCommit", + "description": "Last commit for the tree", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Commit", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "submodules", + "description": "Sub-modules of the tree", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "SubmoduleConnection", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "position", - "description": "The position of this note on a diff", + "name": "trees", + "description": "Trees of the tree", + "args": [ + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "INPUT_OBJECT", - "name": "DiffImagePositionInput", + "kind": "OBJECT", + "name": "TreeEntryConnection", "ofType": null } }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, + "inputFields": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "DiffImagePositionInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "headSha", - "description": "SHA of the HEAD at the time the comment was made", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "baseSha", - "description": "Merge base of the branch the comment was made on", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, + "kind": "OBJECT", + "name": "TreeEntry", + "description": "Represents a directory", + "fields": [ { - "name": "startSha", - "description": "SHA of the branch being compared against", + "name": "flatPath", + "description": "Flat path of the entry", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, @@ -22717,105 +23849,84 @@ "ofType": null } }, - "defaultValue": null - }, - { - "name": "paths", - "description": "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", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DiffPathsInput", - "ofType": null - } - }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "x", - "description": "X position of the note", + "name": "id", + "description": "ID of the entry", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "ID", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "y", - "description": "Y position of the note", + "name": "name", + "description": "Name of the entry", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "width", - "description": "Total width of the image", + "name": "path", + "description": "Path of the entry", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "height", - "description": "Total height of the image", + "name": "sha", + "description": "Last commit sha for the entry", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UpdateNotePayload", - "description": "Autogenerated return type of UpdateNote", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "type", + "description": "Type of tree entry", "args": [ ], @@ -22823,31 +23934,23 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "ENUM", + "name": "EntryType", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "note", - "description": "The note after mutation", + "name": "webUrl", + "description": "Web URL for the tree entry (directory)", "args": [ ], "type": { - "kind": "OBJECT", - "name": "Note", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, @@ -22856,82 +23959,90 @@ ], "inputFields": null, "interfaces": [ - + { + "kind": "INTERFACE", + "name": "Entry", + "ofType": null + } ], "enumValues": null, "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "UpdateNoteInput", - "description": "Autogenerated input type of UpdateNote", - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "TreeEntryConnection", + "description": "The connection type for TreeEntry.", + "fields": [ { - "name": "id", - "description": "The global id of the note to update", + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "TreeEntryEdge", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "body", - "description": "Content of the note", + "name": "nodes", + "description": "A list of nodes.", + "args": [ + + ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "TreeEntry", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null + } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, + "inputFields": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "UpdateImageDiffNotePayload", - "description": "Autogenerated return type of UpdateImageDiffNote", + "name": "TreeEntryEdge", + "description": "An edge in a connection.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -22939,31 +24050,23 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "note", - "description": "The note after mutation", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { "kind": "OBJECT", - "name": "Note", + "name": "TreeEntry", "ofType": null }, "isDeprecated": false, @@ -22978,58 +24081,26 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "UpdateImageDiffNoteInput", - "description": "Autogenerated input type of UpdateImageDiffNote", + "kind": "ENUM", + "name": "TypeEnum", + "description": null, "fields": null, - "inputFields": [ - { - "name": "id", - "description": "The global id of the note to update", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "body", - "description": "Content of the note", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, + "inputFields": null, + "interfaces": null, + "enumValues": [ { - "name": "position", - "description": "The position of this note on a diff", - "type": { - "kind": "INPUT_OBJECT", - "name": "UpdateDiffImagePositionInput", - "ofType": null - }, - "defaultValue": null + "name": "personal", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "name": "project", + "description": null, + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, - "enumValues": null, "possibleTypes": null }, { @@ -23084,195 +24155,142 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "DestroyNotePayload", - "description": "Autogenerated return type of DestroyNote", - "fields": [ + "kind": "INPUT_OBJECT", + "name": "UpdateEpicInput", + "description": "Autogenerated input type of UpdateEpic", + "fields": null, + "inputFields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], + "name": "iid", + "description": "The iid of the epic to mutate", "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", - "args": [ - - ], + "name": "groupPath", + "description": "The group the epic to mutate is in", "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "ID", + "ofType": null } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "note", - "description": "The note after mutation", - "args": [ - - ], + "name": "title", + "description": "The title of the epic", "type": { - "kind": "OBJECT", - "name": "Note", + "kind": "SCALAR", + "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DestroyNoteInput", - "description": "Autogenerated input type of DestroyNote", - "fields": null, - "inputFields": [ + "defaultValue": null + }, { - "name": "id", - "description": "The global id of the note to destroy", + "name": "description", + "description": "The description of the epic", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "defaultValue": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "startDateFixed", + "description": "The start date of the epic", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "TodoMarkDonePayload", - "description": "Autogenerated return type of TodoMarkDone", - "fields": [ + }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], + "name": "dueDateFixed", + "description": "The end date of the epic", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", - "args": [ - - ], + "name": "startDateIsFixed", + "description": "Indicates start date should be sourced from start_date_fixed field not the issue milestones", "type": { - "kind": "NON_NULL", + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "dueDateIsFixed", + "description": "Indicates end date should be sourced from due_date_fixed field not the issue milestones", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "addLabelIds", + "description": "The IDs of labels to be added to the epic.", + "type": { + "kind": "LIST", "name": null, "ofType": { - "kind": "LIST", + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "kind": "SCALAR", + "name": "ID", + "ofType": null } } }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "todo", - "description": "The requested todo", - "args": [ - - ], + "name": "removeLabelIds", + "description": "The IDs of labels to be removed from the epic.", "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "OBJECT", - "name": "Todo", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } } }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "TodoMarkDoneInput", - "description": "Autogenerated input type of TodoMarkDone", - "fields": null, - "inputFields": [ + "defaultValue": null + }, { - "name": "id", - "description": "The global id of the todo to mark as done", + "name": "stateEvent", + "description": "State event for the epic", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } + "kind": "ENUM", + "name": "EpicStateEvent", + "ofType": null }, "defaultValue": null }, @@ -23293,8 +24311,8 @@ }, { "kind": "OBJECT", - "name": "TodoRestorePayload", - "description": "Autogenerated return type of TodoRestore", + "name": "UpdateEpicPayload", + "description": "Autogenerated return type of UpdateEpic", "fields": [ { "name": "clientMutationId", @@ -23311,6 +24329,20 @@ "deprecationReason": null }, { + "name": "epic", + "description": "The epic after mutation", + "args": [ + + ], + "type": { + "kind": "OBJECT", + "name": "Epic", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "errors", "description": "Reasons why the mutation failed.", "args": [ @@ -23335,24 +24367,6 @@ }, "isDeprecated": false, "deprecationReason": null - }, - { - "name": "todo", - "description": "The requested todo", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Todo", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null } ], "inputFields": null, @@ -23364,13 +24378,13 @@ }, { "kind": "INPUT_OBJECT", - "name": "TodoRestoreInput", - "description": "Autogenerated input type of TodoRestore", + "name": "UpdateImageDiffNoteInput", + "description": "Autogenerated input type of UpdateImageDiffNote", "fields": null, "inputFields": [ { "name": "id", - "description": "The global id of the todo to restore", + "description": "The global id of the note to update", "type": { "kind": "NON_NULL", "name": null, @@ -23383,6 +24397,26 @@ "defaultValue": null }, { + "name": "body", + "description": "Content of the note", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "position", + "description": "The position of this note on a diff", + "type": { + "kind": "INPUT_OBJECT", + "name": "UpdateDiffImagePositionInput", + "ofType": null + }, + "defaultValue": null + }, + { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { @@ -23399,8 +24433,8 @@ }, { "kind": "OBJECT", - "name": "TodosMarkAllDonePayload", - "description": "Autogenerated return type of TodosMarkAllDone", + "name": "UpdateImageDiffNotePayload", + "description": "Autogenerated return type of UpdateImageDiffNote", "fields": [ { "name": "clientMutationId", @@ -23443,27 +24477,15 @@ "deprecationReason": null }, { - "name": "updatedIds", - "description": "Ids of the updated todos", + "name": "note", + "description": "The note after mutation", "args": [ ], "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - } + "kind": "OBJECT", + "name": "Note", + "ofType": null }, "isDeprecated": false, "deprecationReason": null @@ -23478,129 +24500,85 @@ }, { "kind": "INPUT_OBJECT", - "name": "TodosMarkAllDoneInput", - "description": "Autogenerated input type of TodosMarkAllDone", + "name": "UpdateIssueInput", + "description": "Autogenerated input type of UpdateIssue", "fields": null, "inputFields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "projectPath", + "description": "The project the issue to mutate is in", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "iid", + "description": "The iid of the issue to mutate", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + }, + "defaultValue": null + }, + { + "name": "title", + "description": "Title of the issue", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "TodoRestoreManyPayload", - "description": "Autogenerated return type of TodoRestoreMany", - "fields": [ + }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], + "name": "description", + "description": "Description of the issue", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", - "args": [ - - ], + "name": "dueDate", + "description": "Due date of the issue", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } + "kind": "SCALAR", + "name": "Time", + "ofType": null }, - "isDeprecated": false, - "deprecationReason": null + "defaultValue": null }, { - "name": "updatedIds", - "description": "The ids of the updated todo items", - "args": [ - - ], + "name": "confidential", + "description": "Indicates the issue is confidential", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "TodoRestoreManyInput", - "description": "Autogenerated input type of TodoRestoreMany", - "fields": null, - "inputFields": [ + "defaultValue": null + }, { - "name": "ids", - "description": "The global ids of the todos to restore (a maximum of 50 is supported at once)", + "name": "healthStatus", + "description": "The desired health status", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - } + "kind": "ENUM", + "name": "HealthStatus", + "ofType": null }, "defaultValue": null }, @@ -23621,8 +24599,8 @@ }, { "kind": "OBJECT", - "name": "DestroySnippetPayload", - "description": "Autogenerated return type of DestroySnippet", + "name": "UpdateIssuePayload", + "description": "Autogenerated return type of UpdateIssue", "fields": [ { "name": "clientMutationId", @@ -23665,14 +24643,14 @@ "deprecationReason": null }, { - "name": "snippet", - "description": "The snippet after mutation", + "name": "issue", + "description": "The issue after mutation", "args": [ ], "type": { "kind": "OBJECT", - "name": "Snippet", + "name": "Issue", "ofType": null }, "isDeprecated": false, @@ -23688,13 +24666,13 @@ }, { "kind": "INPUT_OBJECT", - "name": "DestroySnippetInput", - "description": "Autogenerated input type of DestroySnippet", + "name": "UpdateNoteInput", + "description": "Autogenerated input type of UpdateNote", "fields": null, "inputFields": [ { "name": "id", - "description": "The global id of the snippet to destroy", + "description": "The global id of the note to update", "type": { "kind": "NON_NULL", "name": null, @@ -23707,6 +24685,20 @@ "defaultValue": null }, { + "name": "body", + "description": "Content of the note", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "defaultValue": null + }, + { "name": "clientMutationId", "description": "A unique identifier for the client performing the mutation.", "type": { @@ -23723,8 +24715,8 @@ }, { "kind": "OBJECT", - "name": "UpdateSnippetPayload", - "description": "Autogenerated return type of UpdateSnippet", + "name": "UpdateNotePayload", + "description": "Autogenerated return type of UpdateNote", "fields": [ { "name": "clientMutationId", @@ -23767,14 +24759,14 @@ "deprecationReason": null }, { - "name": "snippet", - "description": "The snippet after mutation", + "name": "note", + "description": "The note after mutation", "args": [ ], "type": { "kind": "OBJECT", - "name": "Snippet", + "name": "Note", "ofType": null }, "isDeprecated": false, @@ -23875,8 +24867,8 @@ }, { "kind": "OBJECT", - "name": "CreateSnippetPayload", - "description": "Autogenerated return type of CreateSnippet", + "name": "UpdateSnippetPayload", + "description": "Autogenerated return type of UpdateSnippet", "fields": [ { "name": "clientMutationId", @@ -23941,106 +24933,23 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "CreateSnippetInput", - "description": "Autogenerated input type of CreateSnippet", + "kind": "SCALAR", + "name": "Upload", + "description": null, "fields": null, - "inputFields": [ - { - "name": "title", - "description": "Title of the snippet", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "fileName", - "description": "File name of the snippet", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "content", - "description": "Content of the snippet", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "Description of the snippet", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "visibilityLevel", - "description": "The visibility level of the snippet", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "VisibilityLevelsEnum", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": "The project full path the snippet is associated with", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], + "inputFields": null, "interfaces": null, "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "MarkAsSpamSnippetPayload", - "description": "Autogenerated return type of MarkAsSpamSnippet", + "name": "User", + "description": null, "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "avatarUrl", + "description": "URL of the user's avatar", "args": [ ], @@ -24053,8 +24962,8 @@ "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "name", + "description": "Human-readable name of the user", "args": [ ], @@ -24062,101 +24971,273 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "snippet", - "description": "The snippet after mutation", + "name": "snippets", + "description": "Snippets authored by the user", "args": [ - + { + "name": "ids", + "description": "Array of global snippet ids, e.g., \"gid://gitlab/ProjectSnippet/1\"", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "visibility", + "description": "The visibility of the snippet", + "type": { + "kind": "ENUM", + "name": "VisibilityScopesEnum", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "type", + "description": "The type of snippet", + "type": { + "kind": "ENUM", + "name": "TypeEnum", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } ], "type": { "kind": "OBJECT", - "name": "Snippet", + "name": "SnippetConnection", "ofType": null }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "MarkAsSpamSnippetInput", - "description": "Autogenerated input type of MarkAsSpamSnippet", - "fields": null, - "inputFields": [ + }, { - "name": "id", - "description": "The global id of the snippet to update", + "name": "todos", + "description": "Todos of the user", + "args": [ + { + "name": "action", + "description": "The action to be filtered", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "TodoActionEnum", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "authorId", + "description": "The ID of an author", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "projectId", + "description": "The ID of a project", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "groupId", + "description": "The ID of a group", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "state", + "description": "The state of the todo", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "TodoStateEnum", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "type", + "description": "The type of the todo", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "TodoTargetEnum", + "ofType": null + } + } + }, + "defaultValue": null + }, + { + "name": "after", + "description": "Returns the elements in the list that come after the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "before", + "description": "Returns the elements in the list that come before the specified cursor.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "first", + "description": "Returns the first _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + }, + { + "name": "last", + "description": "Returns the last _n_ elements from the list.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null + } + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "TodoConnection", "ofType": null } }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DesignManagementUploadPayload", - "description": "Autogenerated return type of DesignManagementUpload", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, "isDeprecated": false, "deprecationReason": null }, { - "name": "designs", - "description": "The designs that were uploaded by the mutation", + "name": "userPermissions", + "description": "Permissions for the current user on the resource", "args": [ ], @@ -24164,25 +25245,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Design", - "ofType": null - } - } + "kind": "OBJECT", + "name": "UserPermissions", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "username", + "description": "Username of the user. Unique within this instance of GitLab", "args": [ ], @@ -24190,25 +25263,17 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "skippedDesigns", - "description": "Any designs that were skipped from the upload due to there being no change to their content since their last version", + "name": "webUrl", + "description": "Web URL of the user", "args": [ ], @@ -24216,17 +25281,9 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Design", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, @@ -24241,108 +25298,80 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "DesignManagementUploadInput", - "description": "Autogenerated input type of DesignManagementUpload", - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "UserConnection", + "description": "The connection type for User.", + "fields": [ { - "name": "projectPath", - "description": "The project where the issue is to upload designs for", + "name": "edges", + "description": "A list of edges.", + "args": [ + + ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "UserEdge", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "iid", - "description": "The iid of the issue to modify designs for", + "name": "nodes", + "description": "A list of nodes.", + "args": [ + + ], "type": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", + "kind": "OBJECT", + "name": "User", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "files", - "description": "The files to upload", + "name": "pageInfo", + "description": "Information to aid in pagination.", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - } - } + "kind": "OBJECT", + "name": "PageInfo", + "ofType": null } }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Upload", - "description": null, - "fields": null, "inputFields": null, - "interfaces": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "DesignManagementDeletePayload", - "description": "Autogenerated return type of DesignManagementDelete", + "name": "UserEdge", + "description": "An edge in a connection.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "cursor", + "description": "A cursor for use in pagination.", "args": [ ], @@ -24350,31 +25379,23 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "version", - "description": "The new version in which the designs are deleted", + "name": "node", + "description": "The item at the end of the edge.", "args": [ ], "type": { "kind": "OBJECT", - "name": "DesignVersion", + "name": "User", "ofType": null }, "isDeprecated": false, @@ -24389,98 +25410,102 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "DesignManagementDeleteInput", - "description": "Autogenerated input type of DesignManagementDelete", - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "UserPermissions", + "description": null, + "fields": [ { - "name": "projectPath", - "description": "The project where the issue is to upload designs for", + "name": "createSnippet", + "description": "Indicates the user can perform `create_snippet` on this resource", + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, - "defaultValue": null - }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [ + + ], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "ENUM", + "name": "VisibilityLevelsEnum", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ { - "name": "iid", - "description": "The iid of the issue to modify designs for", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null + "name": "private", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "filenames", - "description": "The filenames of the designs to delete", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "defaultValue": null + "name": "internal", + "description": null, + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "name": "public", + "description": null, + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, - "enumValues": null, "possibleTypes": null }, { - "kind": "OBJECT", - "name": "IssueSetWeightPayload", - "description": "Autogenerated return type of IssueSetWeight", - "fields": [ + "kind": "ENUM", + "name": "VisibilityScopesEnum", + "description": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, + "name": "private", + "description": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "internal", + "description": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "public", + "description": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "__Directive", + "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", + "fields": [ + { + "name": "args", + "description": null, "args": [ ], @@ -24494,8 +25519,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "__InputValue", "ofType": null } } @@ -24505,98 +25530,8 @@ "deprecationReason": null }, { - "name": "issue", - "description": "The issue after mutation", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "IssueSetWeightInput", - "description": "Autogenerated input type of IssueSetWeight", - "fields": null, - "inputFields": [ - { - "name": "projectPath", - "description": "The project the issue to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "iid", - "description": "The iid of the issue to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "weight", - "description": "The desired weight for the issue", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EpicTreeReorderPayload", - "description": "Autogenerated return type of EpicTreeReorder", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "description", + "description": null, "args": [ ], @@ -24609,8 +25544,8 @@ "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "locations", + "description": null, "args": [ ], @@ -24624,8 +25559,8 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "String", + "kind": "ENUM", + "name": "__DirectiveLocation", "ofType": null } } @@ -24633,379 +25568,200 @@ }, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "EpicTreeReorderInput", - "description": "Autogenerated input type of EpicTreeReorder", - "fields": null, - "inputFields": [ - { - "name": "baseEpicId", - "description": "The id of the base epic of the tree", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null }, { - "name": "moved", - "description": "Parameters for updating the tree positions", + "name": "name", + "description": null, + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "INPUT_OBJECT", - "name": "EpicTreeNodeFieldsInputType", + "kind": "SCALAR", + "name": "String", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "EpicTreeNodeFieldsInputType", - "description": "A node of an epic tree.", - "fields": null, - "inputFields": [ - { - "name": "id", - "description": "The id of the epic_issue or epic that is being moved", + "name": "onField", + "description": null, + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, - "defaultValue": null + "isDeprecated": true, + "deprecationReason": "Use `locations`." }, { - "name": "adjacentReferenceId", - "description": "The id of the epic_issue or issue that the actual epic or issue is switched with", + "name": "onFragment", + "description": null, + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, - "defaultValue": null + "isDeprecated": true, + "deprecationReason": "Use `locations`." }, { - "name": "relativePosition", - "description": "The type of the switch, after or before allowed", + "name": "onOperation", + "description": null, + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "ENUM", - "name": "MoveType", + "kind": "SCALAR", + "name": "Boolean", "ofType": null } }, - "defaultValue": null + "isDeprecated": true, + "deprecationReason": "Use `locations`." } ], - "interfaces": null, + "inputFields": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { "kind": "ENUM", - "name": "MoveType", - "description": "The position to which the adjacent object should be moved", + "name": "__DirectiveLocation", + "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", "fields": null, "inputFields": null, "interfaces": null, "enumValues": [ { - "name": "before", - "description": "The adjacent object will be moved before the object that is being moved", + "name": "QUERY", + "description": "Location adjacent to a query operation.", "isDeprecated": false, "deprecationReason": null }, { - "name": "after", - "description": "The adjacent object will be moved after the object that is being moved", + "name": "MUTATION", + "description": "Location adjacent to a mutation operation.", "isDeprecated": false, "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UpdateEpicPayload", - "description": "Autogenerated return type of UpdateEpic", - "fields": [ + }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, + "name": "SUBSCRIPTION", + "description": "Location adjacent to a subscription operation.", "isDeprecated": false, "deprecationReason": null }, { - "name": "epic", - "description": "The epic after mutation", - "args": [ - - ], - "type": { - "kind": "OBJECT", - "name": "Epic", - "ofType": null - }, + "name": "FIELD", + "description": "Location adjacent to a field.", "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, + "name": "FRAGMENT_DEFINITION", + "description": "Location adjacent to a fragment definition.", "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "UpdateEpicInput", - "description": "Autogenerated input type of UpdateEpic", - "fields": null, - "inputFields": [ - { - "name": "iid", - "description": "The iid of the epic to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null }, { - "name": "groupPath", - "description": "The group the epic to mutate is in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null + "name": "FRAGMENT_SPREAD", + "description": "Location adjacent to a fragment spread.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "title", - "description": "The title of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "name": "INLINE_FRAGMENT", + "description": "Location adjacent to an inline fragment.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "description", - "description": "The description of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "name": "SCHEMA", + "description": "Location adjacent to a schema definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "startDateFixed", - "description": "The start date of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "name": "SCALAR", + "description": "Location adjacent to a scalar definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "dueDateFixed", - "description": "The end date of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "name": "OBJECT", + "description": "Location adjacent to an object type definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "startDateIsFixed", - "description": "Indicates start date should be sourced from start_date_fixed field not the issue milestones", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null + "name": "FIELD_DEFINITION", + "description": "Location adjacent to a field definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "dueDateIsFixed", - "description": "Indicates end date should be sourced from due_date_fixed field not the issue milestones", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null + "name": "ARGUMENT_DEFINITION", + "description": "Location adjacent to an argument definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "addLabelIds", - "description": "The IDs of labels to be added to the epic.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null + "name": "INTERFACE", + "description": "Location adjacent to an interface definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "removeLabelIds", - "description": "The IDs of labels to be removed from the epic.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null + "name": "UNION", + "description": "Location adjacent to a union definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "stateEvent", - "description": "State event for the epic", - "type": { - "kind": "ENUM", - "name": "EpicStateEvent", - "ofType": null - }, - "defaultValue": null + "name": "ENUM", + "description": "Location adjacent to an enum definition.", + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "EpicStateEvent", - "description": "State event of an epic", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ + "name": "ENUM_VALUE", + "description": "Location adjacent to an enum value definition.", + "isDeprecated": false, + "deprecationReason": null + }, { - "name": "REOPEN", - "description": "Reopen the epic", + "name": "INPUT_OBJECT", + "description": "Location adjacent to an input object type definition.", "isDeprecated": false, "deprecationReason": null }, { - "name": "CLOSE", - "description": "Close the epic", + "name": "INPUT_FIELD_DEFINITION", + "description": "Location adjacent to an input object field definition.", "isDeprecated": false, "deprecationReason": null } @@ -25014,12 +25770,12 @@ }, { "kind": "OBJECT", - "name": "CreateEpicPayload", - "description": "Autogenerated return type of CreateEpic", + "name": "__EnumValue", + "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "deprecationReason", + "description": null, "args": [ ], @@ -25032,22 +25788,22 @@ "deprecationReason": null }, { - "name": "epic", - "description": "The created epic", + "name": "description", + "description": null, "args": [ ], "type": { - "kind": "OBJECT", - "name": "Epic", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "isDeprecated", + "description": null, "args": [ ], @@ -25055,17 +25811,27 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "name", + "description": null, + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null } }, "isDeprecated": false, @@ -25080,144 +25846,39 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "CreateEpicInput", - "description": "Autogenerated input type of CreateEpic", - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "__Field", + "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", + "fields": [ { - "name": "groupPath", - "description": "The group the epic to mutate is in", + "name": "args", + "description": null, + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "title", - "description": "The title of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "description", - "description": "The description of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "startDateFixed", - "description": "The start date of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "dueDateFixed", - "description": "The end date of the epic", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "startDateIsFixed", - "description": "Indicates start date should be sourced from start_date_fixed field not the issue milestones", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "dueDateIsFixed", - "description": "Indicates end date should be sourced from due_date_fixed field not the issue milestones", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addLabelIds", - "description": "The IDs of labels to be added to the epic.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "removeLabelIds", - "description": "The IDs of labels to be removed from the epic.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", + "kind": "LIST", "name": null, "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "__InputValue", + "ofType": null + } } } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "EpicSetSubscriptionPayload", - "description": "Autogenerated return type of EpicSetSubscription", - "fields": [ - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "deprecationReason", + "description": null, "args": [ ], @@ -25230,22 +25891,22 @@ "deprecationReason": null }, { - "name": "epic", - "description": "The epic after mutation", + "name": "description", + "description": null, "args": [ ], "type": { - "kind": "OBJECT", - "name": "Epic", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "isDeprecated", + "description": null, "args": [ ], @@ -25253,101 +25914,66 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "EpicSetSubscriptionInput", - "description": "Autogenerated input type of EpicSetSubscription", - "fields": null, - "inputFields": [ - { - "name": "iid", - "description": "The iid of the epic to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "Boolean", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "groupPath", - "description": "The group the epic to mutate belongs to", + "name": "name", + "description": null, + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "ID", + "name": "String", "ofType": null } }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null }, { - "name": "subscribedState", - "description": "The desired state of the subscription", + "name": "type", + "description": null, + "args": [ + + ], "type": { "kind": "NON_NULL", "name": null, "ofType": { - "kind": "SCALAR", - "name": "Boolean", + "kind": "OBJECT", + "name": "__Type", "ofType": null } }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null + "isDeprecated": false, + "deprecationReason": null } ], - "interfaces": null, + "inputFields": null, + "interfaces": [ + + ], "enumValues": null, "possibleTypes": null }, { "kind": "OBJECT", - "name": "EpicAddIssuePayload", - "description": "Autogenerated return type of EpicAddIssue", + "name": "__InputValue", + "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", "fields": [ { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", + "name": "defaultValue", + "description": "A GraphQL-formatted string representing the default value for this input value.", "args": [ ], @@ -25360,36 +25986,40 @@ "deprecationReason": null }, { - "name": "epic", - "description": "The epic after mutation", + "name": "description", + "description": null, "args": [ ], "type": { - "kind": "OBJECT", - "name": "Epic", + "kind": "SCALAR", + "name": "String", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "epicIssue", - "description": "The epic-issue relation", + "name": "name", + "description": null, "args": [ ], "type": { - "kind": "OBJECT", - "name": "EpicIssue", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } }, "isDeprecated": false, "deprecationReason": null }, { - "name": "errors", - "description": "Reasons why the mutation failed.", + "name": "type", + "description": null, "args": [ ], @@ -25397,17 +26027,9 @@ "kind": "NON_NULL", "name": null, "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "OBJECT", + "name": "__Type", + "ofType": null } }, "isDeprecated": false, @@ -25422,83 +26044,6 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "EpicAddIssueInput", - "description": "Autogenerated input type of EpicAddIssue", - "fields": null, - "inputFields": [ - { - "name": "iid", - "description": "The iid of the epic to mutate", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "groupPath", - "description": "The group the epic to mutate belongs to", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": "The project the issue belongs to", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "issueIid", - "description": "The iid of the issue to be added", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "clientMutationId", - "description": "A unique identifier for the client performing the mutation.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { "kind": "OBJECT", "name": "__Schema", "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", @@ -25811,432 +26356,6 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "__Field", - "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", - "fields": [ - { - "name": "args", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deprecationReason", - "description": null, - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isDeprecated", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Directive", - "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", - "fields": [ - { - "name": "args", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "locations", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "__DirectiveLocation", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "onField", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": true, - "deprecationReason": "Use `locations`." - }, - { - "name": "onFragment", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": true, - "deprecationReason": "Use `locations`." - }, - { - "name": "onOperation", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": true, - "deprecationReason": "Use `locations`." - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__EnumValue", - "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", - "fields": [ - { - "name": "deprecationReason", - "description": null, - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isDeprecated", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__InputValue", - "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", - "fields": [ - { - "name": "defaultValue", - "description": "A GraphQL-formatted string representing the default value for this input value.", - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [ - - ], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": null, - "args": [ - - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [ - - ], - "enumValues": null, - "possibleTypes": null - }, - { "kind": "ENUM", "name": "__TypeKind", "description": "An enum describing what kind of type a given `__Type` is.", @@ -26294,125 +26413,6 @@ } ], "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "__DirectiveLocation", - "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "QUERY", - "description": "Location adjacent to a query operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "MUTATION", - "description": "Location adjacent to a mutation operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SUBSCRIPTION", - "description": "Location adjacent to a subscription operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FIELD", - "description": "Location adjacent to a field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FRAGMENT_DEFINITION", - "description": "Location adjacent to a fragment definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FRAGMENT_SPREAD", - "description": "Location adjacent to a fragment spread.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INLINE_FRAGMENT", - "description": "Location adjacent to an inline fragment.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SCHEMA", - "description": "Location adjacent to a schema definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SCALAR", - "description": "Location adjacent to a scalar definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OBJECT", - "description": "Location adjacent to an object type definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FIELD_DEFINITION", - "description": "Location adjacent to a field definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ARGUMENT_DEFINITION", - "description": "Location adjacent to an argument definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INTERFACE", - "description": "Location adjacent to an interface definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "UNION", - "description": "Location adjacent to a union definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM", - "description": "Location adjacent to an enum definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM_VALUE", - "description": "Location adjacent to an enum value definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_OBJECT", - "description": "Location adjacent to an input object type definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_FIELD_DEFINITION", - "description": "Location adjacent to an input object field definition.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null } ], "directives": [ diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md index 9c59a12bfb3..7d884737f5b 100644 --- a/doc/development/api_graphql_styleguide.md +++ b/doc/development/api_graphql_styleguide.md @@ -636,6 +636,37 @@ found, we should raise a `Gitlab::Graphql::Errors::ResourceNotAvailable` error. Which will be correctly rendered to the clients. +## Validating arguments + +For validations of single arguments, use the +[`prepare` option](https://github.com/rmosolgo/graphql-ruby/blob/master/guides/fields/arguments.md) +as normal. + +Sometimes a mutation or resolver may accept a number of optional +arguments, but still want to validate that at least one of the optional +arguments were given. In this situation, consider using the `#ready?` +method within your mutation or resolver to provide the validation. The +`#ready?` method will be called before any work is done within the +`#resolve` method. + +Example: + +```ruby +def ready?(**args) + if args.values_at(:body, :position).compact.blank? + raise Gitlab::Graphql::Errors::ArgumentError, + 'body or position arguments are required' + end + + # Always remember to call `#super` + super(args) +end +``` + +In the future this may be able to be done using `InputUnions` if +[this RFC](https://github.com/graphql/graphql-spec/blob/master/rfcs/InputUnion.md) +is merged. + ## GitLab's custom scalars ### `Types::TimeType` diff --git a/doc/user/application_security/img/multi_select_v12_9.png b/doc/user/application_security/img/multi_select_v12_9.png Binary files differnew file mode 100644 index 00000000000..b2b171e13d0 --- /dev/null +++ b/doc/user/application_security/img/multi_select_v12_9.png diff --git a/doc/user/application_security/index.md b/doc/user/application_security/index.md index da9cecf110c..3028d575050 100644 --- a/doc/user/application_security/index.md +++ b/doc/user/application_security/index.md @@ -113,6 +113,19 @@ context for a vulnerability as you learn more over time. ![Dismissed vulnerability comment](img/dismissed_info_v12_3.png) +#### Dismissing multiple vulnerabilities + +> Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.9. + +You can dismiss multiple vulnerabilities at once, providing an optional reason. +Selecting the checkboxes on the side of each vulnerability in the list will select that individual vulnerability. +Alternatively, you can select all the vulnerabilities in the list by selecting the checkbox in the table header. +Deselecting the checkbox in the header will deselect all the vulnerabilities in the list. +Once you have selected some vulnerabilities, a menu appears at the top of the table that allows you to select a dismissal reason. +Pressing the "Dismiss Selected" button will dismiss all the selected vulnerabilities at once, with the reason you chose. + +![Multiple vulnerability dismissal](img/multi_select_v12_9.png) + ### Creating an issue for a vulnerability You can create an issue for a vulnerability by selecting the **Create issue** diff --git a/doc/user/clusters/applications.md b/doc/user/clusters/applications.md index 60ec3852118..900ba62d40d 100644 --- a/doc/user/clusters/applications.md +++ b/doc/user/clusters/applications.md @@ -462,6 +462,11 @@ The chart will deploy 5 Elasticsearch nodes: 2 masters, 2 data and 1 client node with resource requests totalling 0.125 CPU and 4.5GB RAM. Each data node requests 1.5GB of memory, which makes it incompatible with clusters of `f1-micro` and `g1-small` instance types. +NOTE: **Note:** +The Elastic Stack cluster application is intended as a log aggregation solution and is not related to our +[Advanced Global Search](../search/advanced_global_search.md) functionality, which uses a separate +Elasticsearch cluster. + ### Future apps Interested in contributing a new GitLab managed app? Visit the diff --git a/doc/user/permissions.md b/doc/user/permissions.md index 43c23bfe34d..7f06eebc806 100644 --- a/doc/user/permissions.md +++ b/doc/user/permissions.md @@ -69,6 +69,7 @@ The following table depicts the various user permission levels in a project. | See related issues | ✓ | ✓ | ✓ | ✓ | ✓ | | Create confidential issue | ✓ (*1*) | ✓ | ✓ | ✓ | ✓ | | View confidential issues | (*2*) | ✓ | ✓ | ✓ | ✓ | +| View [Releases](project/releases/index.md) | ✓ (*6*) | ✓ | ✓ | ✓ | ✓ | | Assign issues | | ✓ | ✓ | ✓ | ✓ | | Label issues | | ✓ | ✓ | ✓ | ✓ | | Set issue weight | | ✓ | ✓ | ✓ | ✓ | @@ -83,6 +84,7 @@ The following table depicts the various user permission levels in a project. | See a list of merge requests | | ✓ | ✓ | ✓ | ✓ | | View project statistics | | ✓ | ✓ | ✓ | ✓ | | View Error Tracking list | | ✓ | ✓ | ✓ | ✓ | +| Create/edit/delete [Releases](project/releases/index.md)| | | ✓ | ✓ | ✓ | | Pull from [Conan repository](packages/conan_repository/index.md), [Maven repository](packages/maven_repository/index.md), or [NPM registry](packages/npm_registry/index.md) **(PREMIUM)** | | ✓ | ✓ | ✓ | ✓ | | Publish to [Conan repository](packages/conan_repository/index.md), [Maven repository](packages/maven_repository/index.md), or [NPM registry](packages/npm_registry/index.md) **(PREMIUM)** | | | ✓ | ✓ | ✓ | | Upload [Design Management](project/issues/design_management.md) files **(PREMIUM)** | | | ✓ | ✓ | ✓ | @@ -152,6 +154,7 @@ The following table depicts the various user permission levels in a project. 1. If **Public pipelines** is enabled in **Project Settings > CI/CD**. 1. Not allowed for Guest, Reporter, Developer, Maintainer, or Owner. See [Protected Branches](./project/protected_branches.md). 1. If the [branch is protected](./project/protected_branches.md#using-the-allowed-to-merge-and-allowed-to-push-settings), this depends on the access Developers and Maintainers are given. +1. Guest users can access GitLab [**Releases**](project/releases/index.md) for downloading assets but are not allowed to download the source code nor see repository information like tags and commits. ## Project features permissions @@ -198,17 +201,6 @@ Confidential issues can be accessed by reporters and higher permission levels, as well as by guest users that create a confidential issue. To learn more, read through the documentation on [permissions and access to confidential issues](project/issues/confidential_issues.md#permissions-and-access-to-confidential-issues). -### Releases permissions - -[Project Releases](project/releases/index.md) can be read by project -members with Reporter, Developer, Maintainer, and Owner permissions. -Guest users can access Release pages for downloading assets but -are not allowed to download the source code nor see repository -information such as tags and commits. - -Releases can be created, updated, or deleted via [Releases APIs](../api/releases/index.md) -by project Developers, Maintainers, and Owners. - ## Group members permissions NOTE: **Note:** diff --git a/doc/user/project/clusters/kubernetes_pod_logs.md b/doc/user/project/clusters/kubernetes_pod_logs.md index f1899c7b8d9..709eefe07dd 100644 --- a/doc/user/project/clusters/kubernetes_pod_logs.md +++ b/doc/user/project/clusters/kubernetes_pod_logs.md @@ -46,13 +46,15 @@ Logs can be displayed by clicking on a specific pod from [Deploy Boards](../depl ### Logs view -The logs view will contain the last 500 lines for a pod, and has control to filter through: +The logs view lets you filter the logs by: - Pods. - [From GitLab 12.4](https://gitlab.com/gitlab-org/gitlab/issues/5769), environments. - [From GitLab 12.7](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21656), [full text search](#full-text-search). - [From GitLab 12.8](https://gitlab.com/gitlab-org/gitlab/issues/197879), dates. +Loading more than 500 log lines is possible from [GitLab 12.9](https://gitlab.com/gitlab-org/gitlab/-/issues/198050) onwards. + Support for pods with multiple containers is coming [in a future release](https://gitlab.com/gitlab-org/gitlab/issues/13404). Support for historical data is coming [in a future release](https://gitlab.com/gitlab-org/gitlab/issues/196191). diff --git a/doc/user/project/issues/design_management.md b/doc/user/project/issues/design_management.md index 79ad6efd150..ba9796dc785 100644 --- a/doc/user/project/issues/design_management.md +++ b/doc/user/project/issues/design_management.md @@ -77,17 +77,18 @@ Navigate to the **Design Management** page from any issue by clicking the **Desi To upload design images, click the **Upload Designs** button and select images to upload. -Designs with the same filename as an existing uploaded design will create a new version -of the design, and will replace the previous version. - -Designs cannot be added if the issue has been moved, or its -[discussion is locked](../../discussions/#lock-discussions). - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/34353) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.9, you can drag and drop designs onto the dedicated dropzone to upload them. ![Drag and drop design uploads](img/design_drag_and_drop_uploads_v12_9.png) +Designs with the same filename as an existing uploaded design will create a new version +of the design, and will replace the previous version. [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/34353) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.9, dropping a design on an existing uploaded design will also create a new version, +provided the filenames are the same. + +Designs cannot be added if the issue has been moved, or its +[discussion is locked](../../discussions/#lock-discussions). + ### Skipped designs Designs with the same filename as an existing uploaded design _and_ whose content has not changed will be skipped. diff --git a/doc/user/project/releases/index.md b/doc/user/project/releases/index.md index 85da9d9be43..d8935cd7e30 100644 --- a/doc/user/project/releases/index.md +++ b/doc/user/project/releases/index.md @@ -16,13 +16,6 @@ GitLab's **Releases** are a way to track deliverables in your project. Consider a snapshot in time of the source, build output, artifacts, and other metadata associated with a released version of your code. -There are several ways to create a Release: - -- In the interface, when you create a new Git tag. -- In the interface, by adding a release note to an existing Git tag. -- Using the [Releases API](../../../api/releases/index.md): we recommend doing this as one of the last - steps in your CI/CD release pipeline. - ## Getting started with Releases Start by giving a [description](#release-description) to the Release and @@ -117,7 +110,7 @@ it takes you to the list of Releases. ![Number of Releases](img/releases_count_v12_8.png "Incremental counter of Releases") For private projects, the number of Releases is displayed to users with Reporter -[permissions](../../permissions.md#releases-permissions) or higher. For public projects, +[permissions](../../permissions.md#project-members-permissions) or higher. For public projects, it is displayed to every user regardless of their permission level. ### Upcoming Releases @@ -130,6 +123,29 @@ Release tag. Once the `released_at` date and time has passed, the badge is autom ![An upcoming release](img/upcoming_release_v12_7.png) +## Creating a Release + +> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/32812) in GitLab + 12.9, Releases can be created directly through the GitLab Releases UI. + +NOTE: **Note:** +Only users with Developer permissions or higher can create Releases. +Read more about [Release permissions](../../../user/permissions.md#project-members-permissions). + +To create a new Release through the GitLab UI: + +1. Navigate to **Project overview > Releases** and click the **New release** button. +1. On the **New Tag** page, fill out the tag details. +1. Optionally, in the **Release notes** field, enter the Release's description. + If you leave this field empty, only a tag will be created. + If you populate it, both a tag and a Release will be created. +1. Click **Create tag**. + +If you created a release, you can view it at **Project overview > Releases**. + +You can also create a Release using the [Releases API](../../../api/releases/index.md#create-a-release): +we recommend doing this as one of the last steps in your CI/CD release pipeline. + ## Editing a release > [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/26016) in GitLab 12.6. diff --git a/doc/user/project/web_ide/img/commit_changes_v12_3.png b/doc/user/project/web_ide/img/commit_changes_v12_3.png Binary files differdeleted file mode 100644 index e7dffbc7655..00000000000 --- a/doc/user/project/web_ide/img/commit_changes_v12_3.png +++ /dev/null diff --git a/doc/user/project/web_ide/img/commit_changes_v12_9.png b/doc/user/project/web_ide/img/commit_changes_v12_9.png Binary files differnew file mode 100644 index 00000000000..48491360626 --- /dev/null +++ b/doc/user/project/web_ide/img/commit_changes_v12_9.png diff --git a/doc/user/project/web_ide/index.md b/doc/user/project/web_ide/index.md index ba4eaf9f9b1..aeffd21d48c 100644 --- a/doc/user/project/web_ide/index.md +++ b/doc/user/project/web_ide/index.md @@ -43,30 +43,33 @@ you can find a more complete list of supported languages in the NOTE: **Note:** Single file editing is based on the [Ace Editor](https://ace.c9.io). -## Stage and commit changes +## Commit changes -After making your changes, click the **Commit** button in the bottom left to -review the list of changed files. If you're using GitLab 12.6 or older versions, -click on each file to review the changes and tick the item to stage a file. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/4539) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 10.4 and [brought to GitLab Core](https://gitlab.com/gitlab-org/gitlab-foss/issues/44157) in 10.7. +> - From [GitLab 12.7 onwards](https://gitlab.com/gitlab-org/gitlab/issues/33441), +files were automatically staged. +> - From [GitLab 12.9 onwards](https://gitlab.com/gitlab-org/gitlab/-/issues/196609), support for staging files was removed +to prevent loss of unstaged data. All your current changes necessarily have to be +committed or discarded. -From [GitLab 12.7 onward](https://gitlab.com/gitlab-org/gitlab/issues/33441), -all your files will be automatically staged. You still have the option to unstage -changes in case you want to submit them in multiple smaller commits. To unstage -a change, simply click the **Unstage** button when a staged file is open, or click -the undo icon next to **Staged changes** to unstage all changes. +After making your changes, click the **Commit** button on the bottom-left to +review the list of changed files. Once you have finalized your changes, you can add a commit message, commit the -staged changes and directly create a merge request. In case you don't have write +changes and directly create a merge request. In case you don't have write access to the selected branch, you will see a warning, but still be able to create a new branch and start a merge request. -![Commit changes](img/commit_changes_v12_3.png) +To discard a change in a particular file, click the **Discard changes** button on that +file in the changes tab. To discard all the changes, click the trash icon on the +top-right corner of the changes sidebar. + +![Commit changes](img/commit_changes_v12_9.png) ## Reviewing changes Before you commit your changes, you can compare them with the previous commit -by switching to the review mode or selecting the file from the staged files -list. +by switching to the review mode or selecting the file from the list of changes. An additional review mode is available when you open a merge request, which shows you a preview of the merge request diff if you commit your changes. diff --git a/lib/gitlab/background_migration/link_lfs_objects_projects.rb b/lib/gitlab/background_migration/link_lfs_objects_projects.rb new file mode 100644 index 00000000000..983470c5121 --- /dev/null +++ b/lib/gitlab/background_migration/link_lfs_objects_projects.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +module Gitlab + module BackgroundMigration + # Create missing LfsObjectsProject records for forks + class LinkLfsObjectsProjects + # Model specifically used for migration. + class LfsObjectsProject < ActiveRecord::Base + include EachBatch + + self.table_name = 'lfs_objects_projects' + + def self.linkable + where( + <<~SQL + lfs_objects_projects.project_id IN ( + SELECT fork_network_members.forked_from_project_id + FROM fork_network_members + WHERE fork_network_members.forked_from_project_id IS NOT NULL + ) + SQL + ) + end + end + + # Model specifically used for migration. + class ForkNetworkMember < ActiveRecord::Base + include EachBatch + + self.table_name = 'fork_network_members' + + def self.without_lfs_object(lfs_object_id) + where( + <<~SQL + fork_network_members.project_id NOT IN ( + SELECT lop.project_id + FROM lfs_objects_projects lop + WHERE lop.lfs_object_id = #{lfs_object_id} + ) + SQL + ) + end + end + + BATCH_SIZE = 1000 + + def perform(start_id, end_id) + lfs_objects_projects = + Gitlab::BackgroundMigration::LinkLfsObjectsProjects::LfsObjectsProject + .linkable + .where(id: start_id..end_id) + + return if lfs_objects_projects.empty? + + lfs_objects_projects.find_each do |lop| + ForkNetworkMember + .select("#{lop.lfs_object_id}, fork_network_members.project_id, NOW(), NOW()") + .without_lfs_object(lop.lfs_object_id) + .where(forked_from_project_id: lop.project_id) + .each_batch(of: BATCH_SIZE) do |batch, index| + execute <<~SQL + INSERT INTO lfs_objects_projects (lfs_object_id, project_id, created_at, updated_at) + #{batch.to_sql} + SQL + + logger.info(message: "LinkLfsObjectsProjects: created missing LfsObjectsProject records for LfsObject #{lop.lfs_object_id}") + end + end + end + + private + + def execute(sql) + ::ActiveRecord::Base.connection.execute(sql) + end + + def logger + @logger ||= Gitlab::BackgroundMigration::Logger.build + end + end + end +end diff --git a/lib/gitlab/ci/templates/Pages/Jekyll.gitlab-ci.yml b/lib/gitlab/ci/templates/Pages/Jekyll.gitlab-ci.yml index e7dacd3a1fc..0c8859dc779 100644 --- a/lib/gitlab/ci/templates/Pages/Jekyll.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Pages/Jekyll.gitlab-ci.yml @@ -1,12 +1,13 @@ # Template project: https://gitlab.com/pages/jekyll # Docs: https://docs.gitlab.com/ce/pages/ -image: ruby:2.3 +image: ruby:2.6 variables: JEKYLL_ENV: production LC_ALL: C.UTF-8 before_script: + - gem install bundler - bundle install test: diff --git a/lib/gitlab/ci/templates/Pages/Middleman.gitlab-ci.yml b/lib/gitlab/ci/templates/Pages/Middleman.gitlab-ci.yml index 57ac323dfdf..462b4737c4e 100644 --- a/lib/gitlab/ci/templates/Pages/Middleman.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Pages/Middleman.gitlab-ci.yml @@ -1,5 +1,5 @@ # Full project: https://gitlab.com/pages/middleman -image: ruby:2.3 +image: ruby:2.6 cache: paths: diff --git a/lib/gitlab/ci/templates/Pages/Nanoc.gitlab-ci.yml b/lib/gitlab/ci/templates/Pages/Nanoc.gitlab-ci.yml index 7f037b5f5cf..b512f8d77e9 100644 --- a/lib/gitlab/ci/templates/Pages/Nanoc.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Pages/Nanoc.gitlab-ci.yml @@ -1,5 +1,5 @@ # Full project: https://gitlab.com/pages/nanoc -image: ruby:2.3 +image: ruby:2.6 pages: script: diff --git a/lib/gitlab/ci/templates/Pages/Octopress.gitlab-ci.yml b/lib/gitlab/ci/templates/Pages/Octopress.gitlab-ci.yml index 6d912a89bc1..4318aadcaa6 100644 --- a/lib/gitlab/ci/templates/Pages/Octopress.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Pages/Octopress.gitlab-ci.yml @@ -1,5 +1,5 @@ # Full project: https://gitlab.com/pages/octopress -image: ruby:2.3 +image: ruby:2.6 pages: script: diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 7b22fc00f24..3017de1c198 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -68,6 +68,11 @@ msgstr "" msgid "\"%{path}\" did not exist on \"%{ref}\"" msgstr "" +msgid "%d changed file" +msgid_plural "%d changed files" +msgstr[0] "" +msgstr[1] "" + msgid "%d code quality issue" msgid_plural "%d code quality issues" msgstr[0] "" @@ -186,21 +191,11 @@ msgid_plural "%d shards selected" msgstr[0] "" msgstr[1] "" -msgid "%d staged change" -msgid_plural "%d staged changes" -msgstr[0] "" -msgstr[1] "" - msgid "%d tag" msgid_plural "%d tags" msgstr[0] "" msgstr[1] "" -msgid "%d unstaged change" -msgid_plural "%d unstaged changes" -msgstr[0] "" -msgstr[1] "" - msgid "%d vulnerability dismissed" msgid_plural "%d vulnerabilities dismissed" msgstr[0] "" @@ -431,9 +426,6 @@ msgstr "" msgid "%{spanStart}in%{spanEnd} %{errorFn}" msgstr "" -msgid "%{staged} staged and %{unstaged} unstaged changes" -msgstr "" - msgid "%{start} to %{end}" msgstr "" @@ -777,9 +769,6 @@ msgstr "" msgid "<strong>%{group_name}</strong> group members" msgstr "" -msgid "<strong>%{stagedFilesLength} staged</strong> and <strong>%{changedFilesLength} unstaged</strong> changes" -msgstr "" - msgid "<strong>Deletes</strong> source branch" msgstr "" @@ -5154,6 +5143,9 @@ msgstr "" msgid "Configure the %{link} integration." msgstr "" +msgid "Configure the Jira integration first on your project's %{strong_start} Settings > Integrations > Jira%{strong_end} page." +msgstr "" + msgid "Configure the way a user creates a new account." msgstr "" @@ -6878,13 +6870,10 @@ msgstr "" msgid "Disabled mirrors can only be enabled by instance owners. It is recommended that you delete them." msgstr "" -msgid "Discard" -msgstr "" - msgid "Discard all changes" msgstr "" -msgid "Discard all unstaged changes?" +msgid "Discard all changes?" msgstr "" msgid "Discard changes" @@ -7492,6 +7481,9 @@ msgstr "" msgid "Ensure your %{linkStart}environment is part of the deploy stage%{linkEnd} of your CI pipeline to track deployments to your cluster." msgstr "" +msgid "Enter 2FA for Admin Mode" +msgstr "" + msgid "Enter Admin Mode" msgstr "" @@ -7531,6 +7523,9 @@ msgstr "" msgid "Enter one or more user ID separated by commas" msgstr "" +msgid "Enter the code from the two-factor app on your mobile device. If you've lost your device, you may enter one of your recovery codes." +msgstr "" + msgid "Enter the issue description" msgstr "" @@ -7645,6 +7640,12 @@ msgstr "" msgid "Environments|Commit" msgstr "" +msgid "Environments|Currently showing %{fetched} results." +msgstr "" + +msgid "Environments|Currently showing all results." +msgstr "" + msgid "Environments|Deploy to..." msgstr "" @@ -7678,6 +7679,9 @@ msgstr "" msgid "Environments|Logs from" msgstr "" +msgid "Environments|Logs from %{start} to %{end}." +msgstr "" + msgid "Environments|New environment" msgstr "" @@ -8962,6 +8966,9 @@ msgstr "" msgid "From merge request merge until deploy to production" msgstr "" +msgid "From project" +msgstr "" + msgid "From the Kubernetes cluster details view, install Runner from the applications list" msgstr "" @@ -10608,9 +10615,15 @@ msgstr "" msgid "Import" msgstr "" +msgid "Import %{status}" +msgstr "" + msgid "Import CSV" msgstr "" +msgid "Import Jira issues" +msgstr "" + msgid "Import Projects from Gitea" msgstr "" @@ -10632,6 +10645,9 @@ msgstr "" msgid "Import issues" msgstr "" +msgid "Import issues from Jira" +msgstr "" + msgid "Import members" msgstr "" @@ -11144,6 +11160,9 @@ msgstr "" msgid "January" msgstr "" +msgid "Jira Issue Import" +msgstr "" + msgid "JiraService|Events for %{noteable_model_name} are disabled." msgstr "" @@ -12747,6 +12766,9 @@ msgstr "" msgid "Modal|Close" msgstr "" +msgid "Modified" +msgstr "" + msgid "Modified in this version" msgstr "" @@ -13028,6 +13050,9 @@ msgstr "" msgid "New project" msgstr "" +msgid "New release" +msgstr "" + msgid "New runners registration token has been generated!" msgstr "" @@ -13621,9 +13646,6 @@ msgstr "" msgid "Open" msgstr "" -msgid "Open Documentation" -msgstr "" - msgid "Open Selection" msgstr "" @@ -16295,6 +16317,9 @@ msgstr "" msgid "Releases are based on Git tags. We recommend naming tags that fit within semantic versioning, for example %{codeStart}v1.0%{codeEnd}, %{codeStart}v2.0-pre%{codeEnd}." msgstr "" +msgid "Releases documentation" +msgstr "" + msgid "Release|Something went wrong while getting the release details" msgstr "" @@ -18680,21 +18705,12 @@ msgstr "" msgid "Stage & Commit" msgstr "" -msgid "Stage all changes" -msgstr "" - msgid "Stage data updated" msgstr "" msgid "Stage removed" msgstr "" -msgid "Staged" -msgstr "" - -msgid "Staged %{type}" -msgstr "" - msgid "Star a label to make it a priority label. Order the prioritized labels to change their relative priority, by dragging." msgstr "" @@ -19304,7 +19320,7 @@ msgstr "" msgid "TagsPage|Optionally, add a message to the tag. Leaving this blank creates a %{link_start}lightweight tag.%{link_end}" msgstr "" -msgid "TagsPage|Optionally, add release notes to the tag. They will be stored in the GitLab database and displayed on the tags page." +msgid "TagsPage|Optionally, create a public Release of your project, based on this tag. Release notes are displayed on the %{releases_page_link_start}Releases%{link_end} page. %{docs_link_start}More information%{link_end}" msgstr "" msgid "TagsPage|Release notes" @@ -19851,6 +19867,9 @@ msgstr "" msgid "There are no archived projects yet" msgstr "" +msgid "There are no changes" +msgstr "" + msgid "There are no charts configured for this page" msgstr "" @@ -19887,12 +19906,6 @@ msgstr "" msgid "There are no projects shared with this group yet" msgstr "" -msgid "There are no staged changes" -msgstr "" - -msgid "There are no unstaged changes" -msgstr "" - msgid "There is a limit of %{ci_project_subscriptions_limit} subscriptions from or to a project." msgstr "" @@ -21094,6 +21107,9 @@ msgstr "" msgid "Two-Factor Authentication" msgstr "" +msgid "Two-Factor Authentication code" +msgstr "" + msgid "Two-factor Authentication" msgstr "" @@ -21304,18 +21320,6 @@ msgstr "" msgid "Unschedule job" msgstr "" -msgid "Unstage" -msgstr "" - -msgid "Unstage all changes" -msgstr "" - -msgid "Unstaged" -msgstr "" - -msgid "Unstaged %{type}" -msgstr "" - msgid "Unstar" msgstr "" @@ -22799,6 +22803,9 @@ msgstr "" msgid "You can only transfer the project to namespaces you manage." msgstr "" +msgid "You can only upload one design when dropping onto an existing design." +msgstr "" + msgid "You can resolve the merge conflict using either the Interactive mode, by choosing %{use_ours} or %{use_theirs} buttons, or by editing the files directly. Commit these changes into %{branch_name}" msgstr "" @@ -22952,6 +22959,9 @@ msgstr "" msgid "You must set up incoming email before it becomes active." msgstr "" +msgid "You must upload a file with the same file name when dropping onto an existing design." +msgstr "" + msgid "You need a different license to enable FileLocks feature" msgstr "" @@ -22988,7 +22998,7 @@ msgstr "" msgid "You will lose all changes you've made to this file. This action cannot be undone." msgstr "" -msgid "You will lose all the unstaged changes you've made in this project. This action cannot be undone." +msgid "You will lose all uncommitted changes you've made in this project. This action cannot be undone." msgstr "" msgid "You will need to update your local repositories to point to the new location." diff --git a/spec/controllers/admin/sessions_controller_spec.rb b/spec/controllers/admin/sessions_controller_spec.rb index 4bab6b51102..fabd79133ec 100644 --- a/spec/controllers/admin/sessions_controller_spec.rb +++ b/spec/controllers/admin/sessions_controller_spec.rb @@ -68,7 +68,7 @@ describe Admin::SessionsController, :do_not_mock_admin_mode do # triggering the auth form will request admin mode get :new - post :create, params: { password: user.password } + post :create, params: { user: { password: user.password } } expect(response).to redirect_to admin_root_path expect(controller.current_user_mode.admin_mode?).to be(true) @@ -82,7 +82,7 @@ describe Admin::SessionsController, :do_not_mock_admin_mode do # triggering the auth form will request admin mode get :new - post :create, params: { password: '' } + post :create, params: { user: { password: '' } } expect(response).to render_template :new expect(controller.current_user_mode.admin_mode?).to be(false) @@ -95,7 +95,7 @@ describe Admin::SessionsController, :do_not_mock_admin_mode do # do not trigger the auth form - post :create, params: { password: user.password } + post :create, params: { user: { password: user.password } } expect(response).to redirect_to(new_admin_session_path) expect(controller.current_user_mode.admin_mode?).to be(false) @@ -110,12 +110,118 @@ describe Admin::SessionsController, :do_not_mock_admin_mode do get :new Timecop.freeze(Gitlab::Auth::CurrentUserMode::ADMIN_MODE_REQUESTED_GRACE_PERIOD.from_now) do - post :create, params: { password: user.password } + post :create, params: { user: { password: user.password } } expect(response).to redirect_to(new_admin_session_path) expect(controller.current_user_mode.admin_mode?).to be(false) end end + + context 'when using two-factor authentication via OTP' do + let(:user) { create(:admin, :two_factor) } + + def authenticate_2fa(user_params) + post(:create, params: { user: user_params }, session: { otp_user_id: user.id }) + end + + it 'requests two factor after a valid password is provided' do + expect(controller.current_user_mode.admin_mode?).to be(false) + + # triggering the auth form will request admin mode + get :new + + post :create, params: { user: { password: user.password } } + + expect(response).to render_template('admin/sessions/two_factor') + expect(controller.current_user_mode.admin_mode?).to be(false) + end + + it 'can login with valid otp' do + expect(controller.current_user_mode.admin_mode?).to be(false) + + controller.store_location_for(:redirect, admin_root_path) + controller.current_user_mode.request_admin_mode! + + authenticate_2fa(otp_attempt: user.current_otp) + + expect(response).to redirect_to admin_root_path + expect(controller.current_user_mode.admin_mode?).to be(true) + end + + it 'cannot login with invalid otp' do + expect(controller.current_user_mode.admin_mode?).to be(false) + + controller.current_user_mode.request_admin_mode! + + authenticate_2fa(otp_attempt: 'invalid') + + expect(response).to render_template('admin/sessions/two_factor') + expect(controller.current_user_mode.admin_mode?).to be(false) + end + + context 'with password authentication disabled' do + before do + stub_application_setting(password_authentication_enabled_for_web: false) + end + + it 'allows 2FA stage of non-password login' do + expect(controller.current_user_mode.admin_mode?).to be(false) + + controller.store_location_for(:redirect, admin_root_path) + controller.current_user_mode.request_admin_mode! + + authenticate_2fa(otp_attempt: user.current_otp) + + expect(response).to redirect_to admin_root_path + expect(controller.current_user_mode.admin_mode?).to be(true) + end + end + end + + context 'when using two-factor authentication via U2F' do + let(:user) { create(:admin, :two_factor_via_u2f) } + + def authenticate_2fa_u2f(user_params) + post(:create, params: { user: user_params }, session: { otp_user_id: user.id }) + end + + it 'requests two factor after a valid password is provided' do + expect(controller.current_user_mode.admin_mode?).to be(false) + + # triggering the auth form will request admin mode + get :new + post :create, params: { user: { password: user.password } } + + expect(response).to render_template('admin/sessions/two_factor') + expect(controller.current_user_mode.admin_mode?).to be(false) + end + + it 'can login with valid auth' do + allow(U2fRegistration).to receive(:authenticate).and_return(true) + + expect(controller.current_user_mode.admin_mode?).to be(false) + + controller.store_location_for(:redirect, admin_root_path) + controller.current_user_mode.request_admin_mode! + + authenticate_2fa_u2f(login: user.username, device_response: '{}') + + expect(response).to redirect_to admin_root_path + expect(controller.current_user_mode.admin_mode?).to be(true) + end + + it 'cannot login with invalid auth' do + allow(U2fRegistration).to receive(:authenticate).and_return(false) + + expect(controller.current_user_mode.admin_mode?).to be(false) + + controller.current_user_mode.request_admin_mode! + authenticate_2fa_u2f(login: user.username, device_response: '{}') + + expect(response).to render_template('admin/sessions/two_factor') + expect(controller.current_user_mode.admin_mode?).to be(false) + end + end end end @@ -136,7 +242,7 @@ describe Admin::SessionsController, :do_not_mock_admin_mode do expect(controller.current_user_mode.admin_mode?).to be(false) get :new - post :create, params: { password: user.password } + post :create, params: { user: { password: user.password } } expect(controller.current_user_mode.admin_mode?).to be(true) post :destroy diff --git a/spec/controllers/projects/import/jira_controller_spec.rb b/spec/controllers/projects/import/jira_controller_spec.rb new file mode 100644 index 00000000000..9d68104b755 --- /dev/null +++ b/spec/controllers/projects/import/jira_controller_spec.rb @@ -0,0 +1,173 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::Import::JiraController do + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project) } + + context 'with anonymous user' do + before do + stub_feature_flags(jira_issue_import: true) + end + + context 'get show' do + it 'redirects to issues page' do + get :show, params: { namespace_id: project.namespace, project_id: project } + + expect(response).to redirect_to(new_user_session_path) + end + end + + context 'post import' do + it 'redirects to issues page' do + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'Test' } + + expect(response).to redirect_to(new_user_session_path) + end + end + end + + context 'with logged in user' do + before do + sign_in(user) + project.add_maintainer(user) + end + + context 'when feature flag not enabled' do + before do + stub_feature_flags(jira_issue_import: false) + end + + context 'get show' do + it 'redirects to issues page' do + get :show, params: { namespace_id: project.namespace, project_id: project } + + expect(response).to redirect_to(project_issues_path(project)) + end + end + + context 'post import' do + it 'redirects to issues page' do + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'Test' } + + expect(response).to redirect_to(project_issues_path(project)) + end + end + end + + context 'when feature flag enabled' do + before do + stub_feature_flags(jira_issue_import: true) + end + + context 'when jira service is enabled for the project' do + let_it_be(:jira_service) { create(:jira_service, project: project) } + + context 'when running jira import first time' do + context 'get show' do + it 'renders show template' do + allow(JIRA::Resource::Project).to receive(:all).and_return([]) + expect(project.import_state).to be_nil + + get :show, params: { namespace_id: project.namespace.to_param, project_id: project } + + expect(response).to render_template :show + end + end + + context 'post import' do + it 'creates import state' do + expect(project.import_state).to be_nil + + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'Test' } + + project.reload + + jira_project = project.import_data.data.dig('jira', 'projects').first + expect(project.import_type).to eq 'jira' + expect(project.import_state.status).to eq 'scheduled' + expect(jira_project['key']).to eq 'Test' + expect(response).to redirect_to(project_import_jira_path(project)) + end + end + end + + context 'when import state is scheduled' do + let_it_be(:import_state) { create(:import_state, project: project, status: :scheduled) } + + context 'get show' do + it 'renders import status' do + get :show, params: { namespace_id: project.namespace.to_param, project_id: project } + + expect(project.import_state.status).to eq 'scheduled' + expect(flash.now[:notice]).to eq 'Import scheduled' + end + end + + context 'post import' do + before do + project.reload + project.create_import_data( + data: { + 'jira': { + 'projects': [{ 'key': 'Test', scheduled_at: 5.days.ago, scheduled_by: { user_id: user.id, name: user.name } }] + } + } + ) + end + + it 'uses the existing import data' do + expect(controller).not_to receive(:schedule_import) + + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'New Project' } + + expect(response).to redirect_to(project_import_jira_path(project)) + end + end + end + + context 'when jira import ran before' do + let_it_be(:import_state) { create(:import_state, project: project, status: :finished) } + + context 'get show' do + it 'renders import status' do + allow(JIRA::Resource::Project).to receive(:all).and_return([]) + get :show, params: { namespace_id: project.namespace.to_param, project_id: project } + + expect(project.import_state.status).to eq 'finished' + expect(flash.now[:notice]).to eq 'Import finished' + end + end + + context 'post import' do + before do + project.reload + project.create_import_data( + data: { + 'jira': { + 'projects': [{ 'key': 'Test', scheduled_at: 5.days.ago, scheduled_by: { user_id: user.id, name: user.name } }] + } + } + ) + end + + it 'uses the existing import data' do + expect(controller).to receive(:schedule_import).and_call_original + + post :import, params: { namespace_id: project.namespace, project_id: project, jira_project_key: 'New Project' } + + project.reload + expect(project.import_state.status).to eq 'scheduled' + jira_imported_projects = project.import_data.data.dig('jira', 'projects') + expect(jira_imported_projects.size).to eq 2 + expect(jira_imported_projects.first['key']).to eq 'Test' + expect(jira_imported_projects.last['key']).to eq 'New Project' + expect(response).to redirect_to(project_import_jira_path(project)) + end + end + end + end + end + end +end diff --git a/spec/features/admin/admin_mode/login_spec.rb b/spec/features/admin/admin_mode/login_spec.rb new file mode 100644 index 00000000000..b8a910d3a40 --- /dev/null +++ b/spec/features/admin/admin_mode/login_spec.rb @@ -0,0 +1,184 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'Admin Mode Login', :clean_gitlab_redis_shared_state, :do_not_mock_admin_mode do + include TermsHelper + include UserLoginHelper + + describe 'with two-factor authentication', :js do + def enter_code(code) + fill_in 'user_otp_attempt', with: code + click_button 'Verify code' + end + + context 'with valid username/password' do + let(:user) { create(:admin, :two_factor) } + + context 'using one-time code' do + it 'blocks login if we reuse the same code immediately' do + gitlab_sign_in(user, remember: true) + + expect(page).to have_content('Two-Factor Authentication') + + repeated_otp = user.current_otp + enter_code(repeated_otp) + gitlab_enable_admin_mode_sign_in(user) + + expect(page).to have_content('Two-Factor Authentication') + + enter_code(repeated_otp) + + expect(current_path).to eq admin_session_path + expect(page).to have_content('Invalid two-factor code') + end + + context 'not re-using codes' do + before do + gitlab_sign_in(user, remember: true) + + expect(page).to have_content('Two-Factor Authentication') + + enter_code(user.current_otp) + gitlab_enable_admin_mode_sign_in(user) + + expect(page).to have_content('Two-Factor Authentication') + end + + it 'allows login with valid code' do + # Cannot reuse the TOTP + Timecop.travel(30.seconds.from_now) do + enter_code(user.current_otp) + + expect(current_path).to eq admin_root_path + expect(page).to have_content('Admin mode enabled') + end + end + + it 'blocks login with invalid code' do + # Cannot reuse the TOTP + Timecop.travel(30.seconds.from_now) do + enter_code('foo') + + expect(page).to have_content('Invalid two-factor code') + end + end + + it 'allows login with invalid code, then valid code' do + # Cannot reuse the TOTP + Timecop.travel(30.seconds.from_now) do + enter_code('foo') + + expect(page).to have_content('Invalid two-factor code') + + enter_code(user.current_otp) + + expect(current_path).to eq admin_root_path + expect(page).to have_content('Admin mode enabled') + end + end + + context 'using backup code' do + let(:codes) { user.generate_otp_backup_codes! } + + before do + expect(codes.size).to eq 10 + + # Ensure the generated codes get saved + user.save + end + + context 'with valid code' do + it 'allows login' do + enter_code(codes.sample) + + expect(current_path).to eq admin_root_path + expect(page).to have_content('Admin mode enabled') + end + + it 'invalidates the used code' do + expect { enter_code(codes.sample) } + .to change { user.reload.otp_backup_codes.size }.by(-1) + end + end + + context 'with invalid code' do + it 'blocks login' do + code = codes.sample + expect(user.invalidate_otp_backup_code!(code)).to eq true + + user.save! + expect(user.reload.otp_backup_codes.size).to eq 9 + + enter_code(code) + + expect(page).to have_content('Invalid two-factor code.') + end + end + end + end + end + + context 'when logging in via omniauth' do + let(:user) { create(:omniauth_user, :admin, :two_factor, extern_uid: 'my-uid', provider: 'saml')} + let(:mock_saml_response) do + File.read('spec/fixtures/authentication/saml_response.xml') + end + + before do + stub_omniauth_saml_config(enabled: true, auto_link_saml_user: true, allow_single_sign_on: ['saml'], + providers: [mock_saml_config_with_upstream_two_factor_authn_contexts]) + end + + context 'when authn_context is worth two factors' do + let(:mock_saml_response) do + File.read('spec/fixtures/authentication/saml_response.xml') + .gsub('urn:oasis:names:tc:SAML:2.0:ac:classes:Password', + 'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS') + end + + it 'signs user in without prompting for second factor' do + sign_in_using_saml! + + expect(page).not_to have_content('Two-Factor Authentication') + + enable_admin_mode_using_saml! + + expect(page).not_to have_content('Two-Factor Authentication') + expect(current_path).to eq admin_root_path + expect(page).to have_content('Admin mode enabled') + end + end + + context 'when two factor authentication is required' do + it 'shows 2FA prompt after omniauth login' do + sign_in_using_saml! + + expect(page).to have_content('Two-Factor Authentication') + enter_code(user.current_otp) + + enable_admin_mode_using_saml! + + expect(page).to have_content('Two-Factor Authentication') + + # Cannot reuse the TOTP + Timecop.travel(30.seconds.from_now) do + enter_code(user.current_otp) + + expect(current_path).to eq admin_root_path + expect(page).to have_content('Admin mode enabled') + end + end + end + + def sign_in_using_saml! + gitlab_sign_in_via('saml', user, 'my-uid', mock_saml_response) + end + + def enable_admin_mode_using_saml! + gitlab_enable_admin_mode_sign_in_via('saml', user, 'my-uid', mock_saml_response) + end + end + end + end +end diff --git a/spec/features/admin/admin_mode/logout_spec.rb b/spec/features/admin/admin_mode/logout_spec.rb new file mode 100644 index 00000000000..e1b4aba5724 --- /dev/null +++ b/spec/features/admin/admin_mode/logout_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'Admin Mode Logout', :js, :clean_gitlab_redis_shared_state, :do_not_mock_admin_mode do + include TermsHelper + include UserLoginHelper + + let(:user) { create(:admin) } + + before do + gitlab_sign_in(user) + gitlab_enable_admin_mode_sign_in(user) + visit admin_root_path + end + + it 'disable removes admin mode and redirects to root page' do + gitlab_disable_admin_mode + + expect(current_path).to eq root_path + expect(page).to have_link(href: new_admin_session_path) + end + + it 'disable shows flash notice' do + gitlab_disable_admin_mode + + expect(page).to have_selector('.flash-notice') + end + + context 'on a read-only instance' do + before do + allow(Gitlab::Database).to receive(:read_only?).and_return(true) + end + + it 'disable removes admin mode and redirects to root page' do + gitlab_disable_admin_mode + + expect(current_path).to eq root_path + expect(page).to have_link(href: new_admin_session_path) + end + end +end diff --git a/spec/features/admin/admin_mode_spec.rb b/spec/features/admin/admin_mode_spec.rb index 7b8990aceef..f642d614a5d 100644 --- a/spec/features/admin/admin_mode_spec.rb +++ b/spec/features/admin/admin_mode_spec.rb @@ -45,7 +45,7 @@ describe 'Admin mode', :clean_gitlab_redis_shared_state, :do_not_mock_admin_mode it 'can enter admin mode' do visit new_admin_session_path - fill_in 'password', with: admin.password + fill_in 'user_password', with: admin.password click_button 'Enter Admin Mode' @@ -60,7 +60,7 @@ describe 'Admin mode', :clean_gitlab_redis_shared_state, :do_not_mock_admin_mode it 'can enter admin mode' do visit new_admin_session_path - fill_in 'password', with: admin.password + fill_in 'user_password', with: admin.password click_button 'Enter Admin Mode' diff --git a/spec/frontend/ide/components/commit_sidebar/editor_header_spec.js b/spec/frontend/ide/components/commit_sidebar/editor_header_spec.js index 054e7492429..a25aba61516 100644 --- a/spec/frontend/ide/components/commit_sidebar/editor_header_spec.js +++ b/spec/frontend/ide/components/commit_sidebar/editor_header_spec.js @@ -14,7 +14,6 @@ describe('IDE commit editor header', () => { const findDiscardModal = () => wrapper.find({ ref: 'discardModal' }); const findDiscardButton = () => wrapper.find({ ref: 'discardButton' }); - const findActionButton = () => wrapper.find({ ref: 'actionButton' }); beforeEach(() => { f = file('file'); @@ -28,9 +27,7 @@ describe('IDE commit editor header', () => { }, }); - jest.spyOn(wrapper.vm, 'stageChange').mockImplementation(); - jest.spyOn(wrapper.vm, 'unstageChange').mockImplementation(); - jest.spyOn(wrapper.vm, 'discardFileChanges').mockImplementation(); + jest.spyOn(wrapper.vm, 'discardChanges').mockImplementation(); }); afterEach(() => { @@ -38,8 +35,8 @@ describe('IDE commit editor header', () => { wrapper = null; }); - it('renders button to discard & stage', () => { - expect(wrapper.vm.$el.querySelectorAll('.btn').length).toBe(2); + it('renders button to discard', () => { + expect(wrapper.vm.$el.querySelectorAll('.btn')).toHaveLength(1); }); describe('discard button', () => { @@ -60,23 +57,7 @@ describe('IDE commit editor header', () => { it('calls discardFileChanges if dialog result is confirmed', () => { modal.vm.$emit('ok'); - expect(wrapper.vm.discardFileChanges).toHaveBeenCalledWith(f.path); - }); - }); - - describe('stage/unstage button', () => { - it('unstages the file if it was already staged', () => { - f.staged = true; - - findActionButton().trigger('click'); - - expect(wrapper.vm.unstageChange).toHaveBeenCalledWith(f.path); - }); - - it('stages the file if it was not staged', () => { - findActionButton().trigger('click'); - - expect(wrapper.vm.stageChange).toHaveBeenCalledWith(f.path); + expect(wrapper.vm.discardChanges).toHaveBeenCalledWith(f.path); }); }); }); diff --git a/spec/frontend/logs/components/environment_logs_spec.js b/spec/frontend/logs/components/environment_logs_spec.js index 26542c3d046..c638b4c05f9 100644 --- a/spec/frontend/logs/components/environment_logs_spec.js +++ b/spec/frontend/logs/components/environment_logs_spec.js @@ -1,5 +1,5 @@ import Vue from 'vue'; -import { GlDropdown, GlDropdownItem, GlSearchBoxByClick } from '@gitlab/ui'; +import { GlSprintf, GlDropdown, GlDropdownItem, GlSearchBoxByClick } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import DateTimePicker from '~/vue_shared/components/date_time_picker/date_time_picker.vue'; import EnvironmentLogs from '~/logs/components/environment_logs.vue'; @@ -20,9 +20,18 @@ import { jest.mock('~/lib/utils/scroll_utils'); +const module = 'environmentLogs'; + +jest.mock('lodash/throttle', () => + jest.fn(func => { + return func; + }), +); + describe('EnvironmentLogs', () => { let EnvironmentLogsComponent; let store; + let dispatch; let wrapper; let state; @@ -32,14 +41,6 @@ describe('EnvironmentLogs', () => { clusterApplicationsDocumentationPath: mockDocumentationPath, }; - const actionMocks = { - setInitData: jest.fn(), - setSearch: jest.fn(), - showPodLogs: jest.fn(), - showEnvironment: jest.fn(), - fetchEnvironments: jest.fn(), - }; - const updateControlBtnsMock = jest.fn(); const findEnvironmentsDropdown = () => wrapper.find('.js-environments-dropdown'); @@ -47,24 +48,25 @@ describe('EnvironmentLogs', () => { const findSearchBar = () => wrapper.find('.js-logs-search'); const findTimeRangePicker = () => wrapper.find({ ref: 'dateTimePicker' }); const findInfoAlert = () => wrapper.find('.js-elasticsearch-alert'); - const findLogControlButtons = () => wrapper.find({ name: 'log-control-buttons-stub' }); + + const findInfiniteScroll = () => wrapper.find({ ref: 'infiniteScroll' }); const findLogTrace = () => wrapper.find('.js-log-trace'); + const findLogFooter = () => wrapper.find({ ref: 'logFooter' }); + const getInfiniteScrollAttr = attr => parseInt(findInfiniteScroll().attributes(attr), 10); const mockSetInitData = () => { state.pods.options = mockPods; state.environments.current = mockEnvName; [state.pods.current] = state.pods.options; - state.logs.isComplete = false; - state.logs.lines = mockLogsResult; + state.logs.lines = []; }; - const mockShowPodLogs = podName => { + const mockShowPodLogs = () => { state.pods.options = mockPods; - [state.pods.current] = podName; + [state.pods.current] = mockPods; - state.logs.isComplete = false; state.logs.lines = mockLogsResult; }; @@ -83,10 +85,21 @@ describe('EnvironmentLogs', () => { methods: { update: updateControlBtnsMock, }, + props: { + scrollDownButtonDisabled: false, + }, }, - }, - methods: { - ...actionMocks, + GlInfiniteScroll: { + name: 'gl-infinite-scroll', + template: ` + <div> + <slot name="header"></slot> + <slot name="items"></slot> + <slot></slot> + </div> + `, + }, + GlSprintf, }, }); }; @@ -95,12 +108,14 @@ describe('EnvironmentLogs', () => { store = createStore(); state = store.state.environmentLogs; EnvironmentLogsComponent = Vue.extend(EnvironmentLogs); + + jest.spyOn(store, 'dispatch').mockResolvedValue(); + + dispatch = store.dispatch; }); afterEach(() => { - actionMocks.setInitData.mockReset(); - actionMocks.showPodLogs.mockReset(); - actionMocks.fetchEnvironments.mockReset(); + store.dispatch.mockReset(); if (wrapper) { wrapper.destroy(); @@ -124,14 +139,14 @@ describe('EnvironmentLogs', () => { expect(findTimeRangePicker().is(DateTimePicker)).toBe(true); // log trace - expect(findLogTrace().isEmpty()).toBe(false); + expect(findInfiniteScroll().exists()).toBe(true); + expect(findLogTrace().exists()).toBe(true); }); it('mounted inits data', () => { initWrapper(); - expect(actionMocks.setInitData).toHaveBeenCalledTimes(1); - expect(actionMocks.setInitData).toHaveBeenLastCalledWith({ + expect(dispatch).toHaveBeenCalledWith(`${module}/setInitData`, { timeRange: expect.objectContaining({ default: true, }), @@ -139,18 +154,15 @@ describe('EnvironmentLogs', () => { podName: null, }); - expect(actionMocks.fetchEnvironments).toHaveBeenCalledTimes(1); - expect(actionMocks.fetchEnvironments).toHaveBeenLastCalledWith(mockEnvironmentsEndpoint); + expect(dispatch).toHaveBeenCalledWith(`${module}/fetchEnvironments`, mockEnvironmentsEndpoint); }); describe('loading state', () => { beforeEach(() => { state.pods.options = []; - state.logs = { - lines: [], - isLoading: true, - }; + state.logs.lines = []; + state.logs.isLoading = true; state.environments = { options: [], @@ -183,6 +195,18 @@ describe('EnvironmentLogs', () => { expect(updateControlBtnsMock).not.toHaveBeenCalled(); }); + it('shows an infinite scroll with height and no content', () => { + expect(getInfiniteScrollAttr('max-list-height')).toBeGreaterThan(0); + expect(getInfiniteScrollAttr('fetched-items')).toBe(0); + }); + + it('shows an infinite scroll container with equal height and max-height ', () => { + const height = getInfiniteScrollAttr('max-list-height'); + + expect(height).toEqual(expect.any(Number)); + expect(findInfiniteScroll().attributes('style')).toMatch(`height: ${height}px;`); + }); + it('shows a logs trace', () => { expect(findLogTrace().text()).toBe(''); expect( @@ -193,14 +217,12 @@ describe('EnvironmentLogs', () => { }); }); - describe('legacy environment', () => { + describe('k8s environment', () => { beforeEach(() => { state.pods.options = []; - state.logs = { - lines: [], - isLoading: false, - }; + state.logs.lines = []; + state.logs.isLoading = false; state.environments = { options: mockEnvironments, @@ -226,9 +248,16 @@ describe('EnvironmentLogs', () => { describe('state with data', () => { beforeEach(() => { - actionMocks.setInitData.mockImplementation(mockSetInitData); - actionMocks.showPodLogs.mockImplementation(mockShowPodLogs); - actionMocks.fetchEnvironments.mockImplementation(mockFetchEnvs); + dispatch.mockImplementation(actionName => { + if (actionName === `${module}/setInitData`) { + mockSetInitData(); + } else if (actionName === `${module}/showPodLogs`) { + mockShowPodLogs(); + } else if (actionName === `${module}/fetchEnvironments`) { + mockFetchEnvs(); + mockShowPodLogs(); + } + }); initWrapper(); }); @@ -236,10 +265,6 @@ describe('EnvironmentLogs', () => { afterEach(() => { scrollDown.mockReset(); updateControlBtnsMock.mockReset(); - - actionMocks.setInitData.mockReset(); - actionMocks.showPodLogs.mockReset(); - actionMocks.fetchEnvironments.mockReset(); }); it('displays an enabled search bar', () => { @@ -249,8 +274,8 @@ describe('EnvironmentLogs', () => { findSearchBar().vm.$emit('input', mockSearch); findSearchBar().vm.$emit('submit'); - expect(actionMocks.setSearch).toHaveBeenCalledTimes(1); - expect(actionMocks.setSearch).toHaveBeenCalledWith(mockSearch); + expect(dispatch).toHaveBeenCalledWith(`${module}/setInitData`, expect.any(Object)); + expect(dispatch).toHaveBeenCalledWith(`${module}/setSearch`, mockSearch); }); it('displays an enabled time window dropdown', () => { @@ -282,18 +307,21 @@ describe('EnvironmentLogs', () => { }); }); + it('shows infinite scroll with height and no content', () => { + expect(getInfiniteScrollAttr('max-list-height')).toBeGreaterThan(0); + expect(getInfiniteScrollAttr('fetched-items')).toBe(mockTrace.length); + }); + it('populates logs trace', () => { const trace = findLogTrace(); expect(trace.text().split('\n').length).toBe(mockTrace.length); expect(trace.text().split('\n')).toEqual(mockTrace); }); - it('update control buttons state', () => { - expect(updateControlBtnsMock).toHaveBeenCalledTimes(1); - }); + it('populates footer', () => { + const footer = findLogFooter().text(); - it('scrolls to bottom when loaded', () => { - expect(scrollDown).toHaveBeenCalledTimes(1); + expect(footer).toContain(`${mockLogsResult.length} results`); }); describe('when user clicks', () => { @@ -301,33 +329,99 @@ describe('EnvironmentLogs', () => { const items = findEnvironmentsDropdown().findAll(GlDropdownItem); const index = 1; // any env - expect(actionMocks.showEnvironment).toHaveBeenCalledTimes(0); + expect(dispatch).not.toHaveBeenCalledWith(`${module}/showEnvironment`, expect.anything()); items.at(index).vm.$emit('click'); - expect(actionMocks.showEnvironment).toHaveBeenCalledTimes(1); - expect(actionMocks.showEnvironment).toHaveBeenLastCalledWith(mockEnvironments[index].name); + expect(dispatch).toHaveBeenCalledWith( + `${module}/showEnvironment`, + mockEnvironments[index].name, + ); }); it('pod name, trace is refreshed', () => { const items = findPodsDropdown().findAll(GlDropdownItem); const index = 2; // any pod - expect(actionMocks.showPodLogs).toHaveBeenCalledTimes(0); + expect(dispatch).not.toHaveBeenCalledWith(`${module}/showPodLogs`, expect.anything()); items.at(index).vm.$emit('click'); - expect(actionMocks.showPodLogs).toHaveBeenCalledTimes(1); - expect(actionMocks.showPodLogs).toHaveBeenLastCalledWith(mockPods[index]); + expect(dispatch).toHaveBeenCalledWith(`${module}/showPodLogs`, mockPods[index]); }); it('refresh button, trace is refreshed', () => { - expect(actionMocks.showPodLogs).toHaveBeenCalledTimes(0); + expect(dispatch).not.toHaveBeenCalledWith(`${module}/showPodLogs`, expect.anything()); findLogControlButtons().vm.$emit('refresh'); - expect(actionMocks.showPodLogs).toHaveBeenCalledTimes(1); - expect(actionMocks.showPodLogs).toHaveBeenLastCalledWith(mockPodName); + expect(dispatch).toHaveBeenCalledWith(`${module}/showPodLogs`, mockPodName); + }); + }); + }); + + describe('listeners', () => { + beforeEach(() => { + initWrapper(); + }); + + it('attaches listeners in components', () => { + expect(findInfiniteScroll().vm.$listeners).toEqual({ + topReached: expect.any(Function), + scroll: expect.any(Function), + }); + }); + + it('`topReached` when not loading', () => { + expect(store.dispatch).not.toHaveBeenCalledWith(`${module}/fetchMoreLogsPrepend`, undefined); + + findInfiniteScroll().vm.$emit('topReached'); + + expect(store.dispatch).toHaveBeenCalledWith(`${module}/fetchMoreLogsPrepend`, undefined); + }); + + it('`topReached` does not fetches more logs when already loading', () => { + state.logs.isLoading = true; + findInfiniteScroll().vm.$emit('topReached'); + + expect(store.dispatch).not.toHaveBeenCalledWith(`${module}/fetchMoreLogsPrepend`, undefined); + }); + + it('`topReached` fetches more logs', () => { + state.logs.isLoading = true; + findInfiniteScroll().vm.$emit('topReached'); + + expect(store.dispatch).not.toHaveBeenCalledWith(`${module}/fetchMoreLogsPrepend`, undefined); + }); + + it('`scroll` on a scrollable target results in enabled scroll buttons', () => { + const target = { scrollTop: 10, clientHeight: 10, scrollHeight: 21 }; + + state.logs.isLoading = true; + findInfiniteScroll().vm.$emit('scroll', { target }); + + return wrapper.vm.$nextTick(() => { + expect(findLogControlButtons().props('scrollDownButtonDisabled')).toEqual(false); + }); + }); + + it('`scroll` on a non-scrollable target in disabled scroll buttons', () => { + const target = { scrollTop: 10, clientHeight: 10, scrollHeight: 20 }; + + state.logs.isLoading = true; + findInfiniteScroll().vm.$emit('scroll', { target }); + + return wrapper.vm.$nextTick(() => { + expect(findLogControlButtons().props('scrollDownButtonDisabled')).toEqual(true); + }); + }); + + it('`scroll` on no target results in disabled scroll buttons', () => { + state.logs.isLoading = true; + findInfiniteScroll().vm.$emit('scroll', { target: undefined }); + + return wrapper.vm.$nextTick(() => { + expect(findLogControlButtons().props('scrollDownButtonDisabled')).toEqual(true); }); }); }); diff --git a/spec/frontend/logs/components/log_control_buttons_spec.js b/spec/frontend/logs/components/log_control_buttons_spec.js index f344e8189c3..38e568f569f 100644 --- a/spec/frontend/logs/components/log_control_buttons_spec.js +++ b/spec/frontend/logs/components/log_control_buttons_spec.js @@ -1,15 +1,6 @@ import { shallowMount } from '@vue/test-utils'; import { GlButton } from '@gitlab/ui'; import LogControlButtons from '~/logs/components/log_control_buttons.vue'; -import { - canScroll, - isScrolledToTop, - isScrolledToBottom, - scrollDown, - scrollUp, -} from '~/lib/utils/scroll_utils'; - -jest.mock('~/lib/utils/scroll_utils'); describe('LogControlButtons', () => { let wrapper; @@ -18,8 +9,14 @@ describe('LogControlButtons', () => { const findScrollToBottom = () => wrapper.find('.js-scroll-to-bottom'); const findRefreshBtn = () => wrapper.find('.js-refresh-log'); - const initWrapper = () => { - wrapper = shallowMount(LogControlButtons); + const initWrapper = opts => { + wrapper = shallowMount(LogControlButtons, { + listeners: { + scrollUp: () => {}, + scrollDown: () => {}, + }, + ...opts, + }); }; afterEach(() => { @@ -55,27 +52,16 @@ describe('LogControlButtons', () => { describe('when scrolling actions are enabled', () => { beforeEach(() => { // mock scrolled to the middle of a long page - canScroll.mockReturnValue(true); - isScrolledToBottom.mockReturnValue(false); - isScrolledToTop.mockReturnValue(false); - initWrapper(); - wrapper.vm.update(); return wrapper.vm.$nextTick(); }); - afterEach(() => { - canScroll.mockReset(); - isScrolledToTop.mockReset(); - isScrolledToBottom.mockReset(); - }); - it('click on "scroll to top" scrolls up', () => { expect(findScrollToTop().is('[disabled]')).toBe(false); findScrollToTop().vm.$emit('click'); - expect(scrollUp).toHaveBeenCalledTimes(1); + expect(wrapper.emitted('scrollUp')).toHaveLength(1); }); it('click on "scroll to bottom" scrolls down', () => { @@ -83,25 +69,23 @@ describe('LogControlButtons', () => { findScrollToBottom().vm.$emit('click'); - expect(scrollDown).toHaveBeenCalledTimes(1); // plus one time when trace was loaded + expect(wrapper.emitted('scrollDown')).toHaveLength(1); }); }); describe('when scrolling actions are disabled', () => { beforeEach(() => { - // mock a short page without a scrollbar - canScroll.mockReturnValue(false); - isScrolledToBottom.mockReturnValue(true); - isScrolledToTop.mockReturnValue(true); - - initWrapper(); + initWrapper({ listeners: {} }); + return wrapper.vm.$nextTick(); }); it('buttons are disabled', () => { - wrapper.vm.update(); return wrapper.vm.$nextTick(() => { - expect(findScrollToTop().is('[disabled]')).toBe(true); - expect(findScrollToBottom().is('[disabled]')).toBe(true); + expect(findScrollToTop().exists()).toBe(false); + expect(findScrollToBottom().exists()).toBe(false); + // This should be enabled when gitlab-ui contains: + // https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/1149 + // expect(findScrollToBottom().is('[disabled]')).toBe(true); }); }); }); diff --git a/spec/frontend/logs/mock_data.js b/spec/frontend/logs/mock_data.js index 4c092a84b36..1a84d6edd12 100644 --- a/spec/frontend/logs/mock_data.js +++ b/spec/frontend/logs/mock_data.js @@ -1,14 +1,18 @@ -export const mockProjectPath = 'root/autodevops-deploy'; +const mockProjectPath = 'root/autodevops-deploy'; + export const mockEnvName = 'production'; export const mockEnvironmentsEndpoint = `${mockProjectPath}/environments.json`; export const mockEnvId = '99'; export const mockDocumentationPath = '/documentation.md'; +export const mockLogsEndpoint = '/dummy_logs_path.json'; +export const mockCursor = 'MOCK_CURSOR'; +export const mockNextCursor = 'MOCK_NEXT_CURSOR'; const makeMockEnvironment = (id, name, advancedQuerying) => ({ id, project_path: mockProjectPath, name, - logs_api_path: '/dummy_logs_path.json', + logs_api_path: mockLogsEndpoint, enable_advanced_logs_querying: advancedQuerying, }); @@ -28,58 +32,22 @@ export const mockPods = [ ]; export const mockLogsResult = [ - { - timestamp: '2019-12-13T13:43:18.2760123Z', - message: '10.36.0.1 - - [16/Oct/2019:06:29:48 UTC] "GET / HTTP/1.1" 200 13', - }, - { timestamp: '2019-12-13T13:43:18.2760123Z', message: '- -> /' }, - { - timestamp: '2019-12-13T13:43:26.8420123Z', - message: '10.36.0.1 - - [16/Oct/2019:06:29:57 UTC] "GET / HTTP/1.1" 200 13', - }, - { timestamp: '2019-12-13T13:43:26.8420123Z', message: '- -> /' }, - { - timestamp: '2019-12-13T13:43:28.3710123Z', - message: '10.36.0.1 - - [16/Oct/2019:06:29:58 UTC] "GET / HTTP/1.1" 200 13', - }, - { timestamp: '2019-12-13T13:43:28.3710123Z', message: '- -> /' }, - { - timestamp: '2019-12-13T13:43:36.8860123Z', - message: '10.36.0.1 - - [16/Oct/2019:06:30:07 UTC] "GET / HTTP/1.1" 200 13', - }, - { timestamp: '2019-12-13T13:43:36.8860123Z', message: '- -> /' }, - { - timestamp: '2019-12-13T13:43:38.4000123Z', - message: '10.36.0.1 - - [16/Oct/2019:06:30:08 UTC] "GET / HTTP/1.1" 200 13', - }, - { timestamp: '2019-12-13T13:43:38.4000123Z', message: '- -> /' }, - { - timestamp: '2019-12-13T13:43:46.8420123Z', - message: '10.36.0.1 - - [16/Oct/2019:06:30:17 UTC] "GET / HTTP/1.1" 200 13', - }, - { timestamp: '2019-12-13T13:43:46.8430123Z', message: '- -> /' }, - { - timestamp: '2019-12-13T13:43:48.3240123Z', - message: '10.36.0.1 - - [16/Oct/2019:06:30:18 UTC] "GET / HTTP/1.1" 200 13', - }, - { timestamp: '2019-12-13T13:43:48.3250123Z', message: '- -> /' }, + { timestamp: '2019-12-13T13:43:18.2760123Z', message: 'Log 1' }, + { timestamp: '2019-12-13T13:43:18.2760123Z', message: 'Log 2' }, + { timestamp: '2019-12-13T13:43:26.8420123Z', message: 'Log 3' }, ]; export const mockTrace = [ - 'Dec 13 13:43:18.276Z | 10.36.0.1 - - [16/Oct/2019:06:29:48 UTC] "GET / HTTP/1.1" 200 13', - 'Dec 13 13:43:18.276Z | - -> /', - 'Dec 13 13:43:26.842Z | 10.36.0.1 - - [16/Oct/2019:06:29:57 UTC] "GET / HTTP/1.1" 200 13', - 'Dec 13 13:43:26.842Z | - -> /', - 'Dec 13 13:43:28.371Z | 10.36.0.1 - - [16/Oct/2019:06:29:58 UTC] "GET / HTTP/1.1" 200 13', - 'Dec 13 13:43:28.371Z | - -> /', - 'Dec 13 13:43:36.886Z | 10.36.0.1 - - [16/Oct/2019:06:30:07 UTC] "GET / HTTP/1.1" 200 13', - 'Dec 13 13:43:36.886Z | - -> /', - 'Dec 13 13:43:38.400Z | 10.36.0.1 - - [16/Oct/2019:06:30:08 UTC] "GET / HTTP/1.1" 200 13', - 'Dec 13 13:43:38.400Z | - -> /', - 'Dec 13 13:43:46.842Z | 10.36.0.1 - - [16/Oct/2019:06:30:17 UTC] "GET / HTTP/1.1" 200 13', - 'Dec 13 13:43:46.843Z | - -> /', - 'Dec 13 13:43:48.324Z | 10.36.0.1 - - [16/Oct/2019:06:30:18 UTC] "GET / HTTP/1.1" 200 13', - 'Dec 13 13:43:48.325Z | - -> /', + 'Dec 13 13:43:18.276Z | Log 1', + 'Dec 13 13:43:18.276Z | Log 2', + 'Dec 13 13:43:26.842Z | Log 3', ]; +export const mockResponse = { + pod_name: mockPodName, + pods: mockPods, + logs: mockLogsResult, + cursor: mockNextCursor, +}; + export const mockSearch = 'foo +bar'; diff --git a/spec/frontend/logs/stores/actions_spec.js b/spec/frontend/logs/stores/actions_spec.js index 6309126159e..1512797e1bc 100644 --- a/spec/frontend/logs/stores/actions_spec.js +++ b/spec/frontend/logs/stores/actions_spec.js @@ -10,6 +10,7 @@ import { showPodLogs, fetchEnvironments, fetchLogs, + fetchMoreLogsPrepend, } from '~/logs/stores/actions'; import { defaultTimeRange } from '~/monitoring/constants'; @@ -18,7 +19,6 @@ import axios from '~/lib/utils/axios_utils'; import flash from '~/flash'; import { - mockProjectPath, mockPodName, mockEnvironmentsEndpoint, mockEnvironments, @@ -26,6 +26,10 @@ import { mockLogsResult, mockEnvName, mockSearch, + mockLogsEndpoint, + mockResponse, + mockCursor, + mockNextCursor, } from '../mock_data'; jest.mock('~/flash'); @@ -52,6 +56,8 @@ describe('Logs Store actions', () => { let state; let mock; + const latestGetParams = () => mock.history.get[mock.history.get.length - 1].params; + convertToFixedRange.mockImplementation(range => { if (range === defaultTimeRange) { return { ...mockDefaultRange }; @@ -75,10 +81,16 @@ describe('Logs Store actions', () => { describe('setInitData', () => { it('should commit environment and pod name mutation', () => - testAction(setInitData, { environmentName: mockEnvName, podName: mockPodName }, state, [ - { type: types.SET_PROJECT_ENVIRONMENT, payload: mockEnvName }, - { type: types.SET_CURRENT_POD_NAME, payload: mockPodName }, - ])); + testAction( + setInitData, + { timeRange: mockFixedRange, environmentName: mockEnvName, podName: mockPodName }, + state, + [ + { type: types.SET_TIME_RANGE, payload: mockFixedRange }, + { type: types.SET_PROJECT_ENVIRONMENT, payload: mockEnvName }, + { type: types.SET_CURRENT_POD_NAME, payload: mockPodName }, + ], + )); }); describe('setSearch', () => { @@ -140,183 +152,245 @@ describe('Logs Store actions', () => { }); }); - describe('fetchLogs', () => { + describe('when the backend responds succesfully', () => { + let expectedMutations; + let expectedActions; + beforeEach(() => { mock = new MockAdapter(axios); + mock.onGet(mockLogsEndpoint).reply(200, mockResponse); + mock.onGet(mockLogsEndpoint).replyOnce(202); // mock reactive cache + + state.environments.options = mockEnvironments; + state.environments.current = mockEnvName; }); afterEach(() => { mock.reset(); }); - it('should commit logs and pod data when there is pod name defined', () => { - state.environments.options = mockEnvironments; - state.environments.current = mockEnvName; - state.pods.current = mockPodName; - - const endpoint = '/dummy_logs_path.json'; - - mock - .onGet(endpoint, { - params: { - pod_name: mockPodName, - ...mockDefaultRange, - }, - }) - .reply(200, { - pod_name: mockPodName, - pods: mockPods, - logs: mockLogsResult, - }); - - mock.onGet(endpoint).replyOnce(202); // mock reactive cache - - return testAction( - fetchLogs, - null, - state, - [ + describe('fetchLogs', () => { + beforeEach(() => { + expectedMutations = [ { type: types.REQUEST_PODS_DATA }, { type: types.REQUEST_LOGS_DATA }, { type: types.SET_CURRENT_POD_NAME, payload: mockPodName }, { type: types.RECEIVE_PODS_DATA_SUCCESS, payload: mockPods }, - { type: types.RECEIVE_LOGS_DATA_SUCCESS, payload: mockLogsResult }, - ], - [], - ); - }); + { + type: types.RECEIVE_LOGS_DATA_SUCCESS, + payload: { logs: mockLogsResult, cursor: mockNextCursor }, + }, + ]; - it('should commit logs and pod data when there is pod name defined and a non-default date range', () => { - state.projectPath = mockProjectPath; - state.environments.options = mockEnvironments; - state.environments.current = mockEnvName; - state.pods.current = mockPodName; - state.timeRange.current = mockFixedRange; + expectedActions = []; + }); - const endpoint = '/dummy_logs_path.json'; + it('should commit logs and pod data when there is pod name defined', () => { + state.pods.current = mockPodName; - mock - .onGet(endpoint, { - params: { + return testAction(fetchLogs, null, state, expectedMutations, expectedActions, () => { + expect(latestGetParams()).toMatchObject({ pod_name: mockPodName, - start: mockFixedRange.start, - end: mockFixedRange.end, - }, - }) - .reply(200, { - pod_name: mockPodName, - pods: mockPods, - logs: mockLogsResult, + }); }); + }); - return testAction( - fetchLogs, - null, - state, - [ - { type: types.REQUEST_PODS_DATA }, - { type: types.REQUEST_LOGS_DATA }, - { type: types.SET_CURRENT_POD_NAME, payload: mockPodName }, - { type: types.RECEIVE_PODS_DATA_SUCCESS, payload: mockPods }, - { type: types.RECEIVE_LOGS_DATA_SUCCESS, payload: mockLogsResult }, - ], - [], - ); - }); - - it('should commit logs and pod data when there is pod name and search and a faulty date range', () => { - state.environments.options = mockEnvironments; - state.environments.current = mockEnvName; - state.pods.current = mockPodName; - state.search = mockSearch; - state.timeRange.current = 'INVALID_TIME_RANGE'; - - const endpoint = '/dummy_logs_path.json'; + it('should commit logs and pod data when there is pod name defined and a non-default date range', () => { + state.pods.current = mockPodName; + state.timeRange.current = mockFixedRange; + state.logs.cursor = mockCursor; - mock - .onGet(endpoint, { - params: { + return testAction(fetchLogs, null, state, expectedMutations, expectedActions, () => { + expect(latestGetParams()).toEqual({ pod_name: mockPodName, - search: mockSearch, - }, - }) - .reply(200, { - pod_name: mockPodName, - pods: mockPods, - logs: mockLogsResult, + start: mockFixedRange.start, + end: mockFixedRange.end, + cursor: mockCursor, + }); }); + }); - mock.onGet(endpoint).replyOnce(202); // mock reactive cache + it('should commit logs and pod data when there is pod name and search and a faulty date range', () => { + state.pods.current = mockPodName; + state.search = mockSearch; + state.timeRange.current = 'INVALID_TIME_RANGE'; - return testAction( - fetchLogs, - null, - state, - [ - { type: types.REQUEST_PODS_DATA }, - { type: types.REQUEST_LOGS_DATA }, - { type: types.SET_CURRENT_POD_NAME, payload: mockPodName }, - { type: types.RECEIVE_PODS_DATA_SUCCESS, payload: mockPods }, - { type: types.RECEIVE_LOGS_DATA_SUCCESS, payload: mockLogsResult }, - ], - [], - () => { + return testAction(fetchLogs, null, state, expectedMutations, expectedActions, () => { + expect(latestGetParams()).toEqual({ + pod_name: mockPodName, + search: mockSearch, + }); // Warning about time ranges was issued expect(flash).toHaveBeenCalledTimes(1); expect(flash).toHaveBeenCalledWith(expect.any(String), 'warning'); - }, - ); + }); + }); + + it('should commit logs and pod data when no pod name defined', () => { + state.timeRange.current = mockDefaultRange; + + return testAction(fetchLogs, null, state, expectedMutations, expectedActions, () => { + expect(latestGetParams()).toEqual({}); + }); + }); }); - it('should commit logs and pod data when no pod name defined', done => { - state.environments.options = mockEnvironments; - state.environments.current = mockEnvName; + describe('fetchMoreLogsPrepend', () => { + beforeEach(() => { + expectedMutations = [ + { type: types.REQUEST_LOGS_DATA_PREPEND }, + { + type: types.RECEIVE_LOGS_DATA_PREPEND_SUCCESS, + payload: { logs: mockLogsResult, cursor: mockNextCursor }, + }, + ]; - const endpoint = '/dummy_logs_path.json'; + expectedActions = []; + }); - mock.onGet(endpoint, { params: { ...mockDefaultRange } }).reply(200, { - pod_name: mockPodName, - pods: mockPods, - logs: mockLogsResult, + it('should commit logs and pod data when there is pod name defined', () => { + state.pods.current = mockPodName; + + expectedActions = []; + + return testAction( + fetchMoreLogsPrepend, + null, + state, + expectedMutations, + expectedActions, + () => { + expect(latestGetParams()).toMatchObject({ + pod_name: mockPodName, + }); + }, + ); }); - mock.onGet(endpoint).replyOnce(202); // mock reactive cache - testAction( + it('should commit logs and pod data when there is pod name defined and a non-default date range', () => { + state.pods.current = mockPodName; + state.timeRange.current = mockFixedRange; + state.logs.cursor = mockCursor; + + return testAction( + fetchMoreLogsPrepend, + null, + state, + expectedMutations, + expectedActions, + () => { + expect(latestGetParams()).toEqual({ + pod_name: mockPodName, + start: mockFixedRange.start, + end: mockFixedRange.end, + cursor: mockCursor, + }); + }, + ); + }); + + it('should commit logs and pod data when there is pod name and search and a faulty date range', () => { + state.pods.current = mockPodName; + state.search = mockSearch; + state.timeRange.current = 'INVALID_TIME_RANGE'; + + return testAction( + fetchMoreLogsPrepend, + null, + state, + expectedMutations, + expectedActions, + () => { + expect(latestGetParams()).toEqual({ + pod_name: mockPodName, + search: mockSearch, + }); + // Warning about time ranges was issued + expect(flash).toHaveBeenCalledTimes(1); + expect(flash).toHaveBeenCalledWith(expect.any(String), 'warning'); + }, + ); + }); + + it('should commit logs and pod data when no pod name defined', () => { + state.timeRange.current = mockDefaultRange; + + return testAction( + fetchMoreLogsPrepend, + null, + state, + expectedMutations, + expectedActions, + () => { + expect(latestGetParams()).toEqual({}); + }, + ); + }); + + it('should not commit logs or pod data when it has reached the end', () => { + state.logs.isComplete = true; + state.logs.cursor = null; + + return testAction( + fetchMoreLogsPrepend, + null, + state, + [], // no mutations done + [], // no actions dispatched + () => { + expect(mock.history.get).toHaveLength(0); + }, + ); + }); + }); + }); + + describe('when the backend responds with an error', () => { + beforeEach(() => { + mock = new MockAdapter(axios); + mock.onGet(mockLogsEndpoint).reply(500); + }); + + afterEach(() => { + mock.reset(); + }); + + it('fetchLogs should commit logs and pod errors', () => { + state.environments.options = mockEnvironments; + state.environments.current = mockEnvName; + + return testAction( fetchLogs, null, state, [ { type: types.REQUEST_PODS_DATA }, { type: types.REQUEST_LOGS_DATA }, - { type: types.SET_CURRENT_POD_NAME, payload: mockPodName }, - { type: types.RECEIVE_PODS_DATA_SUCCESS, payload: mockPods }, - { type: types.RECEIVE_LOGS_DATA_SUCCESS, payload: mockLogsResult }, + { type: types.RECEIVE_PODS_DATA_ERROR }, + { type: types.RECEIVE_LOGS_DATA_ERROR }, ], [], - done, + () => { + expect(mock.history.get[0].url).toBe(mockLogsEndpoint); + }, ); }); - it('should commit logs and pod errors when backend fails', () => { + it('fetchMoreLogsPrepend should commit logs and pod errors', () => { state.environments.options = mockEnvironments; state.environments.current = mockEnvName; - const endpoint = `/${mockProjectPath}/-/logs/elasticsearch.json?environment_name=${mockEnvName}`; - mock.onGet(endpoint).replyOnce(500); - return testAction( - fetchLogs, + fetchMoreLogsPrepend, null, state, [ - { type: types.REQUEST_PODS_DATA }, - { type: types.REQUEST_LOGS_DATA }, - { type: types.RECEIVE_PODS_DATA_ERROR }, - { type: types.RECEIVE_LOGS_DATA_ERROR }, + { type: types.REQUEST_LOGS_DATA_PREPEND }, + { type: types.RECEIVE_LOGS_DATA_PREPEND_ERROR }, ], [], () => { - expect(flash).toHaveBeenCalledTimes(1); + expect(mock.history.get[0].url).toBe(mockLogsEndpoint); }, ); }); diff --git a/spec/frontend/logs/stores/mutations_spec.js b/spec/frontend/logs/stores/mutations_spec.js index dcb358c7d5b..eae838a31d4 100644 --- a/spec/frontend/logs/stores/mutations_spec.js +++ b/spec/frontend/logs/stores/mutations_spec.js @@ -9,6 +9,8 @@ import { mockPodName, mockLogsResult, mockSearch, + mockCursor, + mockNextCursor, } from '../mock_data'; describe('Logs Store Mutations', () => { @@ -73,27 +75,47 @@ describe('Logs Store Mutations', () => { it('starts loading for logs', () => { mutations[types.REQUEST_LOGS_DATA](state); - expect(state.logs).toEqual( - expect.objectContaining({ - lines: [], - isLoading: true, - isComplete: false, - }), - ); + expect(state.timeRange.current).toEqual({ + start: expect.any(String), + end: expect.any(String), + }); + + expect(state.logs).toEqual({ + lines: [], + cursor: null, + isLoading: true, + isComplete: false, + }); }); }); describe('RECEIVE_LOGS_DATA_SUCCESS', () => { - it('receives logs lines', () => { - mutations[types.RECEIVE_LOGS_DATA_SUCCESS](state, mockLogsResult); + it('receives logs lines and cursor', () => { + mutations[types.RECEIVE_LOGS_DATA_SUCCESS](state, { + logs: mockLogsResult, + cursor: mockCursor, + }); - expect(state.logs).toEqual( - expect.objectContaining({ - lines: mockLogsResult, - isLoading: false, - isComplete: true, - }), - ); + expect(state.logs).toEqual({ + lines: mockLogsResult, + isLoading: false, + cursor: mockCursor, + isComplete: false, + }); + }); + + it('receives logs lines and a null cursor to indicate the end', () => { + mutations[types.RECEIVE_LOGS_DATA_SUCCESS](state, { + logs: mockLogsResult, + cursor: null, + }); + + expect(state.logs).toEqual({ + lines: mockLogsResult, + isLoading: false, + cursor: null, + isComplete: true, + }); }); }); @@ -101,13 +123,77 @@ describe('Logs Store Mutations', () => { it('receives log data error and stops loading', () => { mutations[types.RECEIVE_LOGS_DATA_ERROR](state); - expect(state.logs).toEqual( - expect.objectContaining({ - lines: [], - isLoading: false, - isComplete: true, - }), - ); + expect(state.logs).toEqual({ + lines: [], + isLoading: false, + cursor: null, + isComplete: false, + }); + }); + }); + + describe('REQUEST_LOGS_DATA_PREPEND', () => { + it('receives logs lines and cursor', () => { + mutations[types.REQUEST_LOGS_DATA_PREPEND](state); + + expect(state.logs.isLoading).toBe(true); + }); + }); + + describe('RECEIVE_LOGS_DATA_PREPEND_SUCCESS', () => { + it('receives logs lines and cursor', () => { + mutations[types.RECEIVE_LOGS_DATA_PREPEND_SUCCESS](state, { + logs: mockLogsResult, + cursor: mockCursor, + }); + + expect(state.logs).toEqual({ + lines: mockLogsResult, + isLoading: false, + cursor: mockCursor, + isComplete: false, + }); + }); + + it('receives additional logs lines and a new cursor', () => { + mutations[types.RECEIVE_LOGS_DATA_PREPEND_SUCCESS](state, { + logs: mockLogsResult, + cursor: mockCursor, + }); + + mutations[types.RECEIVE_LOGS_DATA_PREPEND_SUCCESS](state, { + logs: mockLogsResult, + cursor: mockNextCursor, + }); + + expect(state.logs).toEqual({ + lines: [...mockLogsResult, ...mockLogsResult], + isLoading: false, + cursor: mockNextCursor, + isComplete: false, + }); + }); + + it('receives logs lines and a null cursor to indicate is complete', () => { + mutations[types.RECEIVE_LOGS_DATA_PREPEND_SUCCESS](state, { + logs: mockLogsResult, + cursor: null, + }); + + expect(state.logs).toEqual({ + lines: mockLogsResult, + isLoading: false, + cursor: null, + isComplete: true, + }); + }); + }); + + describe('RECEIVE_LOGS_DATA_PREPEND_ERROR', () => { + it('receives logs lines and cursor', () => { + mutations[types.RECEIVE_LOGS_DATA_PREPEND_ERROR](state); + + expect(state.logs.isLoading).toBe(false); }); }); @@ -121,6 +207,7 @@ describe('Logs Store Mutations', () => { describe('SET_TIME_RANGE', () => { it('sets a default range', () => { + expect(state.timeRange.selected).toEqual(expect.any(Object)); expect(state.timeRange.current).toEqual(expect.any(Object)); }); @@ -131,12 +218,13 @@ describe('Logs Store Mutations', () => { }; mutations[types.SET_TIME_RANGE](state, mockRange); + expect(state.timeRange.selected).toEqual(mockRange); expect(state.timeRange.current).toEqual(mockRange); }); }); describe('REQUEST_PODS_DATA', () => { - it('receives log data error and stops loading', () => { + it('receives pods data', () => { mutations[types.REQUEST_PODS_DATA](state); expect(state.pods).toEqual( diff --git a/spec/frontend/vue_shared/components/changed_file_icon_spec.js b/spec/frontend/vue_shared/components/changed_file_icon_spec.js index 8258eb8204c..b77116be464 100644 --- a/spec/frontend/vue_shared/components/changed_file_icon_spec.js +++ b/spec/frontend/vue_shared/components/changed_file_icon_spec.js @@ -54,10 +54,10 @@ describe('Changed file icon', () => { }); describe.each` - file | iconName | tooltipText | desc - ${changedFile()} | ${'file-modified'} | ${'Unstaged modification'} | ${'with file changed'} - ${stagedFile()} | ${'file-modified-solid'} | ${'Staged modification'} | ${'with file staged'} - ${newFile()} | ${'file-addition'} | ${'Unstaged addition'} | ${'with file new'} + file | iconName | tooltipText | desc + ${changedFile()} | ${'file-modified'} | ${'Modified'} | ${'with file changed'} + ${stagedFile()} | ${'file-modified-solid'} | ${'Modified'} | ${'with file staged'} + ${newFile()} | ${'file-addition'} | ${'Added'} | ${'with file new'} `('$desc', ({ file, iconName, tooltipText }) => { beforeEach(() => { factory({ file }); diff --git a/spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb b/spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb index fcc717f83a2..51d3c4f5d6b 100644 --- a/spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb +++ b/spec/graphql/mutations/concerns/mutations/resolves_group_spec.rb @@ -11,12 +11,12 @@ describe Mutations::ResolvesGroup do let(:context) { double } - subject(:mutation) { mutation_class.new(object: nil, context: context) } + subject(:mutation) { mutation_class.new(object: nil, context: context, field: nil) } it 'uses the GroupsResolver to resolve groups by path' do group = create(:group) - expect(Resolvers::GroupResolver).to receive(:new).with(object: nil, context: context).and_call_original + expect(Resolvers::GroupResolver).to receive(:new).with(object: nil, context: context, field: nil).and_call_original expect(mutation.resolve_group(full_path: group.full_path).sync).to eq(group) end end diff --git a/spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb b/spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb index 064ad90f707..69db8d016d7 100644 --- a/spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb +++ b/spec/graphql/mutations/concerns/mutations/resolves_issuable_spec.rb @@ -12,7 +12,7 @@ describe Mutations::ResolvesIssuable do let(:project) { create(:project) } let(:user) { create(:user) } let(:context) { { current_user: user } } - let(:mutation) { mutation_class.new(object: nil, context: context) } + let(:mutation) { mutation_class.new(object: nil, context: context, field: nil) } shared_examples 'resolving an issuable' do |type| context 'when user has access' do @@ -39,7 +39,7 @@ describe Mutations::ResolvesIssuable do .and_return(resolved_project) expect(resolver_class).to receive(:new) - .with(object: resolved_project, context: context) + .with(object: resolved_project, context: context, field: nil) .and_call_original subject @@ -47,7 +47,7 @@ describe Mutations::ResolvesIssuable do it 'uses the ResolvesProject to resolve project' do expect(Resolvers::ProjectResolver).to receive(:new) - .with(object: nil, context: context) + .with(object: nil, context: context, field: nil) .and_call_original subject diff --git a/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb b/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb index 918e5fb016e..b5c349f6284 100644 --- a/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb +++ b/spec/graphql/mutations/concerns/mutations/resolves_project_spec.rb @@ -11,12 +11,12 @@ describe Mutations::ResolvesProject do let(:context) { double } - subject(:mutation) { mutation_class.new(object: nil, context: context) } + subject(:mutation) { mutation_class.new(object: nil, context: context, field: nil) } it 'uses the ProjectsResolver to resolve projects by path' do project = create(:project) - expect(Resolvers::ProjectResolver).to receive(:new).with(object: nil, context: context).and_call_original + expect(Resolvers::ProjectResolver).to receive(:new).with(object: nil, context: context, field: nil).and_call_original expect(mutation.resolve_project(full_path: project.full_path).sync).to eq(project) end end diff --git a/spec/graphql/mutations/issues/set_confidential_spec.rb b/spec/graphql/mutations/issues/set_confidential_spec.rb index a8f1fcdf7f1..6031953c869 100644 --- a/spec/graphql/mutations/issues/set_confidential_spec.rb +++ b/spec/graphql/mutations/issues/set_confidential_spec.rb @@ -6,7 +6,7 @@ describe Mutations::Issues::SetConfidential do let(:issue) { create(:issue) } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:confidential) { true } diff --git a/spec/graphql/mutations/issues/set_due_date_spec.rb b/spec/graphql/mutations/issues/set_due_date_spec.rb index b45a7b460cd..73ba11fc551 100644 --- a/spec/graphql/mutations/issues/set_due_date_spec.rb +++ b/spec/graphql/mutations/issues/set_due_date_spec.rb @@ -6,7 +6,7 @@ describe Mutations::Issues::SetDueDate do let(:issue) { create(:issue) } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:due_date) { 2.days.since } diff --git a/spec/graphql/mutations/issues/update_spec.rb b/spec/graphql/mutations/issues/update_spec.rb index 3d671680ccf..83bd3041cbf 100644 --- a/spec/graphql/mutations/issues/update_spec.rb +++ b/spec/graphql/mutations/issues/update_spec.rb @@ -13,7 +13,7 @@ describe Mutations::Issues::Update do due_date: Date.tomorrow } end - let(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + let(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } let(:mutated_issue) { subject[:issue] } describe '#resolve' do diff --git a/spec/graphql/mutations/merge_requests/set_assignees_spec.rb b/spec/graphql/mutations/merge_requests/set_assignees_spec.rb index 2033ab57a0d..d88c5db05c9 100644 --- a/spec/graphql/mutations/merge_requests/set_assignees_spec.rb +++ b/spec/graphql/mutations/merge_requests/set_assignees_spec.rb @@ -6,7 +6,7 @@ describe Mutations::MergeRequests::SetAssignees do let(:merge_request) { create(:merge_request) } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:assignee) { create(:user) } diff --git a/spec/graphql/mutations/merge_requests/set_labels_spec.rb b/spec/graphql/mutations/merge_requests/set_labels_spec.rb index f7c04a57f68..f58f35eb6f3 100644 --- a/spec/graphql/mutations/merge_requests/set_labels_spec.rb +++ b/spec/graphql/mutations/merge_requests/set_labels_spec.rb @@ -6,7 +6,7 @@ describe Mutations::MergeRequests::SetLabels do let(:merge_request) { create(:merge_request) } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:label) { create(:label, project: merge_request.project) } diff --git a/spec/graphql/mutations/merge_requests/set_locked_spec.rb b/spec/graphql/mutations/merge_requests/set_locked_spec.rb index d35430abff1..12ae1314f22 100644 --- a/spec/graphql/mutations/merge_requests/set_locked_spec.rb +++ b/spec/graphql/mutations/merge_requests/set_locked_spec.rb @@ -6,7 +6,7 @@ describe Mutations::MergeRequests::SetLocked do let(:merge_request) { create(:merge_request) } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:locked) { true } diff --git a/spec/graphql/mutations/merge_requests/set_milestone_spec.rb b/spec/graphql/mutations/merge_requests/set_milestone_spec.rb index d79b0a995d7..ad7f2df0842 100644 --- a/spec/graphql/mutations/merge_requests/set_milestone_spec.rb +++ b/spec/graphql/mutations/merge_requests/set_milestone_spec.rb @@ -6,7 +6,7 @@ describe Mutations::MergeRequests::SetMilestone do let(:merge_request) { create(:merge_request) } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:milestone) { create(:milestone, project: merge_request.project) } diff --git a/spec/graphql/mutations/merge_requests/set_subscription_spec.rb b/spec/graphql/mutations/merge_requests/set_subscription_spec.rb index 286de6c0c97..a28bab363f3 100644 --- a/spec/graphql/mutations/merge_requests/set_subscription_spec.rb +++ b/spec/graphql/mutations/merge_requests/set_subscription_spec.rb @@ -7,7 +7,7 @@ describe Mutations::MergeRequests::SetSubscription do let(:project) { merge_request.project } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:subscribe) { true } diff --git a/spec/graphql/mutations/merge_requests/set_wip_spec.rb b/spec/graphql/mutations/merge_requests/set_wip_spec.rb index 490994c4577..9f0adcf117a 100644 --- a/spec/graphql/mutations/merge_requests/set_wip_spec.rb +++ b/spec/graphql/mutations/merge_requests/set_wip_spec.rb @@ -6,7 +6,7 @@ describe Mutations::MergeRequests::SetWip do let(:merge_request) { create(:merge_request) } let(:user) { create(:user) } - subject(:mutation) { described_class.new(object: nil, context: { current_user: user }) } + subject(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) } describe '#resolve' do let(:wip) { true } diff --git a/spec/graphql/mutations/todos/mark_all_done_spec.rb b/spec/graphql/mutations/todos/mark_all_done_spec.rb index cce69d0dcdc..98b22a3e761 100644 --- a/spec/graphql/mutations/todos/mark_all_done_spec.rb +++ b/spec/graphql/mutations/todos/mark_all_done_spec.rb @@ -48,6 +48,6 @@ describe Mutations::Todos::MarkAllDone do end def mutation_for(user) - described_class.new(object: nil, context: { current_user: user }) + described_class.new(object: nil, context: { current_user: user }, field: nil) end end diff --git a/spec/graphql/mutations/todos/mark_done_spec.rb b/spec/graphql/mutations/todos/mark_done_spec.rb index ff61ef76db6..059ef3c8eee 100644 --- a/spec/graphql/mutations/todos/mark_done_spec.rb +++ b/spec/graphql/mutations/todos/mark_done_spec.rb @@ -14,7 +14,7 @@ describe Mutations::Todos::MarkDone do let_it_be(:other_user_todo) { create(:todo, user: other_user, author: author, state: :pending) } - let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }) } + let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }, field: nil) } describe '#resolve' do it 'marks a single todo as done' do diff --git a/spec/graphql/mutations/todos/restore_many_spec.rb b/spec/graphql/mutations/todos/restore_many_spec.rb index 7821ce35a08..8f4a8985f9e 100644 --- a/spec/graphql/mutations/todos/restore_many_spec.rb +++ b/spec/graphql/mutations/todos/restore_many_spec.rb @@ -12,7 +12,7 @@ describe Mutations::Todos::RestoreMany do let_it_be(:other_user_todo) { create(:todo, user: other_user, author: author, state: :done) } - let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }) } + let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }, field: nil) } describe '#resolve' do it 'restores a single todo' do diff --git a/spec/graphql/mutations/todos/restore_spec.rb b/spec/graphql/mutations/todos/restore_spec.rb index 76a2d4ffffd..1637acc2fb5 100644 --- a/spec/graphql/mutations/todos/restore_spec.rb +++ b/spec/graphql/mutations/todos/restore_spec.rb @@ -12,7 +12,7 @@ describe Mutations::Todos::Restore do let_it_be(:other_user_todo) { create(:todo, user: other_user, author: author, state: :done) } - let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }) } + let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }, field: nil) } describe '#resolve' do it 'restores a single todo' do diff --git a/spec/helpers/releases_helper_spec.rb b/spec/helpers/releases_helper_spec.rb index 3f56c189642..d9d6a324f09 100644 --- a/spec/helpers/releases_helper_spec.rb +++ b/spec/helpers/releases_helper_spec.rb @@ -18,16 +18,31 @@ describe ReleasesHelper do context 'url helpers' do let(:project) { build(:project, namespace: create(:group)) } let(:release) { create(:release, project: project) } + let(:user) { create(:user) } + let(:can_user_create_release) { false } + let(:common_keys) { [:project_id, :illustration_path, :documentation_path] } before do helper.instance_variable_set(:@project, project) helper.instance_variable_set(:@release, release) + allow(helper).to receive(:current_user).and_return(user) + allow(helper).to receive(:can?) + .with(user, :create_release, project) + .and_return(can_user_create_release) end describe '#data_for_releases_page' do - it 'has the needed data to display release blocks' do - keys = %i(project_id illustration_path documentation_path) - expect(helper.data_for_releases_page.keys).to eq(keys) + it 'includes the required data for displaying release blocks' do + expect(helper.data_for_releases_page.keys).to contain_exactly(*common_keys) + end + + context 'when the user is allowed to create a new release' do + let(:can_user_create_release) { true } + + it 'includes new_release_path' do + expect(helper.data_for_releases_page.keys).to contain_exactly(*common_keys, :new_release_path) + expect(helper.data_for_releases_page[:new_release_path]).to eq(new_project_tag_path(project)) + end end end diff --git a/spec/javascripts/ide/components/commit_sidebar/form_spec.js b/spec/javascripts/ide/components/commit_sidebar/form_spec.js index 5cb804938ed..f5d1a9de59c 100644 --- a/spec/javascripts/ide/components/commit_sidebar/form_spec.js +++ b/spec/javascripts/ide/components/commit_sidebar/form_spec.js @@ -52,7 +52,7 @@ describe('IDE commit form', () => { vm.$store.state.stagedFiles.push('test'); vm.$nextTick(() => { - expect(vm.$el.querySelector('p').textContent).toContain('1 staged and 1 unstaged changes'); + expect(vm.$el.querySelector('p').textContent).toContain('1 changed file'); done(); }); }); diff --git a/spec/javascripts/ide/components/file_row_extra_spec.js b/spec/javascripts/ide/components/file_row_extra_spec.js index f498d8251c8..9fd014b50ef 100644 --- a/spec/javascripts/ide/components/file_row_extra_spec.js +++ b/spec/javascripts/ide/components/file_row_extra_spec.js @@ -41,30 +41,20 @@ describe('IDE extra file row component', () => { describe('folderChangesTooltip', () => { it('returns undefined when changes count is 0', () => { - expect(vm.folderChangesTooltip).toBe(undefined); - }); - - it('returns unstaged changes text', () => { - changesCount = 1; - unstagedFilesCount = 1; - - expect(vm.folderChangesTooltip).toBe('1 unstaged change'); - }); + changesCount = 0; - it('returns staged changes text', () => { - changesCount = 1; - stagedFilesCount = 1; - - expect(vm.folderChangesTooltip).toBe('1 staged change'); + expect(vm.folderChangesTooltip).toBe(undefined); }); - it('returns staged and unstaged changes text', () => { - changesCount = 1; - stagedFilesCount = 1; - unstagedFilesCount = 1; + [{ input: 1, output: '1 changed file' }, { input: 2, output: '2 changed files' }].forEach( + ({ input, output }) => { + it('returns changed files count if changes count is not 0', () => { + changesCount = input; - expect(vm.folderChangesTooltip).toBe('1 staged and 1 unstaged changes'); - }); + expect(vm.folderChangesTooltip).toBe(output); + }); + }, + ); }); describe('show tree changes count', () => { diff --git a/spec/javascripts/ide/components/repo_commit_section_spec.js b/spec/javascripts/ide/components/repo_commit_section_spec.js index 917eb1438bd..0ba8c86a036 100644 --- a/spec/javascripts/ide/components/repo_commit_section_spec.js +++ b/spec/javascripts/ide/components/repo_commit_section_spec.js @@ -30,19 +30,13 @@ describe('RepoCommitSection', () => { const files = [file('file1'), file('file2')].map(f => Object.assign(f, { type: 'blob', + content: 'orginal content', }), ); vm.$store.state.rightPanelCollapsed = false; vm.$store.state.currentBranch = 'master'; - vm.$store.state.changedFiles = [...files]; - vm.$store.state.changedFiles.forEach(f => - Object.assign(f, { - changed: true, - content: 'changedFile testing', - }), - ); - + vm.$store.state.changedFiles = []; vm.$store.state.stagedFiles = [{ ...files[0] }, { ...files[1] }]; vm.$store.state.stagedFiles.forEach(f => Object.assign(f, { @@ -51,7 +45,7 @@ describe('RepoCommitSection', () => { }), ); - vm.$store.state.changedFiles.forEach(f => { + files.forEach(f => { vm.$store.state.entries[f.path] = f; }); @@ -96,7 +90,7 @@ describe('RepoCommitSection', () => { const changedFileElements = [...vm.$el.querySelectorAll('.multi-file-commit-list > li')]; const allFiles = vm.$store.state.changedFiles.concat(vm.$store.state.stagedFiles); - expect(changedFileElements.length).toEqual(4); + expect(changedFileElements).toHaveLength(2); changedFileElements.forEach((changedFile, i) => { expect(changedFile.textContent.trim()).toContain(allFiles[i].path); diff --git a/spec/javascripts/releases/components/app_index_spec.js b/spec/javascripts/releases/components/app_index_spec.js index 83b0652d59b..020937d07e5 100644 --- a/spec/javascripts/releases/components/app_index_spec.js +++ b/spec/javascripts/releases/components/app_index_spec.js @@ -13,6 +13,7 @@ import { releases, } from '../mock_data'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; +import waitForPromises from 'spec/helpers/wait_for_promises'; describe('Releases App ', () => { const Component = Vue.extend(app); @@ -22,7 +23,7 @@ describe('Releases App ', () => { const props = { projectId: 'gitlab-ce', - documentationLink: 'help/releases', + documentationPath: 'help/releases', illustrationPath: 'illustration/path', }; @@ -51,9 +52,9 @@ describe('Releases App ', () => { expect(vm.$el.querySelector('.js-success-state')).toBeNull(); expect(vm.$el.querySelector('.gl-pagination')).toBeNull(); - setTimeout(() => { - done(); - }, 0); + waitForPromises() + .then(done) + .catch(done.fail); }); }); @@ -66,14 +67,16 @@ describe('Releases App ', () => { }); it('renders success state', done => { - setTimeout(() => { - expect(vm.$el.querySelector('.js-loading')).toBeNull(); - expect(vm.$el.querySelector('.js-empty-state')).toBeNull(); - expect(vm.$el.querySelector('.js-success-state')).not.toBeNull(); - expect(vm.$el.querySelector('.gl-pagination')).toBeNull(); - - done(); - }, 0); + waitForPromises() + .then(() => { + expect(vm.$el.querySelector('.js-loading')).toBeNull(); + expect(vm.$el.querySelector('.js-empty-state')).toBeNull(); + expect(vm.$el.querySelector('.js-success-state')).not.toBeNull(); + expect(vm.$el.querySelector('.gl-pagination')).toBeNull(); + + done(); + }) + .catch(done.fail); }); }); @@ -86,14 +89,16 @@ describe('Releases App ', () => { }); it('renders success state', done => { - setTimeout(() => { - expect(vm.$el.querySelector('.js-loading')).toBeNull(); - expect(vm.$el.querySelector('.js-empty-state')).toBeNull(); - expect(vm.$el.querySelector('.js-success-state')).not.toBeNull(); - expect(vm.$el.querySelector('.gl-pagination')).not.toBeNull(); - - done(); - }, 0); + waitForPromises() + .then(() => { + expect(vm.$el.querySelector('.js-loading')).toBeNull(); + expect(vm.$el.querySelector('.js-empty-state')).toBeNull(); + expect(vm.$el.querySelector('.js-success-state')).not.toBeNull(); + expect(vm.$el.querySelector('.gl-pagination')).not.toBeNull(); + + done(); + }) + .catch(done.fail); }); }); @@ -104,14 +109,76 @@ describe('Releases App ', () => { }); it('renders empty state', done => { - setTimeout(() => { - expect(vm.$el.querySelector('.js-loading')).toBeNull(); - expect(vm.$el.querySelector('.js-empty-state')).not.toBeNull(); - expect(vm.$el.querySelector('.js-success-state')).toBeNull(); - expect(vm.$el.querySelector('.gl-pagination')).toBeNull(); - - done(); - }, 0); + waitForPromises() + .then(() => { + expect(vm.$el.querySelector('.js-loading')).toBeNull(); + expect(vm.$el.querySelector('.js-empty-state')).not.toBeNull(); + expect(vm.$el.querySelector('.js-success-state')).toBeNull(); + expect(vm.$el.querySelector('.gl-pagination')).toBeNull(); + + done(); + }) + .catch(done.fail); + }); + }); + + describe('"New release" button', () => { + const findNewReleaseButton = () => vm.$el.querySelector('.js-new-release-btn'); + + beforeEach(() => { + spyOn(api, 'releases').and.returnValue(Promise.resolve({ data: [], headers: {} })); + }); + + const factory = additionalProps => { + vm = mountComponentWithStore(Component, { + props: { + ...props, + ...additionalProps, + }, + store, + }); + }; + + describe('when the user is allowed to create a new Release', () => { + const newReleasePath = 'path/to/new/release'; + + beforeEach(() => { + factory({ newReleasePath }); + }); + + it('renders the "New release" button', done => { + waitForPromises() + .then(() => { + expect(findNewReleaseButton()).not.toBeNull(); + + done(); + }) + .catch(done.fail); + }); + + it('renders the "New release" button with the correct href', done => { + waitForPromises() + .then(() => { + expect(findNewReleaseButton().getAttribute('href')).toBe(newReleasePath); + + done(); + }) + .catch(done.fail); + }); + }); + + describe('when the user is not allowed to create a new Release', () => { + beforeEach(() => factory()); + + it('does not render the "New release" button', done => { + waitForPromises() + .then(() => { + expect(findNewReleaseButton()).toBeNull(); + + done(); + }) + .catch(done.fail); + }); }); }); }); diff --git a/spec/lib/gitlab/background_migration/link_lfs_objects_projects_spec.rb b/spec/lib/gitlab/background_migration/link_lfs_objects_projects_spec.rb new file mode 100644 index 00000000000..5700cac2e0f --- /dev/null +++ b/spec/lib/gitlab/background_migration/link_lfs_objects_projects_spec.rb @@ -0,0 +1,113 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::BackgroundMigration::LinkLfsObjectsProjects, :migration, schema: 2020_03_10_075115 do + let(:namespaces) { table(:namespaces) } + let(:projects) { table(:projects) } + let(:fork_networks) { table(:fork_networks) } + let(:fork_network_members) { table(:fork_network_members) } + let(:lfs_objects) { table(:lfs_objects) } + let(:lfs_objects_projects) { table(:lfs_objects_projects) } + + let(:namespace) { namespaces.create(name: 'GitLab', path: 'gitlab') } + + let(:fork_network) { fork_networks.create(root_project_id: source_project.id) } + let(:another_fork_network) { fork_networks.create(root_project_id: another_source_project.id) } + + let(:source_project) { projects.create(namespace_id: namespace.id) } + let(:another_source_project) { projects.create(namespace_id: namespace.id) } + let(:project) { projects.create(namespace_id: namespace.id) } + let(:another_project) { projects.create(namespace_id: namespace.id) } + let(:partially_linked_project) { projects.create(namespace_id: namespace.id) } + let(:fully_linked_project) { projects.create(namespace_id: namespace.id) } + + let(:lfs_object) { lfs_objects.create(oid: 'abc123', size: 100) } + let(:another_lfs_object) { lfs_objects.create(oid: 'def456', size: 200) } + + let!(:source_project_lop_1) do + lfs_objects_projects.create( + lfs_object_id: lfs_object.id, + project_id: source_project.id + ) + end + + let!(:source_project_lop_2) do + lfs_objects_projects.create( + lfs_object_id: another_lfs_object.id, + project_id: source_project.id + ) + end + + let!(:another_source_project_lop_1) do + lfs_objects_projects.create( + lfs_object_id: lfs_object.id, + project_id: another_source_project.id + ) + end + + let!(:another_source_project_lop_2) do + lfs_objects_projects.create( + lfs_object_id: another_lfs_object.id, + project_id: another_source_project.id + ) + end + + before do + stub_const("#{described_class}::BATCH_SIZE", 2) + + # Create links between projects + fork_network_members.create(fork_network_id: fork_network.id, project_id: source_project.id, forked_from_project_id: nil) + + [project, partially_linked_project, fully_linked_project].each do |p| + fork_network_members.create( + fork_network_id: fork_network.id, + project_id: p.id, + forked_from_project_id: fork_network.root_project_id + ) + end + + fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_source_project.id, forked_from_project_id: nil) + fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_project.id, forked_from_project_id: another_fork_network.root_project_id) + + # Links LFS objects to some projects + lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: fully_linked_project.id) + lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: fully_linked_project.id) + lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: partially_linked_project.id) + end + + context 'when there are LFS objects to be linked' do + it 'creates LfsObjectsProject records for forks based on the specified range of LfsObjectProject id' do + expect_next_instance_of(Gitlab::BackgroundMigration::Logger) do |logger| + expect(logger).to receive(:info).exactly(4).times + end + + expect { subject.perform(source_project_lop_1.id, another_source_project_lop_2.id) }.to change { lfs_objects_projects.count }.by(5) + + expect(lfs_object_ids_for(project)).to match_array(lfs_object_ids_for(source_project)) + expect(lfs_object_ids_for(another_project)).to match_array(lfs_object_ids_for(another_source_project)) + expect(lfs_object_ids_for(partially_linked_project)).to match_array(lfs_object_ids_for(source_project)) + + expect { subject.perform(source_project_lop_1.id, another_source_project_lop_2.id) }.not_to change { lfs_objects_projects.count } + end + end + + context 'when there are no LFS objects to be linked' do + before do + # Links LFS objects to all projects + projects.all.each do |p| + lfs_objects_projects.create(lfs_object_id: lfs_object.id, project_id: p.id) + lfs_objects_projects.create(lfs_object_id: another_lfs_object.id, project_id: p.id) + end + end + + it 'does not create LfsObjectProject records' do + expect { subject.perform(source_project_lop_1.id, another_source_project_lop_2.id) } + .not_to change { lfs_objects_projects.count } + end + end + + def lfs_object_ids_for(project) + lfs_objects_projects.where(project_id: project.id).pluck(:lfs_object_id) + end +end diff --git a/spec/lib/gitlab/sidekiq_queue_spec.rb b/spec/lib/gitlab/sidekiq_queue_spec.rb index 9516ea10511..f5be8d9bfed 100644 --- a/spec/lib/gitlab/sidekiq_queue_spec.rb +++ b/spec/lib/gitlab/sidekiq_queue_spec.rb @@ -2,18 +2,18 @@ require 'spec_helper' -describe Gitlab::SidekiqQueue do +describe Gitlab::SidekiqQueue, :clean_gitlab_redis_queues do around do |example| Sidekiq::Queue.new('authorized_projects').clear Sidekiq::Testing.disable!(&example) Sidekiq::Queue.new('authorized_projects').clear end - def add_job(user) + def add_job(user, args) Sidekiq::Client.push( 'class' => 'AuthorizedProjectsWorker', 'queue' => 'authorized_projects', - 'args' => [user.id], + 'args' => args, 'meta.user' => user.username ) end @@ -24,9 +24,9 @@ describe Gitlab::SidekiqQueue do let_it_be(:sidekiq_queue_user) { create(:user) } before do - add_job(create(:user)) - add_job(sidekiq_queue_user) - add_job(sidekiq_queue_user) + add_job(create(:user), [1]) + add_job(sidekiq_queue_user, [2]) + add_job(sidekiq_queue_user, [3]) end context 'when the queue is not processed in time' do @@ -70,7 +70,7 @@ describe Gitlab::SidekiqQueue do context 'when there are no valid metadata keys passed' do it 'raises NoMetadataError' do - add_job(create(:user)) + add_job(create(:user), [1]) expect { described_class.new('authorized_projects').drop_jobs!({ username: 'sidekiq_queue_user' }, timeout: 1) } .to raise_error(described_class::NoMetadataError) diff --git a/spec/migrations/schedule_link_lfs_objects_projects_spec.rb b/spec/migrations/schedule_link_lfs_objects_projects_spec.rb new file mode 100644 index 00000000000..055ab3cdd83 --- /dev/null +++ b/spec/migrations/schedule_link_lfs_objects_projects_spec.rb @@ -0,0 +1,76 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'post_migrate', '20200310075115_schedule_link_lfs_objects_projects.rb') + +describe ScheduleLinkLfsObjectsProjects, :migration, :sidekiq do + let(:namespaces) { table(:namespaces) } + let(:projects) { table(:projects) } + let(:fork_networks) { table(:fork_networks) } + let(:fork_network_members) { table(:fork_network_members) } + let(:lfs_objects) { table(:lfs_objects) } + let(:lfs_objects_projects) { table(:lfs_objects_projects) } + + let(:namespace) { namespaces.create(name: 'GitLab', path: 'gitlab') } + + let(:fork_network) { fork_networks.create(root_project_id: source_project.id) } + let(:another_fork_network) { fork_networks.create(root_project_id: another_source_project.id) } + + let(:source_project) { projects.create(namespace_id: namespace.id) } + let(:another_source_project) { projects.create(namespace_id: namespace.id) } + let(:project) { projects.create(namespace_id: namespace.id) } + let(:another_project) { projects.create(namespace_id: namespace.id) } + + let(:lfs_object) { lfs_objects.create(oid: 'abc123', size: 100) } + let(:another_lfs_object) { lfs_objects.create(oid: 'def456', size: 200) } + + let!(:source_project_lop_1) do + lfs_objects_projects.create( + lfs_object_id: lfs_object.id, + project_id: source_project.id + ) + end + + let!(:source_project_lop_2) do + lfs_objects_projects.create( + lfs_object_id: another_lfs_object.id, + project_id: source_project.id + ) + end + + let!(:another_source_project_lop_1) do + lfs_objects_projects.create( + lfs_object_id: lfs_object.id, + project_id: another_source_project.id + ) + end + + let!(:another_source_project_lop_2) do + lfs_objects_projects.create( + lfs_object_id: another_lfs_object.id, + project_id: another_source_project.id + ) + end + + before do + stub_const("#{described_class.name}::BATCH_SIZE", 2) + + # Create links between projects + fork_network_members.create(fork_network_id: fork_network.id, project_id: source_project.id, forked_from_project_id: nil) + fork_network_members.create(fork_network_id: fork_network.id, project_id: project.id, forked_from_project_id: source_project.id) + fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_source_project.id, forked_from_project_id: nil) + fork_network_members.create(fork_network_id: another_fork_network.id, project_id: another_project.id, forked_from_project_id: another_fork_network.root_project_id) + end + + it 'schedules background migration to link LFS objects' do + Sidekiq::Testing.fake! do + migrate! + + expect(BackgroundMigrationWorker.jobs.size).to eq(2) + expect(described_class::MIGRATION) + .to be_scheduled_delayed_migration(2.minutes, source_project_lop_1.id, source_project_lop_2.id) + expect(described_class::MIGRATION) + .to be_scheduled_delayed_migration(4.minutes, another_source_project_lop_1.id, another_source_project_lop_2.id) + end + end +end diff --git a/spec/models/concerns/bulk_insert_safe_spec.rb b/spec/models/concerns/bulk_insert_safe_spec.rb index 9ebaedcf252..4969327132a 100644 --- a/spec/models/concerns/bulk_insert_safe_spec.rb +++ b/spec/models/concerns/bulk_insert_safe_spec.rb @@ -6,7 +6,19 @@ describe BulkInsertSafe do class BulkInsertItem < ApplicationRecord include BulkInsertSafe - validates :name, presence: true + validates :name, :enum_value, :secret_value, presence: true + + ENUM_VALUES = { + case_1: 1 + }.freeze + + enum enum_value: ENUM_VALUES + + attr_encrypted :secret_value, + mode: :per_attribute_iv, + algorithm: 'aes-256-gcm', + key: Settings.attr_encrypted_db_key_base_32, + insecure_mode: false end module InheritedUnsafeMethods @@ -29,8 +41,13 @@ describe BulkInsertSafe do ActiveRecord::Schema.define do create_table :bulk_insert_items, force: true do |t| t.string :name, null: true + t.integer :enum_value, null: false + t.text :encrypted_secret_value, null: false + t.string :encrypted_secret_value_iv, null: false end end + + BulkInsertItem.reset_column_information end after(:all) do @@ -41,13 +58,21 @@ describe BulkInsertSafe do def build_valid_items_for_bulk_insertion Array.new(10) do |n| - BulkInsertItem.new(name: "item-#{n}") + BulkInsertItem.new( + name: "item-#{n}", + enum_value: 'case_1', + secret_value: "my-secret" + ) end end def build_invalid_items_for_bulk_insertion Array.new(10) do - BulkInsertItem.new # requires `name` to be set + BulkInsertItem.new( + name: nil, # requires `name` to be set + enum_value: 'case_1', + secret_value: "my-secret" + ) end end diff --git a/spec/requests/api/admin/sidekiq_spec.rb b/spec/requests/api/admin/sidekiq_spec.rb index 0fb8199eec6..303b62f4436 100644 --- a/spec/requests/api/admin/sidekiq_spec.rb +++ b/spec/requests/api/admin/sidekiq_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe API::Admin::Sidekiq do +describe API::Admin::Sidekiq, :clean_gitlab_redis_queues do let_it_be(:admin) { create(:admin) } describe 'DELETE /admin/sidekiq/queues/:queue_name' do @@ -21,20 +21,20 @@ describe API::Admin::Sidekiq do Sidekiq::Queue.new('authorized_projects').clear end - def add_job(user) + def add_job(user, args) Sidekiq::Client.push( 'class' => 'AuthorizedProjectsWorker', 'queue' => 'authorized_projects', - 'args' => [user.id], + 'args' => args, 'meta.user' => user.username ) end context 'valid request' do it 'returns info about the deleted jobs' do - add_job(admin) - add_job(admin) - add_job(create(:user)) + add_job(admin, [1]) + add_job(admin, [2]) + add_job(create(:user), [3]) delete api("/admin/sidekiq/queues/authorized_projects?user=#{admin.username}", admin) diff --git a/spec/requests/api/graphql/mutations/admin/sidekiq_queues/delete_jobs_spec.rb b/spec/requests/api/graphql/mutations/admin/sidekiq_queues/delete_jobs_spec.rb index 9451587fac3..a5159da84f3 100644 --- a/spec/requests/api/graphql/mutations/admin/sidekiq_queues/delete_jobs_spec.rb +++ b/spec/requests/api/graphql/mutations/admin/sidekiq_queues/delete_jobs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'Deleting Sidekiq jobs' do +describe 'Deleting Sidekiq jobs', :clean_gitlab_redis_queues do include GraphqlHelpers let_it_be(:admin) { create(:admin) } @@ -31,19 +31,19 @@ describe 'Deleting Sidekiq jobs' do Sidekiq::Queue.new('authorized_projects').clear end - def add_job(user) + def add_job(user, args) Sidekiq::Client.push( 'class' => 'AuthorizedProjectsWorker', 'queue' => 'authorized_projects', - 'args' => [user.id], + 'args' => args, 'meta.user' => user.username ) end it 'returns info about the deleted jobs' do - add_job(admin) - add_job(admin) - add_job(create(:user)) + add_job(admin, [1]) + add_job(admin, [2]) + add_job(create(:user), [3]) post_graphql_mutation(mutation, current_user: admin) diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb index 7745a78a806..3b819c795b2 100644 --- a/spec/services/ci/create_pipeline_service_spec.rb +++ b/spec/services/ci/create_pipeline_service_spec.rb @@ -985,6 +985,7 @@ describe Ci::CreatePipelineService do expect(pipeline).to be_persisted expect(build).to be_kind_of(Ci::Build) expect(build.options).to eq(config[:release].except(:stage, :only).with_indifferent_access) + expect(build).to be_persisted end end diff --git a/spec/support/helpers/graphql_helpers.rb b/spec/support/helpers/graphql_helpers.rb index 35b1b802f35..370162b45f0 100644 --- a/spec/support/helpers/graphql_helpers.rb +++ b/spec/support/helpers/graphql_helpers.rb @@ -12,8 +12,8 @@ module GraphqlHelpers end # Run a loader's named resolver - def resolve(resolver_class, obj: nil, args: {}, ctx: {}) - resolver_class.new(object: obj, context: ctx).resolve(args) + def resolve(resolver_class, obj: nil, args: {}, ctx: {}, field: nil) + resolver_class.new(object: obj, context: ctx, field: field).resolve(args) end # Eagerly run a loader's named resolver diff --git a/spec/support/helpers/login_helpers.rb b/spec/support/helpers/login_helpers.rb index 1d42f26ad3e..6a4dcfcdb1e 100644 --- a/spec/support/helpers/login_helpers.rb +++ b/spec/support/helpers/login_helpers.rb @@ -51,7 +51,7 @@ module LoginHelpers def gitlab_enable_admin_mode_sign_in(user) visit new_admin_session_path - fill_in 'password', with: user.password + fill_in 'user_password', with: user.password click_button 'Enter Admin Mode' end @@ -62,6 +62,12 @@ module LoginHelpers click_link provider end + def gitlab_enable_admin_mode_sign_in_via(provider, user, uid, saml_response = nil) + mock_auth_hash_with_saml_xml(provider, uid, user.email, saml_response) + visit new_admin_session_path + click_link provider + end + # Requires Javascript driver. def gitlab_sign_out find(".header-user-dropdown-toggle").click @@ -71,6 +77,11 @@ module LoginHelpers expect(page).to have_button('Sign in') end + # Requires Javascript driver. + def gitlab_disable_admin_mode + click_on 'Leave Admin Mode' + end + private # Private: Login as the specified user diff --git a/spec/views/admin/sessions/new.html.haml_spec.rb b/spec/views/admin/sessions/new.html.haml_spec.rb index b3208296c80..05601e5471e 100644 --- a/spec/views/admin/sessions/new.html.haml_spec.rb +++ b/spec/views/admin/sessions/new.html.haml_spec.rb @@ -15,7 +15,7 @@ describe 'admin/sessions/new.html.haml' do render expect(rendered).to have_css('#login-pane.active') - expect(rendered).to have_selector('input[name="password"]') + expect(rendered).to have_selector('input[name="user[password]"]') end it 'warns authentication not possible if password not set' do diff --git a/spec/views/admin/sessions/two_factor.html.haml_spec.rb b/spec/views/admin/sessions/two_factor.html.haml_spec.rb new file mode 100644 index 00000000000..2c061c7707b --- /dev/null +++ b/spec/views/admin/sessions/two_factor.html.haml_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'admin/sessions/two_factor.html.haml' do + before do + allow(view).to receive(:current_user).and_return(user) + end + + context 'user has no two factor auth' do + let(:user) { create(:admin) } + + it 'shows tab' do + render + + expect(rendered).to have_no_field('user[otp_attempt]') + expect(rendered).to have_no_field('user[device_response]') + end + end + + context 'user has otp active' do + let(:user) { create(:admin, :two_factor) } + + it 'shows enter otp form' do + render + + expect(rendered).to have_css('#login-pane.active') + expect(rendered).to have_field('user[otp_attempt]') + end + end + + context 'user has u2f active' do + let(:user) { create(:admin, :two_factor_via_u2f) } + + it 'shows enter u2f form' do + render + + expect(rendered).to have_css('#js-login-2fa-device.btn') + end + end +end diff --git a/spec/workers/authorized_projects_worker_spec.rb b/spec/workers/authorized_projects_worker_spec.rb index 4c02278de64..8ce0d4edd4f 100644 --- a/spec/workers/authorized_projects_worker_spec.rb +++ b/spec/workers/authorized_projects_worker_spec.rb @@ -21,5 +21,22 @@ describe AuthorizedProjectsWorker do job.perform(-1) end end + + it_behaves_like "an idempotent worker" do + let(:job_args) { user.id } + + it "does not change authorizations when run twice" do + group = create(:group) + create(:project, namespace: group) + group.add_developer(user) + + # Delete the authorization created by the after save hook of the member + # created above. + user.project_authorizations.delete_all + + expect { job.perform(user.id) }.to change { user.project_authorizations.reload.size }.by(1) + expect { job.perform(user.id) }.not_to change { user.project_authorizations.reload.size } + end + end end end |