summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-06-08 15:08:15 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-06-08 15:08:15 +0000
commite18e22ce4c7a4ee0680adda25e4cfa9cf4bb1be4 (patch)
treead5cdd2a994e9ae4627330769eb5004f49d6f435
parentcdda3d117c99cadf295f26abc92cb2456033b762 (diff)
downloadgitlab-ce-e18e22ce4c7a4ee0680adda25e4cfa9cf4bb1be4.tar.gz
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue28
-rw-r--r--app/assets/javascripts/content_editor/extensions/footnote_definition.js28
-rw-r--r--app/assets/javascripts/content_editor/extensions/footnote_reference.js15
-rw-r--r--app/assets/javascripts/content_editor/extensions/footnotes_section.js5
-rw-r--r--app/assets/javascripts/content_editor/services/markdown_serializer.js16
-rw-r--r--app/assets/javascripts/environments/components/environment_form.vue29
-rw-r--r--app/assets/javascripts/feature_flags/components/feature_flags_table.vue20
-rw-r--r--app/assets/javascripts/google_cloud/components/gcp_regions_list.vue2
-rw-r--r--app/assets/javascripts/issuable/components/status_box.vue2
-rw-r--r--app/assets/javascripts/issues/list/components/issues_list_app.vue2
-rw-r--r--app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue2
-rw-r--r--app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy.vue124
-rw-r--r--app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue (renamed from app/assets/javascripts/packages_and_registries/settings/project/components/settings_form.vue)0
-rw-r--r--app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue2
-rw-r--r--app/assets/javascripts/packages_and_registries/settings/project/components/registry_settings_app.vue119
-rw-r--r--app/assets/javascripts/packages_and_registries/settings/project/constants.js4
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/terraform/mr_widget_terraform_container.vue6
-rw-r--r--app/assets/javascripts/vue_shared/alert_details/components/alert_details.vue8
-rw-r--r--app/assets/javascripts/vue_shared/alert_details/constants.js9
-rw-r--r--app/assets/javascripts/vue_shared/alert_details/index.js16
-rw-r--r--app/helpers/storage_helper.rb30
-rw-r--r--app/models/namespace.rb2
-rw-r--r--app/views/projects/pipeline_schedules/_form.html.haml2
-rw-r--r--app/views/projects/pipeline_schedules/new.html.haml1
-rw-r--r--app/workers/all_queues.yml994
-rw-r--r--app/workers/concerns/worker_attributes.rb26
-rw-r--r--config/sidekiq_queues.yml12
-rw-r--r--doc/administration/geo/disaster_recovery/bring_primary_back.md4
-rw-r--r--doc/ci/cloud_services/google_cloud/index.md4
-rw-r--r--doc/ci/runners/configure_runners.md45
-rw-r--r--doc/development/sidekiq/worker_attributes.md5
-rw-r--r--doc/update/index.md42
-rw-r--r--lefthook.yml5
-rw-r--r--locale/gitlab.pot32
-rwxr-xr-xscripts/lint-yaml.sh10
-rw-r--r--spec/commands/sidekiq_cluster/cli_spec.rb11
-rw-r--r--spec/features/groups_spec.rb4
-rw-r--r--spec/features/profiles/user_visits_profile_spec.rb4
-rw-r--r--spec/fixtures/markdown/markdown_golden_master_examples.yml10
-rw-r--r--spec/frontend/content_editor/components/wrappers/footnote_definition_spec.js30
-rw-r--r--spec/frontend/content_editor/services/markdown_serializer_spec.js13
-rw-r--r--spec/frontend/merge_conflicts/components/merge_conflict_resolver_app_spec.js2
-rw-r--r--spec/frontend/packages_and_registries/settings/project/settings/components/__snapshots__/container_expiration_policy_form_spec.js.snap (renamed from spec/frontend/packages_and_registries/settings/project/settings/components/__snapshots__/settings_form_spec.js.snap)12
-rw-r--r--spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_form_spec.js (renamed from spec/frontend/packages_and_registries/settings/project/settings/components/settings_form_spec.js)4
-rw-r--r--spec/frontend/packages_and_registries/settings/project/settings/components/container_expiration_policy_spec.js167
-rw-r--r--spec/frontend/packages_and_registries/settings/project/settings/components/registry_settings_app_spec.js160
-rw-r--r--spec/frontend/vue_mr_widget/components/terraform/mr_widget_terraform_container_spec.js8
-rw-r--r--spec/frontend/vue_shared/alert_details/alert_details_spec.js22
-rw-r--r--spec/frontend_integration/content_editor/content_editor_integration_spec.js26
-rw-r--r--spec/helpers/storage_helper_spec.rb27
-rw-r--r--spec/models/namespace_spec.rb16
-rw-r--r--spec/support/shared_examples/features/container_registry_shared_examples.rb5
-rw-r--r--spec/workers/concerns/worker_attributes_spec.rb106
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 &gt; 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 &gt; 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