summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-09-11 09:08:44 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-09-11 09:08:44 +0000
commit6b5f961bef87c70effe57b14d41f9ed882b5d296 (patch)
treecbdcfbcd679f4560916bdd9a3d9bb5686668d45e
parent79b32f05d4c0e6cedcf14d48bef24fd68e33a7f6 (diff)
downloadgitlab-ce-6b5f961bef87c70effe57b14d41f9ed882b5d296.tar.gz
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--app/assets/javascripts/alert_management/components/sidebar/sidebar_todo.vue2
-rw-r--r--app/assets/javascripts/design_management/components/design_todo_button.vue25
-rw-r--r--app/assets/javascripts/design_management/graphql.js8
-rw-r--r--app/assets/javascripts/design_management/graphql/mutations/create_design_todo.mutation.graphql2
-rw-r--r--app/assets/javascripts/design_management/utils/design_management_utils.js2
-rw-r--r--app/assets/javascripts/diffs/components/no_changes.vue29
-rw-r--r--app/assets/javascripts/header.js2
-rw-r--r--app/assets/javascripts/packages/shared/components/package_list_row.vue16
-rw-r--r--app/assets/javascripts/packages/shared/components/publish_method.vue2
-rw-r--r--app/assets/javascripts/tooltips/components/tooltips.vue35
-rw-r--r--app/assets/javascripts/tooltips/index.js16
-rw-r--r--app/assets/javascripts/vue_shared/components/registry/list_item.vue9
-rw-r--r--app/graphql/types/ci/pipeline_type.rb8
-rw-r--r--app/views/admin/users/show.html.haml4
-rw-r--r--app/views/layouts/header/_default.html.haml2
-rw-r--r--app/views/projects/tags/new.html.haml6
-rw-r--r--app/workers/all_queues.yml8
-rw-r--r--app/workers/ci_platform_metrics_update_cron_worker.rb16
-rw-r--r--changelogs/unreleased/241867-Replace-v-html.yml5
-rw-r--r--changelogs/unreleased/add_namespace_id_to_users_in_admin_area.yml5
-rw-r--r--changelogs/unreleased/litvinov-evgeny-7314-backup-files-skip-warning.yml5
-rw-r--r--changelogs/unreleased/lm-add-pipeline-actions.yml5
-rw-r--r--config/gitlab.yml.example4
-rw-r--r--config/initializers/1_settings.rb3
-rw-r--r--doc/api/graphql/reference/gitlab_schema.graphql26
-rw-r--r--doc/api/graphql/reference/gitlab_schema.json114
-rw-r--r--doc/api/graphql/reference/index.md2055
-rw-r--r--doc/user/project/deploy_boards.md2
-rw-r--r--lib/backup/files.rb4
-rw-r--r--lib/gitlab/graphql/docs/helper.rb46
-rw-r--r--lib/gitlab/graphql/docs/templates/default.md.haml46
-rw-r--r--locale/gitlab.pot5
-rw-r--r--rubocop/cop/static_translation_definition.rb18
-rw-r--r--spec/controllers/profiles/emails_controller_spec.rb37
-rw-r--r--spec/features/admin/admin_users_spec.rb3
-rw-r--r--spec/features/dashboard/datetime_on_tooltips_spec.rb35
-rw-r--r--spec/frontend/design_management/components/design_todo_button_spec.js32
-rw-r--r--spec/frontend/header_spec.js2
-rw-r--r--spec/frontend/packages/shared/components/__snapshots__/package_list_row_spec.js.snap14
-rw-r--r--spec/frontend/packages/shared/components/__snapshots__/publish_method_spec.js.snap2
-rw-r--r--spec/frontend/tooltips/components/tooltips_spec.js44
-rw-r--r--spec/frontend/tooltips/index_spec.js39
-rw-r--r--spec/helpers/issuables_helper_spec.rb1
-rw-r--r--spec/lib/gitlab/graphql/docs/renderer_spec.rb48
-rw-r--r--spec/rubocop/cop/static_translation_definition_spec.rb25
-rw-r--r--spec/workers/ci_platform_metrics_update_cron_worker_spec.rb15
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" } &times;
+ .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