diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-11 09:08:44 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-11 09:08:44 +0000 |
commit | 6b5f961bef87c70effe57b14d41f9ed882b5d296 (patch) | |
tree | cbdcfbcd679f4560916bdd9a3d9bb5686668d45e | |
parent | 79b32f05d4c0e6cedcf14d48bef24fd68e33a7f6 (diff) | |
download | gitlab-ce-6b5f961bef87c70effe57b14d41f9ed882b5d296.tar.gz |
Add latest changes from gitlab-org/gitlab@master
46 files changed, 2034 insertions, 798 deletions
diff --git a/app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue b/app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue index 9edc25da1a9..2c6302e4f77 100644 --- a/app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue +++ b/app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue @@ -52,7 +52,7 @@ export default { }, methods: { updateToDoCount(add) { - const oldCount = parseInt(document.querySelector('.todos-count').innerText, 10); + const oldCount = parseInt(document.querySelector('.js-todos-count').innerText, 10); const count = add ? oldCount + 1 : oldCount - 1; const headerTodoEvent = new CustomEvent('todo:toggle', { detail: { diff --git a/app/assets/javascripts/design_management/components/design_todo_button.vue b/app/assets/javascripts/design_management/components/design_todo_button.vue index 3e6d51fb90d..aff4f348d15 100644 --- a/app/assets/javascripts/design_management/components/design_todo_button.vue +++ b/app/assets/javascripts/design_management/components/design_todo_button.vue @@ -5,7 +5,7 @@ import createDesignTodoMutation from '../graphql/mutations/create_design_todo.mu import TodoButton from '~/vue_shared/components/todo_button.vue'; import allVersionsMixin from '../mixins/all_versions'; import { updateStoreAfterDeleteDesignTodo } from '../utils/cache_update'; -import { findIssueId } from '../utils/design_management_utils'; +import { findIssueId, findDesignId } from '../utils/design_management_utils'; import { CREATE_DESIGN_TODO_ERROR, DELETE_DESIGN_TODO_ERROR } from '../utils/error_messages'; export default { @@ -45,6 +45,7 @@ export default { return { projectPath: this.projectPath, issueId: findIssueId(this.design.issue.id), + designId: findDesignId(this.design.id), issueIid: this.issueIid, filenames: [this.$route.params.id], atVersion: this.designsVersion, @@ -59,6 +60,22 @@ export default { }, }, methods: { + updateGlobalTodoCount(additionalTodoCount) { + const currentCount = parseInt(document.querySelector('.js-todos-count').innerText, 10); + const todoToggleEvent = new CustomEvent('todo:toggle', { + detail: { + count: Math.max(currentCount + additionalTodoCount, 0), + }, + }); + + document.dispatchEvent(todoToggleEvent); + }, + incrementGlobalTodoCount() { + this.updateGlobalTodoCount(1); + }, + decrementGlobalTodoCount() { + this.updateGlobalTodoCount(-1); + }, createTodo() { this.todoLoading = true; return this.$apollo @@ -75,6 +92,9 @@ export default { } }, }) + .then(() => { + this.incrementGlobalTodoCount(); + }) .catch(err => { this.$emit('error', Error(CREATE_DESIGN_TODO_ERROR)); throw err; @@ -115,6 +135,9 @@ export default { } }, }) + .then(() => { + this.decrementGlobalTodoCount(); + }) .catch(err => { this.$emit('error', Error(DELETE_DESIGN_TODO_ERROR)); throw err; diff --git a/app/assets/javascripts/design_management/graphql.js b/app/assets/javascripts/design_management/graphql.js index 0a17fef4cad..d1fe977b969 100644 --- a/app/assets/javascripts/design_management/graphql.js +++ b/app/assets/javascripts/design_management/graphql.js @@ -30,11 +30,15 @@ const resolvers = { cache.writeQuery({ query: activeDiscussionQuery, data }); }, - createDesignTodo: (_, { projectPath, issueId, issueIid, filenames, atVersion }, { cache }) => { + createDesignTodo: ( + _, + { projectPath, issueId, designId, issueIid, filenames, atVersion }, + { cache }, + ) => { return axios .post(`/${projectPath}/todos`, { issue_id: issueId, - issuable_id: issueIid, + issuable_id: designId, issuable_type: 'design', }) .then(({ data }) => { diff --git a/app/assets/javascripts/design_management/graphql/mutations/create_design_todo.mutation.graphql b/app/assets/javascripts/design_management/graphql/mutations/create_design_todo.mutation.graphql index 2fb0b28b1e0..0c989b2fdde 100644 --- a/app/assets/javascripts/design_management/graphql/mutations/create_design_todo.mutation.graphql +++ b/app/assets/javascripts/design_management/graphql/mutations/create_design_todo.mutation.graphql @@ -1,6 +1,7 @@ mutation createDesignTodo( $projectPath: String! $issueId: String! + $designId: String! $issueIid: String! $filenames: [String]! $atVersion: String @@ -8,6 +9,7 @@ mutation createDesignTodo( createDesignTodo( projectPath: $projectPath issueId: $issueId + designId: $designId issueIid: $issueIid filenames: $filenames atVersion: $atVersion diff --git a/app/assets/javascripts/design_management/utils/design_management_utils.js b/app/assets/javascripts/design_management/utils/design_management_utils.js index 2a6c8b249a5..93e4d6060c3 100644 --- a/app/assets/javascripts/design_management/utils/design_management_utils.js +++ b/app/assets/javascripts/design_management/utils/design_management_utils.js @@ -32,6 +32,8 @@ export const findNoteId = id => (id.match('DiffNote/(.+$)') || [])[1]; export const findIssueId = id => (id.match('Issue/(.+$)') || [])[1]; +export const findDesignId = id => (id.match('Design/(.+$)') || [])[1]; + export const extractDesigns = data => data.project.issue.designCollection.designs.nodes; export const extractDesign = data => (extractDesigns(data) || [])[0]; diff --git a/app/assets/javascripts/diffs/components/no_changes.vue b/app/assets/javascripts/diffs/components/no_changes.vue index f9bfcb73c60..a640dcb0a90 100644 --- a/app/assets/javascripts/diffs/components/no_changes.vue +++ b/app/assets/javascripts/diffs/components/no_changes.vue @@ -1,13 +1,11 @@ <script> -/* eslint-disable vue/no-v-html */ import { mapGetters } from 'vuex'; -import { escape } from 'lodash'; -import { GlButton } from '@gitlab/ui'; -import { __, sprintf } from '~/locale'; +import { GlButton, GlSprintf } from '@gitlab/ui'; export default { components: { GlButton, + GlSprintf, }, props: { changesEmptyStateIllustration: { @@ -17,20 +15,6 @@ export default { }, computed: { ...mapGetters(['getNoteableData']), - emptyStateText() { - return sprintf( - __( - 'No changes between %{ref_start}%{source_branch}%{ref_end} and %{ref_start}%{target_branch}%{ref_end}', - ), - { - ref_start: '<span class="ref-name">', - ref_end: '</span>', - source_branch: escape(this.getNoteableData.source_branch), - target_branch: escape(this.getNoteableData.target_branch), - }, - false, - ); - }, }, }; </script> @@ -42,7 +26,14 @@ export default { </div> <div class="col-12"> <div class="text-content text-center"> - <span v-html="emptyStateText"></span> + <gl-sprintf :message="__('No changes between %{sourceBranch} and %{targetBranch}')"> + <template #sourceBranch> + <span class="ref-name">{{ getNoteableData.source_branch }}</span> + </template> + <template #targetBranch> + <span class="ref-name">{{ getNoteableData.target_branch }}</span> + </template> + </gl-sprintf> <div class="text-center"> <gl-button :href="getNoteableData.new_blob_path" variant="success" category="primary">{{ __('Create commit') diff --git a/app/assets/javascripts/header.js b/app/assets/javascripts/header.js index 575d3618313..b833cca1db6 100644 --- a/app/assets/javascripts/header.js +++ b/app/assets/javascripts/header.js @@ -14,7 +14,7 @@ import Tracking from '~/tracking'; export default function initTodoToggle() { $(document).on('todo:toggle', (e, count) => { const updatedCount = count || e?.detail?.count || 0; - const $todoPendingCount = $('.todos-count'); + const $todoPendingCount = $('.js-todos-count'); $todoPendingCount.text(highCountTrim(updatedCount)); $todoPendingCount.toggleClass('hidden', updatedCount === 0); diff --git a/app/assets/javascripts/packages/shared/components/package_list_row.vue b/app/assets/javascripts/packages/shared/components/package_list_row.vue index 43dbf508861..f93bc51d185 100644 --- a/app/assets/javascripts/packages/shared/components/package_list_row.vue +++ b/app/assets/javascripts/packages/shared/components/package_list_row.vue @@ -116,13 +116,15 @@ export default { </template> <template #right-secondary> - <gl-sprintf :message="__('Created %{timestamp}')"> - <template #timestamp> - <span v-gl-tooltip :title="tooltipTitle(packageEntity.created_at)"> - {{ timeFormatted(packageEntity.created_at) }} - </span> - </template> - </gl-sprintf> + <span> + <gl-sprintf :message="__('Created %{timestamp}')"> + <template #timestamp> + <span v-gl-tooltip :title="tooltipTitle(packageEntity.created_at)"> + {{ timeFormatted(packageEntity.created_at) }} + </span> + </template> + </gl-sprintf> + </span> </template> <template v-if="!disableDelete" #right-action> diff --git a/app/assets/javascripts/packages/shared/components/publish_method.vue b/app/assets/javascripts/packages/shared/components/publish_method.vue index 468cc458ed9..d17e23c4032 100644 --- a/app/assets/javascripts/packages/shared/components/publish_method.vue +++ b/app/assets/javascripts/packages/shared/components/publish_method.vue @@ -36,7 +36,7 @@ export default { </script> <template> - <div class="gl-display-flex gl-align-items-center gl-mb-2"> + <div class="gl-display-flex gl-align-items-center"> <template v-if="hasPipeline"> <gl-icon name="git-merge" class="gl-mr-2" /> <span data-testid="pipeline-ref" class="gl-mr-2">{{ packageEntity.pipeline.ref }}</span> diff --git a/app/assets/javascripts/tooltips/components/tooltips.vue b/app/assets/javascripts/tooltips/components/tooltips.vue index cff916b3741..8307f878def 100644 --- a/app/assets/javascripts/tooltips/components/tooltips.vue +++ b/app/assets/javascripts/tooltips/components/tooltips.vue @@ -39,7 +39,7 @@ export default { created() { this.observer = new MutationObserver(mutations => { mutations.forEach(mutation => { - this.dispose(mutation.removedNodes); + mutation.removedNodes.forEach(this.dispose); }); }); }, @@ -61,22 +61,36 @@ export default { childList: true, }); }, - dispose(elements) { - if (!elements) { + dispose(target) { + if (!target) { this.tooltips = []; - return; - } - - elements.forEach(element => { - const index = this.tooltips.findIndex(tooltip => tooltip.target === element); + } else { + const index = this.tooltips.indexOf(this.findTooltipByTarget(target)); if (index > -1) { this.tooltips.splice(index, 1); } - }); + } + }, + fixTitle(target) { + const tooltip = this.findTooltipByTarget(target); + + if (tooltip) { + tooltip.title = target.getAttribute('title'); + } + }, + triggerEvent(target, event) { + const tooltip = this.findTooltipByTarget(target); + + if (tooltip) { + this.$refs[tooltip.id][0].$emit(event); + } }, tooltipExists(element) { - return this.tooltips.some(tooltip => tooltip.target === element); + return Boolean(this.findTooltipByTarget(element)); + }, + findTooltipByTarget(element) { + return this.tooltips.find(tooltip => tooltip.target === element); }, }, }; @@ -86,6 +100,7 @@ export default { <gl-tooltip v-for="(tooltip, index) in tooltips" :id="tooltip.id" + :ref="tooltip.id" :key="index" :target="tooltip.target" :triggers="tooltip.triggers" diff --git a/app/assets/javascripts/tooltips/index.js b/app/assets/javascripts/tooltips/index.js index b8a4ae6fe59..373cef17dfe 100644 --- a/app/assets/javascripts/tooltips/index.js +++ b/app/assets/javascripts/tooltips/index.js @@ -1,4 +1,5 @@ import Vue from 'vue'; +import { toArray } from 'lodash'; import Tooltips from './components/tooltips.vue'; let app; @@ -31,13 +32,13 @@ const tooltipsApp = () => { }).$mount(container); } - return app; + return app.$refs.tooltips; }; const isTooltip = (node, selector) => node.matches && node.matches(selector); const addTooltips = (elements, config) => { - tooltipsApp().$refs.tooltips.addTooltips(Array.from(elements), config); + tooltipsApp().addTooltips(toArray(elements), config); }; const handleTooltipEvent = (rootTarget, e, selector, config = {}) => { @@ -63,9 +64,14 @@ export const initTooltips = (selector, config = {}) => { return tooltipsApp(); }; -export const dispose = elements => { - return tooltipsApp().$refs.tooltips.dispose(elements); -}; +const elementsIterator = handler => elements => toArray(elements).forEach(handler); + +export const dispose = elementsIterator(element => tooltipsApp().dispose(element)); +export const fixTitle = elementsIterator(element => tooltipsApp().fixTitle(element)); +export const enable = elementsIterator(element => tooltipsApp().triggerEvent(element, 'enable')); +export const disable = elementsIterator(element => tooltipsApp().triggerEvent(element, 'disable')); +export const hide = elementsIterator(element => tooltipsApp().triggerEvent(element, 'close')); +export const show = elementsIterator(element => tooltipsApp().triggerEvent(element, 'open')); export const destroy = () => { tooltipsApp().$destroy(); diff --git a/app/assets/javascripts/vue_shared/components/registry/list_item.vue b/app/assets/javascripts/vue_shared/components/registry/list_item.vue index 47b13b4bd92..50a19dc2156 100644 --- a/app/assets/javascripts/vue_shared/components/registry/list_item.vue +++ b/app/assets/javascripts/vue_shared/components/registry/list_item.vue @@ -83,7 +83,7 @@ export default { </div> <div v-if="$slots['left-secondary']" - class="gl-text-gray-500 gl-mt-1 gl-min-h-6 gl-min-w-0 gl-flex-fill-1" + class="gl-display-flex gl-align-items-center gl-text-gray-500 gl-mt-1 gl-min-h-6 gl-min-w-0 gl-flex-fill-1" > <slot name="left-secondary"></slot> </div> @@ -93,11 +93,14 @@ export default { > <div v-if="$slots['right-primary']" - class="gl-sm-text-body gl-sm-font-weight-bold gl-min-h-6" + class="gl-display-flex gl-align-items-center gl-sm-text-body gl-sm-font-weight-bold gl-min-h-6" > <slot name="right-primary"></slot> </div> - <div v-if="$slots['right-secondary']" class="gl-mt-1 gl-min-h-6"> + <div + v-if="$slots['right-secondary']" + class="gl-display-flex gl-align-items-center gl-mt-1 gl-min-h-6" + > <slot name="right-secondary"></slot> </div> </div> diff --git a/app/graphql/types/ci/pipeline_type.rb b/app/graphql/types/ci/pipeline_type.rb index d6445c53f7f..c508b746317 100644 --- a/app/graphql/types/ci/pipeline_type.rb +++ b/app/graphql/types/ci/pipeline_type.rb @@ -48,6 +48,14 @@ module Types field :user, Types::UserType, null: true, description: 'Pipeline user', resolve: -> (pipeline, _args, _context) { Gitlab::Graphql::Loaders::BatchModelLoader.new(User, pipeline.user_id).find } + field :retryable, GraphQL::BOOLEAN_TYPE, + description: 'Specifies if a pipeline can be retried', + method: :retryable?, + null: false + field :cancelable, GraphQL::BOOLEAN_TYPE, + description: 'Specifies if a pipeline can be canceled', + method: :cancelable?, + null: false end end end diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml index 2bc39a23b2d..25f08de8b1f 100644 --- a/app/views/admin/users/show.html.haml +++ b/app/views/admin/users/show.html.haml @@ -44,6 +44,10 @@ %span.light ID: %strong = @user.id + %li + %span.light= _('Namespace ID:') + %strong + = @user.namespace_id %li.two-factor-status %span.light Two-factor Authentication: diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml index a6fc50ffa0b..845231238f6 100644 --- a/app/views/layouts/header/_default.html.haml +++ b/app/views/layouts/header/_default.html.haml @@ -66,7 +66,7 @@ track_property: 'navigation', container: 'body' } do = sprite_icon('todo-done') - %span.badge.badge-pill.todos-count{ class: ('hidden' if todos_pending_count == 0) } + %span.badge.badge-pill.todos-count.js-todos-count{ class: ('hidden' if todos_pending_count == 0) } = todos_count_format(todos_pending_count) %li.nav-item.header-help.dropdown.d-none.d-md-block{ **tracking_attrs('main_navigation', 'click_question_mark_link', 'navigation') } = link_to help_path, class: 'header-help-dropdown-toggle', data: { toggle: "dropdown" } do diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml index c32318df7cc..43935da9e7e 100644 --- a/app/views/projects/tags/new.html.haml +++ b/app/views/projects/tags/new.html.haml @@ -2,8 +2,10 @@ - default_ref = params[:ref] || @project.default_branch - if @error - .alert.alert-danger - %button.close{ type: "button", "data-dismiss" => "alert" } × + .gl-alert.gl-alert-danger + = sprite_icon('error', css_class: 'gl-icon gl-alert-icon gl-alert-icon-no-title') + %button.js-close.gl-alert-dismiss{ type: 'button', 'aria-label' => _('Dismiss') } + = sprite_icon('close', css_class: 'gl-icon') = @error %h3.page-title diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index 4f5c6882180..a071c6673a2 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -131,6 +131,14 @@ :weight: 1 :idempotent: :tags: [] +- :name: cronjob:ci_platform_metrics_update_cron + :feature_category: :continuous_integration + :has_external_dependencies: + :urgency: :low + :resource_boundary: :cpu + :weight: 1 + :idempotent: + :tags: [] - :name: cronjob:container_expiration_policy :feature_category: :container_registry :has_external_dependencies: diff --git a/app/workers/ci_platform_metrics_update_cron_worker.rb b/app/workers/ci_platform_metrics_update_cron_worker.rb new file mode 100644 index 00000000000..ec1fc26fad3 --- /dev/null +++ b/app/workers/ci_platform_metrics_update_cron_worker.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class CiPlatformMetricsUpdateCronWorker # rubocop:disable Scalability/IdempotentWorker + include ApplicationWorker + + # This worker does not perform work scoped to a context + include CronjobQueue # rubocop:disable Scalability/CronWorkerContext + + feature_category :continuous_integration + urgency :low + worker_resource_boundary :cpu + + def perform + CiPlatformMetric.insert_auto_devops_platform_targets! + end +end diff --git a/changelogs/unreleased/241867-Replace-v-html.yml b/changelogs/unreleased/241867-Replace-v-html.yml new file mode 100644 index 00000000000..8c49109b12d --- /dev/null +++ b/changelogs/unreleased/241867-Replace-v-html.yml @@ -0,0 +1,5 @@ +--- +title: Replace v-html with v-safe-html in no_changes.vue +merge_request: 41471 +author: Kev @KevSlashNull +type: other diff --git a/changelogs/unreleased/add_namespace_id_to_users_in_admin_area.yml b/changelogs/unreleased/add_namespace_id_to_users_in_admin_area.yml new file mode 100644 index 00000000000..b75e5118daa --- /dev/null +++ b/changelogs/unreleased/add_namespace_id_to_users_in_admin_area.yml @@ -0,0 +1,5 @@ +--- +title: Add namespace ID to user pages in the admin area +merge_request: 41877 +author: +type: added diff --git a/changelogs/unreleased/litvinov-evgeny-7314-backup-files-skip-warning.yml b/changelogs/unreleased/litvinov-evgeny-7314-backup-files-skip-warning.yml deleted file mode 100644 index 7199ca124c6..00000000000 --- a/changelogs/unreleased/litvinov-evgeny-7314-backup-files-skip-warning.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Skip warning for file changed during backup instead of failing the backup operation -merge_request: 40572 -author: -type: fixed diff --git a/changelogs/unreleased/lm-add-pipeline-actions.yml b/changelogs/unreleased/lm-add-pipeline-actions.yml new file mode 100644 index 00000000000..81d496e785e --- /dev/null +++ b/changelogs/unreleased/lm-add-pipeline-actions.yml @@ -0,0 +1,5 @@ +--- +title: 'GraphQL: Add retryable and cancelable to PipelineType' +merge_request: 40780 +author: +type: added diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index b392b5a5448..fd9d9e0111e 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -456,6 +456,10 @@ production: &base schedule_migrate_external_diffs_worker: cron: "15 * * * *" + # Update CI Platform Metrics daily + ci_platform_metrics_update_cron_worker: + cron: "47 9 * * *" + # GitLab EE only jobs. These jobs are automatically enabled for an EE # installation, and ignored for a CE installation. ee_cron_jobs: diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index d3868cfb8cd..9c069ef7796 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -511,6 +511,9 @@ Settings.cron_jobs['update_container_registry_info_worker']['job_class'] = 'Upda Settings.cron_jobs['postgres_dynamic_partitions_creator'] ||= Settingslogic.new({}) Settings.cron_jobs['postgres_dynamic_partitions_creator']['cron'] ||= '21 */6 * * *' Settings.cron_jobs['postgres_dynamic_partitions_creator']['job_class'] ||= 'PartitionCreationWorker' +Settings.cron_jobs['ci_platform_metrics_update_cron_worker'] ||= Settingslogic.new({}) +Settings.cron_jobs['ci_platform_metrics_update_cron_worker']['cron'] ||= '47 9 * * *' +Settings.cron_jobs['ci_platform_metrics_update_cron_worker']['job_class'] = 'CiPlatformMetricsUpdateCronWorker' Gitlab.ee do Settings.cron_jobs['adjourned_group_deletion_worker'] ||= Settingslogic.new({}) diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql index 74b7bb44d7f..2ecc5deb68e 100644 --- a/doc/api/graphql/reference/gitlab_schema.graphql +++ b/doc/api/graphql/reference/gitlab_schema.graphql @@ -8555,7 +8555,12 @@ enum IssueType { """ Represents an iteration object. """ -type Iteration { +type Iteration implements TimeboxBurnupTimeSeriesInterface { + """ + Daily scope and completed totals for burnup charts + """ + burnupTimeSeries: [BurnupChartDailyTotals!] + """ Timestamp of iteration creation """ @@ -10398,7 +10403,7 @@ type MetricsDashboardAnnotationEdge { """ Represents a milestone. """ -type Milestone { +type Milestone implements TimeboxBurnupTimeSeriesInterface { """ Daily scope and completed totals for burnup charts """ @@ -11334,6 +11339,11 @@ type Pipeline { beforeSha: String """ + Specifies if a pipeline can be canceled + """ + cancelable: Boolean! + + """ Timestamp of the pipeline's commit """ committedAt: Time @@ -11381,6 +11391,11 @@ type Pipeline { iid: String! """ + Specifies if a pipeline can be retried + """ + retryable: Boolean! + + """ Vulnerability and scanned resource counts for each security scanner of the pipeline """ securityReportSummary: SecurityReportSummary @@ -16504,6 +16519,13 @@ Time represented in ISO 8601 """ scalar Time +interface TimeboxBurnupTimeSeriesInterface { + """ + Daily scope and completed totals for burnup charts + """ + burnupTimeSeries: [BurnupChartDailyTotals!] +} + type Timelog { """ Timestamp of when the time tracked was spent at. Deprecated in 12.10: Use `spentAt` diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json index 4735422a98b..b849a55e2e6 100644 --- a/doc/api/graphql/reference/gitlab_schema.json +++ b/doc/api/graphql/reference/gitlab_schema.json @@ -23568,6 +23568,28 @@ "description": "Represents an iteration object.", "fields": [ { + "name": "burnupTimeSeries", + "description": "Daily scope and completed totals for burnup charts", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BurnupChartDailyTotals", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "createdAt", "description": "Timestamp of iteration creation", "args": [ @@ -23798,7 +23820,11 @@ ], "inputFields": null, "interfaces": [ - + { + "kind": "INTERFACE", + "name": "TimeboxBurnupTimeSeriesInterface", + "ofType": null + } ], "enumValues": null, "possibleTypes": null @@ -29142,7 +29168,11 @@ ], "inputFields": null, "interfaces": [ - + { + "kind": "INTERFACE", + "name": "TimeboxBurnupTimeSeriesInterface", + "ofType": null + } ], "enumValues": null, "possibleTypes": null @@ -33725,6 +33755,24 @@ "deprecationReason": null }, { + "name": "cancelable", + "description": "Specifies if a pipeline can be canceled", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "committedAt", "description": "Timestamp of the pipeline's commit", "args": [ @@ -33867,6 +33915,24 @@ "deprecationReason": null }, { + "name": "retryable", + "description": "Specifies if a pipeline can be retried", + "args": [ + + ], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { "name": "securityReportSummary", "description": "Vulnerability and scanned resource counts for each security scanner of the pipeline", "args": [ @@ -48383,6 +48449,50 @@ "possibleTypes": null }, { + "kind": "INTERFACE", + "name": "TimeboxBurnupTimeSeriesInterface", + "description": null, + "fields": [ + { + "name": "burnupTimeSeries", + "description": "Daily scope and completed totals for burnup charts", + "args": [ + + ], + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "OBJECT", + "name": "BurnupChartDailyTotals", + "ofType": null + } + } + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": [ + { + "kind": "OBJECT", + "name": "Iteration", + "ofType": null + }, + { + "kind": "OBJECT", + "name": "Milestone", + "ofType": null + } + ] + }, + { "kind": "OBJECT", "name": "Timelog", "description": null, diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index bc21458b7f2..98550241f7e 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -16,51 +16,62 @@ fields and methods on a model are available via GraphQL. CAUTION: **Caution:** Fields that are deprecated are marked with **{warning-solid}**. -## AccessLevel +## Object types + +Object types represent the resources that GitLab's GraphQL API can return. +They contain _fields_. Each field has its own type, which will either be one of the +basic GraphQL [scalar types](https://graphql.org/learn/schema/#scalar-types) +(e.g.: `String` or `Boolean`) or other object types. + +For more information, see +[Object Types and Fields](https://graphql.org/learn/schema/#object-types-and-fields) +on `graphql.org`. + +### AccessLevel Represents the access level of a relationship between a User and object that it is related to -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `integerValue` | Int | Integer representation of access level | | `stringValue` | AccessLevelEnum | String representation of access level | -## AddAwardEmojiPayload +### AddAwardEmojiPayload Autogenerated return type of AddAwardEmoji -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `awardEmoji` | AwardEmoji | The award emoji after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## AddProjectToSecurityDashboardPayload +### AddProjectToSecurityDashboardPayload Autogenerated return type of AddProjectToSecurityDashboard -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `project` | Project | Project that was added to the Instance Security Dashboard | -## AdminSidekiqQueuesDeleteJobsPayload +### AdminSidekiqQueuesDeleteJobsPayload Autogenerated return type of AdminSidekiqQueuesDeleteJobs -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `result` | DeleteJobsResponse | Information about the status of the deletion request | -## AlertManagementAlert +### AlertManagementAlert Describes an alert from the project's Alert Management -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time | Timestamp the alert was created | | `description` | String | Description of the alert | | `details` | JSON | Alert details | @@ -81,12 +92,12 @@ Describes an alert from the project's Alert Management | `title` | String | Title of the alert | | `updatedAt` | Time | Timestamp the alert was last updated | -## AlertManagementAlertStatusCountsType +### AlertManagementAlertStatusCountsType Represents total number of alerts for the represented categories -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `acknowledged` | Int | Number of alerts with status ACKNOWLEDGED for the project | | `all` | Int | Total number of alerts for the project | | `ignored` | Int | Number of alerts with status IGNORED for the project | @@ -94,36 +105,36 @@ Represents total number of alerts for the represented categories | `resolved` | Int | Number of alerts with status RESOLVED for the project | | `triggered` | Int | Number of alerts with status TRIGGERED for the project | -## AlertSetAssigneesPayload +### AlertSetAssigneesPayload Autogenerated return type of AlertSetAssignees -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `alert` | AlertManagementAlert | The alert after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue created after mutation | | `todo` | Todo | The todo after mutation | -## AlertTodoCreatePayload +### AlertTodoCreatePayload Autogenerated return type of AlertTodoCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `alert` | AlertManagementAlert | The alert after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue created after mutation | | `todo` | Todo | The todo after mutation | -## AwardEmoji +### AwardEmoji An emoji awarded by a user. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `description` | String! | The emoji description | | `emoji` | String! | The emoji as an icon | | `name` | String! | The emoji name | @@ -131,48 +142,48 @@ An emoji awarded by a user. | `unicodeVersion` | String! | The unicode version for this emoji | | `user` | User! | The user who awarded the emoji | -## AwardEmojiAddPayload +### AwardEmojiAddPayload Autogenerated return type of AwardEmojiAdd -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `awardEmoji` | AwardEmoji | The award emoji after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## AwardEmojiRemovePayload +### AwardEmojiRemovePayload Autogenerated return type of AwardEmojiRemove -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `awardEmoji` | AwardEmoji | The award emoji after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## AwardEmojiTogglePayload +### AwardEmojiTogglePayload Autogenerated return type of AwardEmojiToggle -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `awardEmoji` | AwardEmoji | The award emoji after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `toggledOn` | Boolean! | Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji. | -## BaseService +### BaseService -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `active` | Boolean | Indicates if the service is active | | `type` | String | Class name of the service | -## Blob +### Blob -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `flatPath` | String! | Flat path of the entry | | `id` | ID! | ID of the entry | | `lfsOid` | String | LFS ID of the blob | @@ -184,12 +195,12 @@ Autogenerated return type of AwardEmojiToggle | `webPath` | String | Web path of the blob | | `webUrl` | String | Web URL of the blob | -## Board +### Board Represents a project or group board -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `assignee` | User | The board assignee. | | `hideBacklogList` | Boolean | Whether or not backlog list is hidden. | | `hideClosedList` | Boolean | Whether or not closed list is hidden. | @@ -198,12 +209,12 @@ Represents a project or group board | `name` | String | Name of the board | | `weight` | Int | Weight of the board. | -## BoardList +### BoardList Represents a list for an issue board -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `assignee` | User | Assignee in the list | | `collapsed` | Boolean | Indicates if list is collapsed for this user | | `id` | ID! | ID (global ID) of the list | @@ -218,115 +229,115 @@ Represents a list for an issue board | `title` | String! | Title of the list | | `totalWeight` | Int | Total weight of all issues in the list | -## BoardListCreatePayload +### BoardListCreatePayload Autogenerated return type of BoardListCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `list` | BoardList | List of the issue board | -## BoardListUpdateLimitMetricsPayload +### BoardListUpdateLimitMetricsPayload Autogenerated return type of BoardListUpdateLimitMetrics -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `list` | BoardList | The updated list | -## Branch +### Branch -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `commit` | Commit | Commit for the branch | | `name` | String! | Name of the branch | -## BurnupChartDailyTotals +### BurnupChartDailyTotals Represents the total number of issues and their weights for a particular day. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `completedCount` | Int! | Number of closed issues as of this day | | `completedWeight` | Int! | Total weight of closed issues as of this day | | `date` | ISO8601Date! | Date for burnup totals | | `scopeCount` | Int! | Number of issues as of this day | | `scopeWeight` | Int! | Total weight of issues as of this day | -## CiGroup +### CiGroup -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `name` | String | Name of the job group | | `size` | Int | Size of the group | -## CiJob +### CiJob -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `name` | String | Name of the job | -## CiStage +### CiStage -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `name` | String | Name of the stage | -## ClusterAgent +### ClusterAgent -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time | Timestamp the cluster agent was created | | `id` | ID! | ID of the cluster agent | | `name` | String | Name of the cluster agent | | `project` | Project | The project this cluster agent is associated with | | `updatedAt` | Time | Timestamp the cluster agent was updated | -## ClusterAgentDeletePayload +### ClusterAgentDeletePayload Autogenerated return type of ClusterAgentDelete -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## ClusterAgentToken +### ClusterAgentToken -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clusterAgent` | ClusterAgent | Cluster agent this token is associated with | | `createdAt` | Time | Timestamp the token was created | | `id` | ClustersAgentTokenID! | Global ID of the token | -## ClusterAgentTokenCreatePayload +### ClusterAgentTokenCreatePayload Autogenerated return type of ClusterAgentTokenCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `secret` | String | Token secret value. Make sure you save it - you won't be able to access it again | | `token` | ClusterAgentToken | Token created after mutation | -## ClusterAgentTokenDeletePayload +### ClusterAgentTokenDeletePayload Autogenerated return type of ClusterAgentTokenDelete -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## Commit +### Commit -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `author` | User | Author of the commit | | `authorGravatar` | String | Commit authors gravatar | | `authorName` | String | Commit authors name | @@ -343,41 +354,41 @@ Autogenerated return type of ClusterAgentTokenDelete | `webPath` | String! | Web path of the commit | | `webUrl` | String! | Web URL of the commit | -## CommitCreatePayload +### CommitCreatePayload Autogenerated return type of CommitCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `commit` | Commit | The commit after mutation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## ComplianceFramework +### ComplianceFramework Represents a ComplianceFramework associated with a Project -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `name` | ProjectSettingEnum! | Name of the compliance framework | -## ConfigureSastPayload +### ConfigureSastPayload Autogenerated return type of ConfigureSast -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `status` | String! | Status of creating the commit for the supplied SAST CI configuration | | `successPath` | String | Redirect path to use when the response is successful | -## ContainerExpirationPolicy +### ContainerExpirationPolicy A tag expiration policy designed to keep only the images that matter most -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `cadence` | ContainerExpirationPolicyCadenceEnum! | This container expiration policy schedule | | `createdAt` | Time! | Timestamp of when the container expiration policy was created | | `enabled` | Boolean! | Indicates whether this container expiration policy is enabled | @@ -388,176 +399,176 @@ A tag expiration policy designed to keep only the images that matter most | `olderThan` | ContainerExpirationPolicyOlderThanEnum | Tags older that this will expire | | `updatedAt` | Time! | Timestamp of when the container expiration policy was updated | -## CreateAlertIssuePayload +### CreateAlertIssuePayload Autogenerated return type of CreateAlertIssue -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `alert` | AlertManagementAlert | The alert after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue created after mutation | | `todo` | Todo | The todo after mutation | -## CreateAnnotationPayload +### CreateAnnotationPayload Autogenerated return type of CreateAnnotation -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `annotation` | MetricsDashboardAnnotation | The created annotation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## CreateBranchPayload +### CreateBranchPayload Autogenerated return type of CreateBranch -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `branch` | Branch | Branch after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## CreateClusterAgentPayload +### CreateClusterAgentPayload Autogenerated return type of CreateClusterAgent -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `clusterAgent` | ClusterAgent | Cluster agent created after mutation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## CreateDiffNotePayload +### CreateDiffNotePayload Autogenerated return type of CreateDiffNote -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `note` | Note | The note after mutation | -## CreateEpicPayload +### CreateEpicPayload Autogenerated return type of CreateEpic -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `epic` | Epic | The created epic | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## CreateImageDiffNotePayload +### CreateImageDiffNotePayload Autogenerated return type of CreateImageDiffNote -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `note` | Note | The note after mutation | -## CreateIterationPayload +### CreateIterationPayload Autogenerated return type of CreateIteration -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `iteration` | Iteration | The created iteration | -## CreateNotePayload +### CreateNotePayload Autogenerated return type of CreateNote -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `note` | Note | The note after mutation | -## CreateRequirementPayload +### CreateRequirementPayload Autogenerated return type of CreateRequirement -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `requirement` | Requirement | The requirement after mutation | -## CreateSnippetPayload +### CreateSnippetPayload Autogenerated return type of CreateSnippet -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `snippet` | Snippet | The snippet after mutation | -## DastOnDemandScanCreatePayload +### DastOnDemandScanCreatePayload Autogenerated return type of DastOnDemandScanCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `pipelineUrl` | String | URL of the pipeline that was created. | -## DastScannerProfile +### DastScannerProfile Represents a DAST scanner profile. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `globalId` | DastScannerProfileID! | ID of the DAST scanner profile | | `id` **{warning-solid}** | ID! | **Deprecated:** Use `global_id`. Deprecated in 13.4 | | `profileName` | String | Name of the DAST scanner profile | | `spiderTimeout` | Int | The maximum number of minutes allowed for the spider to traverse the site | | `targetTimeout` | Int | The maximum number of seconds allowed for the site under test to respond to a request | -## DastScannerProfileCreatePayload +### DastScannerProfileCreatePayload Autogenerated return type of DastScannerProfileCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `globalId` | DastScannerProfileID | ID of the scanner profile. | | `id` **{warning-solid}** | ID | **Deprecated:** Use `global_id`. Deprecated in 13.4 | -## DastScannerProfileDeletePayload +### DastScannerProfileDeletePayload Autogenerated return type of DastScannerProfileDelete -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## DastScannerProfileUpdatePayload +### DastScannerProfileUpdatePayload Autogenerated return type of DastScannerProfileUpdate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `id` | DastScannerProfileID | ID of the scanner profile. | -## DastSiteProfile +### DastSiteProfile Represents a DAST Site Profile. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `editPath` | String | Relative web path to the edit page of a site profile | | `id` | DastSiteProfileID! | ID of the site profile | | `profileName` | String | The name of the site profile | @@ -565,68 +576,68 @@ Represents a DAST Site Profile. | `userPermissions` | DastSiteProfilePermissions! | Permissions for the current user on the resource | | `validationStatus` | DastSiteProfileValidationStatusEnum | The current validation status of the site profile | -## DastSiteProfileCreatePayload +### DastSiteProfileCreatePayload Autogenerated return type of DastSiteProfileCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `id` | DastSiteProfileID | ID of the site profile. | -## DastSiteProfileDeletePayload +### DastSiteProfileDeletePayload Autogenerated return type of DastSiteProfileDelete -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## DastSiteProfilePermissions +### DastSiteProfilePermissions Check permissions for the current user on site profile -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createOnDemandDastScan` | Boolean! | Indicates the user can perform `create_on_demand_dast_scan` on this resource | -## DastSiteProfileUpdatePayload +### DastSiteProfileUpdatePayload Autogenerated return type of DastSiteProfileUpdate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `id` | DastSiteProfileID | ID of the site profile. | -## DeleteAnnotationPayload +### DeleteAnnotationPayload Autogenerated return type of DeleteAnnotation -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## DeleteJobsResponse +### DeleteJobsResponse The response from the AdminSidekiqQueuesDeleteJobs mutation. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `completed` | Boolean | Whether or not the entire queue was processed in time; if not, retrying the same request is safe | | `deletedJobs` | Int | The number of matching jobs deleted | | `queueSize` | Int | The queue size after processing | -## Design +### Design A single design -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `diffRefs` | DiffRefs! | The diff refs for this design | | `event` | DesignVersionEvent! | How this design was changed in the current version | | `filename` | String! | The filename of the design | @@ -638,12 +649,12 @@ A single design | `notesCount` | Int! | The total count of user-created notes for this design | | `project` | Project! | The project the design belongs to | -## DesignAtVersion +### DesignAtVersion A design pinned to a specific version. The image field reflects the design as of the associated version. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `design` | Design! | The underlying design. | | `diffRefs` | DiffRefs! | The diff refs for this design | | `event` | DesignVersionEvent! | How this design was changed in the current version | @@ -657,90 +668,90 @@ A design pinned to a specific version. The image field reflects the design as of | `project` | Project! | The project the design belongs to | | `version` | DesignVersion! | The version this design-at-versions is pinned to | -## DesignCollection +### DesignCollection A collection of designs. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `design` | Design | Find a specific design | | `designAtVersion` | DesignAtVersion | Find a design as of a version | | `issue` | Issue! | Issue associated with the design collection | | `project` | Project! | Project associated with the design collection | | `version` | DesignVersion | A specific version | -## DesignManagement +### DesignManagement -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `designAtVersion` | DesignAtVersion | Find a design as of a version | | `version` | DesignVersion | Find a version | -## DesignManagementDeletePayload +### DesignManagementDeletePayload Autogenerated return type of DesignManagementDelete -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `version` | DesignVersion | The new version in which the designs are deleted | -## DesignManagementMovePayload +### DesignManagementMovePayload Autogenerated return type of DesignManagementMove -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `designCollection` | DesignCollection | The current state of the collection | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## DesignManagementUploadPayload +### DesignManagementUploadPayload Autogenerated return type of DesignManagementUpload -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `designs` | Design! => Array | The designs that were uploaded by the mutation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `skippedDesigns` | Design! => Array | Any designs that were skipped from the upload due to there being no change to their content since their last version | -## DesignVersion +### DesignVersion A specific version in which designs were added, modified or deleted -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `designAtVersion` | DesignAtVersion! | A particular design as of this version, provided it is visible at this version | | `id` | ID! | ID of the design version | | `sha` | ID! | SHA of the design version | -## DestroyNotePayload +### DestroyNotePayload Autogenerated return type of DestroyNote -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `note` | Note | The note after mutation | -## DestroySnippetPayload +### DestroySnippetPayload Autogenerated return type of DestroySnippet -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `snippet` | Snippet | The snippet after mutation | -## DetailedStatus +### DetailedStatus -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `detailsPath` | String! | Path of the details for the pipeline status | | `favicon` | String! | Favicon of the pipeline status | | `group` | String! | Group of the pipeline status | @@ -750,10 +761,10 @@ Autogenerated return type of DestroySnippet | `text` | String! | Text of the pipeline status | | `tooltip` | String! | Tooltip associated with the pipeline status | -## DiffPosition +### DiffPosition -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `diffRefs` | DiffRefs! | Information about the branch, HEAD, and base at the time of commenting | | `filePath` | String! | Path of the file that was changed | | `height` | Int | Total height of the image | @@ -766,39 +777,39 @@ Autogenerated return type of DestroySnippet | `x` | Int | X position of the note | | `y` | Int | Y position of the note | -## DiffRefs +### DiffRefs -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `baseSha` | String | Merge base of the branch the comment was made on | | `headSha` | String! | SHA of the HEAD at the time the comment was made | | `startSha` | String! | SHA of the branch being compared against | -## DiffStats +### DiffStats Changes to a single file -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `additions` | Int! | Number of lines added to this file | | `deletions` | Int! | Number of lines deleted from this file | | `path` | String! | File path, relative to repository root | -## DiffStatsSummary +### DiffStatsSummary Aggregated summary of changes -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `additions` | Int! | Number of lines added | | `changes` | Int! | Number of lines changed | | `deletions` | Int! | Number of lines deleted | | `fileCount` | Int! | Number of files changed | -## Discussion +### Discussion -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time! | Timestamp of the discussion's creation | | `id` | ID! | ID of this discussion | | `replyId` | ID! | ID used to reply to this discussion | @@ -807,44 +818,44 @@ Aggregated summary of changes | `resolvedAt` | Time | Timestamp of when the object was resolved | | `resolvedBy` | User | User who resolved the object | -## DiscussionToggleResolvePayload +### DiscussionToggleResolvePayload Autogenerated return type of DiscussionToggleResolve -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `discussion` | Discussion | The discussion after mutation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## DismissVulnerabilityPayload +### DismissVulnerabilityPayload Autogenerated return type of DismissVulnerability -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `vulnerability` | Vulnerability | The vulnerability after dismissal | -## Environment +### Environment Describes where code is deployed for a project -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `id` | ID! | ID of the environment | | `latestOpenedMostSevereAlert` | AlertManagementAlert | The most severe open alert for the environment. If multiple alerts have equal severity, the most recent is returned. | | `metricsDashboard` | MetricsDashboard | Metrics dashboard schema for the environment | | `name` | String! | Human-readable name of the environment | | `state` | String! | State of the environment, for example: available/stopped | -## Epic +### Epic Represents an epic. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `author` | User! | Author of the epic | | `closedAt` | Time | Timestamp of the epic's closure | | `confidential` | Boolean | Indicates if the epic is confidential | @@ -881,53 +892,53 @@ Represents an epic. | `webPath` | String! | Web path of the epic | | `webUrl` | String! | Web URL of the epic | -## EpicAddIssuePayload +### EpicAddIssuePayload Autogenerated return type of EpicAddIssue -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `epic` | Epic | The epic after mutation | | `epicIssue` | EpicIssue | The epic-issue relation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## EpicDescendantCount +### EpicDescendantCount Counts of descendent epics. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `closedEpics` | Int | Number of closed child epics | | `closedIssues` | Int | Number of closed epic issues | | `openedEpics` | Int | Number of opened child epics | | `openedIssues` | Int | Number of opened epic issues | -## EpicDescendantWeights +### EpicDescendantWeights Total weight of open and closed descendant issues -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `closedIssues` | Int | Total weight of completed (closed) issues in this epic, including epic descendants | | `openedIssues` | Int | Total weight of opened issues in this epic, including epic descendants | -## EpicHealthStatus +### EpicHealthStatus Health status of child issues -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `issuesAtRisk` | Int | Number of issues at risk | | `issuesNeedingAttention` | Int | Number of issues that need attention | | `issuesOnTrack` | Int | Number of issues on track | -## EpicIssue +### EpicIssue Relationship between an epic and an issue -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `alertManagementAlert` | AlertManagementAlert | Alert associated to this issue | | `author` | User! | User that created the issue | | `blocked` | Boolean! | Indicates the issue is blocked | @@ -969,12 +980,12 @@ Relationship between an epic and an issue | `webUrl` | String! | Web URL of the issue | | `weight` | Int | Weight of the issue | -## EpicPermissions +### EpicPermissions Check permissions for the current user on an epic -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminEpic` | Boolean! | Indicates the user can perform `admin_epic` on this resource | | `awardEmoji` | Boolean! | Indicates the user can perform `award_emoji` on this resource | | `createEpic` | Boolean! | Indicates the user can perform `create_epic` on this resource | @@ -984,29 +995,29 @@ Check permissions for the current user on an epic | `readEpicIid` | Boolean! | Indicates the user can perform `read_epic_iid` on this resource | | `updateEpic` | Boolean! | Indicates the user can perform `update_epic` on this resource | -## EpicSetSubscriptionPayload +### EpicSetSubscriptionPayload Autogenerated return type of EpicSetSubscription -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `epic` | Epic | The epic after mutation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## EpicTreeReorderPayload +### EpicTreeReorderPayload Autogenerated return type of EpicTreeReorder -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## GeoNode +### GeoNode -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `containerRepositoriesMaxCapacity` | Int | The maximum concurrency of container repository sync for this secondary node | | `enabled` | Boolean | Indicates whether this Geo node is enabled | | `filesMaxCapacity` | Int | The maximum concurrency of LFS/attachment backfill for this secondary node | @@ -1022,10 +1033,10 @@ Autogenerated return type of EpicTreeReorder | `url` | String | The user-facing URL for this Geo node | | `verificationMaxCapacity` | Int | The maximum concurrency of repository verification for this secondary node | -## GrafanaIntegration +### GrafanaIntegration -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time! | Timestamp of the issue's creation | | `enabled` | Boolean! | Indicates whether Grafana integration is enabled | | `grafanaUrl` | String! | URL for the Grafana host for the Grafana integration | @@ -1033,10 +1044,10 @@ Autogenerated return type of EpicTreeReorder | `token` **{warning-solid}** | String! | **Deprecated:** Plain text token has been masked for security reasons. Deprecated in 12.7 | | `updatedAt` | Time! | Timestamp of the issue's last activity | -## Group +### Group -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `autoDevopsEnabled` | Boolean | Indicates whether Auto DevOps is enabled for all projects within this group | | `avatarUrl` | String | Avatar URL of the group | | `board` | Board | A single board of the group | @@ -1071,12 +1082,12 @@ Autogenerated return type of EpicTreeReorder | `vulnerabilitySeveritiesCount` | VulnerabilitySeveritiesCount | Counts for each vulnerability severity in the group and its subgroups | | `webUrl` | String! | Web URL of the group | -## GroupMember +### GroupMember Represents a Group Membership -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `accessLevel` | AccessLevel | GitLab::Access level | | `createdAt` | Time | Date and time the membership was created | | `createdBy` | User | User that authorized membership | @@ -1087,33 +1098,33 @@ Represents a Group Membership | `user` | User! | User that is associated with the member object | | `userPermissions` | GroupPermissions! | Permissions for the current user on the resource | -## GroupPermissions +### GroupPermissions -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `readGroup` | Boolean! | Indicates the user can perform `read_group` on this resource | -## InstanceSecurityDashboard +### InstanceSecurityDashboard -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `vulnerabilityGrades` | VulnerableProjectsByGrade! => Array | Represents vulnerable project counts for each grade | | `vulnerabilitySeveritiesCount` | VulnerabilitySeveritiesCount | Counts for each vulnerability severity from projects selected in Instance Security Dashboard | -## InstanceStatisticsMeasurement +### InstanceStatisticsMeasurement Represents a recorded measurement (object count) for the Admins -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `count` | Int! | Object count | | `identifier` | MeasurementIdentifier! | The type of objects being measured | | `recordedAt` | Time | The time the measurement was recorded | -## Issue +### Issue -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `alertManagementAlert` | AlertManagementAlert | Alert associated to this issue | | `author` | User! | User that created the issue | | `blocked` | Boolean! | Indicates the issue is blocked | @@ -1153,22 +1164,22 @@ Represents a recorded measurement (object count) for the Admins | `webUrl` | String! | Web URL of the issue | | `weight` | Int | Weight of the issue | -## IssueMoveListPayload +### IssueMoveListPayload Autogenerated return type of IssueMoveList -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssuePermissions +### IssuePermissions Check permissions for the current user on a issue -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminIssue` | Boolean! | Indicates the user can perform `admin_issue` on this resource | | `createDesign` | Boolean! | Indicates the user can perform `create_design` on this resource | | `createNote` | Boolean! | Indicates the user can perform `create_note` on this resource | @@ -1178,112 +1189,113 @@ Check permissions for the current user on a issue | `reopenIssue` | Boolean! | Indicates the user can perform `reopen_issue` on this resource | | `updateIssue` | Boolean! | Indicates the user can perform `update_issue` on this resource | -## IssueSetAssigneesPayload +### IssueSetAssigneesPayload Autogenerated return type of IssueSetAssignees -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetConfidentialPayload +### IssueSetConfidentialPayload Autogenerated return type of IssueSetConfidential -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetDueDatePayload +### IssueSetDueDatePayload Autogenerated return type of IssueSetDueDate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetEpicPayload +### IssueSetEpicPayload Autogenerated return type of IssueSetEpic -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetIterationPayload +### IssueSetIterationPayload Autogenerated return type of IssueSetIteration -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetLockedPayload +### IssueSetLockedPayload Autogenerated return type of IssueSetLocked -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetSeverityPayload +### IssueSetSeverityPayload Autogenerated return type of IssueSetSeverity -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetSubscriptionPayload +### IssueSetSubscriptionPayload Autogenerated return type of IssueSetSubscription -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueSetWeightPayload +### IssueSetWeightPayload Autogenerated return type of IssueSetWeight -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## IssueStatusCountsType +### IssueStatusCountsType Represents total number of issues for the represented statuses. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `all` | Int | Number of issues with status ALL for the project | | `closed` | Int | Number of issues with status CLOSED for the project | | `opened` | Int | Number of issues with status OPENED for the project | -## Iteration +### Iteration Represents an iteration object. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | +| `burnupTimeSeries` | BurnupChartDailyTotals! => Array | Daily scope and completed totals for burnup charts | | `createdAt` | Time! | Timestamp of iteration creation | | `description` | String | Description of the iteration | | `descriptionHtml` | String | The GitLab Flavored Markdown rendering of `description` | @@ -1299,10 +1311,10 @@ Represents an iteration object. | `webPath` | String! | Web path of the iteration | | `webUrl` | String! | Web URL of the iteration | -## JiraImport +### JiraImport -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time | Timestamp of when the Jira import was created | | `failedToImportCount` | Int! | Count of issues that failed to import | | `importedIssuesCount` | Int! | Count of issues that were successfully imported | @@ -1311,45 +1323,45 @@ Represents an iteration object. | `scheduledBy` | User | User that started the Jira import | | `totalIssueCount` | Int! | Total count of issues that were attempted to import | -## JiraImportStartPayload +### JiraImportStartPayload Autogenerated return type of JiraImportStart -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `jiraImport` | JiraImport | The Jira import data after mutation | -## JiraImportUsersPayload +### JiraImportUsersPayload Autogenerated return type of JiraImportUsers -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `jiraUsers` | JiraUser! => Array | Users returned from Jira, matched by email and name if possible. | -## JiraProject +### JiraProject -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `key` | String! | Key of the Jira project | | `name` | String | Name of the Jira project | | `projectId` | Int! | ID of the Jira project | -## JiraService +### JiraService -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `active` | Boolean | Indicates if the service is active | | `type` | String | Class name of the service | -## JiraUser +### JiraUser -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `gitlabId` | Int | ID of the matched GitLab user | | `gitlabName` | String | Name of the matched GitLab user | | `gitlabUsername` | String | Username of the matched GitLab user | @@ -1357,10 +1369,10 @@ Autogenerated return type of JiraImportUsers | `jiraDisplayName` | String! | Display name of the Jira user | | `jiraEmail` | String | Email of the Jira user, returned only for users with public emails | -## Label +### Label -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `color` | String! | Background color of the label | | `description` | String | Description of the label (Markdown rendered as HTML for caching) | | `descriptionHtml` | String | The GitLab Flavored Markdown rendering of `description` | @@ -1368,20 +1380,20 @@ Autogenerated return type of JiraImportUsers | `textColor` | String! | Text color of the label | | `title` | String! | Content of the label | -## MarkAsSpamSnippetPayload +### MarkAsSpamSnippetPayload Autogenerated return type of MarkAsSpamSnippet -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `snippet` | Snippet | The snippet after mutation | -## MergeRequest +### MergeRequest -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `allowCollaboration` | Boolean | Indicates if members of the target project can push to the fork | | `approved` | Boolean! | Indicates if the merge request has all the required approvals. Returns true if no required approvals are configured. | | `author` | User | User who created this merge request | @@ -1439,22 +1451,22 @@ Autogenerated return type of MarkAsSpamSnippet | `webUrl` | String | Web URL of the merge request | | `workInProgress` | Boolean! | Indicates if the merge request is a work in progress (WIP) | -## MergeRequestCreatePayload +### MergeRequestCreatePayload Autogenerated return type of MergeRequestCreate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## MergeRequestPermissions +### MergeRequestPermissions Check permissions for the current user on a merge request -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminMergeRequest` | Boolean! | Indicates the user can perform `admin_merge_request` on this resource | | `cherryPickOnCurrentMergeRequest` | Boolean! | Indicates the user can perform `cherry_pick_on_current_merge_request` on this resource | | `createNote` | Boolean! | Indicates the user can perform `create_note` on this resource | @@ -1464,106 +1476,106 @@ Check permissions for the current user on a merge request | `revertOnCurrentMergeRequest` | Boolean! | Indicates the user can perform `revert_on_current_merge_request` on this resource | | `updateMergeRequest` | Boolean! | Indicates the user can perform `update_merge_request` on this resource | -## MergeRequestSetAssigneesPayload +### MergeRequestSetAssigneesPayload Autogenerated return type of MergeRequestSetAssignees -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## MergeRequestSetLabelsPayload +### MergeRequestSetLabelsPayload Autogenerated return type of MergeRequestSetLabels -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## MergeRequestSetLockedPayload +### MergeRequestSetLockedPayload Autogenerated return type of MergeRequestSetLocked -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## MergeRequestSetMilestonePayload +### MergeRequestSetMilestonePayload Autogenerated return type of MergeRequestSetMilestone -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## MergeRequestSetSubscriptionPayload +### MergeRequestSetSubscriptionPayload Autogenerated return type of MergeRequestSetSubscription -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## MergeRequestSetWipPayload +### MergeRequestSetWipPayload Autogenerated return type of MergeRequestSetWip -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## MergeRequestUpdatePayload +### MergeRequestUpdatePayload Autogenerated return type of MergeRequestUpdate -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `mergeRequest` | MergeRequest | The merge request after mutation | -## Metadata +### Metadata -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `revision` | String! | Revision | | `version` | String! | Version | -## MetricsDashboard +### MetricsDashboard -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `path` | String | Path to a file with the dashboard definition | | `schemaValidationWarnings` | String! => Array | Dashboard schema validation warnings | -## MetricsDashboardAnnotation +### MetricsDashboardAnnotation -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `description` | String | Description of the annotation | | `endingAt` | Time | Timestamp marking end of annotated time span | | `id` | ID! | ID of the annotation | | `panelId` | String | ID of a dashboard panel to which the annotation should be scoped | | `startingAt` | Time | Timestamp marking start of annotated time span | -## Milestone +### Milestone Represents a milestone. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `burnupTimeSeries` | BurnupChartDailyTotals! => Array | Daily scope and completed totals for burnup charts | | `createdAt` | Time! | Timestamp of milestone creation | | `description` | String | Description of the milestone | @@ -1579,19 +1591,19 @@ Represents a milestone. | `updatedAt` | Time! | Timestamp of last milestone update | | `webPath` | String! | Web path of the milestone | -## MilestoneStats +### MilestoneStats Contains statistics about a milestone -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `closedIssuesCount` | Int | Number of closed issues associated with the milestone | | `totalIssuesCount` | Int | Total number of issues associated with the milestone | -## Namespace +### Namespace -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `description` | String | Description of the namespace | | `descriptionHtml` | String | The GitLab Flavored Markdown rendering of `description` | | `fullName` | String! | Full name of the namespace | @@ -1607,20 +1619,20 @@ Contains statistics about a milestone | `temporaryStorageIncreaseEndsOn` | Time | Date until the temporary storage increase is active | | `visibility` | String | Visibility of the namespace | -## NamespaceIncreaseStorageTemporarilyPayload +### NamespaceIncreaseStorageTemporarilyPayload Autogenerated return type of NamespaceIncreaseStorageTemporarily -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `namespace` | Namespace | The namespace after mutation | -## Note +### Note -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `author` | User! | User who wrote this note | | `body` | String! | Content of the note | | `bodyHtml` | String | The GitLab Flavored Markdown rendering of `note` | @@ -1639,22 +1651,22 @@ Autogenerated return type of NamespaceIncreaseStorageTemporarily | `updatedAt` | Time! | Timestamp of the note's last activity | | `userPermissions` | NotePermissions! | Permissions for the current user on the resource | -## NotePermissions +### NotePermissions -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminNote` | Boolean! | Indicates the user can perform `admin_note` on this resource | | `awardEmoji` | Boolean! | Indicates the user can perform `award_emoji` on this resource | | `createNote` | Boolean! | Indicates the user can perform `create_note` on this resource | | `readNote` | Boolean! | Indicates the user can perform `read_note` on this resource | | `resolveNote` | Boolean! | Indicates the user can perform `resolve_note` on this resource | -## Package +### Package Represents a package -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time! | The created date | | `id` | ID! | The ID of the package | | `name` | String! | The name of the package | @@ -1662,12 +1674,12 @@ Represents a package | `updatedAt` | Time! | The update date | | `version` | String | The version of the package | -## PackageFileRegistry +### PackageFileRegistry Represents the sync and verification state of a package file -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time | Timestamp when the PackageFileRegistry was created | | `id` | ID! | ID of the PackageFileRegistry | | `lastSyncFailure` | String | Error message during sync of the PackageFileRegistry | @@ -1677,22 +1689,23 @@ Represents the sync and verification state of a package file | `retryCount` | Int | Number of consecutive failed sync attempts of the PackageFileRegistry | | `state` | RegistryState | Sync state of the PackageFileRegistry | -## PageInfo +### PageInfo Information about pagination in a connection. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `endCursor` | String | When paginating forwards, the cursor to continue. | | `hasNextPage` | Boolean! | When paginating forwards, are there more items? | | `hasPreviousPage` | Boolean! | When paginating backwards, are there more items? | | `startCursor` | String | When paginating backwards, the cursor to continue. | -## Pipeline +### Pipeline -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `beforeSha` | String | Base SHA of the source branch | +| `cancelable` | Boolean! | Specifies if a pipeline can be canceled | | `committedAt` | Time | Timestamp of the pipeline's commit | | `configSource` | PipelineConfigSourceEnum | Config source of the pipeline (UNKNOWN_SOURCE, REPOSITORY_SOURCE, AUTO_DEVOPS_SOURCE, WEBIDE_SOURCE, REMOTE_SOURCE, EXTERNAL_PROJECT_SOURCE, BRIDGE_SOURCE, PARAMETER_SOURCE) | | `coverage` | Float | Coverage percentage | @@ -1702,6 +1715,7 @@ Information about pagination in a connection. | `finishedAt` | Time | Timestamp of the pipeline's completion | | `id` | ID! | ID of the pipeline | | `iid` | String! | Internal ID of the pipeline | +| `retryable` | Boolean! | Specifies if a pipeline can be retried | | `securityReportSummary` | SecurityReportSummary | Vulnerability and scanned resource counts for each security scanner of the pipeline | | `sha` | String! | SHA of the pipeline's commit | | `startedAt` | Time | Timestamp when the pipeline was started | @@ -1710,46 +1724,46 @@ Information about pagination in a connection. | `user` | User | Pipeline user | | `userPermissions` | PipelinePermissions! | Permissions for the current user on the resource | -## PipelineCancelPayload +### PipelineCancelPayload Autogenerated return type of PipelineCancel -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## PipelineDestroyPayload +### PipelineDestroyPayload Autogenerated return type of PipelineDestroy -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## PipelinePermissions +### PipelinePermissions -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminPipeline` | Boolean! | Indicates the user can perform `admin_pipeline` on this resource | | `destroyPipeline` | Boolean! | Indicates the user can perform `destroy_pipeline` on this resource | | `updatePipeline` | Boolean! | Indicates the user can perform `update_pipeline` on this resource | -## PipelineRetryPayload +### PipelineRetryPayload Autogenerated return type of PipelineRetry -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `pipeline` | Pipeline | The pipeline after mutation | -## Project +### Project -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `alertManagementAlert` | AlertManagementAlert | A single Alert Management alert of the project | | `alertManagementAlertStatusCounts` | AlertManagementAlertStatusCountsType | Counts of alerts by status for the project | | `allowMergeOnSkippedPipeline` | Boolean | If `only_allow_merge_if_pipeline_succeeds` is true, indicates if merge requests of the project can also be merged with skipped jobs | @@ -1818,12 +1832,12 @@ Autogenerated return type of PipelineRetry | `webUrl` | String | Web URL of the project | | `wikiEnabled` | Boolean | Indicates if Wikis are enabled for the current user | -## ProjectMember +### ProjectMember Represents a Project Membership -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `accessLevel` | AccessLevel | GitLab::Access level | | `createdAt` | Time | Date and time the membership was created | | `createdBy` | User | User that authorized membership | @@ -1834,10 +1848,10 @@ Represents a Project Membership | `user` | User! | User that is associated with the member object | | `userPermissions` | ProjectPermissions! | Permissions for the current user on the resource | -## ProjectPermissions +### ProjectPermissions -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminOperations` | Boolean! | Indicates the user can perform `admin_operations` on this resource | | `adminProject` | Boolean! | Indicates the user can perform `admin_project` on this resource | | `adminRemoteMirror` | Boolean! | Indicates the user can perform `admin_remote_mirror` on this resource | @@ -1881,10 +1895,10 @@ Represents a Project Membership | `updateWiki` | Boolean! | Indicates the user can perform `update_wiki` on this resource | | `uploadFile` | Boolean! | Indicates the user can perform `upload_file` on this resource | -## ProjectStatistics +### ProjectStatistics -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `buildArtifactsSize` | Float! | Build artifacts size of the project | | `commitCount` | Float! | Commit count of the project | | `lfsObjectsSize` | Float! | Large File Storage (LFS) object size of the project | @@ -1894,21 +1908,21 @@ Represents a Project Membership | `storageSize` | Float! | Storage size of the project | | `wikiSize` | Float | Wiki size of the project | -## PrometheusAlert +### PrometheusAlert The alert condition for Prometheus -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `humanizedText` | String! | The human-readable text of the alert condition | | `id` | ID! | ID of the alert condition | -## Release +### Release Represents a release -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `assets` | ReleaseAssets | Assets of the release | | `author` | User | User that created the release | | `commit` | Commit | The commit associated with the release | @@ -1921,12 +1935,12 @@ Represents a release | `tagName` | String | Name of the tag associated with the release | | `tagPath` | String | Relative web path to the tag associated with the release | -## ReleaseAssetLink +### ReleaseAssetLink Represents an asset link associated with a release -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `directAssetUrl` | String | Direct asset URL of the link | | `external` | Boolean | Indicates the link points to an external resource | | `id` | ID! | ID of the link | @@ -1934,77 +1948,77 @@ Represents an asset link associated with a release | `name` | String | Name of the link | | `url` | String | URL of the link | -## ReleaseAssets +### ReleaseAssets A container for all assets associated with a release -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `count` | Int | Number of assets of the release | -## ReleaseEvidence +### ReleaseEvidence Evidence for a release -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `collectedAt` | Time | Timestamp when the evidence was collected | | `filepath` | String | URL from where the evidence can be downloaded | | `id` | ID! | ID of the evidence | | `sha` | String | SHA1 ID of the evidence hash | -## ReleaseLinks +### ReleaseLinks -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `editUrl` | String | HTTP URL of the release's edit page | | `issuesUrl` | String | HTTP URL of the issues page filtered by this release | | `mergeRequestsUrl` | String | HTTP URL of the merge request page filtered by this release | | `selfUrl` | String | HTTP URL of the release | -## ReleaseSource +### ReleaseSource Represents the source code attached to a release in a particular format -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `format` | String | Format of the source | | `url` | String | Download URL of the source | -## RemoveAwardEmojiPayload +### RemoveAwardEmojiPayload Autogenerated return type of RemoveAwardEmoji -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `awardEmoji` | AwardEmoji | The award emoji after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## RemoveProjectFromSecurityDashboardPayload +### RemoveProjectFromSecurityDashboardPayload Autogenerated return type of RemoveProjectFromSecurityDashboard -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## Repository +### Repository -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `empty` | Boolean! | Indicates repository has no visible content | | `exists` | Boolean! | Indicates a corresponding Git repository exists on disk | | `rootRef` | String | Default branch of the repository | | `tree` | Tree | Tree of the repository | -## Requirement +### Requirement Represents a requirement -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `author` | User! | Author of the requirement | | `createdAt` | Time! | Timestamp of when the requirement was created | | `id` | ID! | ID of the requirement | @@ -2016,31 +2030,31 @@ Represents a requirement | `updatedAt` | Time! | Timestamp of when the requirement was last updated | | `userPermissions` | RequirementPermissions! | Permissions for the current user on the resource | -## RequirementPermissions +### RequirementPermissions Check permissions for the current user on a requirement -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminRequirement` | Boolean! | Indicates the user can perform `admin_requirement` on this resource | | `createRequirement` | Boolean! | Indicates the user can perform `create_requirement` on this resource | | `destroyRequirement` | Boolean! | Indicates the user can perform `destroy_requirement` on this resource | | `readRequirement` | Boolean! | Indicates the user can perform `read_requirement` on this resource | | `updateRequirement` | Boolean! | Indicates the user can perform `update_requirement` on this resource | -## RequirementStatesCount +### RequirementStatesCount Counts of requirements by their state. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `archived` | Int | Number of archived requirements | | `opened` | Int | Number of opened requirements | -## RootStorageStatistics +### RootStorageStatistics -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `buildArtifactsSize` | Float! | The CI artifacts size in bytes | | `lfsObjectsSize` | Float! | The LFS objects size in bytes | | `packagesSize` | Float! | The packages size in bytes | @@ -2049,33 +2063,33 @@ Counts of requirements by their state. | `storageSize` | Float! | The total storage in bytes | | `wikiSize` | Float! | The wiki size in bytes | -## RunDASTScanPayload +### RunDASTScanPayload Autogenerated return type of RunDASTScan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `pipelineUrl` | String | URL of the pipeline that was created. | -## SastCiConfigurationAnalyzersEntity +### SastCiConfigurationAnalyzersEntity Represents an analyzer entity in SAST CI configuration -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `description` | String | Analyzer description that is displayed on the form. | | `enabled` | Boolean | Indicates whether an analyzer is enabled. | | `label` | String | Analyzer label used in the config UI. | | `name` | String | Name of the analyzer. | -## SastCiConfigurationEntity +### SastCiConfigurationEntity Represents an entity in SAST CI configuration -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `defaultValue` | String | Default value that is used if value is empty. | | `description` | String | Entity description that is displayed on the form. | | `field` | String | CI keyword of entity. | @@ -2084,30 +2098,30 @@ Represents an entity in SAST CI configuration | `type` | String | Type of the field value. | | `value` | String | Current value of the entity. | -## SastCiConfigurationOptionsEntity +### SastCiConfigurationOptionsEntity Represents an entity for options in SAST CI configuration -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `label` | String | Label of option entity. | | `value` | String | Value of option entity. | -## ScannedResource +### ScannedResource Represents a resource scanned by a security scan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `requestMethod` | String | The HTTP request method used to access the URL | | `url` | String | The URL scanned by the scanner | -## SecurityReportSummary +### SecurityReportSummary Represents summary of a security report -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `containerScanning` | SecurityReportSummarySection | Aggregated counts for the container_scanning scan | | `coverageFuzzing` | SecurityReportSummarySection | Aggregated counts for the coverage_fuzzing scan | | `dast` | SecurityReportSummarySection | Aggregated counts for the dast scan | @@ -2115,32 +2129,32 @@ Represents summary of a security report | `sast` | SecurityReportSummarySection | Aggregated counts for the sast scan | | `secretDetection` | SecurityReportSummarySection | Aggregated counts for the secret_detection scan | -## SecurityReportSummarySection +### SecurityReportSummarySection Represents a section of a summary of a security report -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `scannedResourcesCount` | Int | Total number of scanned resources | | `scannedResourcesCsvPath` | String | Path to download all the scanned resources in CSV format | | `vulnerabilitiesCount` | Int | Total number of vulnerabilities | -## SecurityScanners +### SecurityScanners Represents a list of security scanners -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `available` | SecurityScannerType! => Array | List of analyzers which are available for the project. | | `enabled` | SecurityScannerType! => Array | List of analyzers which are enabled for the project. | | `pipelineRun` | SecurityScannerType! => Array | List of analyzers which ran successfully in the latest pipeline. | -## SentryDetailedError +### SentryDetailedError A Sentry error. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `count` | Int! | Count of occurrences | | `culprit` | String! | Culprit of the error | | `externalBaseUrl` | String! | External Base URL of the Sentry Instance | @@ -2170,12 +2184,12 @@ A Sentry error. | `type` | String! | Type of the error | | `userCount` | Int! | Count of users affected by the error | -## SentryError +### SentryError A Sentry error. A simplified version of SentryDetailedError. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `count` | Int! | Count of occurrences | | `culprit` | String! | Culprit of the error | | `externalUrl` | String! | External URL of the error | @@ -2194,70 +2208,70 @@ A Sentry error. A simplified version of SentryDetailedError. | `type` | String! | Type of the error | | `userCount` | Int! | Count of users affected by the error | -## SentryErrorCollection +### SentryErrorCollection An object containing a collection of Sentry errors, and a detailed error. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `detailedError` | SentryDetailedError | Detailed version of a Sentry error on the project | | `errorStackTrace` | SentryErrorStackTrace | Stack Trace of Sentry Error | | `errors` | SentryErrorConnection | Collection of Sentry Errors | | `externalUrl` | String | External URL for Sentry | -## SentryErrorFrequency +### SentryErrorFrequency -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `count` | Int! | Count of errors received since the previously recorded time | | `time` | Time! | Time the error frequency stats were recorded | -## SentryErrorStackTrace +### SentryErrorStackTrace An object containing a stack trace entry for a Sentry error. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `dateReceived` | String! | Time the stack trace was received by Sentry | | `issueId` | String! | ID of the Sentry error | | `stackTraceEntries` | SentryErrorStackTraceEntry! => Array | Stack trace entries for the Sentry error | -## SentryErrorStackTraceContext +### SentryErrorStackTraceContext An object context for a Sentry error stack trace -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `code` | String! | Code number of the context | | `line` | Int! | Line number of the context | -## SentryErrorStackTraceEntry +### SentryErrorStackTraceEntry An object containing a stack trace entry for a Sentry error. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `col` | String | Function in which the Sentry error occurred | | `fileName` | String | File in which the Sentry error occurred | | `function` | String | Function in which the Sentry error occurred | | `line` | String | Function in which the Sentry error occurred | | `traceContext` | SentryErrorStackTraceContext! => Array | Context of the Sentry error | -## SentryErrorTags +### SentryErrorTags State of a Sentry error -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `level` | String | Severity level of the Sentry Error | | `logger` | String | Logger of the Sentry Error | -## Snippet +### Snippet Represents a snippet entry -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `author` | User | The owner of the snippet | | `blob` **{warning-solid}** | SnippetBlob! | **Deprecated:** Use `blobs`. Deprecated in 13.3 | | `blobs` | SnippetBlob! => Array | Snippet blobs | @@ -2276,12 +2290,12 @@ Represents a snippet entry | `visibilityLevel` | VisibilityLevelsEnum! | Visibility Level of the snippet | | `webUrl` | String! | Web URL of the snippet | -## SnippetBlob +### SnippetBlob Represents the snippet blob -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `binary` | Boolean! | Shows whether the blob is binary | | `externalStorage` | String | Blob external storage | | `mode` | String | Blob mode | @@ -2295,12 +2309,12 @@ Represents the snippet blob | `simpleViewer` | SnippetBlobViewer! | Blob content simple viewer | | `size` | Int! | Blob size | -## SnippetBlobViewer +### SnippetBlobViewer Represents how the blob content should be displayed -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `collapsed` | Boolean! | Shows whether the blob should be displayed collapsed | | `fileType` | String! | Content file type | | `loadAsync` | Boolean! | Shows whether the blob content is loaded async | @@ -2309,10 +2323,10 @@ Represents how the blob content should be displayed | `tooLarge` | Boolean! | Shows whether the blob too large to be displayed | | `type` | BlobViewersType! | Type of blob viewer | -## SnippetPermissions +### SnippetPermissions -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminSnippet` | Boolean! | Indicates the user can perform `admin_snippet` on this resource | | `awardEmoji` | Boolean! | Indicates the user can perform `award_emoji` on this resource | | `createNote` | Boolean! | Indicates the user can perform `create_note` on this resource | @@ -2320,10 +2334,10 @@ Represents how the blob content should be displayed | `reportSnippet` | Boolean! | Indicates the user can perform `report_snippet` on this resource | | `updateSnippet` | Boolean! | Indicates the user can perform `update_snippet` on this resource | -## Submodule +### Submodule -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `flatPath` | String! | Flat path of the entry | | `id` | ID! | ID of the entry | | `name` | String! | Name of the entry | @@ -2333,21 +2347,21 @@ Represents how the blob content should be displayed | `type` | EntryType! | Type of tree entry | | `webUrl` | String | Web URL for the sub-module | -## TaskCompletionStatus +### TaskCompletionStatus Completion status of tasks -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `completedCount` | Int! | Number of completed tasks | | `count` | Int! | Number of total tasks | -## TerraformStateRegistry +### TerraformStateRegistry Represents the sync and verification state of a terraform state -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createdAt` | Time | Timestamp when the TerraformStateRegistry was created | | `id` | ID! | ID of the TerraformStateRegistry | | `lastSyncFailure` | String | Error message during sync of the TerraformStateRegistry | @@ -2357,21 +2371,21 @@ Represents the sync and verification state of a terraform state | `state` | RegistryState | Sync state of the TerraformStateRegistry | | `terraformStateId` | ID! | ID of the TerraformState | -## TestReport +### TestReport Represents a requirement test report. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `author` | User | Author of the test report | | `createdAt` | Time! | Timestamp of when the test report was created | | `id` | ID! | ID of the test report | | `state` | TestReportState! | State of the test report | -## Timelog +### Timelog -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `date` **{warning-solid}** | Time! | **Deprecated:** Use `spentAt`. Deprecated in 12.10 | | `issue` | Issue | The issue that logged time was added to | | `note` | Note | The note where the quick action to add the logged time was executed | @@ -2379,12 +2393,12 @@ Represents a requirement test report. | `timeSpent` | Int! | The time spent displayed in seconds | | `user` | User! | The user that logged the time | -## Todo +### Todo Representing a todo entry -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `action` | TodoActionEnum! | Action of the todo | | `author` | User! | The author of this todo | | `body` | String! | Body of the todo | @@ -2395,71 +2409,71 @@ Representing a todo entry | `state` | TodoStateEnum! | State of the todo | | `targetType` | TodoTargetEnum! | Target type of the todo | -## TodoMarkDonePayload +### TodoMarkDonePayload Autogenerated return type of TodoMarkDone -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `todo` | Todo! | The requested todo | -## TodoRestoreManyPayload +### TodoRestoreManyPayload Autogenerated return type of TodoRestoreMany -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `todos` | Todo! => Array | Updated todos | | `updatedIds` **{warning-solid}** | ID! => Array | **Deprecated:** Use todos. Deprecated in 13.2 | -## TodoRestorePayload +### TodoRestorePayload Autogenerated return type of TodoRestore -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `todo` | Todo! | The requested todo | -## TodosMarkAllDonePayload +### TodosMarkAllDonePayload Autogenerated return type of TodosMarkAllDone -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `todos` | Todo! => Array | Updated todos | | `updatedIds` **{warning-solid}** | ID! => Array | **Deprecated:** Use todos. Deprecated in 13.2 | -## ToggleAwardEmojiPayload +### ToggleAwardEmojiPayload Autogenerated return type of ToggleAwardEmoji -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `awardEmoji` | AwardEmoji | The award emoji after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `toggledOn` | Boolean! | Indicates the status of the emoji. True if the toggle awarded the emoji, and false if the toggle removed the emoji. | -## Tree +### Tree -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `lastCommit` | Commit | Last commit for the tree | -## TreeEntry +### TreeEntry Represents a directory -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `flatPath` | String! | Flat path of the entry | | `id` | ID! | ID of the entry | | `name` | String! | Name of the entry | @@ -2469,122 +2483,122 @@ Represents a directory | `webPath` | String | Web path for the tree entry (directory) | | `webUrl` | String | Web URL for the tree entry (directory) | -## UpdateAlertStatusPayload +### UpdateAlertStatusPayload Autogenerated return type of UpdateAlertStatus -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `alert` | AlertManagementAlert | The alert after mutation | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue created after mutation | | `todo` | Todo | The todo after mutation | -## UpdateBoardListPayload +### UpdateBoardListPayload Autogenerated return type of UpdateBoardList -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `list` | BoardList | Mutated list | -## UpdateBoardPayload +### UpdateBoardPayload Autogenerated return type of UpdateBoard -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `board` | Board | The board after mutation. | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## UpdateContainerExpirationPolicyPayload +### UpdateContainerExpirationPolicyPayload Autogenerated return type of UpdateContainerExpirationPolicy -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `containerExpirationPolicy` | ContainerExpirationPolicy | The container expiration policy after mutation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## UpdateEpicPayload +### UpdateEpicPayload Autogenerated return type of UpdateEpic -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `epic` | Epic | The epic after mutation | | `errors` | String! => Array | Errors encountered during execution of the mutation. | -## UpdateImageDiffNotePayload +### UpdateImageDiffNotePayload Autogenerated return type of UpdateImageDiffNote -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `note` | Note | The note after mutation | -## UpdateIssuePayload +### UpdateIssuePayload Autogenerated return type of UpdateIssue -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `issue` | Issue | The issue after mutation | -## UpdateIterationPayload +### UpdateIterationPayload Autogenerated return type of UpdateIteration -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `iteration` | Iteration | The updated iteration | -## UpdateNotePayload +### UpdateNotePayload Autogenerated return type of UpdateNote -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `note` | Note | The note after mutation | -## UpdateRequirementPayload +### UpdateRequirementPayload Autogenerated return type of UpdateRequirement -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `requirement` | Requirement | The requirement after mutation | -## UpdateSnippetPayload +### UpdateSnippetPayload Autogenerated return type of UpdateSnippet -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `clientMutationId` | String | A unique identifier for the client performing the mutation. | | `errors` | String! => Array | Errors encountered during execution of the mutation. | | `snippet` | Snippet | The snippet after mutation | -## User +### User -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `avatarUrl` | String | URL of the user's avatar | | `email` | String | User email | | `id` | ID! | ID of the user | @@ -2596,26 +2610,26 @@ Autogenerated return type of UpdateSnippet | `webPath` | String! | Web path of the user | | `webUrl` | String! | Web URL of the user | -## UserPermissions +### UserPermissions -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `createSnippet` | Boolean! | Indicates the user can perform `create_snippet` on this resource | -## UserStatus +### UserStatus -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `emoji` | String | String representation of emoji | | `message` | String | User status message | | `messageHtml` | String | HTML of the user status message | -## VulnerabilitiesCountByDay +### VulnerabilitiesCountByDay Represents the count of vulnerabilities by severity on a particular day -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `critical` | Int! | Total number of vulnerabilities on a particular day with critical severity | | `date` | ISO8601Date! | Date for the count | | `high` | Int! | Total number of vulnerabilities on a particular day with high severity | @@ -2625,22 +2639,22 @@ Represents the count of vulnerabilities by severity on a particular day | `total` | Int! | Total number of vulnerabilities on a particular day | | `unknown` | Int! | Total number of vulnerabilities on a particular day with unknown severity | -## VulnerabilitiesCountByDayAndSeverity +### VulnerabilitiesCountByDayAndSeverity Represents the number of vulnerabilities for a particular severity on a particular day -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `count` | Int | Number of vulnerabilities | | `day` | ISO8601Date | Date for the count | | `severity` | VulnerabilitySeverity | Severity of the counted vulnerabilities | -## Vulnerability +### Vulnerability Represents a vulnerability. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `description` | String | Description of the vulnerability | | `detectedAt` | Time! | Timestamp of when the vulnerability was first detected | | `id` | ID! | GraphQL ID of the vulnerability | @@ -2658,99 +2672,99 @@ Represents a vulnerability. | `userPermissions` | VulnerabilityPermissions! | Permissions for the current user on the resource | | `vulnerabilityPath` | String | URL to the vulnerability's details page | -## VulnerabilityIdentifier +### VulnerabilityIdentifier Represents a vulnerability identifier. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `externalId` | String | External ID of the vulnerability identifier | | `externalType` | String | External type of the vulnerability identifier | | `name` | String | Name of the vulnerability identifier | | `url` | String | URL of the vulnerability identifier | -## VulnerabilityIssueLink +### VulnerabilityIssueLink Represents an issue link of a vulnerability. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `id` | ID! | GraphQL ID of the vulnerability | | `issue` | Issue! | The issue attached to issue link | | `linkType` | VulnerabilityIssueLinkType! | Type of the issue link | -## VulnerabilityLocationContainerScanning +### VulnerabilityLocationContainerScanning Represents the location of a vulnerability found by a container security scan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `dependency` | VulnerableDependency | Dependency containing the vulnerability | | `image` | String | Name of the vulnerable container image | | `operatingSystem` | String | Operating system that runs on the vulnerable container image | -## VulnerabilityLocationCoverageFuzzing +### VulnerabilityLocationCoverageFuzzing Represents the location of a vulnerability found by a Coverage Fuzzing scan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `endLine` | String | Number of the last relevant line in the vulnerable file | | `file` | String | Path to the vulnerable file | | `startLine` | String | Number of the first relevant line in the vulnerable file | | `vulnerableClass` | String | Class containing the vulnerability | | `vulnerableMethod` | String | Method containing the vulnerability | -## VulnerabilityLocationDast +### VulnerabilityLocationDast Represents the location of a vulnerability found by a DAST scan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `hostname` | String | Domain name of the vulnerable request | | `param` | String | Query parameter for the URL on which the vulnerability occurred | | `path` | String | URL path and query string of the vulnerable request | | `requestMethod` | String | HTTP method of the vulnerable request | -## VulnerabilityLocationDependencyScanning +### VulnerabilityLocationDependencyScanning Represents the location of a vulnerability found by a dependency security scan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `dependency` | VulnerableDependency | Dependency containing the vulnerability | | `file` | String | Path to the vulnerable file | -## VulnerabilityLocationSast +### VulnerabilityLocationSast Represents the location of a vulnerability found by a SAST scan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `endLine` | String | Number of the last relevant line in the vulnerable file | | `file` | String | Path to the vulnerable file | | `startLine` | String | Number of the first relevant line in the vulnerable file | | `vulnerableClass` | String | Class containing the vulnerability | | `vulnerableMethod` | String | Method containing the vulnerability | -## VulnerabilityLocationSecretDetection +### VulnerabilityLocationSecretDetection Represents the location of a vulnerability found by a secret detection scan -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `endLine` | String | Number of the last relevant line in the vulnerable file | | `file` | String | Path to the vulnerable file | | `startLine` | String | Number of the first relevant line in the vulnerable file | | `vulnerableClass` | String | Class containing the vulnerability | | `vulnerableMethod` | String | Method containing the vulnerability | -## VulnerabilityPermissions +### VulnerabilityPermissions Check permissions for the current user on a vulnerability -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `adminVulnerability` | Boolean! | Indicates the user can perform `admin_vulnerability` on this resource | | `adminVulnerabilityIssueLink` | Boolean! | Indicates the user can perform `admin_vulnerability_issue_link` on this resource | | `createVulnerability` | Boolean! | Indicates the user can perform `create_vulnerability` on this resource | @@ -2760,23 +2774,23 @@ Check permissions for the current user on a vulnerability | `readVulnerabilityFeedback` | Boolean! | Indicates the user can perform `read_vulnerability_feedback` on this resource | | `updateVulnerabilityFeedback` | Boolean! | Indicates the user can perform `update_vulnerability_feedback` on this resource | -## VulnerabilityScanner +### VulnerabilityScanner Represents a vulnerability scanner. -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `externalId` | String | External ID of the vulnerability scanner | | `name` | String | Name of the vulnerability scanner | | `reportType` | VulnerabilityReportType | Type of the vulnerability report | | `vendor` | String | Vendor of the vulnerability scanner | -## VulnerabilitySeveritiesCount +### VulnerabilitySeveritiesCount Represents vulnerability counts by severity -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `critical` | Int | Number of vulnerabilities of CRITICAL severity of the project | | `high` | Int | Number of vulnerabilities of HIGH severity of the project | | `info` | Int | Number of vulnerabilities of INFO severity of the project | @@ -2784,28 +2798,737 @@ Represents vulnerability counts by severity | `medium` | Int | Number of vulnerabilities of MEDIUM severity of the project | | `unknown` | Int | Number of vulnerabilities of UNKNOWN severity of the project | -## VulnerableDependency +### VulnerableDependency Represents a vulnerable dependency. Used in vulnerability location data -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `package` | VulnerablePackage | The package associated with the vulnerable dependency | | `version` | String | The version of the vulnerable dependency | -## VulnerablePackage +### VulnerablePackage Represents a vulnerable package. Used in vulnerability dependency data -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `name` | String | The name of the vulnerable package | -## VulnerableProjectsByGrade +### VulnerableProjectsByGrade Represents vulnerability letter grades with associated projects -| Name | Type | Description | -| --- | ---- | ---------- | +| Field | Type | Description | +| ----- | ---- | ----------- | | `count` | Int! | Number of projects within this grade | | `grade` | VulnerabilityGrade! | Grade based on the highest severity vulnerability present | + +## Enumeration types + +Also called _Enums_, enumeration types are a special kind of scalar that +is restricted to a particular set of allowed values. + +For more information, see +[Enumeration Types](https://graphql.org/learn/schema/#enumeration-types) +on `graphql.org`. + +### AccessLevelEnum + +Access level to a resource + +| Value | Description | +| ----- | ----------- | +| `DEVELOPER` | | +| `GUEST` | | +| `MAINTAINER` | | +| `NO_ACCESS` | | +| `OWNER` | | +| `REPORTER` | | + +### AlertManagementAlertSort + +Values for sorting alerts + +| Value | Description | +| ----- | ----------- | +| `CREATED_TIME_ASC` | Created time by ascending order | +| `CREATED_TIME_DESC` | Created time by descending order | +| `ENDED_AT_ASC` | End time by ascending order | +| `ENDED_AT_DESC` | End time by descending order | +| `EVENT_COUNT_ASC` | Events count by ascending order | +| `EVENT_COUNT_DESC` | Events count by descending order | +| `SEVERITY_ASC` | Severity from less critical to more critical | +| `SEVERITY_DESC` | Severity from more critical to less critical | +| `STARTED_AT_ASC` | Start time by ascending order | +| `STARTED_AT_DESC` | Start time by descending order | +| `STATUS_ASC` | Status by order: Ignored > Resolved > Acknowledged > Triggered | +| `STATUS_DESC` | Status by order: Triggered > Acknowledged > Resolved > Ignored | +| `UPDATED_TIME_ASC` | Created time by ascending order | +| `UPDATED_TIME_DESC` | Created time by descending order | +| `created_asc` | Created at ascending order | +| `created_desc` | Created at descending order | +| `updated_asc` | Updated at ascending order | +| `updated_desc` | Updated at descending order | + +### AlertManagementSeverity + +Alert severity values + +| Value | Description | +| ----- | ----------- | +| `CRITICAL` | Critical severity | +| `HIGH` | High severity | +| `INFO` | Info severity | +| `LOW` | Low severity | +| `MEDIUM` | Medium severity | +| `UNKNOWN` | Unknown severity | + +### AlertManagementStatus + +Alert status values + +| Value | Description | +| ----- | ----------- | +| `ACKNOWLEDGED` | Acknowledged status | +| `IGNORED` | Ignored status | +| `RESOLVED` | Resolved status | +| `TRIGGERED` | Triggered status | + +### BlobViewersType + +Types of blob viewers + +| Value | Description | +| ----- | ----------- | +| `auxiliary` | | +| `rich` | | +| `simple` | | + +### CommitActionMode + +Mode of a commit action + +| Value | Description | +| ----- | ----------- | +| `CHMOD` | Chmod command | +| `CREATE` | Create command | +| `DELETE` | Delete command | +| `MOVE` | Move command | +| `UPDATE` | Update command | + +### CommitEncoding + +| Value | Description | +| ----- | ----------- | +| `BASE64` | Base64 encoding | +| `TEXT` | Text encoding | + +### ContainerExpirationPolicyCadenceEnum + +| Value | Description | +| ----- | ----------- | +| `EVERY_DAY` | Every day | +| `EVERY_MONTH` | Every month | +| `EVERY_THREE_MONTHS` | Every three months | +| `EVERY_TWO_WEEKS` | Every two weeks | +| `EVERY_WEEK` | Every week | + +### ContainerExpirationPolicyKeepEnum + +| Value | Description | +| ----- | ----------- | +| `FIFTY_TAGS` | 50 tags per image name | +| `FIVE_TAGS` | 5 tags per image name | +| `ONE_HUNDRED_TAGS` | 100 tags per image name | +| `ONE_TAG` | 1 tag per image name | +| `TEN_TAGS` | 10 tags per image name | +| `TWENTY_FIVE_TAGS` | 25 tags per image name | + +### ContainerExpirationPolicyOlderThanEnum + +| Value | Description | +| ----- | ----------- | +| `FOURTEEN_DAYS` | 14 days until tags are automatically removed | +| `NINETY_DAYS` | 90 days until tags are automatically removed | +| `SEVEN_DAYS` | 7 days until tags are automatically removed | +| `THIRTY_DAYS` | 30 days until tags are automatically removed | + +### DastScanTypeEnum + +| Value | Description | +| ----- | ----------- | +| `PASSIVE` | Passive DAST scan. This scan will not make active attacks against the target site. | + +### DastSiteProfileValidationStatusEnum + +| Value | Description | +| ----- | ----------- | +| `FAILED_VALIDATION` | Site validation process finished but failed | +| `INPROGRESS_VALIDATION` | Site validation process is in progress | +| `PASSED_VALIDATION` | Site validation process finished successfully | +| `PENDING_VALIDATION` | Site validation process has not started | + +### DesignVersionEvent + +Mutation event of a design within a version + +| Value | Description | +| ----- | ----------- | +| `CREATION` | A creation event | +| `DELETION` | A deletion event | +| `MODIFICATION` | A modification event | +| `NONE` | No change | + +### DiffPositionType + +Type of file the position refers to + +| Value | Description | +| ----- | ----------- | +| `image` | | +| `text` | | + +### EntryType + +Type of a tree entry + +| Value | Description | +| ----- | ----------- | +| `blob` | | +| `commit` | | +| `tree` | | + +### EpicSort + +Roadmap sort values + +| Value | Description | +| ----- | ----------- | +| `end_date_asc` | End date at ascending order | +| `end_date_desc` | End date at descending order | +| `start_date_asc` | Start date at ascending order | +| `start_date_desc` | Start date at descending order | + +### EpicState + +State of an epic. + +| Value | Description | +| ----- | ----------- | +| `all` | | +| `closed` | | +| `opened` | | + +### EpicStateEvent + +State event of an epic + +| Value | Description | +| ----- | ----------- | +| `CLOSE` | Close the epic | +| `REOPEN` | Reopen the epic | + +### EpicWildcardId + +Epic ID wildcard values + +| Value | Description | +| ----- | ----------- | +| `ANY` | Any epic is assigned | +| `NONE` | No epic is assigned | + +### HealthStatus + +Health status of an issue or epic + +| Value | Description | +| ----- | ----------- | +| `atRisk` | | +| `needsAttention` | | +| `onTrack` | | + +### IssuableSeverity + +Incident severity + +| Value | Description | +| ----- | ----------- | +| `CRITICAL` | Critical severity | +| `HIGH` | High severity | +| `LOW` | Low severity | +| `MEDIUM` | Medium severity | +| `UNKNOWN` | Unknown severity | + +### IssuableState + +State of a GitLab issue or merge request + +| Value | Description | +| ----- | ----------- | +| `all` | | +| `closed` | | +| `locked` | | +| `opened` | | + +### IssueSort + +Values for sorting issues + +| Value | Description | +| ----- | ----------- | +| `DUE_DATE_ASC` | Due date by ascending order | +| `DUE_DATE_DESC` | Due date by descending order | +| `LABEL_PRIORITY_ASC` | Label priority by ascending order | +| `LABEL_PRIORITY_DESC` | Label priority by descending order | +| `MILESTONE_DUE_ASC` | Milestone due date by ascending order | +| `MILESTONE_DUE_DESC` | Milestone due date by descending order | +| `PRIORITY_ASC` | Priority by ascending order | +| `PRIORITY_DESC` | Priority by descending order | +| `RELATIVE_POSITION_ASC` | Relative position by ascending order | +| `WEIGHT_ASC` | Weight by ascending order | +| `WEIGHT_DESC` | Weight by descending order | +| `created_asc` | Created at ascending order | +| `created_desc` | Created at descending order | +| `updated_asc` | Updated at ascending order | +| `updated_desc` | Updated at descending order | + +### IssueState + +State of a GitLab issue + +| Value | Description | +| ----- | ----------- | +| `all` | | +| `closed` | | +| `locked` | | +| `opened` | | + +### IssueType + +Issue type + +| Value | Description | +| ----- | ----------- | +| `INCIDENT` | Incident issue type | +| `ISSUE` | Issue issue type | +| `TEST_CASE` | Test Case issue type | + +### IterationState + +State of a GitLab iteration + +| Value | Description | +| ----- | ----------- | +| `all` | | +| `closed` | | +| `opened` | | +| `started` | | +| `upcoming` | | + +### ListLimitMetric + +List limit metric setting + +| Value | Description | +| ----- | ----------- | +| `all_metrics` | | +| `issue_count` | | +| `issue_weights` | | + +### MeasurementIdentifier + +Possible identifier types for a measurement + +| Value | Description | +| ----- | ----------- | +| `GROUPS` | Group count | +| `ISSUES` | Issue count | +| `MERGE_REQUESTS` | Merge request count | +| `PIPELINES` | Pipeline count | +| `PROJECTS` | Project count | +| `USERS` | User count | + +### MergeRequestSort + +Values for sorting merge requests + +| Value | Description | +| ----- | ----------- | +| `LABEL_PRIORITY_ASC` | Label priority by ascending order | +| `LABEL_PRIORITY_DESC` | Label priority by descending order | +| `MERGED_AT_ASC` | Merge time by ascending order | +| `MERGED_AT_DESC` | Merge time by descending order | +| `MILESTONE_DUE_ASC` | Milestone due date by ascending order | +| `MILESTONE_DUE_DESC` | Milestone due date by descending order | +| `PRIORITY_ASC` | Priority by ascending order | +| `PRIORITY_DESC` | Priority by descending order | +| `created_asc` | Created at ascending order | +| `created_desc` | Created at descending order | +| `updated_asc` | Updated at ascending order | +| `updated_desc` | Updated at descending order | + +### MergeRequestState + +State of a GitLab merge request + +| Value | Description | +| ----- | ----------- | +| `all` | | +| `closed` | | +| `locked` | | +| `merged` | | +| `opened` | | + +### MilestoneStateEnum + +| Value | Description | +| ----- | ----------- | +| `active` | | +| `closed` | | + +### MoveType + +The position to which the adjacent object should be moved + +| Value | Description | +| ----- | ----------- | +| `after` | The adjacent object will be moved after the object that is being moved | +| `before` | The adjacent object will be moved before the object that is being moved | + +### MutationOperationMode + +Different toggles for changing mutator behavior. + +| Value | Description | +| ----- | ----------- | +| `APPEND` | Performs an append operation | +| `REMOVE` | Performs a removal operation | +| `REPLACE` | Performs a replace operation | + +### NamespaceProjectSort + +Values for sorting projects + +| Value | Description | +| ----- | ----------- | +| `SIMILARITY` | Most similar to the search query | + +### PackageTypeEnum + +| Value | Description | +| ----- | ----------- | +| `COMPOSER` | Packages from the composer package manager | +| `CONAN` | Packages from the conan package manager | +| `GENERIC` | Packages from the generic package manager | +| `MAVEN` | Packages from the maven package manager | +| `NPM` | Packages from the npm package manager | +| `NUGET` | Packages from the nuget package manager | +| `PYPI` | Packages from the pypi package manager | + +### PipelineConfigSourceEnum + +| Value | Description | +| ----- | ----------- | +| `AUTO_DEVOPS_SOURCE` | | +| `BRIDGE_SOURCE` | | +| `EXTERNAL_PROJECT_SOURCE` | | +| `PARAMETER_SOURCE` | | +| `REMOTE_SOURCE` | | +| `REPOSITORY_SOURCE` | | +| `UNKNOWN_SOURCE` | | +| `WEBIDE_SOURCE` | | + +### PipelineStatusEnum + +| Value | Description | +| ----- | ----------- | +| `CANCELED` | | +| `CREATED` | | +| `FAILED` | | +| `MANUAL` | | +| `PENDING` | | +| `PREPARING` | | +| `RUNNING` | | +| `SCHEDULED` | | +| `SKIPPED` | | +| `SUCCESS` | | +| `WAITING_FOR_RESOURCE` | | + +### ProjectSettingEnum + +Names of compliance frameworks that can be assigned to a Project + +| Value | Description | +| ----- | ----------- | +| `gdpr` | | +| `hipaa` | | +| `pci_dss` | | +| `soc_2` | | +| `sox` | | + +### RegistryState + +State of a Geo registry. + +| Value | Description | +| ----- | ----------- | +| `FAILED` | Registry that failed to sync | +| `PENDING` | Registry waiting to be synced | +| `STARTED` | Registry currently syncing | +| `SYNCED` | Registry that is synced | + +### ReleaseAssetLinkType + +Type of the link: `other`, `runbook`, `image`, `package`; defaults to `other` + +| Value | Description | +| ----- | ----------- | +| `IMAGE` | Image link type | +| `OTHER` | Other link type | +| `PACKAGE` | Package link type | +| `RUNBOOK` | Runbook link type | + +### RequirementState + +State of a requirement + +| Value | Description | +| ----- | ----------- | +| `ARCHIVED` | | +| `OPENED` | | + +### SastUiComponentSize + +Size of UI component in SAST configuration page + +| Value | Description | +| ----- | ----------- | +| `LARGE` | | +| `MEDIUM` | | +| `SMALL` | | + +### SecurityScannerType + +The type of the security scanner. + +| Value | Description | +| ----- | ----------- | +| `CONTAINER_SCANNING` | | +| `COVERAGE_FUZZING` | | +| `DAST` | | +| `DEPENDENCY_SCANNING` | | +| `SAST` | | +| `SECRET_DETECTION` | | + +### SentryErrorStatus + +State of a Sentry error + +| Value | Description | +| ----- | ----------- | +| `IGNORED` | Error has been ignored | +| `RESOLVED` | Error has been resolved | +| `RESOLVED_IN_NEXT_RELEASE` | Error has been ignored until next release | +| `UNRESOLVED` | Error is unresolved | + +### ServiceType + +| Value | Description | +| ----- | ----------- | +| `ALERTS_SERVICE` | | +| `ASANA_SERVICE` | | +| `ASSEMBLA_SERVICE` | | +| `BAMBOO_SERVICE` | | +| `BUGZILLA_SERVICE` | | +| `BUILDKITE_SERVICE` | | +| `CAMPFIRE_SERVICE` | | +| `CONFLUENCE_SERVICE` | | +| `CUSTOM_ISSUE_TRACKER_SERVICE` | | +| `DISCORD_SERVICE` | | +| `DRONE_CI_SERVICE` | | +| `EMAILS_ON_PUSH_SERVICE` | | +| `EXTERNAL_WIKI_SERVICE` | | +| `FLOWDOCK_SERVICE` | | +| `GITHUB_SERVICE` | | +| `HANGOUTS_CHAT_SERVICE` | | +| `HIPCHAT_SERVICE` | | +| `IRKER_SERVICE` | | +| `JENKINS_SERVICE` | | +| `JIRA_SERVICE` | | +| `MATTERMOST_SERVICE` | | +| `MATTERMOST_SLASH_COMMANDS_SERVICE` | | +| `MICROSOFT_TEAMS_SERVICE` | | +| `PACKAGIST_SERVICE` | | +| `PIPELINES_EMAIL_SERVICE` | | +| `PIVOTALTRACKER_SERVICE` | | +| `PROMETHEUS_SERVICE` | | +| `PUSHOVER_SERVICE` | | +| `REDMINE_SERVICE` | | +| `SLACK_SERVICE` | | +| `SLACK_SLASH_COMMANDS_SERVICE` | | +| `TEAMCITY_SERVICE` | | +| `UNIFY_CIRCUIT_SERVICE` | | +| `WEBEX_TEAMS_SERVICE` | | +| `YOUTRACK_SERVICE` | | + +### SnippetBlobActionEnum + +Type of a snippet blob input action + +| Value | Description | +| ----- | ----------- | +| `create` | | +| `delete` | | +| `move` | | +| `update` | | + +### Sort + +Common sort values + +| Value | Description | +| ----- | ----------- | +| `created_asc` | Created at ascending order | +| `created_desc` | Created at descending order | +| `updated_asc` | Updated at ascending order | +| `updated_desc` | Updated at descending order | + +### TestReportState + +State of a test report + +| Value | Description | +| ----- | ----------- | +| `FAILED` | | +| `PASSED` | | + +### TodoActionEnum + +| Value | Description | +| ----- | ----------- | +| `approval_required` | | +| `assigned` | | +| `build_failed` | | +| `directly_addressed` | | +| `marked` | | +| `mentioned` | | +| `unmergeable` | | + +### TodoStateEnum + +| Value | Description | +| ----- | ----------- | +| `done` | | +| `pending` | | + +### TodoTargetEnum + +| Value | Description | +| ----- | ----------- | +| `ALERT` | An Alert | +| `COMMIT` | A Commit | +| `DESIGN` | A Design | +| `EPIC` | An Epic | +| `ISSUE` | An Issue | +| `MERGEREQUEST` | A MergeRequest | + +### TypeEnum + +| Value | Description | +| ----- | ----------- | +| `personal` | | +| `project` | | + +### UserState + +Possible states of a user + +| Value | Description | +| ----- | ----------- | +| `active` | The user is active and is able to use the system | +| `blocked` | The user has been blocked and is prevented from using the system | +| `deactivated` | The user is no longer active and is unable to use the system | + +### VisibilityLevelsEnum + +| Value | Description | +| ----- | ----------- | +| `internal` | | +| `private` | | +| `public` | | + +### VisibilityScopesEnum + +| Value | Description | +| ----- | ----------- | +| `internal` | | +| `private` | | +| `public` | | + +### VulnerabilityGrade + +The grade of the vulnerable project + +| Value | Description | +| ----- | ----------- | +| `A` | | +| `B` | | +| `C` | | +| `D` | | +| `F` | | + +### VulnerabilityIssueLinkType + +The type of the issue link related to a vulnerability. + +| Value | Description | +| ----- | ----------- | +| `CREATED` | | +| `RELATED` | | + +### VulnerabilityReportType + +The type of the security scan that found the vulnerability. + +| Value | Description | +| ----- | ----------- | +| `CONTAINER_SCANNING` | | +| `COVERAGE_FUZZING` | | +| `DAST` | | +| `DEPENDENCY_SCANNING` | | +| `SAST` | | +| `SECRET_DETECTION` | | + +### VulnerabilitySeverity + +The severity of the vulnerability. + +| Value | Description | +| ----- | ----------- | +| `CRITICAL` | | +| `HIGH` | | +| `INFO` | | +| `LOW` | | +| `MEDIUM` | | +| `UNKNOWN` | | + +### VulnerabilitySort + +Vulnerability sort values + +| Value | Description | +| ----- | ----------- | +| `severity_asc` | Severity in ascending order | +| `severity_desc` | Severity in descending order | + +### VulnerabilityState + +The state of the vulnerability. + +| Value | Description | +| ----- | ----------- | +| `CONFIRMED` | | +| `DETECTED` | | +| `DISMISSED` | | +| `RESOLVED` | | diff --git a/doc/user/project/deploy_boards.md b/doc/user/project/deploy_boards.md index 50fb24b555b..d692343196e 100644 --- a/doc/user/project/deploy_boards.md +++ b/doc/user/project/deploy_boards.md @@ -105,6 +105,8 @@ To display the Deploy Boards for a specific [environment](../../ci/environments/ re-deploy your application. If you are using Auto DevOps, this will be done automatically and no action is necessary. + If you are using GCP to manage clusters, you can see the deployment details in GCP itself by going to **Workloads > deployment name > Details**: + ![Deploy Boards Kubernetes Label](img/deploy_boards_kubernetes_label.png) Once all of the above are set up and the pipeline has run at least once, diff --git a/lib/backup/files.rb b/lib/backup/files.rb index d765143d928..dae9056a47b 100644 --- a/lib/backup/files.rb +++ b/lib/backup/files.rb @@ -31,10 +31,10 @@ module Backup raise Backup::Error, 'Backup failed' end - run_pipeline!([%W(#{tar} --warning=no-file-changed --exclude=lost+found -C #{@backup_files_dir} -cf - .), gzip_cmd], out: [backup_tarball, 'w', 0600]) + run_pipeline!([%W(#{tar} --exclude=lost+found -C #{@backup_files_dir} -cf - .), gzip_cmd], out: [backup_tarball, 'w', 0600]) FileUtils.rm_rf(@backup_files_dir) else - run_pipeline!([%W(#{tar} --warning=no-file-changed --exclude=lost+found -C #{app_files_dir} -cf - .), gzip_cmd], out: [backup_tarball, 'w', 0600]) + run_pipeline!([%W(#{tar} --exclude=lost+found -C #{app_files_dir} -cf - .), gzip_cmd], out: [backup_tarball, 'w', 0600]) end end diff --git a/lib/gitlab/graphql/docs/helper.rb b/lib/gitlab/graphql/docs/helper.rb index 0dd28b32511..ba18155065a 100644 --- a/lib/gitlab/graphql/docs/helper.rb +++ b/lib/gitlab/graphql/docs/helper.rb @@ -21,30 +21,47 @@ module Gitlab MD end - def sorted_fields(fields) - fields.sort_by { |field| field[:name] } + def render_name_and_description(object) + content = "### #{object[:name]}\n" + + if object[:description].present? + content += "\n#{object[:description]}\n" + end + + content + end + + def sorted_by_name(objects) + objects.sort_by { |o| o[:name] } end def render_field(field) '| %s | %s | %s |' % [ - render_field_name(field), + render_name(field), render_field_type(field[:type][:info]), - render_field_description(field) + render_description(field) ] end - def render_field_name(field) - rendered_name = "`#{field[:name]}`" - rendered_name += ' **{warning-solid}**' if field[:is_deprecated] + def render_enum_value(value) + '| %s | %s |' % [ + render_name(value), + render_description(value) + ] + end + + def render_name(object) + rendered_name = "`#{object[:name]}`" + rendered_name += ' **{warning-solid}**' if object[:is_deprecated] rendered_name end - # Returns the field description. If the field has been deprecated, + # Returns the object description. If the object has been deprecated, # the deprecation reason will be returned in place of the description. - def render_field_description(field) - return field[:description] unless field[:is_deprecated] + def render_description(object) + return object[:description] unless object[:is_deprecated] - "**Deprecated:** #{field[:deprecation_reason]}" + "**Deprecated:** #{object[:deprecation_reason]}" end # Some fields types are arrays of other types and are displayed @@ -70,6 +87,13 @@ module Gitlab !object_type[:name]["__"] end end + + # We ignore the built-in enum types. + def enums + graphql_enum_types.select do |enum_type| + !enum_type[:name].in?(%w(__DirectiveLocation __TypeKind)) + end + end end end end diff --git a/lib/gitlab/graphql/docs/templates/default.md.haml b/lib/gitlab/graphql/docs/templates/default.md.haml index 8c033526557..ec052943589 100644 --- a/lib/gitlab/graphql/docs/templates/default.md.haml +++ b/lib/gitlab/graphql/docs/templates/default.md.haml @@ -15,15 +15,45 @@ CAUTION: **Caution:** Fields that are deprecated are marked with **{warning-solid}**. \ + +:plain + ## Object types + + Object types represent the resources that GitLab's GraphQL API can return. + They contain _fields_. Each field has its own type, which will either be one of the + basic GraphQL [scalar types](https://graphql.org/learn/schema/#scalar-types) + (e.g.: `String` or `Boolean`) or other object types. + + For more information, see + [Object Types and Fields](https://graphql.org/learn/schema/#object-types-and-fields) + on `graphql.org`. +\ + - objects.each do |type| - unless type[:fields].empty? - = "## #{type[:name]}" - - if type[:description]&.present? - \ - = type[:description] - \ - ~ "| Name | Type | Description |" - ~ "| --- | ---- | ---------- |" - - sorted_fields(type[:fields]).each do |field| + = render_name_and_description(type) + ~ "| Field | Type | Description |" + ~ "| ----- | ---- | ----------- |" + - sorted_by_name(type[:fields]).each do |field| = render_field(field) \ + +:plain + ## Enumeration types + + Also called _Enums_, enumeration types are a special kind of scalar that + is restricted to a particular set of allowed values. + + For more information, see + [Enumeration Types](https://graphql.org/learn/schema/#enumeration-types) + on `graphql.org`. +\ + +- enums.each do |enum| + - unless enum[:values].empty? + = render_name_and_description(enum) + ~ "| Value | Description |" + ~ "| ----- | ----------- |" + - sorted_by_name(enum[:values]).each do |value| + = render_enum_value(value) + \ diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 83c11a2c617..8695d93e7d8 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -16382,6 +16382,9 @@ msgstr "" msgid "Namespace" msgstr "" +msgid "Namespace ID:" +msgstr "" + msgid "Namespace is empty" msgstr "" @@ -16870,7 +16873,7 @@ msgstr "" msgid "No changes" msgstr "" -msgid "No changes between %{ref_start}%{source_branch}%{ref_end} and %{ref_start}%{target_branch}%{ref_end}" +msgid "No changes between %{sourceBranch} and %{targetBranch}" msgstr "" msgid "No child epics match applied filters" diff --git a/rubocop/cop/static_translation_definition.rb b/rubocop/cop/static_translation_definition.rb index 736d8767342..55956d9665b 100644 --- a/rubocop/cop/static_translation_definition.rb +++ b/rubocop/cop/static_translation_definition.rb @@ -21,6 +21,8 @@ module RuboCop method_name = node.children[1] return unless TRANSLATION_METHODS.include?(method_name) + translation_memoized = false + node.each_ancestor do |ancestor| receiver, _ = *ancestor break if lambda_node?(receiver) # translations defined in lambda nodes should be allowed @@ -30,6 +32,14 @@ module RuboCop break end + + translation_memoized = true if memoization?(ancestor) + + if translation_memoized && class_method_definition?(ancestor) + add_offense(node, location: :expression) + + break + end end end @@ -38,6 +48,14 @@ module RuboCop def constant_assignment?(node) node.type == :casgn end + + def memoization?(node) + node.type == :or_asgn + end + + def class_method_definition?(node) + node.type == :defs + end end end end diff --git a/spec/controllers/profiles/emails_controller_spec.rb b/spec/controllers/profiles/emails_controller_spec.rb index 246f8a6cd76..08552cc28fa 100644 --- a/spec/controllers/profiles/emails_controller_spec.rb +++ b/spec/controllers/profiles/emails_controller_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' RSpec.describe Profiles::EmailsController do - let(:user) { create(:user) } + let_it_be(:user) { create(:user) } before do sign_in(user) @@ -16,36 +16,43 @@ RSpec.describe Profiles::EmailsController do end describe '#create' do - context 'when email address is valid' do - let(:email_params) { { email: "add_email@example.com" } } + let(:email) { 'add_email@example.com' } + let(:params) { { email: { email: email } } } - it 'sends an email confirmation' do - expect { post(:create, params: { email: email_params }) }.to change { ActionMailer::Base.deliveries.size } - end + subject { post(:create, params: params) } + + it 'sends an email confirmation' do + expect { subject }.to change { ActionMailer::Base.deliveries.size } end context 'when email address is invalid' do - let(:email_params) { { email: "test.@example.com" } } + let(:email) { 'invalid.@example.com' } it 'does not send an email confirmation' do - expect { post(:create, params: { email: email_params }) }.not_to change { ActionMailer::Base.deliveries.size } + expect { subject }.not_to change { ActionMailer::Base.deliveries.size } end end end describe '#resend_confirmation_instructions' do - let(:email_params) { { email: "add_email@example.com" } } + let_it_be(:email) { create(:email, user: user) } + let(:params) { { id: email.id } } + + subject { put(:resend_confirmation_instructions, params: params) } it 'resends an email confirmation' do - email = user.emails.create(email: 'add_email@example.com') + expect { subject }.to change { ActionMailer::Base.deliveries.size } - expect { put(:resend_confirmation_instructions, params: { id: email }) }.to change { ActionMailer::Base.deliveries.size } - expect(ActionMailer::Base.deliveries.last.to).to eq [email_params[:email]] - expect(ActionMailer::Base.deliveries.last.subject).to match "Confirmation instructions" + expect(ActionMailer::Base.deliveries.last.to).to eq [email.email] + expect(ActionMailer::Base.deliveries.last.subject).to match 'Confirmation instructions' end - it 'unable to resend an email confirmation' do - expect { put(:resend_confirmation_instructions, params: { id: 1 }) }.not_to change { ActionMailer::Base.deliveries.size } + context 'email does not exist' do + let(:params) { { id: non_existing_record_id } } + + it 'does not send an email confirmation' do + expect { subject }.not_to change { ActionMailer::Base.deliveries.size } + end end end end diff --git a/spec/features/admin/admin_users_spec.rb b/spec/features/admin/admin_users_spec.rb index 9bfd3319ff1..55c92fa353e 100644 --- a/spec/features/admin/admin_users_spec.rb +++ b/spec/features/admin/admin_users_spec.rb @@ -279,7 +279,8 @@ RSpec.describe "Admin::Users" do expect(page).to have_content(user.email) expect(page).to have_content(user.name) - expect(page).to have_content(user.id) + expect(page).to have_content("ID: #{user.id}") + expect(page).to have_content("Namespace ID: #{user.namespace_id}") expect(page).to have_button('Deactivate user') expect(page).to have_button('Block user') expect(page).to have_button('Delete user') diff --git a/spec/features/dashboard/datetime_on_tooltips_spec.rb b/spec/features/dashboard/datetime_on_tooltips_spec.rb index ed28ec6099d..a3eacd6147c 100644 --- a/spec/features/dashboard/datetime_on_tooltips_spec.rb +++ b/spec/features/dashboard/datetime_on_tooltips_spec.rb @@ -3,44 +3,53 @@ require 'spec_helper' RSpec.describe 'Tooltips on .timeago dates', :js do - let(:user) { create(:user) } - let(:project) { create(:project, name: 'test', namespace: user.namespace) } - let(:created_date) { Date.yesterday.to_time } - let(:expected_format) { created_date.in_time_zone.strftime('%b %-d, %Y %l:%M%P') } + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, name: 'test', namespace: user.namespace) } + let(:created_date) { 1.day.ago.beginning_of_minute - 1.hour } + + before_all do + project.add_maintainer(user) + end context 'on the activity tab' do before do - project.add_maintainer(user) - Event.create( project: project, author_id: user.id, action: :joined, updated_at: created_date, created_at: created_date) sign_in user visit user_activity_path(user) wait_for_requests - - page.find('.js-timeago').hover end it 'has the datetime formated correctly' do - expect(page).to have_selector('.local-timeago', text: expected_format) + expect(page).to have_selector('.js-timeago', text: '1 day ago') + + page.find('.js-timeago').hover + + expect(datetime_in_tooltip).to eq(created_date) end end context 'on the snippets tab' do before do - project.add_maintainer(user) create(:snippet, author: user, updated_at: created_date, created_at: created_date) sign_in user visit user_snippets_path(user) wait_for_requests - - page.find('.js-timeago.snippet-created-ago').hover end it 'has the datetime formated correctly' do - expect(page).to have_selector('.local-timeago', text: expected_format) + expect(page).to have_selector('.js-timeago.snippet-created-ago', text: '1 day ago') + + page.find('.js-timeago.snippet-created-ago').hover + + expect(datetime_in_tooltip).to eq(created_date) end end + + def datetime_in_tooltip + datetime_text = page.find('.local-timeago').text + DateTime.parse(datetime_text) + end end diff --git a/spec/frontend/design_management/components/design_todo_button_spec.js b/spec/frontend/design_management/components/design_todo_button_spec.js index 950876108ee..451c23f0fea 100644 --- a/spec/frontend/design_management/components/design_todo_button_spec.js +++ b/spec/frontend/design_management/components/design_todo_button_spec.js @@ -52,6 +52,7 @@ describe('Design management design todo button', () => { afterEach(() => { wrapper.destroy(); wrapper = null; + jest.clearAllMocks(); }); it('renders TodoButton component', () => { @@ -68,7 +69,14 @@ describe('Design management design todo button', () => { }); describe('when clicked', () => { + let dispatchEventSpy; + beforeEach(() => { + dispatchEventSpy = jest.spyOn(document, 'dispatchEvent'); + jest.spyOn(document, 'querySelector').mockReturnValue({ + innerText: 2, + }); + createComponent({ design: mockDesignWithPendingTodos }, { mountFn: mount }); wrapper.trigger('click'); return wrapper.vm.$nextTick(); @@ -86,6 +94,14 @@ describe('Design management design todo button', () => { expect(mutate).toHaveBeenCalledTimes(1); expect(mutate).toHaveBeenCalledWith(todoMarkDoneMutationVariables); }); + + it('calls dispatchDocumentEvent to update global To-Do counter correctly', () => { + const dispatchedEvent = dispatchEventSpy.mock.calls[0][0]; + + expect(dispatchEventSpy).toHaveBeenCalledTimes(1); + expect(dispatchedEvent.detail).toEqual({ count: 1 }); + expect(dispatchedEvent.type).toBe('todo:toggle'); + }); }); }); @@ -99,7 +115,14 @@ describe('Design management design todo button', () => { }); describe('when clicked', () => { + let dispatchEventSpy; + beforeEach(() => { + dispatchEventSpy = jest.spyOn(document, 'dispatchEvent'); + jest.spyOn(document, 'querySelector').mockReturnValue({ + innerText: 2, + }); + createComponent({}, { mountFn: mount }); wrapper.trigger('click'); return wrapper.vm.$nextTick(); @@ -112,6 +135,7 @@ describe('Design management design todo button', () => { variables: { atVersion: null, filenames: ['my-design.jpg'], + designId: '1', issueId: '1', issueIid: '10', projectPath: 'project-path', @@ -121,6 +145,14 @@ describe('Design management design todo button', () => { expect(mutate).toHaveBeenCalledTimes(1); expect(mutate).toHaveBeenCalledWith(createDesignTodoMutationVariables); }); + + it('calls dispatchDocumentEvent to update global To-Do counter correctly', () => { + const dispatchedEvent = dispatchEventSpy.mock.calls[0][0]; + + expect(dispatchEventSpy).toHaveBeenCalledTimes(1); + expect(dispatchedEvent.detail).toEqual({ count: 3 }); + expect(dispatchedEvent.type).toBe('todo:toggle'); + }); }); }); }); diff --git a/spec/frontend/header_spec.js b/spec/frontend/header_spec.js index 59a8ca2ed23..27305abfafa 100644 --- a/spec/frontend/header_spec.js +++ b/spec/frontend/header_spec.js @@ -4,7 +4,7 @@ import initTodoToggle, { initNavUserDropdownTracking } from '~/header'; describe('Header', () => { describe('Todos notification', () => { - const todosPendingCount = '.todos-count'; + const todosPendingCount = '.js-todos-count'; const fixtureTemplate = 'issues/open-issue.html'; function isTodosCountHidden() { diff --git a/spec/frontend/packages/shared/components/__snapshots__/package_list_row_spec.js.snap b/spec/frontend/packages/shared/components/__snapshots__/package_list_row_spec.js.snap index 4b1346925cc..6aaefed92d0 100644 --- a/spec/frontend/packages/shared/components/__snapshots__/package_list_row_spec.js.snap +++ b/spec/frontend/packages/shared/components/__snapshots__/package_list_row_spec.js.snap @@ -40,7 +40,7 @@ exports[`packages_list_row renders 1`] = ` </div> <div - class="gl-text-gray-500 gl-mt-1 gl-min-h-6 gl-min-w-0 gl-flex-fill-1" + class="gl-display-flex gl-align-items-center gl-text-gray-500 gl-mt-1 gl-min-h-6 gl-min-w-0 gl-flex-fill-1" > <div class="gl-display-flex" @@ -94,7 +94,7 @@ exports[`packages_list_row renders 1`] = ` class="gl-display-flex gl-flex-direction-column gl-sm-align-items-flex-end gl-justify-content-space-between gl-text-gray-500 gl-flex-shrink-0" > <div - class="gl-sm-text-body gl-sm-font-weight-bold gl-min-h-6" + class="gl-display-flex gl-align-items-center gl-sm-text-body gl-sm-font-weight-bold gl-min-h-6" > <publish-method-stub packageentity="[object Object]" @@ -102,11 +102,13 @@ exports[`packages_list_row renders 1`] = ` </div> <div - class="gl-mt-1 gl-min-h-6" + class="gl-display-flex gl-align-items-center gl-mt-1 gl-min-h-6" > - <gl-sprintf-stub - message="Created %{timestamp}" - /> + <span> + <gl-sprintf-stub + message="Created %{timestamp}" + /> + </span> </div> </div> </div> diff --git a/spec/frontend/packages/shared/components/__snapshots__/publish_method_spec.js.snap b/spec/frontend/packages/shared/components/__snapshots__/publish_method_spec.js.snap index 55ac86f9c49..9a0c52cee47 100644 --- a/spec/frontend/packages/shared/components/__snapshots__/publish_method_spec.js.snap +++ b/spec/frontend/packages/shared/components/__snapshots__/publish_method_spec.js.snap @@ -2,7 +2,7 @@ exports[`publish_method renders 1`] = ` <div - class="gl-display-flex gl-align-items-center gl-mb-2" + class="gl-display-flex gl-align-items-center" > <gl-icon-stub class="gl-mr-2" diff --git a/spec/frontend/tooltips/components/tooltips_spec.js b/spec/frontend/tooltips/components/tooltips_spec.js index 1a97c7c9111..0edc5248629 100644 --- a/spec/frontend/tooltips/components/tooltips_spec.js +++ b/spec/frontend/tooltips/components/tooltips_spec.js @@ -120,7 +120,7 @@ describe('tooltips/components/tooltips.vue', () => { wrapper.vm.addTooltips([target, createTooltipTarget()]); await wrapper.vm.$nextTick(); - wrapper.vm.dispose([target]); + wrapper.vm.dispose(target); await wrapper.vm.$nextTick(); expect(allTooltips()).toHaveLength(1); @@ -148,6 +148,48 @@ describe('tooltips/components/tooltips.vue', () => { }); }); + describe('triggerEvent', () => { + it('triggers a bootstrap-vue tooltip global event for the tooltip specified', async () => { + const target = createTooltipTarget(); + const event = 'hide'; + + buildWrapper(); + + wrapper.vm.addTooltips([target]); + + await wrapper.vm.$nextTick(); + + wrapper.vm.triggerEvent(target, event); + + expect(wrapper.find(GlTooltip).emitted(event)).toHaveLength(1); + }); + }); + + describe('fixTitle', () => { + it('updates tooltip content with the latest value the target title property', async () => { + const target = createTooltipTarget(); + const currentTitle = 'title'; + const newTitle = 'new title'; + + target.setAttribute('title', currentTitle); + + buildWrapper(); + + wrapper.vm.addTooltips([target]); + + await wrapper.vm.$nextTick(); + + expect(wrapper.find(GlTooltip).text()).toBe(currentTitle); + + target.setAttribute('title', newTitle); + wrapper.vm.fixTitle(target); + + await wrapper.vm.$nextTick(); + + expect(wrapper.find(GlTooltip).text()).toBe(newTitle); + }); + }); + it('disconnects mutation observer on beforeDestroy', () => { buildWrapper(); wrapper.vm.addTooltips([createTooltipTarget()]); diff --git a/spec/frontend/tooltips/index_spec.js b/spec/frontend/tooltips/index_spec.js index a304ffce0a5..2b75707caed 100644 --- a/spec/frontend/tooltips/index_spec.js +++ b/spec/frontend/tooltips/index_spec.js @@ -1,4 +1,4 @@ -import { initTooltips, dispose, destroy } from '~/tooltips'; +import { initTooltips, dispose, destroy, hide, show, enable, disable, fixTitle } from '~/tooltips'; describe('tooltips/index.js', () => { let tooltipsApp; @@ -80,4 +80,41 @@ describe('tooltips/index.js', () => { expect(document.querySelector('.gl-tooltip')).toBe(null); }); }); + + it.each` + methodName | method | event + ${'enable'} | ${enable} | ${'enable'} + ${'disable'} | ${disable} | ${'disable'} + ${'hide'} | ${hide} | ${'close'} + ${'show'} | ${show} | ${'open'} + `( + '$methodName calls triggerEvent in tooltip app with $event event', + async ({ method, event }) => { + const target = createTooltipTarget(); + + buildTooltipsApp(); + + await tooltipsApp.$nextTick(); + + jest.spyOn(tooltipsApp, 'triggerEvent'); + + method([target]); + + expect(tooltipsApp.triggerEvent).toHaveBeenCalledWith(target, event); + }, + ); + + it('fixTitle calls fixTitle in tooltip app with the target specified', async () => { + const target = createTooltipTarget(); + + buildTooltipsApp(); + + await tooltipsApp.$nextTick(); + + jest.spyOn(tooltipsApp, 'fixTitle'); + + fixTitle([target]); + + expect(tooltipsApp.fixTitle).toHaveBeenCalledWith(target); + }); }); diff --git a/spec/helpers/issuables_helper_spec.rb b/spec/helpers/issuables_helper_spec.rb index 1f47ec4bf97..89a2a92ea57 100644 --- a/spec/helpers/issuables_helper_spec.rb +++ b/spec/helpers/issuables_helper_spec.rb @@ -198,6 +198,7 @@ RSpec.describe IssuablesHelper do initialDescriptionHtml: '<p dir="auto">issue text</p>', initialDescriptionText: 'issue text', initialTaskStatus: '0 of 0 tasks completed', + issueType: 'issue', iid: issue.iid.to_s } expect(helper.issuable_initial_data(issue)).to match(hash_including(expected_data)) diff --git a/spec/lib/gitlab/graphql/docs/renderer_spec.rb b/spec/lib/gitlab/graphql/docs/renderer_spec.rb index 81ef7fcda97..0f0127819fa 100644 --- a/spec/lib/gitlab/graphql/docs/renderer_spec.rb +++ b/spec/lib/gitlab/graphql/docs/renderer_spec.rb @@ -36,10 +36,10 @@ RSpec.describe Gitlab::Graphql::Docs::Renderer do specify do expectation = <<~DOC - ## ArrayTest + ### ArrayTest - | Name | Type | Description | - | --- | ---- | ---------- | + | Field | Type | Description | + | ----- | ---- | ----------- | | `foo` | String! => Array | A description | DOC @@ -59,10 +59,10 @@ RSpec.describe Gitlab::Graphql::Docs::Renderer do specify do expectation = <<~DOC - ## OrderingTest + ### OrderingTest - | Name | Type | Description | - | --- | ---- | ---------- | + | Field | Type | Description | + | ----- | ---- | ----------- | | `bar` | String! | A description of bar field | | `foo` | String! | A description of foo field | DOC @@ -82,15 +82,45 @@ RSpec.describe Gitlab::Graphql::Docs::Renderer do specify do expectation = <<~DOC - ## DeprecatedTest + ### DeprecatedTest - | Name | Type | Description | - | --- | ---- | ---------- | + | Field | Type | Description | + | ----- | ---- | ----------- | | `foo` **{warning-solid}** | String! | **Deprecated:** This is deprecated. Deprecated in 1.10 | DOC is_expected.to include(expectation) end end + + context 'A type with an emum field' do + let(:type) do + enum_type = Class.new(Types::BaseEnum) do + graphql_name 'MyEnum' + + value 'BAZ', description: 'A description of BAZ' + value 'BAR', description: 'A description of BAR', deprecation_reason: 'This is deprecated' + end + + Class.new(Types::BaseObject) do + graphql_name 'EnumTest' + + field :foo, enum_type, null: false, description: 'A description of foo field' + end + end + + specify do + expectation = <<~DOC + ### MyEnum + + | Value | Description | + | ----- | ----------- | + | `BAR` **{warning-solid}** | **Deprecated:** This is deprecated | + | `BAZ` | A description of BAZ | + DOC + + is_expected.to include(expectation) + end + end end end diff --git a/spec/rubocop/cop/static_translation_definition_spec.rb b/spec/rubocop/cop/static_translation_definition_spec.rb index b6c9f6a25df..f3185def3d7 100644 --- a/spec/rubocop/cop/static_translation_definition_spec.rb +++ b/spec/rubocop/cop/static_translation_definition_spec.rb @@ -40,6 +40,17 @@ RSpec.describe RuboCop::Cop::StaticTranslationDefinition, type: :rubocop do ['C = n_("c")', 'n_("c")', 1], [ <<~CODE, + class MyClass + def self.translations + @cache ||= { hello: _("hello") } + end + end + CODE + '_("hello")', + 3 + ], + [ + <<~CODE, module MyModule A = { b: { @@ -79,6 +90,20 @@ RSpec.describe RuboCop::Cop::StaticTranslationDefinition, type: :rubocop do 'CONSTANT_2 = s__("a")', 'CONSTANT_3 = n__("a")', <<~CODE, + class MyClass + def self.method + @cache ||= { hello: -> { _("hello") } } + end + end + CODE + <<~CODE, + class MyClass + def method + @cache ||= { hello: _("hello") } + end + end + CODE + <<~CODE, def method s_('a') end diff --git a/spec/workers/ci_platform_metrics_update_cron_worker_spec.rb b/spec/workers/ci_platform_metrics_update_cron_worker_spec.rb new file mode 100644 index 00000000000..0bb6822a0a5 --- /dev/null +++ b/spec/workers/ci_platform_metrics_update_cron_worker_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe CiPlatformMetricsUpdateCronWorker, type: :worker do + describe '#perform' do + subject { described_class.new.perform } + + it 'inserts new platform metrics' do + expect(CiPlatformMetric).to receive(:insert_auto_devops_platform_targets!).and_call_original + + subject + end + end +end |