diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-08 15:08:15 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-06-08 15:08:15 +0000 |
commit | e18e22ce4c7a4ee0680adda25e4cfa9cf4bb1be4 (patch) | |
tree | ad5cdd2a994e9ae4627330769eb5004f49d6f435 | |
parent | cdda3d117c99cadf295f26abc92cb2456033b762 (diff) | |
download | gitlab-ce-e18e22ce4c7a4ee0680adda25e4cfa9cf4bb1be4.tar.gz |
Add latest changes from gitlab-org/gitlab@master
53 files changed, 1282 insertions, 996 deletions
diff --git a/app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue b/app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue new file mode 100644 index 00000000000..8b7b02605f7 --- /dev/null +++ b/app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue @@ -0,0 +1,28 @@ +<script> +import { NodeViewWrapper, NodeViewContent } from '@tiptap/vue-2'; + +export default { + name: 'FootnoteDefinitionWrapper', + components: { + NodeViewWrapper, + NodeViewContent, + }, + props: { + node: { + type: Object, + required: true, + }, + }, +}; +</script> +<template> + <node-view-wrapper class="gl-display-flex gl-font-sm" as="div"> + <span + data-testid="footnote-label" + contenteditable="false" + class="gl-display-inline-flex gl-mr-2" + >{{ node.attrs.label }}:</span + > + <node-view-content /> + </node-view-wrapper> +</template> diff --git a/app/assets/javascripts/content_editor/extensions/footnote_definition.js b/app/assets/javascripts/content_editor/extensions/footnote_definition.js index dbab0de3421..6b1c0c9fd7d 100644 --- a/app/assets/javascripts/content_editor/extensions/footnote_definition.js +++ b/app/assets/javascripts/content_editor/extensions/footnote_definition.js @@ -1,12 +1,26 @@ import { mergeAttributes, Node } from '@tiptap/core'; +import { VueNodeViewRenderer } from '@tiptap/vue-2'; +import FootnoteDefinitionWrapper from '../components/wrappers/footnote_definition.vue'; import { PARSE_HTML_PRIORITY_HIGHEST } from '../constants'; +const extractFootnoteIdentifier = (idAttribute) => /^fn-(\w+)-\d+$/.exec(idAttribute)?.[1]; + export default Node.create({ name: 'footnoteDefinition', - - content: 'paragraph', - + content: 'inline*', group: 'block', + addAttributes() { + return { + identifier: { + default: null, + parseHTML: (element) => extractFootnoteIdentifier(element.getAttribute('id')), + }, + label: { + default: null, + parseHTML: (element) => extractFootnoteIdentifier(element.getAttribute('id')), + }, + }; + }, parseHTML() { return [ @@ -15,7 +29,11 @@ export default Node.create({ ]; }, - renderHTML({ HTMLAttributes }) { - return ['li', mergeAttributes(HTMLAttributes), 0]; + renderHTML({ label, ...HTMLAttributes }) { + return ['div', mergeAttributes(HTMLAttributes), 0]; + }, + + addNodeView() { + return new VueNodeViewRenderer(FootnoteDefinitionWrapper); }, }); diff --git a/app/assets/javascripts/content_editor/extensions/footnote_reference.js b/app/assets/javascripts/content_editor/extensions/footnote_reference.js index 1ac8016f774..ae5b8edc7af 100644 --- a/app/assets/javascripts/content_editor/extensions/footnote_reference.js +++ b/app/assets/javascripts/content_editor/extensions/footnote_reference.js @@ -1,6 +1,9 @@ import { Node, mergeAttributes } from '@tiptap/core'; import { PARSE_HTML_PRIORITY_HIGHEST } from '../constants'; +const extractFootnoteIdentifier = (element) => + /^fnref-(\w+)-\d+$/.exec(element.querySelector('a')?.getAttribute('id'))?.[1]; + export default Node.create({ name: 'footnoteReference', @@ -16,13 +19,13 @@ export default Node.create({ addAttributes() { return { - footnoteId: { + identifier: { default: null, - parseHTML: (element) => element.querySelector('a').getAttribute('id'), + parseHTML: extractFootnoteIdentifier, }, - footnoteNumber: { + label: { default: null, - parseHTML: (element) => element.textContent, + parseHTML: extractFootnoteIdentifier, }, }; }, @@ -31,7 +34,7 @@ export default Node.create({ return [{ tag: 'sup.footnote-ref', priority: PARSE_HTML_PRIORITY_HIGHEST }]; }, - renderHTML({ HTMLAttributes: { footnoteNumber, footnoteId, ...HTMLAttributes } }) { - return ['sup', mergeAttributes(HTMLAttributes), footnoteNumber]; + renderHTML({ HTMLAttributes: { label, ...HTMLAttributes } }) { + return ['sup', mergeAttributes(HTMLAttributes), label]; }, }); diff --git a/app/assets/javascripts/content_editor/extensions/footnotes_section.js b/app/assets/javascripts/content_editor/extensions/footnotes_section.js index 914a8934734..2b2c4177e1d 100644 --- a/app/assets/javascripts/content_editor/extensions/footnotes_section.js +++ b/app/assets/javascripts/content_editor/extensions/footnotes_section.js @@ -10,7 +10,10 @@ export default Node.create({ isolating: true, parseHTML() { - return [{ tag: 'section.footnotes > ol' }]; + return [ + { tag: 'section.footnotes', skip: true }, + { tag: 'section.footnotes > ol', skip: true }, + ]; }, renderHTML({ HTMLAttributes }) { diff --git a/app/assets/javascripts/content_editor/services/markdown_serializer.js b/app/assets/javascripts/content_editor/services/markdown_serializer.js index d5c4da8c76c..2d33a16f1a5 100644 --- a/app/assets/javascripts/content_editor/services/markdown_serializer.js +++ b/app/assets/javascripts/content_editor/services/markdown_serializer.js @@ -17,7 +17,6 @@ import Diagram from '../extensions/diagram'; import Emoji from '../extensions/emoji'; import Figure from '../extensions/figure'; import FigureCaption from '../extensions/figure_caption'; -import FootnotesSection from '../extensions/footnotes_section'; import FootnoteDefinition from '../extensions/footnote_definition'; import FootnoteReference from '../extensions/footnote_reference'; import Frontmatter from '../extensions/frontmatter'; @@ -154,15 +153,14 @@ const defaultSerializerConfig = { state.write(`:${name}:`); }, - [FootnoteDefinition.name]: (state, node) => { + [FootnoteDefinition.name]: preserveUnchanged((state, node) => { + state.write(`[^${node.attrs.identifier}]: `); state.renderInline(node); - }, - [FootnoteReference.name]: (state, node) => { - state.write(`[^${node.attrs.footnoteNumber}]`); - }, - [FootnotesSection.name]: (state, node) => { - state.renderList(node, '', (index) => `[^${index + 1}]: `); - }, + state.ensureNewLine(); + }), + [FootnoteReference.name]: preserveUnchanged((state, node) => { + state.write(`[^${node.attrs.identifier}]`); + }), [Frontmatter.name]: (state, node) => { const { language } = node.attrs; const syntax = { diff --git a/app/assets/javascripts/environments/components/environment_form.vue b/app/assets/javascripts/environments/components/environment_form.vue index 681036e4ba2..e0b3572082c 100644 --- a/app/assets/javascripts/environments/components/environment_form.vue +++ b/app/assets/javascripts/environments/components/environment_form.vue @@ -84,24 +84,21 @@ export default { <h1 class="page-title"> {{ title }} </h1> - <hr /> - <div class="row gl-mt-3 gl-mb-3"> - <div class="col-lg-3"> - <h4 class="gl-mt-0"> - {{ $options.i18n.header }} - </h4> - <p> - <gl-sprintf :message="$options.i18n.helpMessage"> - <template #link="{ content }"> - <gl-link :href="$options.helpPagePath">{{ content }}</gl-link> - </template> - </gl-sprintf> - </p> - </div> + <div class="row col-12"> + <h4 class="gl-mt-0"> + {{ $options.i18n.header }} + </h4> + <p class="gl-w-full"> + <gl-sprintf :message="$options.i18n.helpMessage"> + <template #link="{ content }"> + <gl-link :href="$options.helpPagePath">{{ content }}</gl-link> + </template> + </gl-sprintf> + </p> <gl-form id="new_environment" :aria-label="title" - class="col-lg-9" + class="gl-w-full" @submit.prevent="$emit('submit')" > <gl-form-group @@ -144,7 +141,7 @@ export default { /> </gl-form-group> - <div class="form-actions"> + <div class="gl-mr-6"> <gl-button :loading="loading" type="submit" diff --git a/app/assets/javascripts/feature_flags/components/feature_flags_table.vue b/app/assets/javascripts/feature_flags/components/feature_flags_table.vue index f8a8bed2467..f0f42d19ea5 100644 --- a/app/assets/javascripts/feature_flags/components/feature_flags_table.vue +++ b/app/assets/javascripts/feature_flags/components/feature_flags_table.vue @@ -81,6 +81,20 @@ export default { }); }, }, + modal: { + actionPrimary: { + text: s__('FeatureFlags|Delete feature flag'), + attributes: { + variant: 'danger', + }, + }, + actionSecondary: { + text: __('Cancel'), + attributes: { + variant: 'default', + }, + }, + }, }; </script> <template> @@ -193,11 +207,11 @@ export default { <gl-modal :ref="modalId" :title="modalTitle" - :ok-title="s__('FeatureFlags|Delete feature flag')" :modal-id="modalId" title-tag="h4" - ok-variant="danger" - category="primary" + size="sm" + :action-primary="$options.modal.actionPrimary" + :action-secondary="$options.modal.actionSecondary" @ok="onSubmit" > {{ deleteModalMessage }} diff --git a/app/assets/javascripts/google_cloud/components/gcp_regions_list.vue b/app/assets/javascripts/google_cloud/components/gcp_regions_list.vue index 1cc5a85198a..5d403d5cd65 100644 --- a/app/assets/javascripts/google_cloud/components/gcp_regions_list.vue +++ b/app/assets/javascripts/google_cloud/components/gcp_regions_list.vue @@ -48,7 +48,7 @@ export default { <gl-table :items="list" :fields="$options.tableFields" /> - <gl-button :href="createUrl" category="primary" variant="info"> + <gl-button :href="createUrl" category="primary" variant="confirm"> {{ $options.i18n.configureRegions }} </gl-button> </div> diff --git a/app/assets/javascripts/issuable/components/status_box.vue b/app/assets/javascripts/issuable/components/status_box.vue index fe023b156b5..d72ee5c6757 100644 --- a/app/assets/javascripts/issuable/components/status_box.vue +++ b/app/assets/javascripts/issuable/components/status_box.vue @@ -63,6 +63,8 @@ export default { }, }, data() { + if (!this.iid) return { state: this.initialState }; + if (this.initialState) { badgeState.state = this.initialState; } diff --git a/app/assets/javascripts/issues/list/components/issues_list_app.vue b/app/assets/javascripts/issues/list/components/issues_list_app.vue index 4e5d0c9ac57..bd4b8ca0455 100644 --- a/app/assets/javascripts/issues/list/components/issues_list_app.vue +++ b/app/assets/javascripts/issues/list/components/issues_list_app.vue @@ -866,7 +866,7 @@ export default { :export-csv-path="exportCsvPathWithQuery" :issuable-count="currentTabCount" /> - <new-issue-dropdown v-if="showNewIssueDropdown" /> + <new-issue-dropdown v-if="showNewIssueDropdown" class="gl-align-self-center" /> </template> </gl-empty-state> <hr /> diff --git a/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue b/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue index f7fba496e9c..20ee9a17fa0 100644 --- a/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue +++ b/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue @@ -31,7 +31,7 @@ export default { }, inject: ['mergeRequestPath', 'sourceBranchPath', 'resolveConflictsPath'], i18n: { - commitStatSummary: __('Showing %{conflict} between %{sourceBranch} and %{targetBranch}'), + commitStatSummary: __('Showing %{conflict}'), resolveInfo: __( 'You can resolve the merge conflict using either the Interactive mode, by choosing %{use_ours} or %{use_theirs} buttons, or by editing the files directly. Commit these changes into %{branch_name}', ), diff --git a/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy.vue b/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy.vue new file mode 100644 index 00000000000..fdc7bd39780 --- /dev/null +++ b/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy.vue @@ -0,0 +1,124 @@ +<script> +import { GlAlert, GlSprintf, GlLink } from '@gitlab/ui'; +import { isEqual, get, isEmpty } from 'lodash'; +import { + CONTAINER_CLEANUP_POLICY_TITLE, + CONTAINER_CLEANUP_POLICY_DESCRIPTION, + FETCH_SETTINGS_ERROR_MESSAGE, + UNAVAILABLE_FEATURE_TITLE, + UNAVAILABLE_FEATURE_INTRO_TEXT, + UNAVAILABLE_USER_FEATURE_TEXT, + UNAVAILABLE_ADMIN_FEATURE_TEXT, +} from '~/packages_and_registries/settings/project/constants'; +import expirationPolicyQuery from '~/packages_and_registries/settings/project/graphql/queries/get_expiration_policy.query.graphql'; +import SettingsBlock from '~/vue_shared/components/settings/settings_block.vue'; + +import ContainerExpirationPolicyForm from './container_expiration_policy_form.vue'; + +export default { + components: { + SettingsBlock, + GlAlert, + GlSprintf, + GlLink, + ContainerExpirationPolicyForm, + }, + inject: ['projectPath', 'isAdmin', 'adminSettingsPath', 'enableHistoricEntries', 'helpPagePath'], + i18n: { + CONTAINER_CLEANUP_POLICY_TITLE, + CONTAINER_CLEANUP_POLICY_DESCRIPTION, + UNAVAILABLE_FEATURE_TITLE, + UNAVAILABLE_FEATURE_INTRO_TEXT, + FETCH_SETTINGS_ERROR_MESSAGE, + }, + apollo: { + containerExpirationPolicy: { + query: expirationPolicyQuery, + variables() { + return { + projectPath: this.projectPath, + }; + }, + update: (data) => data.project?.containerExpirationPolicy, + result({ data }) { + this.workingCopy = { ...get(data, 'project.containerExpirationPolicy', {}) }; + }, + error(e) { + this.fetchSettingsError = e; + }, + }, + }, + data() { + return { + fetchSettingsError: false, + containerExpirationPolicy: null, + workingCopy: {}, + }; + }, + computed: { + isDisabled() { + return !(this.containerExpirationPolicy || this.enableHistoricEntries); + }, + showDisabledFormMessage() { + return this.isDisabled && !this.fetchSettingsError; + }, + unavailableFeatureMessage() { + return this.isAdmin ? UNAVAILABLE_ADMIN_FEATURE_TEXT : UNAVAILABLE_USER_FEATURE_TEXT; + }, + isEdited() { + if (isEmpty(this.containerExpirationPolicy) && isEmpty(this.workingCopy)) { + return false; + } + return !isEqual(this.containerExpirationPolicy, this.workingCopy); + }, + }, + methods: { + restoreOriginal() { + this.workingCopy = { ...this.containerExpirationPolicy }; + }, + }, +}; +</script> + +<template> + <settings-block :collapsible="false"> + <template #title> {{ $options.i18n.CONTAINER_CLEANUP_POLICY_TITLE }}</template> + <template #description> + <span> + <gl-sprintf :message="$options.i18n.CONTAINER_CLEANUP_POLICY_DESCRIPTION"> + <template #link="{ content }"> + <gl-link :href="helpPagePath">{{ content }}</gl-link> + </template> + </gl-sprintf> + </span> + </template> + <template #default> + <container-expiration-policy-form + v-if="!isDisabled" + v-model="workingCopy" + :is-loading="$apollo.queries.containerExpirationPolicy.loading" + :is-edited="isEdited" + @reset="restoreOriginal" + /> + <template v-else> + <gl-alert + v-if="showDisabledFormMessage" + :dismissible="false" + :title="$options.i18n.UNAVAILABLE_FEATURE_TITLE" + variant="tip" + > + {{ $options.i18n.UNAVAILABLE_FEATURE_INTRO_TEXT }} + + <gl-sprintf :message="unavailableFeatureMessage"> + <template #link="{ content }"> + <gl-link :href="adminSettingsPath">{{ content }}</gl-link> + </template> + </gl-sprintf> + </gl-alert> + <gl-alert v-else-if="fetchSettingsError" variant="warning" :dismissible="false"> + <gl-sprintf :message="$options.i18n.FETCH_SETTINGS_ERROR_MESSAGE" /> + </gl-alert> + </template> + </template> + </settings-block> +</template> diff --git a/app/assets/javascripts/packages_and_registries/settings/project/components/settings_form.vue b/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue index ae2d5f4fbc5..ae2d5f4fbc5 100644 --- a/app/assets/javascripts/packages_and_registries/settings/project/components/settings_form.vue +++ b/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue diff --git a/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue b/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue index d6d85189792..3fbbfd75ffb 100644 --- a/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue +++ b/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue @@ -104,7 +104,7 @@ export default { <span data-testid="description" class="gl-text-gray-400"> <gl-sprintf :message="description"> <template #link="{ content }"> - <gl-link :href="tagsRegexHelpPagePath" target="_blank">{{ content }}</gl-link> + <gl-link :href="tagsRegexHelpPagePath">{{ content }}</gl-link> </template> </gl-sprintf> </span> diff --git a/app/assets/javascripts/packages_and_registries/settings/project/components/registry_settings_app.vue b/app/assets/javascripts/packages_and_registries/settings/project/components/registry_settings_app.vue index 854c88b2ad3..95af19e6d85 100644 --- a/app/assets/javascripts/packages_and_registries/settings/project/components/registry_settings_app.vue +++ b/app/assets/javascripts/packages_and_registries/settings/project/components/registry_settings_app.vue @@ -1,128 +1,15 @@ <script> -import { GlAlert, GlSprintf, GlLink } from '@gitlab/ui'; -import { isEqual, get, isEmpty } from 'lodash'; -import { - FETCH_SETTINGS_ERROR_MESSAGE, - UNAVAILABLE_FEATURE_TITLE, - UNAVAILABLE_FEATURE_INTRO_TEXT, - UNAVAILABLE_USER_FEATURE_TEXT, - UNAVAILABLE_ADMIN_FEATURE_TEXT, -} from '~/packages_and_registries/settings/project/constants'; -import expirationPolicyQuery from '~/packages_and_registries/settings/project/graphql/queries/get_expiration_policy.query.graphql'; -import SettingsBlock from '~/vue_shared/components/settings/settings_block.vue'; - -import SettingsForm from './settings_form.vue'; +import ContainerExpirationPolicy from './container_expiration_policy.vue'; export default { components: { - SettingsBlock, - SettingsForm, - GlAlert, - GlSprintf, - GlLink, - }, - inject: ['projectPath', 'isAdmin', 'adminSettingsPath', 'enableHistoricEntries', 'helpPagePath'], - i18n: { - UNAVAILABLE_FEATURE_TITLE, - UNAVAILABLE_FEATURE_INTRO_TEXT, - FETCH_SETTINGS_ERROR_MESSAGE, - }, - apollo: { - containerExpirationPolicy: { - query: expirationPolicyQuery, - variables() { - return { - projectPath: this.projectPath, - }; - }, - update: (data) => data.project?.containerExpirationPolicy, - result({ data }) { - this.workingCopy = { ...get(data, 'project.containerExpirationPolicy', {}) }; - }, - error(e) { - this.fetchSettingsError = e; - }, - }, - }, - data() { - return { - fetchSettingsError: false, - containerExpirationPolicy: null, - workingCopy: {}, - }; - }, - computed: { - isDisabled() { - return !(this.containerExpirationPolicy || this.enableHistoricEntries); - }, - showDisabledFormMessage() { - return this.isDisabled && !this.fetchSettingsError; - }, - unavailableFeatureMessage() { - return this.isAdmin ? UNAVAILABLE_ADMIN_FEATURE_TEXT : UNAVAILABLE_USER_FEATURE_TEXT; - }, - isEdited() { - if (isEmpty(this.containerExpirationPolicy) && isEmpty(this.workingCopy)) { - return false; - } - return !isEqual(this.containerExpirationPolicy, this.workingCopy); - }, - }, - methods: { - restoreOriginal() { - this.workingCopy = { ...this.containerExpirationPolicy }; - }, + ContainerExpirationPolicy, }, }; </script> <template> <section data-testid="registry-settings-app"> - <settings-block :collapsible="false"> - <template #title> {{ __('Clean up image tags') }}</template> - <template #description> - <span data-testid="description"> - <gl-sprintf - :message=" - __( - 'Save storage space by automatically deleting tags from the container registry and keeping the ones you want. %{linkStart}How does cleanup work?%{linkEnd}', - ) - " - > - <template #link="{ content }"> - <gl-link :href="helpPagePath" target="_blank">{{ content }}</gl-link> - </template> - </gl-sprintf> - </span> - </template> - <template #default> - <settings-form - v-if="!isDisabled" - v-model="workingCopy" - :is-loading="$apollo.queries.containerExpirationPolicy.loading" - :is-edited="isEdited" - @reset="restoreOriginal" - /> - <template v-else> - <gl-alert - v-if="showDisabledFormMessage" - :dismissible="false" - :title="$options.i18n.UNAVAILABLE_FEATURE_TITLE" - variant="tip" - > - {{ $options.i18n.UNAVAILABLE_FEATURE_INTRO_TEXT }} - - <gl-sprintf :message="unavailableFeatureMessage"> - <template #link="{ content }"> - <gl-link :href="adminSettingsPath" target="_blank">{{ content }}</gl-link> - </template> - </gl-sprintf> - </gl-alert> - <gl-alert v-else-if="fetchSettingsError" variant="warning" :dismissible="false"> - <gl-sprintf :message="$options.i18n.FETCH_SETTINGS_ERROR_MESSAGE" /> - </gl-alert> - </template> - </template> - </settings-block> + <container-expiration-policy /> </section> </template> diff --git a/app/assets/javascripts/packages_and_registries/settings/project/constants.js b/app/assets/javascripts/packages_and_registries/settings/project/constants.js index 841585c5646..40f980d15fb 100644 --- a/app/assets/javascripts/packages_and_registries/settings/project/constants.js +++ b/app/assets/javascripts/packages_and_registries/settings/project/constants.js @@ -1,5 +1,9 @@ import { s__, __ } from '~/locale'; +export const CONTAINER_CLEANUP_POLICY_TITLE = s__(`ContainerRegistry|Clean up image tags`); +export const CONTAINER_CLEANUP_POLICY_DESCRIPTION = s__( + `ContainerRegistry|Save storage space by automatically deleting tags from the container registry and keeping the ones you want. %{linkStart}How does cleanup work?%{linkEnd}`, +); export const SET_CLEANUP_POLICY_BUTTON = __('Save'); export const UNAVAILABLE_FEATURE_TITLE = s__( `ContainerRegistry|Cleanup policy for tags is disabled`, diff --git a/app/assets/javascripts/vue_merge_request_widget/components/terraform/mr_widget_terraform_container.vue b/app/assets/javascripts/vue_merge_request_widget/components/terraform/mr_widget_terraform_container.vue index 2ba945a3ecf..18fdb29ba54 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/terraform/mr_widget_terraform_container.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/terraform/mr_widget_terraform_container.vue @@ -1,5 +1,5 @@ <script> -import { GlDeprecatedSkeletonLoading as GlSkeletonLoading, GlSprintf } from '@gitlab/ui'; +import { GlSkeletonLoader, GlSprintf } from '@gitlab/ui'; import axios from '~/lib/utils/axios_utils'; import Poll from '~/lib/utils/poll'; import { n__ } from '~/locale'; @@ -9,7 +9,7 @@ import TerraformPlan from './terraform_plan.vue'; export default { name: 'MRWidgetTerraformContainer', components: { - GlSkeletonLoading, + GlSkeletonLoader, GlSprintf, MrWidgetExpanableSection, TerraformPlan, @@ -100,7 +100,7 @@ export default { <template> <section class="mr-widget-section"> <div v-if="loading" class="mr-widget-body"> - <gl-skeleton-loading /> + <gl-skeleton-loader /> </div> <mr-widget-expanable-section v-else> diff --git a/app/assets/javascripts/vue_shared/alert_details/components/alert_details.vue b/app/assets/javascripts/vue_shared/alert_details/components/alert_details.vue index afa5402c28c..f2ea55df63d 100644 --- a/app/assets/javascripts/vue_shared/alert_details/components/alert_details.vue +++ b/app/assets/javascripts/vue_shared/alert_details/components/alert_details.vue @@ -82,9 +82,6 @@ export default { alertId: { default: '', }, - isThreatMonitoringPage: { - default: false, - }, projectId: { default: '', }, @@ -223,9 +220,7 @@ export default { }); }, incidentPath(issueId) { - return this.isThreatMonitoringPage - ? joinPaths(this.projectIssuesPath, issueId) - : joinPaths(this.projectIssuesPath, 'incident', issueId); + return joinPaths(this.projectIssuesPath, 'incident', issueId); }, trackPageViews() { const { category, action } = this.trackAlertsDetailsViewsOptions; @@ -372,7 +367,6 @@ export default { </gl-tab> <metric-images-tab - v-if="!isThreatMonitoringPage" :data-testid="$options.tabsConfig[1].id" :title="$options.tabsConfig[1].title" /> diff --git a/app/assets/javascripts/vue_shared/alert_details/constants.js b/app/assets/javascripts/vue_shared/alert_details/constants.js index 6cc70739eaa..d106f545c61 100644 --- a/app/assets/javascripts/vue_shared/alert_details/constants.js +++ b/app/assets/javascripts/vue_shared/alert_details/constants.js @@ -30,13 +30,4 @@ export const PAGE_CONFIG = { label: 'Status', }, }, - THREAT_MONITORING: { - TITLE: 'THREAT_MONITORING', - STATUSES: { - TRIGGERED: s__('ThreatMonitoring|Unreviewed'), - ACKNOWLEDGED: s__('ThreatMonitoring|In review'), - RESOLVED: s__('ThreatMonitoring|Resolved'), - IGNORED: s__('ThreatMonitoring|Dismissed'), - }, - }, }; diff --git a/app/assets/javascripts/vue_shared/alert_details/index.js b/app/assets/javascripts/vue_shared/alert_details/index.js index 614748fa80d..5793069440c 100644 --- a/app/assets/javascripts/vue_shared/alert_details/index.js +++ b/app/assets/javascripts/vue_shared/alert_details/index.js @@ -65,16 +65,12 @@ export default (selector) => { const opsProperties = {}; - if (page === PAGE_CONFIG.OPERATIONS.TITLE) { - const { TRACK_ALERTS_DETAILS_VIEWS_OPTIONS, TRACK_ALERT_STATUS_UPDATE_OPTIONS } = PAGE_CONFIG[ - page - ]; - provide.trackAlertsDetailsViewsOptions = TRACK_ALERTS_DETAILS_VIEWS_OPTIONS; - provide.trackAlertStatusUpdateOptions = TRACK_ALERT_STATUS_UPDATE_OPTIONS; - opsProperties.store = createStore({}, service); - } else if (page === PAGE_CONFIG.THREAT_MONITORING.TITLE) { - provide.isThreatMonitoringPage = true; - } + const { TRACK_ALERTS_DETAILS_VIEWS_OPTIONS, TRACK_ALERT_STATUS_UPDATE_OPTIONS } = PAGE_CONFIG[ + page + ]; + provide.trackAlertsDetailsViewsOptions = TRACK_ALERTS_DETAILS_VIEWS_OPTIONS; + provide.trackAlertStatusUpdateOptions = TRACK_ALERT_STATUS_UPDATE_OPTIONS; + opsProperties.store = createStore({}, service); // eslint-disable-next-line no-new new Vue({ diff --git a/app/helpers/storage_helper.rb b/app/helpers/storage_helper.rb index cb1a5f5ce0c..38ae9b5b634 100644 --- a/app/helpers/storage_helper.rb +++ b/app/helpers/storage_helper.rb @@ -25,20 +25,22 @@ module StorageHelper end def storage_enforcement_banner_info(namespace) - return unless can?(current_user, :admin_namespace, namespace) - return if namespace.paid? - return unless namespace.storage_enforcement_date && namespace.storage_enforcement_date >= Date.today - return if user_dismissed_storage_enforcement_banner?(namespace) + root_ancestor = namespace.root_ancestor + + return unless can?(current_user, :admin_namespace, root_ancestor) + return if root_ancestor.paid? + return unless future_enforcement_date?(root_ancestor) + return if user_dismissed_storage_enforcement_banner?(root_ancestor) { text: html_escape_once(s_("UsageQuota|From %{storage_enforcement_date} storage limits will apply to this namespace. " \ "You are currently using %{used_storage} of namespace storage. " \ "View and manage your usage from %{strong_start}%{namespace_type} settings > Usage quotas%{strong_end}.")).html_safe % - { storage_enforcement_date: namespace.storage_enforcement_date, used_storage: storage_counter(namespace.root_storage_statistics&.storage_size || 0), strong_start: "<strong>".html_safe, strong_end: "</strong>".html_safe, namespace_type: namespace.type }, + { storage_enforcement_date: root_ancestor.storage_enforcement_date, used_storage: storage_counter(root_ancestor.root_storage_statistics&.storage_size || 0), strong_start: "<strong>".html_safe, strong_end: "</strong>".html_safe, namespace_type: root_ancestor.type }, variant: 'warning', - callouts_path: namespace.user_namespace? ? callouts_path : group_callouts_path, - callouts_feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace), - learn_more_link: link_to(_('Learn more.'), help_page_path('/'), rel: 'noopener noreferrer', target: '_blank') # TBD: https://gitlab.com/gitlab-org/gitlab/-/issues/350632 + callouts_path: root_ancestor.user_namespace? ? callouts_path : group_callouts_path, + callouts_feature_name: storage_enforcement_banner_user_callouts_feature_name(root_ancestor), + learn_more_link: link_to(_('Learn more.'), help_page_path('/'), rel: 'noopener noreferrer', target: '_blank') } end @@ -63,8 +65,16 @@ module StorageHelper if namespace.user_namespace? current_user.dismissed_callout?(feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace)) else - current_user.dismissed_callout_for_group?(feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace), - group: namespace) + current_user.dismissed_callout_for_group?( + feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace), + group: namespace + ) end end + + def future_enforcement_date?(namespace) + return true if ::Feature.enabled?(:namespace_storage_limit_bypass_date_check, namespace) + + namespace.storage_enforcement_date.present? && namespace.storage_enforcement_date >= Date.today + end end diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 7ecf97ce4c2..e7bf1ff42a5 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -546,6 +546,8 @@ class Namespace < ApplicationRecord end def storage_enforcement_date + return Date.current if Feature.enabled?(:namespace_storage_limit_bypass_date_check, self) + # should return something like Date.new(2022, 02, 03) # TBD: https://gitlab.com/gitlab-org/gitlab/-/issues/350632 nil diff --git a/app/views/projects/pipeline_schedules/_form.html.haml b/app/views/projects/pipeline_schedules/_form.html.haml index 5ff0e2ccac3..355f7f4d32e 100644 --- a/app/views/projects/pipeline_schedules/_form.html.haml +++ b/app/views/projects/pipeline_schedules/_form.html.haml @@ -38,6 +38,6 @@ = f.label :active, s_('PipelineSchedules|Activated'), class: 'label-bold' %div = f.gitlab_ui_checkbox_component :active, _('Active'), checkbox_options: { value: @schedule.active, required: false } - .footer-block.row-content-block + .footer-block = f.submit _('Save pipeline schedule'), class: 'btn gl-button btn-confirm' = link_to _('Cancel'), pipeline_schedules_path(@project), class: 'btn gl-button btn-default btn-cancel' diff --git a/app/views/projects/pipeline_schedules/new.html.haml b/app/views/projects/pipeline_schedules/new.html.haml index 6e2da1b9430..06208d95305 100644 --- a/app/views/projects/pipeline_schedules/new.html.haml +++ b/app/views/projects/pipeline_schedules/new.html.haml @@ -7,6 +7,5 @@ %h1.page-title = _("Schedule a new pipeline") -%hr = render "form" diff --git a/app/workers/all_queues.yml b/app/workers/all_queues.yml index 9822182cc70..a0059f18bf1 100644 --- a/app/workers/all_queues.yml +++ b/app/workers/all_queues.yml @@ -6,7 +6,7 @@ - :name: authorized_project_update:authorized_project_update_project_recalculate :worker_name: AuthorizedProjectUpdate::ProjectRecalculateWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -15,7 +15,7 @@ - :name: authorized_project_update:authorized_project_update_project_recalculate_per_user :worker_name: AuthorizedProjectUpdate::ProjectRecalculatePerUserWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -24,7 +24,7 @@ - :name: authorized_project_update:authorized_project_update_user_refresh_from_replica :worker_name: AuthorizedProjectUpdate::UserRefreshFromReplicaWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -33,7 +33,7 @@ - :name: authorized_project_update:authorized_project_update_user_refresh_over_user_range :worker_name: AuthorizedProjectUpdate::UserRefreshOverUserRangeWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -42,79 +42,79 @@ - :name: authorized_project_update:authorized_project_update_user_refresh_with_low_urgency :worker_name: AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown - :weight: 1 + :weight: 2 :idempotent: true :tags: [] - :name: auto_devops:auto_devops_disable :worker_name: AutoDevops::DisableWorker :feature_category: :auto_devops - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: auto_merge:auto_merge_process :worker_name: AutoMergeProcessWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: chaos:chaos_cpu_spin :worker_name: Chaos::CpuSpinWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: chaos:chaos_db_spin :worker_name: Chaos::DbSpinWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: chaos:chaos_kill :worker_name: Chaos::KillWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: chaos:chaos_leak_mem :worker_name: Chaos::LeakMemWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: chaos:chaos_sleep :worker_name: Chaos::SleepWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: cluster_agent:clusters_agents_delete_expired_events :worker_name: Clusters::Agents::DeleteExpiredEventsWorker :feature_category: :kubernetes_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -123,7 +123,7 @@ - :name: container_repository:cleanup_container_repository :worker_name: CleanupContainerRepositoryWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -132,7 +132,7 @@ - :name: container_repository:container_expiration_policies_cleanup_container_repository :worker_name: ContainerExpirationPolicies::CleanupContainerRepositoryWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -141,25 +141,25 @@ - :name: container_repository:delete_container_repository :worker_name: DeleteContainerRepositoryWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:admin_email :worker_name: AdminEmailWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:analytics_usage_trends_count_job_trigger :worker_name: Analytics::UsageTrends::CountJobTriggerWorker :feature_category: :devops_reports - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -168,7 +168,7 @@ - :name: cronjob:authorized_project_update_periodic_recalculate :worker_name: AuthorizedProjectUpdate::PeriodicRecalculateWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -177,7 +177,7 @@ - :name: cronjob:bulk_imports_stuck_import :worker_name: BulkImports::StuckImportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -186,16 +186,16 @@ - :name: cronjob:ci_archive_traces_cron :worker_name: Ci::ArchiveTracesCronWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:ci_delete_unit_tests :worker_name: Ci::DeleteUnitTestsWorker :feature_category: :code_testing - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -204,7 +204,7 @@ - :name: cronjob:ci_pipeline_artifacts_expire_artifacts :worker_name: Ci::PipelineArtifacts::ExpireArtifactsWorker :feature_category: :build_artifacts - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -213,16 +213,16 @@ - :name: cronjob:ci_platform_metrics_update_cron :worker_name: CiPlatformMetricsUpdateCronWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:ci_schedule_delete_objects_cron :worker_name: Ci::ScheduleDeleteObjectsCronWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -231,7 +231,7 @@ - :name: cronjob:ci_stuck_builds_drop_running :worker_name: Ci::StuckBuilds::DropRunningWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -240,7 +240,7 @@ - :name: cronjob:ci_stuck_builds_drop_scheduled :worker_name: Ci::StuckBuilds::DropScheduledWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -249,11 +249,11 @@ - :name: cronjob:ci_update_locked_unknown_artifacts :worker_name: Ci::UpdateLockedUnknownArtifactsWorker :feature_category: :build_artifacts - :has_external_dependencies: + :has_external_dependencies: false :urgency: :throttled :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:clusters_integrations_check_prometheus_health :worker_name: Clusters::Integrations::CheckPrometheusHealthWorker @@ -267,16 +267,16 @@ - :name: cronjob:container_expiration_policy :worker_name: ContainerExpirationPolicyWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:container_registry_migration_enqueuer :worker_name: ContainerRegistry::Migration::EnqueuerWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -285,7 +285,7 @@ - :name: cronjob:container_registry_migration_guard :worker_name: ContainerRegistry::Migration::GuardWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -294,7 +294,7 @@ - :name: cronjob:container_registry_migration_observer :worker_name: ContainerRegistry::Migration::ObserverWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -303,7 +303,7 @@ - :name: cronjob:database_batched_background_migration :worker_name: Database::BatchedBackgroundMigrationWorker :feature_category: :database - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -312,7 +312,7 @@ - :name: cronjob:database_batched_background_migration_ci_database :worker_name: Database::BatchedBackgroundMigration::CiDatabaseWorker :feature_category: :database - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -321,7 +321,7 @@ - :name: cronjob:database_ci_namespace_mirrors_consistency_check :worker_name: Database::CiNamespaceMirrorsConsistencyCheckWorker :feature_category: :sharding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -330,7 +330,7 @@ - :name: cronjob:database_ci_project_mirrors_consistency_check :worker_name: Database::CiProjectMirrorsConsistencyCheckWorker :feature_category: :sharding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -339,7 +339,7 @@ - :name: cronjob:database_drop_detached_partitions :worker_name: Database::DropDetachedPartitionsWorker :feature_category: :database - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -348,7 +348,7 @@ - :name: cronjob:database_partition_management :worker_name: Database::PartitionManagementWorker :feature_category: :database - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -357,7 +357,7 @@ - :name: cronjob:dependency_proxy_cleanup_dependency_proxy :worker_name: DependencyProxy::CleanupDependencyProxyWorker :feature_category: :dependency_proxy - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -366,16 +366,16 @@ - :name: cronjob:dependency_proxy_image_ttl_group_policy :worker_name: DependencyProxy::ImageTtlGroupPolicyWorker :feature_category: :dependency_proxy - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:environments_auto_delete_cron :worker_name: Environments::AutoDeleteCronWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -384,61 +384,61 @@ - :name: cronjob:environments_auto_stop_cron :worker_name: Environments::AutoStopCronWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:expire_build_artifacts :worker_name: ExpireBuildArtifactsWorker :feature_category: :build_artifacts - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:gitlab_service_ping :worker_name: GitlabServicePingWorker :feature_category: :service_ping - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:import_export_project_cleanup :worker_name: ImportExportProjectCleanupWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:import_stuck_project_import_jobs :worker_name: Gitlab::Import::StuckProjectImportJobsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:issue_due_scheduler :worker_name: IssueDueSchedulerWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:issues_reschedule_stuck_issue_rebalances :worker_name: Issues::RescheduleStuckIssueRebalancesWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -447,16 +447,16 @@ - :name: cronjob:jira_import_stuck_jira_import_jobs :worker_name: Gitlab::JiraImport::StuckJiraImportJobsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:loose_foreign_keys_cleanup :worker_name: LooseForeignKeys::CleanupWorker :feature_category: :sharding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -465,16 +465,16 @@ - :name: cronjob:member_invitation_reminder_emails :worker_name: MemberInvitationReminderEmailsWorker :feature_category: :subgroups - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:metrics_dashboard_schedule_annotations_prune :worker_name: Metrics::Dashboard::ScheduleAnnotationsPruneWorker :feature_category: :metrics - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -483,25 +483,25 @@ - :name: cronjob:namespaces_in_product_marketing_emails :worker_name: Namespaces::InProductMarketingEmailsWorker :feature_category: :experimentation_activation - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:namespaces_prune_aggregation_schedules :worker_name: Namespaces::PruneAggregationSchedulesWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:packages_cleanup_package_registry :worker_name: Packages::CleanupPackageRegistryWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -510,7 +510,7 @@ - :name: cronjob:packages_composer_cache_cleanup :worker_name: Packages::Composer::CacheCleanupWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -519,34 +519,34 @@ - :name: cronjob:pages_domain_removal_cron :worker_name: PagesDomainRemovalCronWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:pages_domain_ssl_renewal_cron :worker_name: PagesDomainSslRenewalCronWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:pages_domain_verification_cron :worker_name: PagesDomainVerificationCronWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:partition_creation :worker_name: PartitionCreationWorker :feature_category: :database - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -555,34 +555,34 @@ - :name: cronjob:personal_access_tokens_expired_notification :worker_name: PersonalAccessTokens::ExpiredNotificationWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:personal_access_tokens_expiring :worker_name: PersonalAccessTokens::ExpiringWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:pipeline_schedule :worker_name: PipelineScheduleWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:projects_inactive_projects_deletion_cron :worker_name: Projects::InactiveProjectsDeletionCronWorker :feature_category: :compliance_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -591,7 +591,7 @@ - :name: cronjob:projects_schedule_refresh_build_artifacts_size_statistics :worker_name: Projects::ScheduleRefreshBuildArtifactsSizeStatisticsWorker :feature_category: :build_artifacts - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -600,43 +600,43 @@ - :name: cronjob:prune_old_events :worker_name: PruneOldEventsWorker :feature_category: :users - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:releases_manage_evidence :worker_name: Releases::ManageEvidenceWorker :feature_category: :release_evidence - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:remove_expired_group_links :worker_name: RemoveExpiredGroupLinksWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:remove_expired_members :worker_name: RemoveExpiredMembersWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:remove_unaccepted_member_invites :worker_name: RemoveUnacceptedMemberInvitesWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -645,7 +645,7 @@ - :name: cronjob:remove_unreferenced_lfs_objects :worker_name: RemoveUnreferencedLfsObjectsWorker :feature_category: :git_lfs - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -654,25 +654,25 @@ - :name: cronjob:repository_archive_cache :worker_name: RepositoryArchiveCacheWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:repository_check_dispatch :worker_name: RepositoryCheck::DispatchWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:schedule_merge_request_cleanup_refs :worker_name: ScheduleMergeRequestCleanupRefsWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -681,16 +681,16 @@ - :name: cronjob:schedule_migrate_external_diffs :worker_name: ScheduleMigrateExternalDiffsWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:ssh_keys_expired_notification :worker_name: SshKeys::ExpiredNotificationWorker :feature_category: :compliance_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -699,7 +699,7 @@ - :name: cronjob:ssh_keys_expiring_soon_notification :worker_name: SshKeys::ExpiringSoonNotificationWorker :feature_category: :compliance_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -708,43 +708,43 @@ - :name: cronjob:stuck_ci_jobs :worker_name: StuckCiJobsWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:stuck_export_jobs :worker_name: StuckExportJobsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:stuck_merge_jobs :worker_name: StuckMergeJobsWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:trending_projects :worker_name: TrendingProjectsWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:update_container_registry_info :worker_name: UpdateContainerRegistryInfoWorker :feature_category: :container_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -753,7 +753,7 @@ - :name: cronjob:user_status_cleanup_batch :worker_name: UserStatusCleanup::BatchWorker :feature_category: :users - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -762,20 +762,20 @@ - :name: cronjob:users_create_statistics :worker_name: Users::CreateStatisticsWorker :feature_category: :users - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:users_deactivate_dormant_users :worker_name: Users::DeactivateDormantUsersWorker :feature_category: :utilization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: cronjob:x509_issuer_crl_check :worker_name: X509IssuerCrlCheckWorker @@ -789,7 +789,7 @@ - :name: dependency_proxy:purge_dependency_proxy_cache :worker_name: PurgeDependencyProxyCacheWorker :feature_category: :dependency_proxy - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -798,7 +798,7 @@ - :name: dependency_proxy_blob:dependency_proxy_cleanup_blob :worker_name: DependencyProxy::CleanupBlobWorker :feature_category: :dependency_proxy - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -807,7 +807,7 @@ - :name: dependency_proxy_manifest:dependency_proxy_cleanup_manifest :worker_name: DependencyProxy::CleanupManifestWorker :feature_category: :dependency_proxy - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -816,7 +816,7 @@ - :name: deployment:deployments_archive_in_project :worker_name: Deployments::ArchiveInProjectWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 3 @@ -825,25 +825,25 @@ - :name: deployment:deployments_drop_older_deployments :worker_name: Deployments::DropOlderDeploymentsWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: deployment:deployments_hooks :worker_name: Deployments::HooksWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: deployment:deployments_link_merge_request :worker_name: Deployments::LinkMergeRequestWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 3 @@ -852,7 +852,7 @@ - :name: deployment:deployments_update_environment :worker_name: Deployments::UpdateEnvironmentWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 3 @@ -865,7 +865,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_install_app :worker_name: ClusterInstallAppWorker @@ -874,7 +874,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_patch_app :worker_name: ClusterPatchAppWorker @@ -883,7 +883,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_provision :worker_name: ClusterProvisionWorker @@ -892,16 +892,16 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_update_app :worker_name: ClusterUpdateAppWorker :feature_category: :kubernetes_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_upgrade_app :worker_name: ClusterUpgradeAppWorker @@ -910,7 +910,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_wait_for_app_installation :worker_name: ClusterWaitForAppInstallationWorker @@ -919,16 +919,16 @@ :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_wait_for_app_update :worker_name: ClusterWaitForAppUpdateWorker :feature_category: :kubernetes_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:cluster_wait_for_ingress_ip_address :worker_name: ClusterWaitForIngressIpAddressWorker @@ -937,25 +937,25 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:clusters_applications_activate_service :worker_name: Clusters::Applications::ActivateServiceWorker :feature_category: :kubernetes_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:clusters_applications_deactivate_service :worker_name: Clusters::Applications::DeactivateServiceWorker :feature_category: :kubernetes_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:clusters_applications_uninstall :worker_name: Clusters::Applications::UninstallWorker @@ -964,7 +964,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:clusters_applications_wait_for_uninstall_app :worker_name: Clusters::Applications::WaitForUninstallAppWorker @@ -973,7 +973,7 @@ :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:clusters_cleanup_project_namespace :worker_name: Clusters::Cleanup::ProjectNamespaceWorker @@ -982,7 +982,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:clusters_cleanup_service_account :worker_name: Clusters::Cleanup::ServiceAccountWorker @@ -991,7 +991,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gcp_cluster:wait_for_cluster_creation :worker_name: WaitForClusterCreationWorker @@ -1000,7 +1000,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_import_diff_note :worker_name: Gitlab::GithubImport::ImportDiffNoteWorker @@ -1009,7 +1009,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_import_issue :worker_name: Gitlab::GithubImport::ImportIssueWorker @@ -1018,7 +1018,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_import_lfs_object :worker_name: Gitlab::GithubImport::ImportLfsObjectWorker @@ -1027,7 +1027,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_import_note :worker_name: Gitlab::GithubImport::ImportNoteWorker @@ -1036,7 +1036,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_import_pull_request :worker_name: Gitlab::GithubImport::ImportPullRequestWorker @@ -1045,7 +1045,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_import_pull_request_merged_by :worker_name: Gitlab::GithubImport::ImportPullRequestMergedByWorker @@ -1054,7 +1054,7 @@ :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_import_pull_request_review :worker_name: Gitlab::GithubImport::ImportPullRequestReviewWorker @@ -1063,156 +1063,156 @@ :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_refresh_import_jid :worker_name: Gitlab::GithubImport::RefreshImportJidWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_finish_import :worker_name: Gitlab::GithubImport::Stage::FinishImportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_base_data :worker_name: Gitlab::GithubImport::Stage::ImportBaseDataWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_issues_and_diff_notes :worker_name: Gitlab::GithubImport::Stage::ImportIssuesAndDiffNotesWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_lfs_objects :worker_name: Gitlab::GithubImport::Stage::ImportLfsObjectsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_notes :worker_name: Gitlab::GithubImport::Stage::ImportNotesWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_pull_requests :worker_name: Gitlab::GithubImport::Stage::ImportPullRequestsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_pull_requests_merged_by :worker_name: Gitlab::GithubImport::Stage::ImportPullRequestsMergedByWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_pull_requests_reviews :worker_name: Gitlab::GithubImport::Stage::ImportPullRequestsReviewsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: github_importer:github_import_stage_import_repository :worker_name: Gitlab::GithubImport::Stage::ImportRepositoryWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: hashed_storage:hashed_storage_migrator :worker_name: HashedStorage::MigratorWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: hashed_storage:hashed_storage_project_migrate :worker_name: HashedStorage::ProjectMigrateWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: hashed_storage:hashed_storage_project_rollback :worker_name: HashedStorage::ProjectRollbackWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: hashed_storage:hashed_storage_rollbacker :worker_name: HashedStorage::RollbackerWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: incident_management:incident_management_add_severity_system_note :worker_name: IncidentManagement::AddSeveritySystemNoteWorker :feature_category: :incident_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: incident_management:incident_management_pager_duty_process_incident :worker_name: IncidentManagement::PagerDuty::ProcessIncidentWorker :feature_category: :incident_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: incident_management:incident_management_process_alert_worker_v2 :worker_name: IncidentManagement::ProcessAlertWorkerV2 :feature_category: :incident_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 2 @@ -1225,7 +1225,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_connect:jira_connect_retry_request :worker_name: JiraConnect::RetryRequestWorker @@ -1234,7 +1234,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_connect:jira_connect_sync_branch :worker_name: JiraConnect::SyncBranchWorker @@ -1243,7 +1243,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_connect:jira_connect_sync_builds :worker_name: JiraConnect::SyncBuildsWorker @@ -1252,7 +1252,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_connect:jira_connect_sync_deployments :worker_name: JiraConnect::SyncDeploymentsWorker @@ -1261,7 +1261,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_connect:jira_connect_sync_feature_flags :worker_name: JiraConnect::SyncFeatureFlagsWorker @@ -1270,7 +1270,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_connect:jira_connect_sync_merge_request :worker_name: JiraConnect::SyncMergeRequestWorker @@ -1279,7 +1279,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_connect:jira_connect_sync_project :worker_name: JiraConnect::SyncProjectWorker @@ -1288,156 +1288,156 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_advance_stage :worker_name: Gitlab::JiraImport::AdvanceStageWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_import_issue :worker_name: Gitlab::JiraImport::ImportIssueWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_stage_finish_import :worker_name: Gitlab::JiraImport::Stage::FinishImportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_stage_import_attachments :worker_name: Gitlab::JiraImport::Stage::ImportAttachmentsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_stage_import_issues :worker_name: Gitlab::JiraImport::Stage::ImportIssuesWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_stage_import_labels :worker_name: Gitlab::JiraImport::Stage::ImportLabelsWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_stage_import_notes :worker_name: Gitlab::JiraImport::Stage::ImportNotesWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: jira_importer:jira_import_stage_start_import :worker_name: Gitlab::JiraImport::Stage::StartImportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: mail_scheduler:mail_scheduler_issue_due :worker_name: MailScheduler::IssueDueWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: mail_scheduler:mail_scheduler_notification_service :worker_name: MailScheduler::NotificationServiceWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: object_pool:object_pool_create :worker_name: ObjectPool::CreateWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: object_pool:object_pool_destroy :worker_name: ObjectPool::DestroyWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: object_pool:object_pool_join :worker_name: ObjectPool::JoinWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: object_pool:object_pool_schedule_join :worker_name: ObjectPool::ScheduleJoinWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: object_storage:object_storage_background_move :worker_name: ObjectStorage::BackgroundMoveWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: object_storage:object_storage_migrate_uploads :worker_name: ObjectStorage::MigrateUploadsWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: package_cleanup:packages_cleanup_package_file :worker_name: Packages::CleanupPackageFileWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1446,7 +1446,7 @@ - :name: package_cleanup:packages_mark_package_files_for_destruction :worker_name: Packages::MarkPackageFilesForDestructionWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1455,7 +1455,7 @@ - :name: package_repositories:packages_debian_generate_distribution :worker_name: Packages::Debian::GenerateDistributionWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1464,7 +1464,7 @@ - :name: package_repositories:packages_debian_process_changes :worker_name: Packages::Debian::ProcessChangesWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1473,7 +1473,7 @@ - :name: package_repositories:packages_go_sync_packages :worker_name: Packages::Go::SyncPackagesWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1482,7 +1482,7 @@ - :name: package_repositories:packages_helm_extraction :worker_name: Packages::Helm::ExtractionWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1491,7 +1491,7 @@ - :name: package_repositories:packages_maven_metadata_sync :worker_name: Packages::Maven::Metadata::SyncWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1500,43 +1500,43 @@ - :name: package_repositories:packages_nuget_extraction :worker_name: Packages::Nuget::ExtractionWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: package_repositories:packages_rubygems_extraction :worker_name: Packages::Rubygems::ExtractionWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_background:archive_trace :worker_name: ArchiveTraceWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_background:ci_archive_trace :worker_name: Ci::ArchiveTraceWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_background:ci_build_trace_chunk_flush :worker_name: Ci::BuildTraceChunkFlushWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1545,7 +1545,7 @@ - :name: pipeline_background:ci_daily_build_group_report_results :worker_name: Ci::DailyBuildGroupReportResultsWorker :feature_category: :code_testing - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1554,7 +1554,7 @@ - :name: pipeline_background:ci_pending_builds_update_group :worker_name: Ci::PendingBuilds::UpdateGroupWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1563,7 +1563,7 @@ - :name: pipeline_background:ci_pending_builds_update_project :worker_name: Ci::PendingBuilds::UpdateProjectWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1572,7 +1572,7 @@ - :name: pipeline_background:ci_pipeline_artifacts_coverage_report :worker_name: Ci::PipelineArtifacts::CoverageReportWorker :feature_category: :code_testing - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1581,7 +1581,7 @@ - :name: pipeline_background:ci_pipeline_artifacts_create_quality_report :worker_name: Ci::PipelineArtifacts::CreateQualityReportWorker :feature_category: :code_quality - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1590,7 +1590,7 @@ - :name: pipeline_background:ci_pipeline_success_unlock_artifacts :worker_name: Ci::PipelineSuccessUnlockArtifactsWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1599,7 +1599,7 @@ - :name: pipeline_background:ci_ref_delete_unlock_artifacts :worker_name: Ci::RefDeleteUnlockArtifactsWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1608,7 +1608,7 @@ - :name: pipeline_background:ci_test_failure_history :worker_name: Ci::TestFailureHistoryWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1617,25 +1617,25 @@ - :name: pipeline_creation:ci_external_pull_requests_create_pipeline :worker_name: Ci::ExternalPullRequests::CreatePipelineWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 4 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_creation:create_pipeline :worker_name: CreatePipelineWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 4 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_creation:merge_requests_create_pipeline :worker_name: MergeRequests::CreatePipelineWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 4 @@ -1644,34 +1644,34 @@ - :name: pipeline_creation:run_pipeline_schedule :worker_name: RunPipelineScheduleWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 4 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_default:ci_create_cross_project_pipeline :worker_name: Ci::CreateCrossProjectPipelineWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_default:ci_create_downstream_pipeline :worker_name: Ci::CreateDownstreamPipelineWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_default:ci_drop_pipeline :worker_name: Ci::DropPipelineWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 3 @@ -1680,7 +1680,7 @@ - :name: pipeline_default:ci_merge_requests_add_todo_when_build_fails :worker_name: Ci::MergeRequests::AddTodoWhenBuildFailsWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 3 @@ -1689,115 +1689,115 @@ - :name: pipeline_default:ci_pipeline_bridge_status :worker_name: Ci::PipelineBridgeStatusWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_default:ci_retry_pipeline :worker_name: Ci::RetryPipelineWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_default:pipeline_metrics :worker_name: PipelineMetricsWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_default:pipeline_notification :worker_name: PipelineNotificationWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_hooks:build_hooks :worker_name: BuildHooksWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_hooks:pipeline_hooks :worker_name: PipelineHooksWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_processing:build_finished :worker_name: BuildFinishedWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 5 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_processing:build_queue :worker_name: BuildQueueWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 5 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_processing:build_success :worker_name: BuildSuccessWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 5 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_processing:ci_build_finished :worker_name: Ci::BuildFinishedWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 5 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_processing:ci_build_prepare :worker_name: Ci::BuildPrepareWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 5 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_processing:ci_build_schedule :worker_name: Ci::BuildScheduleWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 5 - :idempotent: + :idempotent: false :tags: [] - :name: pipeline_processing:ci_initial_pipeline_process :worker_name: Ci::InitialPipelineProcessWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 5 @@ -1806,7 +1806,7 @@ - :name: pipeline_processing:ci_resource_groups_assign_resource_from_resource_group :worker_name: Ci::ResourceGroups::AssignResourceFromResourceGroupWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 5 @@ -1815,7 +1815,7 @@ - :name: pipeline_processing:pipeline_process :worker_name: PipelineProcessWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 5 @@ -1824,7 +1824,7 @@ - :name: pipeline_processing:stage_update :worker_name: StageUpdateWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 5 @@ -1833,7 +1833,7 @@ - :name: pipeline_processing:update_head_pipeline_for_merge_request :worker_name: UpdateHeadPipelineForMergeRequestWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 5 @@ -1842,34 +1842,34 @@ - :name: repository_check:repository_check_batch :worker_name: RepositoryCheck::BatchWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: repository_check:repository_check_clear :worker_name: RepositoryCheck::ClearWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: repository_check:repository_check_single_repository :worker_name: RepositoryCheck::SingleRepositoryWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: terraform:terraform_states_destroy :worker_name: Terraform::States::DestroyWorker :feature_category: :infrastructure_as_code - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1878,16 +1878,16 @@ - :name: todos_destroyer:todos_destroyer_confidential_issue :worker_name: TodosDestroyer::ConfidentialIssueWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: todos_destroyer:todos_destroyer_destroyed_designs :worker_name: TodosDestroyer::DestroyedDesignsWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1896,7 +1896,7 @@ - :name: todos_destroyer:todos_destroyer_destroyed_issuable :worker_name: TodosDestroyer::DestroyedIssuableWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1905,43 +1905,43 @@ - :name: todos_destroyer:todos_destroyer_entity_leave :worker_name: TodosDestroyer::EntityLeaveWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: todos_destroyer:todos_destroyer_group_private :worker_name: TodosDestroyer::GroupPrivateWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: todos_destroyer:todos_destroyer_private_features :worker_name: TodosDestroyer::PrivateFeaturesWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: todos_destroyer:todos_destroyer_project_private :worker_name: TodosDestroyer::ProjectPrivateWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: unassign_issuables:members_destroyer_unassign_issuables :worker_name: MembersDestroyer::UnassignIssuablesWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1950,7 +1950,7 @@ - :name: update_namespace_statistics:namespaces_root_statistics :worker_name: Namespaces::RootStatisticsWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1959,7 +1959,7 @@ - :name: update_namespace_statistics:namespaces_schedule_aggregation :worker_name: Namespaces::ScheduleAggregationWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1968,7 +1968,7 @@ - :name: analytics_usage_trends_counter_job :worker_name: Analytics::UsageTrends::CounterJobWorker :feature_category: :devops_reports - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1977,7 +1977,7 @@ - :name: approve_blocked_pending_approval_users :worker_name: ApproveBlockedPendingApprovalUsersWorker :feature_category: :users - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -1986,7 +1986,7 @@ - :name: authorized_keys :worker_name: AuthorizedKeysWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 2 @@ -1995,7 +1995,7 @@ - :name: authorized_projects :worker_name: AuthorizedProjectsWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 2 @@ -2004,29 +2004,29 @@ - :name: background_migration :worker_name: BackgroundMigrationWorker :feature_category: :database - :has_external_dependencies: + :has_external_dependencies: false :urgency: :throttled :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: background_migration_ci_database :worker_name: BackgroundMigration::CiDatabaseWorker :feature_category: :database - :has_external_dependencies: + :has_external_dependencies: false :urgency: :throttled :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: bulk_import :worker_name: BulkImportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: bulk_imports_entity :worker_name: BulkImports::EntityWorker @@ -2053,12 +2053,12 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: bulk_imports_relation_export :worker_name: BulkImports::RelationExportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2071,12 +2071,12 @@ :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: ci_delete_objects :worker_name: Ci::DeleteObjectsWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2085,7 +2085,7 @@ - :name: ci_job_artifacts_expire_project_build_artifacts :worker_name: Ci::JobArtifacts::ExpireProjectBuildArtifactsWorker :feature_category: :build_artifacts - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2094,7 +2094,7 @@ - :name: create_commit_signature :worker_name: CreateCommitSignatureWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 @@ -2103,11 +2103,11 @@ - :name: create_note_diff_file :worker_name: CreateNoteDiffFileWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: default :worker_name: @@ -2121,43 +2121,43 @@ - :name: delete_diff_files :worker_name: DeleteDiffFilesWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: delete_merged_branches :worker_name: DeleteMergedBranchesWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: delete_stored_files :worker_name: DeleteStoredFilesWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: delete_user :worker_name: DeleteUserWorker :feature_category: :authentication_and_authorization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: design_management_copy_design_collection :worker_name: DesignManagement::CopyDesignCollectionWorker :feature_category: :design_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2166,16 +2166,16 @@ - :name: design_management_new_version :worker_name: DesignManagement::NewVersionWorker :feature_category: :design_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :memory :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: destroy_pages_deployments :worker_name: DestroyPagesDeploymentsWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2184,16 +2184,16 @@ - :name: detect_repository_languages :worker_name: DetectRepositoryLanguagesWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: disallow_two_factor_for_group :worker_name: DisallowTwoFactorForGroupWorker :feature_category: :subgroups - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2202,7 +2202,7 @@ - :name: disallow_two_factor_for_subgroups :worker_name: DisallowTwoFactorForSubgroupsWorker :feature_category: :subgroups - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2211,26 +2211,26 @@ - :name: email_receiver :worker_name: EmailReceiverWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: - :needs_own_queue - :name: emails_on_push :worker_name: EmailsOnPushWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: environments_auto_stop :worker_name: Environments::AutoStopWorker :feature_category: :continuous_delivery - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2252,12 +2252,12 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: experiments_record_conversion_event :worker_name: Experiments::RecordConversionEventWorker :feature_category: :users - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2266,11 +2266,11 @@ - :name: export_csv :worker_name: ExportCsvWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: external_service_reactive_caching :worker_name: ExternalServiceReactiveCachingWorker @@ -2279,21 +2279,21 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: file_hook :worker_name: FileHookWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: flush_counter_increments :worker_name: FlushCounterIncrementsWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2302,16 +2302,16 @@ - :name: github_import_advance_stage :worker_name: Gitlab::GithubImport::AdvanceStageWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: gitlab_performance_bar_stats :worker_name: GitlabPerformanceBarStatsWorker :feature_category: :metrics - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 @@ -2320,43 +2320,43 @@ - :name: gitlab_shell :worker_name: GitlabShellWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: group_destroy :worker_name: GroupDestroyWorker :feature_category: :subgroups - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: group_export :worker_name: GroupExportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: group_import :worker_name: GroupImportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: groups_update_statistics :worker_name: Groups::UpdateStatisticsWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 @@ -2365,7 +2365,7 @@ - :name: import_issues_csv :worker_name: ImportIssuesCsvWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 2 @@ -2374,7 +2374,7 @@ - :name: integrations_create_external_cross_reference :worker_name: Integrations::CreateExternalCrossReferenceWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2387,39 +2387,39 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: invalid_gpg_signature_update :worker_name: InvalidGpgSignatureUpdateWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: irker :worker_name: IrkerWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: issuable_export_csv :worker_name: IssuableExportCsvWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: issuable_label_links_destroy :worker_name: Issuable::LabelLinksDestroyWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2428,7 +2428,7 @@ - :name: issuables_clear_groups_issue_counter :worker_name: Issuables::ClearGroupsIssueCounterWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2437,7 +2437,7 @@ - :name: issues_placement :worker_name: Issues::PlacementWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 2 @@ -2446,7 +2446,7 @@ - :name: issues_rebalancing :worker_name: Issues::RebalancingWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2464,7 +2464,7 @@ - :name: merge :worker_name: MergeWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 5 @@ -2473,7 +2473,7 @@ - :name: merge_request_cleanup_refs :worker_name: MergeRequestCleanupRefsWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2482,7 +2482,7 @@ - :name: merge_request_mergeability_check :worker_name: MergeRequestMergeabilityCheckWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2500,7 +2500,7 @@ - :name: merge_requests_delete_source_branch :worker_name: MergeRequests::DeleteSourceBranchWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -2509,7 +2509,7 @@ - :name: merge_requests_handle_assignees_change :worker_name: MergeRequests::HandleAssigneesChangeWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -2518,7 +2518,7 @@ - :name: merge_requests_resolve_todos :worker_name: MergeRequests::ResolveTodosWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -2527,7 +2527,7 @@ - :name: merge_requests_update_head_pipeline :worker_name: MergeRequests::UpdateHeadPipelineWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 1 @@ -2536,7 +2536,7 @@ - :name: metrics_dashboard_prune_old_annotations :worker_name: Metrics::Dashboard::PruneOldAnnotationsWorker :feature_category: :metrics - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2545,7 +2545,7 @@ - :name: metrics_dashboard_sync_dashboards :worker_name: Metrics::Dashboard::SyncDashboardsWorker :feature_category: :metrics - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2554,16 +2554,16 @@ - :name: migrate_external_diffs :worker_name: MigrateExternalDiffsWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: namespaces_onboarding_issue_created :worker_name: Namespaces::OnboardingIssueCreatedWorker :feature_category: :onboarding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2572,7 +2572,7 @@ - :name: namespaces_onboarding_pipeline_created :worker_name: Namespaces::OnboardingPipelineCreatedWorker :feature_category: :onboarding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2581,7 +2581,7 @@ - :name: namespaces_onboarding_progress :worker_name: Namespaces::OnboardingProgressWorker :feature_category: :onboarding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 @@ -2590,7 +2590,7 @@ - :name: namespaces_onboarding_user_added :worker_name: Namespaces::OnboardingUserAddedWorker :feature_category: :onboarding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2599,7 +2599,7 @@ - :name: namespaces_process_sync_events :worker_name: Namespaces::ProcessSyncEventsWorker :feature_category: :sharding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -2608,7 +2608,7 @@ - :name: namespaces_update_root_statistics :worker_name: Namespaces::UpdateRootStatisticsWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2617,34 +2617,34 @@ - :name: new_issue :worker_name: NewIssueWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: new_merge_request :worker_name: NewMergeRequestWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: new_note :worker_name: NewNoteWorker :feature_category: :team_planning - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: packages_composer_cache_update :worker_name: Packages::Composer::CacheUpdateWorker :feature_category: :package_registry - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2653,52 +2653,52 @@ - :name: pages :worker_name: PagesWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: pages_domain_ssl_renewal :worker_name: PagesDomainSslRenewalWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: pages_domain_verification :worker_name: PagesDomainVerificationWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: pages_transfer :worker_name: PagesTransferWorker :feature_category: :pages - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: phabricator_import_import_tasks :worker_name: Gitlab::PhabricatorImport::ImportTasksWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: post_receive :worker_name: PostReceive :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 5 @@ -2707,7 +2707,7 @@ - :name: process_commit :worker_name: ProcessCommitWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 3 @@ -2716,7 +2716,7 @@ - :name: project_cache :worker_name: ProjectCacheWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -2725,20 +2725,20 @@ - :name: project_destroy :worker_name: ProjectDestroyWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: project_export :worker_name: ProjectExportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :memory :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: project_service :worker_name: ProjectServiceWorker @@ -2747,12 +2747,12 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: projects_after_import :worker_name: Projects::AfterImportWorker :feature_category: :importers - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2761,16 +2761,16 @@ - :name: projects_git_garbage_collect :worker_name: Projects::GitGarbageCollectWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: projects_inactive_projects_deletion_notification :worker_name: Projects::InactiveProjectsDeletionNotificationWorker :feature_category: :compliance_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2779,7 +2779,7 @@ - :name: projects_post_creation :worker_name: Projects::PostCreationWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2788,7 +2788,7 @@ - :name: projects_process_sync_events :worker_name: Projects::ProcessSyncEventsWorker :feature_category: :sharding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -2797,7 +2797,7 @@ - :name: projects_record_target_platforms :worker_name: Projects::RecordTargetPlatformsWorker :feature_category: :experimentation_activation - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2806,7 +2806,7 @@ - :name: projects_refresh_build_artifacts_size_statistics :worker_name: Projects::RefreshBuildArtifactsSizeStatisticsWorker :feature_category: :build_artifacts - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2815,7 +2815,7 @@ - :name: projects_schedule_bulk_repository_shard_moves :worker_name: Projects::ScheduleBulkRepositoryShardMovesWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :throttled :resource_boundary: :unknown :weight: 1 @@ -2824,7 +2824,7 @@ - :name: projects_update_repository_storage :worker_name: Projects::UpdateRepositoryStorageWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :throttled :resource_boundary: :unknown :weight: 1 @@ -2833,7 +2833,7 @@ - :name: propagate_integration :worker_name: PropagateIntegrationWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2842,7 +2842,7 @@ - :name: propagate_integration_group :worker_name: PropagateIntegrationGroupWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2851,7 +2851,7 @@ - :name: propagate_integration_inherit :worker_name: PropagateIntegrationInheritWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2860,7 +2860,7 @@ - :name: propagate_integration_inherit_descendant :worker_name: PropagateIntegrationInheritDescendantWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2869,7 +2869,7 @@ - :name: propagate_integration_project :worker_name: PropagateIntegrationProjectWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -2878,56 +2878,56 @@ - :name: reactive_caching :worker_name: ReactiveCachingWorker :feature_category: :not_owned - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: rebase :worker_name: RebaseWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: releases_create_evidence :worker_name: Releases::CreateEvidenceWorker :feature_category: :release_evidence - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: remote_mirror_notification :worker_name: RemoteMirrorNotificationWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: repository_cleanup :worker_name: RepositoryCleanupWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: repository_fork :worker_name: RepositoryForkWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: repository_import :worker_name: RepositoryImportWorker @@ -2936,7 +2936,7 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: repository_update_remote_mirror :worker_name: RepositoryUpdateRemoteMirrorWorker @@ -2950,35 +2950,35 @@ - :name: self_monitoring_project_create :worker_name: SelfMonitoringProjectCreateWorker :feature_category: :metrics - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: self_monitoring_project_delete :worker_name: SelfMonitoringProjectDeleteWorker :feature_category: :metrics - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 2 - :idempotent: + :idempotent: false :tags: [] - :name: service_desk_email_receiver :worker_name: ServiceDeskEmailReceiverWorker :feature_category: :service_desk - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown - :weight: 1 - :idempotent: + :weight: 2 + :idempotent: false :tags: - :needs_own_queue - :name: snippets_schedule_bulk_repository_shard_moves :worker_name: Snippets::ScheduleBulkRepositoryShardMovesWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :throttled :resource_boundary: :unknown :weight: 1 @@ -2987,7 +2987,7 @@ - :name: snippets_update_repository_storage :worker_name: Snippets::UpdateRepositoryStorageWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :throttled :resource_boundary: :unknown :weight: 1 @@ -2996,16 +2996,16 @@ - :name: system_hook_push :worker_name: SystemHookPushWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: tasks_to_be_done_create :worker_name: TasksToBeDone::CreateWorker :feature_category: :onboarding - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :cpu :weight: 1 @@ -3014,16 +3014,16 @@ - :name: update_external_pull_requests :worker_name: UpdateExternalPullRequestsWorker :feature_category: :continuous_integration - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: update_highest_role :worker_name: UpdateHighestRoleWorker :feature_category: :utilization - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 2 @@ -3032,29 +3032,29 @@ - :name: update_merge_requests :worker_name: UpdateMergeRequestsWorker :feature_category: :code_review - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :cpu :weight: 3 - :idempotent: + :idempotent: false :tags: [] - :name: update_project_statistics :worker_name: UpdateProjectStatisticsWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: upload_checksum :worker_name: UploadChecksumWorker :feature_category: :geo_replication - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: web_hook :worker_name: WebHookWorker @@ -3063,12 +3063,12 @@ :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: web_hooks_destroy :worker_name: WebHooks::DestroyWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :high :resource_boundary: :unknown :weight: 1 @@ -3077,7 +3077,7 @@ - :name: web_hooks_log_destroy :worker_name: WebHooks::LogDestroyWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -3086,7 +3086,7 @@ - :name: web_hooks_log_execution :worker_name: WebHooks::LogExecutionWorker :feature_category: :integrations - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 @@ -3095,16 +3095,16 @@ - :name: wikis_git_garbage_collect :worker_name: Wikis::GitGarbageCollectWorker :feature_category: :gitaly - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 - :idempotent: + :idempotent: false :tags: [] - :name: x509_certificate_revoke :worker_name: X509CertificateRevokeWorker :feature_category: :source_code_management - :has_external_dependencies: + :has_external_dependencies: false :urgency: :low :resource_boundary: :unknown :weight: 1 diff --git a/app/workers/concerns/worker_attributes.rb b/app/workers/concerns/worker_attributes.rb index 5d7251e9a98..8a135bc1853 100644 --- a/app/workers/concerns/worker_attributes.rb +++ b/app/workers/concerns/worker_attributes.rb @@ -67,7 +67,7 @@ module WorkerAttributes end def get_urgency - class_attributes[:urgency] || :low + get_class_attribute(:urgency) || :low end # Allows configuring worker's data_consistency. @@ -98,13 +98,13 @@ module WorkerAttributes end def get_data_consistency - class_attributes[:data_consistency] || DEFAULT_DATA_CONSISTENCY + get_class_attribute(:data_consistency) || DEFAULT_DATA_CONSISTENCY end def get_data_consistency_feature_flag_enabled? - return true unless class_attributes[:data_consistency_feature_flag] + return true unless get_class_attribute(:data_consistency_feature_flag) - Feature.enabled?(class_attributes[:data_consistency_feature_flag]) + Feature.enabled?(get_class_attribute(:data_consistency_feature_flag)) end # Set this attribute on a job when it will call to services outside of the @@ -115,11 +115,11 @@ module WorkerAttributes set_class_attribute(:external_dependencies, true) end - # Returns a truthy value if the worker has external dependencies. + # Returns true if the worker has external dependencies. # See doc/development/sidekiq_style_guide.md#jobs-with-external-dependencies # for details def worker_has_external_dependencies? - class_attributes[:external_dependencies] + !!get_class_attribute(:external_dependencies) end def worker_resource_boundary(boundary) @@ -129,7 +129,7 @@ module WorkerAttributes end def get_worker_resource_boundary - class_attributes[:resource_boundary] || :unknown + get_class_attribute(:resource_boundary) || :unknown end def idempotent! @@ -137,7 +137,7 @@ module WorkerAttributes end def idempotent? - class_attributes[:idempotent] + !!get_class_attribute(:idempotent) end def weight(value) @@ -145,7 +145,7 @@ module WorkerAttributes end def get_weight - class_attributes[:weight] || + get_class_attribute(:weight) || NAMESPACE_WEIGHTS[queue_namespace] || 1 end @@ -155,7 +155,7 @@ module WorkerAttributes end def get_tags - Array(class_attributes[:tags]) + Array(get_class_attribute(:tags)) end def deduplicate(strategy, options = {}) @@ -164,12 +164,12 @@ module WorkerAttributes end def get_deduplicate_strategy - class_attributes[:deduplication_strategy] || + get_class_attribute(:deduplication_strategy) || Gitlab::SidekiqMiddleware::DuplicateJobs::DuplicateJob::DEFAULT_STRATEGY end def get_deduplication_options - class_attributes[:deduplication_options] || {} + get_class_attribute(:deduplication_options) || {} end def deduplication_enabled? @@ -183,7 +183,7 @@ module WorkerAttributes end def big_payload? - class_attributes[:big_payload] + !!get_class_attribute(:big_payload) end end end diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml index a1ed41ca599..40f6b1d0f48 100644 --- a/config/sidekiq_queues.yml +++ b/config/sidekiq_queues.yml @@ -51,8 +51,16 @@ - 1 - - authorized_keys - 2 -- - authorized_project_update +- - authorized_project_update:authorized_project_update_project_recalculate - 1 +- - authorized_project_update:authorized_project_update_project_recalculate_per_user + - 1 +- - authorized_project_update:authorized_project_update_user_refresh_from_replica + - 1 +- - authorized_project_update:authorized_project_update_user_refresh_over_user_range + - 1 +- - authorized_project_update:authorized_project_update_user_refresh_with_low_urgency + - 2 - - authorized_projects - 2 - - auto_devops @@ -420,7 +428,7 @@ - - self_monitoring_project_delete - 2 - - service_desk_email_receiver - - 1 + - 2 - - set_user_status_based_on_user_cap_setting - 1 - - snippets_schedule_bulk_repository_shard_moves diff --git a/doc/administration/geo/disaster_recovery/bring_primary_back.md b/doc/administration/geo/disaster_recovery/bring_primary_back.md index d03fd4ae1dd..4c0a46b3096 100644 --- a/doc/administration/geo/disaster_recovery/bring_primary_back.md +++ b/doc/administration/geo/disaster_recovery/bring_primary_back.md @@ -34,8 +34,8 @@ To bring the former **primary** site up to date: NOTE: If you [disabled the **primary** site permanently](index.md#step-2-permanently-disable-the-primary-site), - you need to undo those steps now. For Debian/Ubuntu you just need to run - `sudo systemctl enable gitlab-runsvdir`. For CentOS 6, you need to install + you need to undo those steps now. For distributions with systemd, such as Debian/Ubuntu/CentOS7+, you must run + `sudo systemctl enable gitlab-runsvdir`. For distributions without systemd, such as CentOS 6, you need to install the GitLab instance from scratch and set it up as a **secondary** site by following [Setup instructions](../setup/index.md). In this case, you don't need to follow the next step. diff --git a/doc/ci/cloud_services/google_cloud/index.md b/doc/ci/cloud_services/google_cloud/index.md index 14928f91816..f4e4a2046ba 100644 --- a/doc/ci/cloud_services/google_cloud/index.md +++ b/doc/ci/cloud_services/google_cloud/index.md @@ -50,8 +50,8 @@ inside the Workload Identity Pool created in the previous step, using the follow such as `gitlab/gitlab`. - **Provider ID**: Unique ID in the pool for the Workload Identity Provider, such as `gitlab-gitlab`. This value is used to refer to the provider, and appears in URLs. -- **Issuer (URL)**: The address of your GitLab instance, such as `https://gitlab.com` or - `https://gitlab.example.com`. +- **Issuer (URL)**: The address of your GitLab instance, such as `https://gitlab.com/` or + `https://gitlab.example.com/`. - The address must use the `https://` protocol. - The address must end in a trailing slash. - **Audiences**: Manually set the allowed audiences list to the address of your diff --git a/doc/ci/runners/configure_runners.md b/doc/ci/runners/configure_runners.md index b39f4493184..7986df0de5e 100644 --- a/doc/ci/runners/configure_runners.md +++ b/doc/ci/runners/configure_runners.md @@ -718,6 +718,51 @@ variables: | `CACHE_COMPRESSION_LEVEL` | To adjust compression ratio, set to `fastest`, `fast`, `default`, `slow`, or `slowest`. This setting works with the Fastzip archiver only, so the GitLab Runner feature flag [`FF_USE_FASTZIP`](https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags) must also be enabled. | | `CACHE_REQUEST_TIMEOUT` | Configure the maximum duration of cache upload and download operations for a single job in minutes. Default is `10` minutes. | +### Staging directory + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/3403) in GitLab Runner 15.0. + +If you do not want to archive cache and artifacts in the system's default temporary directory, you can specify a different directory. + +You might need to change the directory if your system's default temporary path has constraints. +If you use a fast disk for the directory location, it can also improve performance. + +To change the directory, set `ARCHIVER_STAGING_DIR` as a variable in your CI job, or use a runner variable when you register the runner (`gitlab register --env ARCHIVER_STAGING_DIR=<dir>`). + +The directory you specify is used as the location for downloading artifacts prior to extraction. If the `fastzip` archiver is +used, this location is also used as scratch space when archiving. + +### Configure `fastzip` to improve performance + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/3130) in GitLab Runner 15.0. + +To tune `fastzip`, ensure the [`FF_USE_FASTZIP`](https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags) flag is enabled. +Then use any of the following environment variables. + +| Variable | Description | +|---------------------------------|--------------------------------------------------------| +| `FASTZIP_ARCHIVER_CONCURRENCY` | The number of files to be concurrently compressed. Default is the number of CPUs available. | +| `FASTZIP_ARCHIVER_BUFFER_SIZE` | The buffer size allocated per concurrency for each file. Data exceeding this number moves to scratch space. Default is 2 MiB. | +| `FASTZIP_EXTRACTOR_CONCURRENCY` | The number of files to be concurrency decompressed. Default is the number of CPUs available. | + +Files in a zip archive are appended sequentially. This makes concurrent compression challenging. `fastzip` works around +this limitation by compressing files concurrently to disk first, and then copying the result back to zip archive +sequentially. + +To avoid writing to disk and reading the contents back for smaller files, a small buffer per concurrency is used. This setting +can be controlled with `FASTZIP_ARCHIVER_BUFFER_SIZE`. The default size for this buffer is 2 MiB, therefore, a +concurrency of 16 will allocate 32 MiB. Data that exceeds the buffer size will be written to and read back from disk. +Therefore, using no buffer, `FASTZIP_ARCHIVER_BUFFER_SIZE: 0`, and only scratch space is a valid option. + +`FASTZIP_ARCHIVER_CONCURRENCY` controls how many files are compressed concurrency. As mentioned above, this setting +therefore can increase how much memory is being used, but also how much temporary data is written to the scratch space. +The default is the number of CPUs available, but given the memory ramifications, this may not always be the best +setting. + +`FASTZIP_EXTRACTOR_CONCURRENCY` controls how many files are decompressed at once. Files from a zip archive can natively +be read from concurrency, so no additional memory is allocated in additional to what the decompressor requires. This +defaults to the number of CPUs available. + ## Clean up stale runners > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/363012) in GitLab 15.1 [with a flag](../../administration/feature_flags.md) named `stale_runner_cleanup_for_namespace_development`. Disabled by default. diff --git a/doc/development/sidekiq/worker_attributes.md b/doc/development/sidekiq/worker_attributes.md index 3bd6d313e2c..6820627f761 100644 --- a/doc/development/sidekiq/worker_attributes.md +++ b/doc/development/sidekiq/worker_attributes.md @@ -6,6 +6,11 @@ info: To determine the technical writer assigned to the Stage/Group associated w # Sidekiq worker attributes +Worker classes can define certain attributes to control their behavior and add metadata. + +Child classes inheriting from other workers also inherit these attributes, so you only +have to redefine them if you want to override their values. + ## Job urgency Jobs can have an `urgency` attribute set, which can be `:high`, diff --git a/doc/update/index.md b/doc/update/index.md index 62a3d79fee7..91813908629 100644 --- a/doc/update/index.md +++ b/doc/update/index.md @@ -94,11 +94,13 @@ that can process jobs in the `background_migration` queue. ### Background migrations +#### Pending migrations + **For Omnibus installations:** ```shell sudo gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining' -sudo gitlab-rails runner -e production 'puts Gitlab::Database::BackgroundMigrationJob.pending.count' +sudo gitlab-rails runner -e production 'puts Gitlab::Database::BackgroundMigration::BatchedMigration.queued.count' ``` **For installations from source:** @@ -109,6 +111,38 @@ sudo -u git -H bundle exec rails runner -e production 'puts Gitlab::BackgroundMi sudo -u git -H bundle exec rails runner -e production 'puts Gitlab::Database::BackgroundMigrationJob.pending.count' ``` +#### Failed migrations + +**For Omnibus installations:** + +For GitLab 14.0-14.9: + +```shell +sudo gitlab-rails runner -e production 'Gitlab::Database::BackgroundMigration::BatchedMigration.failed.count' +``` + +For GitLab 14.10 and later: + +```shell +sudo gitlab-rails runner -e production 'Gitlab::Database::BackgroundMigration::BatchedMigration.with_status(:failed).count' +``` + +**For installations from source:** + +For GitLab 14.0-14.9: + +```shell +cd /home/git/gitlab +sudo -u git -H bundle exec rails runner -e production 'Gitlab::Database::BackgroundMigration::BatchedMigration.failed.count' +``` + +For GitLab 14.10 and later: + +```shell +cd /home/git/gitlab +sudo -u git -H bundle exec rails runner -e production 'Gitlab::Database::BackgroundMigration::BatchedMigration.with_status(:failed).count' +``` + ### Batched background migrations GitLab 14.0 introduced [batched background migrations](../user/admin_area/monitoring/background_migrations.md). @@ -333,7 +367,7 @@ Find where your version sits in the upgrade path below, and upgrade GitLab accordingly, while also consulting the [version-specific upgrade instructions](#version-specific-upgrading-instructions): -`8.11.Z` -> `8.12.0` -> `8.17.7` -> `9.5.10` -> `10.8.7` -> [`11.11.8`](#1200) -> `12.0.12` -> [`12.1.17`](#1210) -> [`12.10.14`](#12100) -> `13.0.14` -> [`13.1.11`](#1310) -> [`13.8.8`](#1388) -> [`13.12.15`](#13120) -> [`14.0.12`](#1400) -> [`14.9.0`](#1490) -> [`14.10.Z`](#1410) -> [`15.0.Z`](#1500) -> [latest `15.Y.Z`](https://gitlab.com/gitlab-org/gitlab/-/releases) +`8.11.Z` -> `8.12.0` -> `8.17.7` -> `9.5.10` -> `10.8.7` -> [`11.11.8`](#1200) -> `12.0.12` -> [`12.1.17`](#1210) -> [`12.10.14`](#12100) -> `13.0.14` -> [`13.1.11`](#1310) -> [`13.8.8`](#1388) -> [`13.12.15`](#13120) -> [`14.0.12`](#1400) -> [`14.9.5`](#1490) -> [`14.10.Z`](#1410) -> [`15.0.Z`](#1500) -> [latest `15.Y.Z`](https://gitlab.com/gitlab-org/gitlab/-/releases) The following table, while not exhaustive, shows some examples of the supported upgrade paths. @@ -341,8 +375,8 @@ Additional steps between the mentioned versions are possible. We list the minima | Target version | Your version | Supported upgrade path | Note | | -------------- | ------------ | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `15.1.0` | `14.6.2` | `14.6.2` -> `14.9.4` -> `14.10.3` -> `15.0.0` -> `15.1.0` | Three intermediate versions are required: `14.9` and `14.10`, `15.0`, then `15.1.0`. | -| `15.0.0` | `14.6.2` | `14.6.2` -> `14.9.4` -> `14.10.3` -> `15.0.0` | Two intermediate versions are required: `14.9` and `14.10`, then `15.0.0`. | +| `15.1.0` | `14.6.2` | `14.6.2` -> `14.9.5` -> `14.10.4` -> `15.0.2` -> `15.1.0` | Three intermediate versions are required: `14.9` and `14.10`, `15.0`, then `15.1.0`. | +| `15.0.0` | `14.6.2` | `14.6.2` -> `14.9.5` -> `14.10.4` -> `15.0.2` | Two intermediate versions are required: `14.9` and `14.10`, then `15.0.0`. | | `14.6.2` | `13.10.2` | `13.10.2` -> `13.12.15` -> `14.0.12` -> `14.6.2` | Two intermediate versions are required: `13.12` and `14.0`, then `14.6.2`. | | `14.1.8` | `13.9.2` | `13.9.2` -> `13.12.15` -> `14.0.12` -> `14.1.8` | Two intermediate versions are required: `13.12` and `14.0`, then `14.1.8`. | | `13.12.15` | `12.9.2` | `12.9.2` -> `12.10.14` -> `13.0.14` -> `13.1.11` -> `13.8.8` -> `13.12.15` | Four intermediate versions are required: `12.10`, `13.0`, `13.1` and `13.8.8`, then `13.12.15`. | diff --git a/lefthook.yml b/lefthook.yml index ff57725dac6..161ce0b5155 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -18,6 +18,11 @@ pre-push: files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD glob: 'doc/*.md' run: yarn markdownlint {files} + yamllint: + tags: backend style + files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD + glob: '*.{yml,yaml}' + run: scripts/lint-yaml.sh {files} stylelint: tags: stylesheet css style files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 4ba538f3b79..18ecc8c6c80 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -7966,9 +7966,6 @@ msgstr "" msgid "Clean up after running %{link_start}git filter-repo%{link_end} on the repository." msgstr "" -msgid "Clean up image tags" -msgstr "" - msgid "Cleanup policies are executed by background workers. This setting defines the maximum number of workers that can run concurrently. Set it to 0 to remove all workers and not execute the cleanup policies." msgstr "" @@ -9647,6 +9644,9 @@ msgstr "" msgid "ContainerRegistry|CLI Commands" msgstr "" +msgid "ContainerRegistry|Clean up image tags" +msgstr "" + msgid "ContainerRegistry|Cleanup disabled" msgstr "" @@ -9823,6 +9823,9 @@ msgstr "" msgid "ContainerRegistry|Run cleanup:" msgstr "" +msgid "ContainerRegistry|Save storage space by automatically deleting tags from the container registry and keeping the ones you want. %{linkStart}How does cleanup work?%{linkEnd}" +msgstr "" + msgid "ContainerRegistry|Set up cleanup" msgstr "" @@ -33245,9 +33248,6 @@ msgstr "" msgid "Save pipeline schedule" msgstr "" -msgid "Save storage space by automatically deleting tags from the container registry and keeping the ones you want. %{linkStart}How does cleanup work?%{linkEnd}" -msgstr "" - msgid "Saving" msgstr "" @@ -35234,7 +35234,7 @@ msgstr "" msgid "Show whitespace changes" msgstr "" -msgid "Showing %{conflict} between %{sourceBranch} and %{targetBranch}" +msgid "Showing %{conflict}" msgstr "" msgid "Showing %{count} of %{total} projects" @@ -39234,24 +39234,6 @@ msgstr "" msgid "Thread to reply to cannot be found" msgstr "" -msgid "ThreatMonitoring|Alert Details" -msgstr "" - -msgid "ThreatMonitoring|Dismissed" -msgstr "" - -msgid "ThreatMonitoring|In review" -msgstr "" - -msgid "ThreatMonitoring|Resolved" -msgstr "" - -msgid "ThreatMonitoring|Threat Monitoring" -msgstr "" - -msgid "ThreatMonitoring|Unreviewed" -msgstr "" - msgid "Threshold in bytes at which to compress Sidekiq job arguments." msgstr "" diff --git a/scripts/lint-yaml.sh b/scripts/lint-yaml.sh new file mode 100755 index 00000000000..c3bd7f2817e --- /dev/null +++ b/scripts/lint-yaml.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if ! command -v yamllint > /dev/null; then + echo "ERROR: yamllint is not installed. For more information, see https://yamllint.readthedocs.io/en/stable/index.html." + exit 1 +fi + +yamllint --strict -f colored "$@" diff --git a/spec/commands/sidekiq_cluster/cli_spec.rb b/spec/commands/sidekiq_cluster/cli_spec.rb index 3bc3b93c250..55e8ab7885e 100644 --- a/spec/commands/sidekiq_cluster/cli_spec.rb +++ b/spec/commands/sidekiq_cluster/cli_spec.rb @@ -243,10 +243,17 @@ RSpec.describe Gitlab::SidekiqCluster::CLI, stub_settings_source: true do # rubo end it 'expands multiple queue groups correctly' do + expected_workers = + if Gitlab.ee? + [%w[chat_notification], %w[project_export project_template_export]] + else + [%w[chat_notification], %w[project_export]] + end + expect(Gitlab::SidekiqCluster) .to receive(:start) - .with([['chat_notification'], ['project_export']], default_options) - .and_return([]) + .with(expected_workers, default_options) + .and_return([]) cli.run(%w(--queue-selector feature_category=chatops&has_external_dependencies=true resource_boundary=memory&feature_category=importers)) end diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb index fa454cfcc24..537b50896fc 100644 --- a/spec/features/groups_spec.rb +++ b/spec/features/groups_spec.rb @@ -498,7 +498,9 @@ RSpec.describe 'Group' do let_it_be(:group) { create(:group) } let_it_be_with_refind(:user) { create(:user) } - before_all do + before do + stub_feature_flags(namespace_storage_limit_bypass_date_check: false) + group.add_owner(user) sign_in(user) end diff --git a/spec/features/profiles/user_visits_profile_spec.rb b/spec/features/profiles/user_visits_profile_spec.rb index 7d545711997..8b1af283765 100644 --- a/spec/features/profiles/user_visits_profile_spec.rb +++ b/spec/features/profiles/user_visits_profile_spec.rb @@ -89,6 +89,10 @@ RSpec.describe 'User visits their profile' do end describe 'storage_enforcement_banner', :js do + before do + stub_feature_flags(namespace_storage_limit_bypass_date_check: false) + end + context 'with storage_enforcement_date set' do let_it_be(:storage_enforcement_date) { Date.today + 30 } diff --git a/spec/fixtures/markdown/markdown_golden_master_examples.yml b/spec/fixtures/markdown/markdown_golden_master_examples.yml index fece8e57150..9b861516bfe 100644 --- a/spec/fixtures/markdown/markdown_golden_master_examples.yml +++ b/spec/fixtures/markdown/markdown_golden_master_examples.yml @@ -475,19 +475,19 @@ markdown: |- A footnote reference tag looks like this: [^1] - This reference tag is a mix of letters and numbers. [^2] + This reference tag is a mix of letters and numbers. [^footnote] [^1]: This is the text inside a footnote. - [^2]: This is another footnote. + [^footnote]: This is another footnote. html: |- <p data-sourcepos="1:1-1:46" dir="auto">A footnote reference tag looks like this: <sup class="footnote-ref"><a href="#fn-1-2717" id="fnref-1-2717" data-footnote-ref="">1</a></sup></p> - <p data-sourcepos="3:1-3:56" dir="auto">This reference tag is a mix of letters and numbers. <sup class="footnote-ref"><a href="#fn-2-2717" id="fnref-2-2717" data-footnote-ref="">2</a></sup></p> + <p data-sourcepos="3:1-3:56" dir="auto">This reference tag is a mix of letters and numbers. <sup class="footnote-ref"><a href="#fn-footnote-2717" id="fnref-footnote-2717" data-footnote-ref="">2</a></sup></p> <section class="footnotes" data-footnotes><ol> <li id="fn-1-2717"> <p data-sourcepos="5:7-5:41">This is the text inside a footnote. <a href="#fnref-1-2717" aria-label="Back to content" class="footnote-backref" data-footnote-backref=""><gl-emoji title="leftwards arrow with hook" data-name="leftwards_arrow_with_hook" data-unicode-version="1.1">↩</gl-emoji></a></p> </li> - <li id="fn-2-2717"> - <p data-sourcepos="6:7-6:31">This is another footnote. <a href="#fnref-2-2717" aria-label="Back to content" class="footnote-backref" data-footnote-backref=""><gl-emoji title="leftwards arrow with hook" data-name="leftwards_arrow_with_hook" data-unicode-version="1.1">↩</gl-emoji></a></p> + <li id="fn-footnote-2717"> + <p data-sourcepos="6:7-6:31">This is another footnote. <a href="#fnref-footnote-2717" aria-label="Back to content" class="footnote-backref" data-footnote-backref=""><gl-emoji title="leftwards arrow with hook" data-name="leftwards_arrow_with_hook" data-unicode-version="1.1">↩</gl-emoji></a></p> </li> </ol></section> diff --git a/spec/frontend/content_editor/components/wrappers/footnote_definition_spec.js b/spec/frontend/content_editor/components/wrappers/footnote_definition_spec.js new file mode 100644 index 00000000000..1ff750eb2ac --- /dev/null +++ b/spec/frontend/content_editor/components/wrappers/footnote_definition_spec.js @@ -0,0 +1,30 @@ +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import FootnoteDefinitionWrapper from '~/content_editor/components/wrappers/footnote_definition.vue'; + +describe('content/components/wrappers/footnote_definition', () => { + let wrapper; + + const createWrapper = async (node = {}) => { + wrapper = shallowMountExtended(FootnoteDefinitionWrapper, { + propsData: { + node, + }, + }); + }; + + afterEach(() => { + wrapper.destroy(); + }); + + it('renders footnote label as a readyonly element', () => { + const label = 'footnote'; + + createWrapper({ + attrs: { + label, + }, + }); + expect(wrapper.text()).toContain(label); + expect(wrapper.findByTestId('footnote-label').attributes().contenteditable).toBe('false'); + }); +}); diff --git a/spec/frontend/content_editor/services/markdown_serializer_spec.js b/spec/frontend/content_editor/services/markdown_serializer_spec.js index df0f6f3c00d..ba869cdd86a 100644 --- a/spec/frontend/content_editor/services/markdown_serializer_spec.js +++ b/spec/frontend/content_editor/services/markdown_serializer_spec.js @@ -13,7 +13,6 @@ import Figure from '~/content_editor/extensions/figure'; import FigureCaption from '~/content_editor/extensions/figure_caption'; import FootnoteDefinition from '~/content_editor/extensions/footnote_definition'; import FootnoteReference from '~/content_editor/extensions/footnote_reference'; -import FootnotesSection from '~/content_editor/extensions/footnotes_section'; import HardBreak from '~/content_editor/extensions/hard_break'; import Heading from '~/content_editor/extensions/heading'; import HorizontalRule from '~/content_editor/extensions/horizontal_rule'; @@ -53,7 +52,6 @@ const tiptapEditor = createTestEditor({ Emoji, FootnoteDefinition, FootnoteReference, - FootnotesSection, Figure, FigureCaption, HardBreak, @@ -92,7 +90,6 @@ const { emoji, footnoteDefinition, footnoteReference, - footnotesSection, figure, figureCaption, heading, @@ -131,7 +128,6 @@ const { figureCaption: { nodeType: FigureCaption.name }, footnoteDefinition: { nodeType: FootnoteDefinition.name }, footnoteReference: { nodeType: FootnoteReference.name }, - footnotesSection: { nodeType: FootnotesSection.name }, hardBreak: { nodeType: HardBreak.name }, heading: { nodeType: Heading.name }, horizontalRule: { nodeType: HorizontalRule.name }, @@ -1147,18 +1143,15 @@ there it('correctly serializes footnotes', () => { expect( serialize( - paragraph( - 'Oranges are orange ', - footnoteReference({ footnoteId: '1', footnoteNumber: '1' }), - ), - footnotesSection(footnoteDefinition(paragraph('Oranges are fruits'))), + paragraph('Oranges are orange ', footnoteReference({ label: '1', identifier: '1' })), + footnoteDefinition({ label: '1', identifier: '1' }, 'Oranges are fruits'), ), ).toBe( ` Oranges are orange [^1] [^1]: Oranges are fruits - `.trim(), +`.trimLeft(), ); }); diff --git a/spec/frontend/merge_conflicts/components/merge_conflict_resolver_app_spec.js b/spec/frontend/merge_conflicts/components/merge_conflict_resolver_app_spec.js index 55e666609bd..4fdc4024e10 100644 --- a/spec/frontend/merge_conflicts/components/merge_conflict_resolver_app_spec.js +++ b/spec/frontend/merge_conflicts/components/merge_conflict_resolver_app_spec.js @@ -59,7 +59,7 @@ describe('Merge Conflict Resolver App', () => { const title = findConflictsCount(); expect(title.exists()).toBe(true); - expect(title.text().trim()).toBe('Showing 3 conflicts between test-conflicts and main'); + expect(title.text().trim()).toBe('Showing 3 conflicts'); }); it('shows a loading spinner while loading', () => { diff --git a/spec/frontend/packages_and_registries/settings/project/settings/components/__snapshots__/settings_form_spec.js.snap b/spec/frontend/packages_and_registries/settings/project/settings/components/__snapshots__/container_expiration_policy_form_spec.js.snap index 841a9bf8290..faa313118f3 100644 --- a/spec/frontend/packages_and_registries/settings/project/settings/components/__snapshots__/settings_form_spec.js.snap +++ b/spec/frontend/packages_and_registries/settings/project/settings/components/__snapshots__/container_expiration_policy_form_spec.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Settings Form Cadence matches snapshot 1`] = ` +exports[`Container Expiration Policy Settings Form Cadence matches snapshot 1`] = ` <expiration-dropdown-stub class="gl-mr-7 gl-mb-0!" data-testid="cadence-dropdown" @@ -11,7 +11,7 @@ exports[`Settings Form Cadence matches snapshot 1`] = ` /> `; -exports[`Settings Form Enable matches snapshot 1`] = ` +exports[`Container Expiration Policy Settings Form Enable matches snapshot 1`] = ` <expiration-toggle-stub class="gl-mb-0!" data-testid="enable-toggle" @@ -19,7 +19,7 @@ exports[`Settings Form Enable matches snapshot 1`] = ` /> `; -exports[`Settings Form Keep N matches snapshot 1`] = ` +exports[`Container Expiration Policy Settings Form Keep N matches snapshot 1`] = ` <expiration-dropdown-stub data-testid="keep-n-dropdown" formoptions="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]" @@ -29,7 +29,7 @@ exports[`Settings Form Keep N matches snapshot 1`] = ` /> `; -exports[`Settings Form Keep Regex matches snapshot 1`] = ` +exports[`Container Expiration Policy Settings Form Keep Regex matches snapshot 1`] = ` <expiration-input-stub data-testid="keep-regex-input" description="Tags with names that match this regex pattern are kept. %{linkStart}View regex examples.%{linkEnd}" @@ -41,7 +41,7 @@ exports[`Settings Form Keep Regex matches snapshot 1`] = ` /> `; -exports[`Settings Form OlderThan matches snapshot 1`] = ` +exports[`Container Expiration Policy Settings Form OlderThan matches snapshot 1`] = ` <expiration-dropdown-stub data-testid="older-than-dropdown" formoptions="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]" @@ -51,7 +51,7 @@ exports[`Settings Form OlderThan matches snapshot 1`] = ` /> `; -exports[`Settings Form Remove regex matches snapshot 1`] = ` +exports[`Container Expiration Policy Settings Form Remove regex matches snapshot 1`] = ` <expiration-input-stub data-testid="remove-regex-input" description="Tags with names that match this regex pattern are removed. %{linkStart}View regex examples.%{linkEnd}" diff --git a/spec/frontend/packages_and_registries/settings/project/settings/components/settings_form_spec.js b/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_form_spec.js index 465e6dc73e2..ca44e77e694 100644 --- a/spec/frontend/packages_and_registries/settings/project/settings/components/settings_form_spec.js +++ b/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_form_spec.js @@ -4,7 +4,7 @@ import Vue, { nextTick } from 'vue'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; import { GlCard, GlLoadingIcon } from 'jest/packages_and_registries/shared/stubs'; -import component from '~/packages_and_registries/settings/project/components/settings_form.vue'; +import component from '~/packages_and_registries/settings/project/components/container_expiration_policy_form.vue'; import { UPDATE_SETTINGS_ERROR_MESSAGE, UPDATE_SETTINGS_SUCCESS_MESSAGE, @@ -14,7 +14,7 @@ import expirationPolicyQuery from '~/packages_and_registries/settings/project/gr import Tracking from '~/tracking'; import { expirationPolicyPayload, expirationPolicyMutationPayload } from '../mock_data'; -describe('Settings Form', () => { +describe('Container Expiration Policy Settings Form', () => { let wrapper; let fakeApollo; diff --git a/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_spec.js b/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_spec.js new file mode 100644 index 00000000000..aa3506771fa --- /dev/null +++ b/spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_spec.js @@ -0,0 +1,167 @@ +import { GlAlert, GlSprintf, GlLink } from '@gitlab/ui'; +import { shallowMount } from '@vue/test-utils'; +import Vue from 'vue'; +import VueApollo from 'vue-apollo'; +import createMockApollo from 'helpers/mock_apollo_helper'; +import waitForPromises from 'helpers/wait_for_promises'; +import component from '~/packages_and_registries/settings/project/components/container_expiration_policy.vue'; +import ContainerExpirationPolicyForm from '~/packages_and_registries/settings/project/components/container_expiration_policy_form.vue'; +import { + FETCH_SETTINGS_ERROR_MESSAGE, + UNAVAILABLE_FEATURE_INTRO_TEXT, + UNAVAILABLE_USER_FEATURE_TEXT, +} from '~/packages_and_registries/settings/project/constants'; +import expirationPolicyQuery from '~/packages_and_registries/settings/project/graphql/queries/get_expiration_policy.query.graphql'; +import SettingsBlock from '~/vue_shared/components/settings/settings_block.vue'; + +import { + expirationPolicyPayload, + emptyExpirationPolicyPayload, + containerExpirationPolicyData, +} from '../mock_data'; + +describe('Container expiration policy project settings', () => { + let wrapper; + let fakeApollo; + + const defaultProvidedValues = { + projectPath: 'path', + isAdmin: false, + adminSettingsPath: 'settingsPath', + enableHistoricEntries: false, + helpPagePath: 'helpPagePath', + showCleanupPolicyLink: false, + }; + + const findFormComponent = () => wrapper.find(ContainerExpirationPolicyForm); + const findAlert = () => wrapper.find(GlAlert); + const findSettingsBlock = () => wrapper.find(SettingsBlock); + + const mountComponent = (provide = defaultProvidedValues, config) => { + wrapper = shallowMount(component, { + stubs: { + GlSprintf, + SettingsBlock, + }, + mocks: { + $toast: { + show: jest.fn(), + }, + }, + provide, + ...config, + }); + }; + + const mountComponentWithApollo = ({ provide = defaultProvidedValues, resolver } = {}) => { + Vue.use(VueApollo); + + const requestHandlers = [[expirationPolicyQuery, resolver]]; + + fakeApollo = createMockApollo(requestHandlers); + mountComponent(provide, { + apolloProvider: fakeApollo, + }); + }; + + afterEach(() => { + wrapper.destroy(); + }); + + describe('isEdited status', () => { + it.each` + description | apiResponse | workingCopy | result + ${'empty response and no changes from user'} | ${emptyExpirationPolicyPayload()} | ${{}} | ${false} + ${'empty response and changes from user'} | ${emptyExpirationPolicyPayload()} | ${{ enabled: true }} | ${true} + ${'response and no changes'} | ${expirationPolicyPayload()} | ${containerExpirationPolicyData()} | ${false} + ${'response and changes'} | ${expirationPolicyPayload()} | ${{ ...containerExpirationPolicyData(), nameRegex: '12345' }} | ${true} + ${'response and empty'} | ${expirationPolicyPayload()} | ${{}} | ${true} + `('$description', async ({ apiResponse, workingCopy, result }) => { + mountComponentWithApollo({ + provide: { ...defaultProvidedValues, enableHistoricEntries: true }, + resolver: jest.fn().mockResolvedValue(apiResponse), + }); + await waitForPromises(); + + findFormComponent().vm.$emit('input', workingCopy); + + await waitForPromises(); + + expect(findFormComponent().props('isEdited')).toBe(result); + }); + }); + + it('renders the setting form', async () => { + mountComponentWithApollo({ + resolver: jest.fn().mockResolvedValue(expirationPolicyPayload()), + }); + await waitForPromises(); + + expect(findFormComponent().exists()).toBe(true); + expect(findSettingsBlock().props('collapsible')).toBe(false); + }); + + describe('the form is disabled', () => { + it('the form is hidden', () => { + mountComponent(); + + expect(findFormComponent().exists()).toBe(false); + }); + + it('shows an alert', () => { + mountComponent(); + + const text = findAlert().text(); + expect(text).toContain(UNAVAILABLE_FEATURE_INTRO_TEXT); + expect(text).toContain(UNAVAILABLE_USER_FEATURE_TEXT); + }); + + describe('an admin is visiting the page', () => { + it('shows the admin part of the alert message', () => { + mountComponent({ ...defaultProvidedValues, isAdmin: true }); + + const sprintf = findAlert().find(GlSprintf); + expect(sprintf.text()).toBe('administration settings'); + expect(sprintf.find(GlLink).attributes('href')).toBe( + defaultProvidedValues.adminSettingsPath, + ); + }); + }); + }); + + describe('fetchSettingsError', () => { + beforeEach(async () => { + mountComponentWithApollo({ + resolver: jest.fn().mockRejectedValue(new Error('GraphQL error')), + }); + await waitForPromises(); + }); + + it('the form is hidden', () => { + expect(findFormComponent().exists()).toBe(false); + }); + + it('shows an alert', () => { + expect(findAlert().html()).toContain(FETCH_SETTINGS_ERROR_MESSAGE); + }); + }); + + describe('empty API response', () => { + it.each` + enableHistoricEntries | isShown + ${true} | ${true} + ${false} | ${false} + `('is $isShown that the form is shown', async ({ enableHistoricEntries, isShown }) => { + mountComponentWithApollo({ + provide: { + ...defaultProvidedValues, + enableHistoricEntries, + }, + resolver: jest.fn().mockResolvedValue(emptyExpirationPolicyPayload()), + }); + await waitForPromises(); + + expect(findFormComponent().exists()).toBe(isShown); + }); + }); +}); diff --git a/spec/frontend/packages_and_registries/settings/project/settings/components/registry_settings_app_spec.js b/spec/frontend/packages_and_registries/settings/project/settings/components/registry_settings_app_spec.js index 0a72f0269ee..337991dfae0 100644 --- a/spec/frontend/packages_and_registries/settings/project/settings/components/registry_settings_app_spec.js +++ b/spec/frontend/packages_and_registries/settings/project/settings/components/registry_settings_app_spec.js @@ -1,165 +1,19 @@ -import { GlAlert, GlSprintf, GlLink } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; -import Vue from 'vue'; -import VueApollo from 'vue-apollo'; -import createMockApollo from 'helpers/mock_apollo_helper'; -import waitForPromises from 'helpers/wait_for_promises'; import component from '~/packages_and_registries/settings/project/components/registry_settings_app.vue'; -import SettingsForm from '~/packages_and_registries/settings/project/components/settings_form.vue'; -import { - FETCH_SETTINGS_ERROR_MESSAGE, - UNAVAILABLE_FEATURE_INTRO_TEXT, - UNAVAILABLE_USER_FEATURE_TEXT, -} from '~/packages_and_registries/settings/project/constants'; -import expirationPolicyQuery from '~/packages_and_registries/settings/project/graphql/queries/get_expiration_policy.query.graphql'; -import SettingsBlock from '~/vue_shared/components/settings/settings_block.vue'; +import ContainerExpirationPolicy from '~/packages_and_registries/settings/project/components/container_expiration_policy.vue'; -import { - expirationPolicyPayload, - emptyExpirationPolicyPayload, - containerExpirationPolicyData, -} from '../mock_data'; - -describe('Registry Settings App', () => { +describe('Registry Settings app', () => { let wrapper; - let fakeApollo; - - const defaultProvidedValues = { - projectPath: 'path', - isAdmin: false, - adminSettingsPath: 'settingsPath', - enableHistoricEntries: false, - helpPagePath: 'helpPagePath', - showCleanupPolicyLink: false, - }; - - const findSettingsComponent = () => wrapper.find(SettingsForm); - const findAlert = () => wrapper.find(GlAlert); - - const mountComponent = (provide = defaultProvidedValues, config) => { - wrapper = shallowMount(component, { - stubs: { - GlSprintf, - SettingsBlock, - }, - mocks: { - $toast: { - show: jest.fn(), - }, - }, - provide, - ...config, - }); - }; - - const mountComponentWithApollo = ({ provide = defaultProvidedValues, resolver } = {}) => { - Vue.use(VueApollo); - - const requestHandlers = [[expirationPolicyQuery, resolver]]; - - fakeApollo = createMockApollo(requestHandlers); - mountComponent(provide, { - apolloProvider: fakeApollo, - }); - }; + const findContainerExpirationPolicy = () => wrapper.find(ContainerExpirationPolicy); afterEach(() => { wrapper.destroy(); + wrapper = null; }); - describe('isEdited status', () => { - it.each` - description | apiResponse | workingCopy | result - ${'empty response and no changes from user'} | ${emptyExpirationPolicyPayload()} | ${{}} | ${false} - ${'empty response and changes from user'} | ${emptyExpirationPolicyPayload()} | ${{ enabled: true }} | ${true} - ${'response and no changes'} | ${expirationPolicyPayload()} | ${containerExpirationPolicyData()} | ${false} - ${'response and changes'} | ${expirationPolicyPayload()} | ${{ ...containerExpirationPolicyData(), nameRegex: '12345' }} | ${true} - ${'response and empty'} | ${expirationPolicyPayload()} | ${{}} | ${true} - `('$description', async ({ apiResponse, workingCopy, result }) => { - mountComponentWithApollo({ - provide: { ...defaultProvidedValues, enableHistoricEntries: true }, - resolver: jest.fn().mockResolvedValue(apiResponse), - }); - await waitForPromises(); - - findSettingsComponent().vm.$emit('input', workingCopy); - - await waitForPromises(); - - expect(findSettingsComponent().props('isEdited')).toBe(result); - }); - }); - - it('renders the setting form', async () => { - mountComponentWithApollo({ - resolver: jest.fn().mockResolvedValue(expirationPolicyPayload()), - }); - await waitForPromises(); - - expect(findSettingsComponent().exists()).toBe(true); - }); - - describe('the form is disabled', () => { - it('the form is hidden', () => { - mountComponent(); - - expect(findSettingsComponent().exists()).toBe(false); - }); - - it('shows an alert', () => { - mountComponent(); - - const text = findAlert().text(); - expect(text).toContain(UNAVAILABLE_FEATURE_INTRO_TEXT); - expect(text).toContain(UNAVAILABLE_USER_FEATURE_TEXT); - }); - - describe('an admin is visiting the page', () => { - it('shows the admin part of the alert message', () => { - mountComponent({ ...defaultProvidedValues, isAdmin: true }); - - const sprintf = findAlert().find(GlSprintf); - expect(sprintf.text()).toBe('administration settings'); - expect(sprintf.find(GlLink).attributes('href')).toBe( - defaultProvidedValues.adminSettingsPath, - ); - }); - }); - }); - - describe('fetchSettingsError', () => { - beforeEach(async () => { - mountComponentWithApollo({ - resolver: jest.fn().mockRejectedValue(new Error('GraphQL error')), - }); - await waitForPromises(); - }); - - it('the form is hidden', () => { - expect(findSettingsComponent().exists()).toBe(false); - }); - - it('shows an alert', () => { - expect(findAlert().html()).toContain(FETCH_SETTINGS_ERROR_MESSAGE); - }); - }); - - describe('empty API response', () => { - it.each` - enableHistoricEntries | isShown - ${true} | ${true} - ${false} | ${false} - `('is $isShown that the form is shown', async ({ enableHistoricEntries, isShown }) => { - mountComponentWithApollo({ - provide: { - ...defaultProvidedValues, - enableHistoricEntries, - }, - resolver: jest.fn().mockResolvedValue(emptyExpirationPolicyPayload()), - }); - await waitForPromises(); + it('renders container expiration policy component', () => { + wrapper = shallowMount(component); - expect(findSettingsComponent().exists()).toBe(isShown); - }); + expect(findContainerExpirationPolicy().exists()).toBe(true); }); }); diff --git a/spec/frontend/vue_mr_widget/components/terraform/mr_widget_terraform_container_spec.js b/spec/frontend/vue_mr_widget/components/terraform/mr_widget_terraform_container_spec.js index b7c22b403aa..8f20d6a8fc9 100644 --- a/spec/frontend/vue_mr_widget/components/terraform/mr_widget_terraform_container_spec.js +++ b/spec/frontend/vue_mr_widget/components/terraform/mr_widget_terraform_container_spec.js @@ -1,4 +1,4 @@ -import { GlDeprecatedSkeletonLoading as GlSkeletonLoading, GlSprintf } from '@gitlab/ui'; +import { GlSkeletonLoader, GlSprintf } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import MockAdapter from 'axios-mock-adapter'; import { nextTick } from 'vue'; @@ -51,7 +51,7 @@ describe('MrWidgetTerraformConainer', () => { }); it('diplays loading skeleton', () => { - expect(wrapper.find(GlSkeletonLoading).exists()).toBe(true); + expect(wrapper.findComponent(GlSkeletonLoader).exists()).toBe(true); expect(wrapper.find(MrWidgetExpanableSection).exists()).toBe(false); }); }); @@ -63,7 +63,7 @@ describe('MrWidgetTerraformConainer', () => { }); it('displays terraform content', () => { - expect(wrapper.find(GlSkeletonLoading).exists()).toBe(false); + expect(wrapper.findComponent(GlSkeletonLoader).exists()).toBe(false); expect(wrapper.find(MrWidgetExpanableSection).exists()).toBe(true); expect(findPlans()).toEqual(Object.values(plans)); }); @@ -158,7 +158,7 @@ describe('MrWidgetTerraformConainer', () => { }); it('stops loading', () => { - expect(wrapper.find(GlSkeletonLoading).exists()).toBe(false); + expect(wrapper.findComponent(GlSkeletonLoader).exists()).toBe(false); }); it('generates one broken plan', () => { diff --git a/spec/frontend/vue_shared/alert_details/alert_details_spec.js b/spec/frontend/vue_shared/alert_details/alert_details_spec.js index 7aa54a1c55a..ce51af31a70 100644 --- a/spec/frontend/vue_shared/alert_details/alert_details_spec.js +++ b/spec/frontend/vue_shared/alert_details/alert_details_spec.js @@ -201,28 +201,6 @@ describe('AlertDetails', () => { }); }); - describe('Threat Monitoring details', () => { - it('should not render the metrics tab', () => { - mountComponent({ - data: { alert: mockAlert }, - provide: { isThreatMonitoringPage: true }, - }); - expect(findMetricsTab().exists()).toBe(false); - }); - - it('should display "View incident" button that links the issues page when incident exists', () => { - const iid = '3'; - mountComponent({ - data: { alert: { ...mockAlert, issue: { iid } }, sidebarStatus: false }, - provide: { isThreatMonitoringPage: true }, - }); - - expect(findViewIncidentBtn().exists()).toBe(true); - expect(findViewIncidentBtn().attributes('href')).toBe(joinPaths(projectIssuesPath, iid)); - expect(findCreateIncidentBtn().exists()).toBe(false); - }); - }); - describe('Create incident from alert', () => { it('should display "View incident" button that links the incident page when incident exists', () => { const iid = '3'; diff --git a/spec/frontend_integration/content_editor/content_editor_integration_spec.js b/spec/frontend_integration/content_editor/content_editor_integration_spec.js index 1b45c0d43a3..89b8d8d6d94 100644 --- a/spec/frontend_integration/content_editor/content_editor_integration_spec.js +++ b/spec/frontend_integration/content_editor/content_editor_integration_spec.js @@ -60,4 +60,30 @@ describe('content_editor', () => { }); }); }); + + it('renders footnote ids alongside the footnote definition', async () => { + buildWrapper(); + + renderMarkdown.mockResolvedValue(` + <p data-sourcepos="3:1-3:56" dir="auto"> + This reference tag is a mix of letters and numbers. <sup class="footnote-ref"><a href="#fn-footnote-2717" id="fnref-footnote-2717" data-footnote-ref="">2</a></sup> + </p> + <section class="footnotes" data-footnotes> + <ol> + <li id="fn-footnote-2717"> + <p data-sourcepos="6:7-6:31">This is another footnote. <a href="#fnref-footnote-2717" aria-label="Back to content" class="footnote-backref" data-footnote-backref=""><gl-emoji title="leftwards arrow with hook" data-name="leftwards_arrow_with_hook" data-unicode-version="1.1">↩</gl-emoji></a></p> + </li> + </ol> + </section> + `); + + await contentEditorService.setSerializedContent(` + This reference tag is a mix of letters and numbers [^footnote]. + + [^footnote]: This is another footnote. + `); + await nextTick(); + + expect(wrapper.text()).toContain('footnote: This is another footnote'); + }); }); diff --git a/spec/helpers/storage_helper_spec.rb b/spec/helpers/storage_helper_spec.rb index 5bc4024ae24..c2c508cf485 100644 --- a/spec/helpers/storage_helper_spec.rb +++ b/spec/helpers/storage_helper_spec.rb @@ -51,7 +51,7 @@ RSpec.describe StorageHelper do end end - describe "storage_enforcement_banner" do + describe "storage_enforcement_banner", :saas do let_it_be_with_refind(:current_user) { create(:user) } let_it_be(:free_group) { create(:group) } let_it_be(:paid_group) { create(:group) } @@ -60,8 +60,9 @@ RSpec.describe StorageHelper do allow(helper).to receive(:can?).with(current_user, :admin_namespace, free_group).and_return(true) allow(helper).to receive(:can?).with(current_user, :admin_namespace, paid_group).and_return(true) allow(helper).to receive(:current_user) { current_user } - allow(Gitlab).to receive(:com?).and_return(true) allow(paid_group).to receive(:paid?).and_return(true) + + stub_feature_flags(namespace_storage_limit_bypass_date_check: false) end describe "#storage_enforcement_banner_info" do @@ -108,6 +109,28 @@ RSpec.describe StorageHelper do expect(helper.storage_enforcement_banner_info(free_group)[:text]).to eql("From #{storage_enforcement_date} storage limits will apply to this namespace. You are currently using 100 KB of namespace storage. View and manage your usage from <strong>Group settings > Usage quotas</strong>.") end end + + context 'when the given group is a sub-group' do + let_it_be(:sub_group) { build(:group) } + + before do + allow(sub_group).to receive(:root_ancestor).and_return(free_group) + end + + it 'returns the banner hash' do + expect(helper.storage_enforcement_banner_info(sub_group).keys).to match_array(%i(text variant callouts_feature_name callouts_path learn_more_link)) + end + end + end + end + + context 'when the :storage_banner_bypass_date_check is enabled', :freeze_time do + before do + stub_feature_flags(namespace_storage_limit_bypass_date_check: true) + end + + it 'returns the enforcement info' do + expect(helper.storage_enforcement_banner_info(free_group)[:text]).to include("From #{Date.current} storage limits will apply to this namespace.") end end diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index eab82de0b01..96e06e617d5 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -2258,10 +2258,24 @@ RSpec.describe Namespace do describe 'storage_enforcement_date' do let_it_be(:namespace) { create(:group) } + before do + stub_feature_flags(namespace_storage_limit_bypass_date_check: false) + end + # Date TBD: https://gitlab.com/gitlab-org/gitlab/-/issues/350632 - it 'returns false' do + it 'returns nil' do expect(namespace.storage_enforcement_date).to be(nil) end + + context 'when :storage_banner_bypass_date_check is enabled' do + before do + stub_feature_flags(namespace_storage_limit_bypass_date_check: true) + end + + it 'returns the current date', :freeze_time do + expect(namespace.storage_enforcement_date).to eq(Date.current) + end + end end describe 'serialization' do diff --git a/spec/support/shared_examples/features/container_registry_shared_examples.rb b/spec/support/shared_examples/features/container_registry_shared_examples.rb index 6aa7e6e6270..784f82fdda1 100644 --- a/spec/support/shared_examples/features/container_registry_shared_examples.rb +++ b/spec/support/shared_examples/features/container_registry_shared_examples.rb @@ -19,8 +19,7 @@ RSpec.shared_examples 'rejecting tags destruction for an importing repository on expect(find('.modal .modal-title')).to have_content _('Remove tag') find('.modal .modal-footer .btn-danger').click - alert_body = find('.gl-alert-body') - expect(alert_body).to have_content('Tags temporarily cannot be marked for deletion. Please try again in a few minutes.') - expect(alert_body).to have_link('More details', href: help_page_path('user/packages/container_registry/index', anchor: 'tags-temporarily-cannot-be-marked-for-deletion')) + expect(page).to have_content('Tags temporarily cannot be marked for deletion. Please try again in a few minutes.') + expect(page).to have_link('More details', href: help_page_path('user/packages/container_registry/index', anchor: 'tags-temporarily-cannot-be-marked-for-deletion')) end end diff --git a/spec/workers/concerns/worker_attributes_spec.rb b/spec/workers/concerns/worker_attributes_spec.rb index ad9d5eeccbe..5e8f68923fd 100644 --- a/spec/workers/concerns/worker_attributes_spec.rb +++ b/spec/workers/concerns/worker_attributes_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe WorkerAttributes do + using RSpec::Parameterized::TableSyntax + let(:worker) do Class.new do def self.name @@ -13,21 +15,64 @@ RSpec.describe WorkerAttributes do end end - describe '.data_consistency' do - context 'with valid data_consistency' do - it 'returns correct data_consistency' do - worker.data_consistency(:sticky) - - expect(worker.get_data_consistency).to eq(:sticky) + let(:child_worker) do + Class.new(worker) do + def self.name + "TestChildworker" end end + end + + describe 'class attributes' do + # rubocop: disable Layout/LineLength + where(:getter, :setter, :default, :values, :expected) do + :get_feature_category | :feature_category | nil | [:foo] | :foo + :get_urgency | :urgency | :low | [:high] | :high + :get_data_consistency | :data_consistency | :always | [:sticky] | :sticky + :get_worker_resource_boundary | :worker_resource_boundary | :unknown | [:cpu] | :cpu + :get_weight | :weight | 1 | [3] | 3 + :get_tags | :tags | [] | [:foo, :bar] | [:foo, :bar] + :get_deduplicate_strategy | :deduplicate | :until_executing | [:none] | :none + :get_deduplication_options | :deduplicate | {} | [:none, including_scheduled: true] | { including_scheduled: true } + :worker_has_external_dependencies? | :worker_has_external_dependencies! | false | [] | true + :idempotent? | :idempotent! | false | [] | true + :big_payload? | :big_payload! | false | [] | true + end + # rubocop: enable Layout/LineLength + + with_them do + context 'when the attribute is set' do + before do + worker.public_send(setter, *values) + end + + it 'returns the expected value' do + expect(worker.public_send(getter)).to eq(expected) + expect(child_worker.public_send(getter)).to eq(expected) + end + end + + context 'when the attribute is not set' do + it 'returns the default value' do + expect(worker.public_send(getter)).to eq(default) + expect(child_worker.public_send(getter)).to eq(default) + end + end + + context 'when the attribute is set in the child worker' do + before do + child_worker.public_send(setter, *values) + end - context 'when data_consistency is not provided' do - it 'defaults to :always' do - expect(worker.get_data_consistency).to eq(:always) + it 'returns the default value for the parent, and the expected value for the child' do + expect(worker.public_send(getter)).to eq(default) + expect(child_worker.public_send(getter)).to eq(expected) + end end end + end + describe '.data_consistency' do context 'with invalid data_consistency' do it 'raise exception' do expect { worker.data_consistency(:invalid) } @@ -45,36 +90,12 @@ RSpec.describe WorkerAttributes do it 'returns correct feature flag value' do worker.data_consistency(:sticky, feature_flag: :test_feature_flag) - expect(worker.get_data_consistency_feature_flag_enabled?).not_to be_truthy + expect(worker.get_data_consistency_feature_flag_enabled?).not_to be(true) + expect(child_worker.get_data_consistency_feature_flag_enabled?).not_to be(true) end end end - describe '.idempotent?' do - subject(:idempotent?) { worker.idempotent? } - - context 'when the worker is idempotent' do - before do - worker.idempotent! - end - - it { is_expected.to be_truthy } - end - - context 'when the worker is not idempotent' do - it { is_expected.to be_falsey } - end - end - - describe '.deduplicate' do - it 'sets deduplication_strategy and deduplication_options' do - worker.deduplicate(:until_executing, including_scheduled: true) - - expect(worker.send(:class_attributes)[:deduplication_strategy]).to eq(:until_executing) - expect(worker.send(:class_attributes)[:deduplication_options]).to eq(including_scheduled: true) - end - end - describe '#deduplication_enabled?' do subject(:deduplication_enabled?) { worker.deduplication_enabled? } @@ -83,7 +104,10 @@ RSpec.describe WorkerAttributes do worker.deduplicate(:until_executing) end - it { is_expected.to eq(true) } + it 'returns true' do + expect(worker.deduplication_enabled?).to be(true) + expect(child_worker.deduplication_enabled?).to be(true) + end end context 'when feature flag is set' do @@ -99,7 +123,10 @@ RSpec.describe WorkerAttributes do stub_feature_flags(my_feature_flag: true) end - it { is_expected.to eq(true) } + it 'returns true' do + expect(worker.deduplication_enabled?).to be(true) + expect(child_worker.deduplication_enabled?).to be(true) + end end context 'when the FF is disabled' do @@ -107,7 +134,10 @@ RSpec.describe WorkerAttributes do stub_feature_flags(my_feature_flag: false) end - it { is_expected.to eq(false) } + it 'returns false' do + expect(worker.deduplication_enabled?).to be(false) + expect(child_worker.deduplication_enabled?).to be(false) + end end end end |