Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-09-12 03:10:03 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-09-12 03:10:03 +0300
commit65a27e88f0d422cd19bf3c250762a9b100d56ef1 (patch)
tree5f5e8f73bde40e45443ed72bb58ac55b2a093527 /app
parentab82d93f5ba566b67dd1300da1cafe3ecdd13122 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/ci/ci_variable_list/components/ci_variable_shared.vue3
-rw-r--r--app/assets/javascripts/ci/ci_variable_list/utils.js10
-rw-r--r--app/assets/javascripts/ci/common/private/jobs_filtered_search/app.vue (renamed from app/assets/javascripts/jobs/components/filtered_search/jobs_filtered_search.vue)0
-rw-r--r--app/assets/javascripts/ci/common/private/jobs_filtered_search/constants.js (renamed from app/assets/javascripts/jobs/components/filtered_search/constants.js)0
-rw-r--r--app/assets/javascripts/ci/common/private/jobs_filtered_search/tokens/job_runner_type_token.vue (renamed from app/assets/javascripts/jobs/components/filtered_search/tokens/job_runner_type_token.vue)0
-rw-r--r--app/assets/javascripts/ci/common/private/jobs_filtered_search/tokens/job_status_token.vue (renamed from app/assets/javascripts/jobs/components/filtered_search/tokens/job_status_token.vue)0
-rw-r--r--app/assets/javascripts/ci/common/private/jobs_filtered_search/utils.js (renamed from app/assets/javascripts/jobs/components/filtered_search/utils.js)0
-rw-r--r--app/assets/javascripts/ci/constants.js12
-rw-r--r--app/assets/javascripts/ci/inherited_ci_variables/components/inherited_ci_variables_app.vue2
-rw-r--r--app/assets/javascripts/ci/job_details/components/empty_state.vue (renamed from app/assets/javascripts/jobs/components/job/empty_state.vue)2
-rw-r--r--app/assets/javascripts/ci/job_details/components/environments_block.vue (renamed from app/assets/javascripts/jobs/components/job/environments_block.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/erased_block.vue (renamed from app/assets/javascripts/jobs/components/job/erased_block.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/job_log_controllers.vue (renamed from app/assets/javascripts/jobs/components/job/job_log_controllers.vue)2
-rw-r--r--app/assets/javascripts/ci/job_details/components/log/collapsible_section.vue (renamed from app/assets/javascripts/jobs/components/log/collapsible_section.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/log/duration_badge.vue (renamed from app/assets/javascripts/jobs/components/log/duration_badge.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/log/line.vue (renamed from app/assets/javascripts/jobs/components/log/line.vue)2
-rw-r--r--app/assets/javascripts/ci/job_details/components/log/line_header.vue (renamed from app/assets/javascripts/jobs/components/log/line_header.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/log/line_number.vue (renamed from app/assets/javascripts/jobs/components/log/line_number.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/log/log.vue (renamed from app/assets/javascripts/jobs/components/log/log.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/log/utils.js12
-rw-r--r--app/assets/javascripts/ci/job_details/components/manual_variables_form.vue (renamed from app/assets/javascripts/jobs/components/job/manual_variables_form.vue)12
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/artifacts_block.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/artifacts_block.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/commit_block.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/commit_block.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/job_container_item.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/job_container_item.vue)2
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/job_retry_forward_deployment_modal.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/job_retry_forward_deployment_modal.vue)12
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/job_sidebar_retry_button.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/job_sidebar_retry_button.vue)6
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/jobs_container.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/jobs_container.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/sidebar.vue)5
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/sidebar_detail_row.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/sidebar_detail_row.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/sidebar_header.vue)19
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/sidebar_job_details_container.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/stages_dropdown.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/sidebar/trigger_block.vue (renamed from app/assets/javascripts/jobs/components/job/sidebar/trigger_block.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/stuck_block.vue (renamed from app/assets/javascripts/jobs/components/job/stuck_block.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/components/unmet_prerequisites_block.vue (renamed from app/assets/javascripts/jobs/components/job/unmet_prerequisites_block.vue)0
-rw-r--r--app/assets/javascripts/ci/job_details/graphql/fragments/ci_job.fragment.graphql (renamed from app/assets/javascripts/jobs/components/job/graphql/fragments/ci_job.fragment.graphql)2
-rw-r--r--app/assets/javascripts/ci/job_details/graphql/fragments/ci_variable.fragment.graphql (renamed from app/assets/javascripts/jobs/components/job/graphql/fragments/ci_variable.fragment.graphql)0
-rw-r--r--app/assets/javascripts/ci/job_details/graphql/mutations/job_play_with_variables.mutation.graphql (renamed from app/assets/javascripts/jobs/components/job/graphql/mutations/job_play_with_variables.mutation.graphql)2
-rw-r--r--app/assets/javascripts/ci/job_details/graphql/mutations/job_retry_with_variables.mutation.graphql (renamed from app/assets/javascripts/jobs/components/job/graphql/mutations/job_retry_with_variables.mutation.graphql)2
-rw-r--r--app/assets/javascripts/ci/job_details/graphql/queries/get_job.query.graphql (renamed from app/assets/javascripts/jobs/components/job/graphql/queries/get_job.query.graphql)2
-rw-r--r--app/assets/javascripts/ci/job_details/index.js (renamed from app/assets/javascripts/jobs/index.js)2
-rw-r--r--app/assets/javascripts/ci/job_details/job_app.vue (renamed from app/assets/javascripts/jobs/components/job/job_app.vue)22
-rw-r--r--app/assets/javascripts/ci/job_details/store/actions.js (renamed from app/assets/javascripts/jobs/store/actions.js)2
-rw-r--r--app/assets/javascripts/ci/job_details/store/getters.js (renamed from app/assets/javascripts/jobs/store/getters.js)0
-rw-r--r--app/assets/javascripts/ci/job_details/store/index.js (renamed from app/assets/javascripts/jobs/store/index.js)0
-rw-r--r--app/assets/javascripts/ci/job_details/store/mutation_types.js (renamed from app/assets/javascripts/jobs/store/mutation_types.js)0
-rw-r--r--app/assets/javascripts/ci/job_details/store/mutations.js (renamed from app/assets/javascripts/jobs/store/mutations.js)0
-rw-r--r--app/assets/javascripts/ci/job_details/store/state.js (renamed from app/assets/javascripts/jobs/store/state.js)0
-rw-r--r--app/assets/javascripts/ci/job_details/store/utils.js (renamed from app/assets/javascripts/jobs/store/utils.js)0
-rw-r--r--app/assets/javascripts/ci/job_details/utils.js22
-rw-r--r--app/assets/javascripts/ci/jobs_page/components/job_cells/actions_cell.vue (renamed from app/assets/javascripts/jobs/components/table/cells/actions_cell.vue)14
-rw-r--r--app/assets/javascripts/ci/jobs_page/components/job_cells/duration_cell.vue (renamed from app/assets/javascripts/jobs/components/table/cells/duration_cell.vue)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/components/job_cells/job_cell.vue (renamed from app/assets/javascripts/jobs/components/table/cells/job_cell.vue)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/components/job_cells/pipeline_cell.vue (renamed from app/assets/javascripts/jobs/components/table/cells/pipeline_cell.vue)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/components/jobs_table.vue (renamed from app/assets/javascripts/jobs/components/table/jobs_table.vue)10
-rw-r--r--app/assets/javascripts/ci/jobs_page/components/jobs_table_empty_state.vue (renamed from app/assets/javascripts/jobs/components/table/jobs_table_empty_state.vue)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/components/jobs_table_tabs.vue (renamed from app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/constants.js (renamed from app/assets/javascripts/jobs/components/table/constants.js)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/event_hub.js (renamed from app/assets/javascripts/jobs/components/table/event_hub.js)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/cache_config.js (renamed from app/assets/javascripts/jobs/components/table/graphql/cache_config.js)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/fragments/job.fragment.graphql (renamed from app/assets/javascripts/jobs/components/table/graphql/fragments/job.fragment.graphql)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/mutations/job_cancel.mutation.graphql (renamed from app/assets/javascripts/jobs/components/table/graphql/mutations/job_cancel.mutation.graphql)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/mutations/job_play.mutation.graphql (renamed from app/assets/javascripts/jobs/components/table/graphql/mutations/job_play.mutation.graphql)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/mutations/job_retry.mutation.graphql (renamed from app/assets/javascripts/jobs/components/table/graphql/mutations/job_retry.mutation.graphql)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/mutations/job_unschedule.mutation.graphql (renamed from app/assets/javascripts/jobs/components/table/graphql/mutations/job_unschedule.mutation.graphql)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/queries/get_jobs.query.graphql (renamed from app/assets/javascripts/jobs/components/table/graphql/queries/get_jobs.query.graphql)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/graphql/queries/get_jobs_count.query.graphql (renamed from app/assets/javascripts/jobs/components/table/graphql/queries/get_jobs_count.query.graphql)0
-rw-r--r--app/assets/javascripts/ci/jobs_page/index.js (renamed from app/assets/javascripts/jobs/components/table/index.js)2
-rw-r--r--app/assets/javascripts/ci/jobs_page/jobs_page_app.vue (renamed from app/assets/javascripts/jobs/components/table/jobs_table_app.vue)10
-rw-r--r--app/assets/javascripts/ci/mixins/delayed_job_mixin.js (renamed from app/assets/javascripts/jobs/mixins/delayed_job_mixin.js)0
-rw-r--r--app/assets/javascripts/ci/pipeline_details/graph/components/job_item.vue2
-rw-r--r--app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue6
-rw-r--r--app/assets/javascripts/ci/pipeline_mini_graph/legacy_job_item.vue4
-rw-r--r--app/assets/javascripts/jobs/constants.js40
-rw-r--r--app/assets/javascripts/jobs/utils.js53
-rw-r--r--app/assets/javascripts/pages/admin/jobs/components/constants.js2
-rw-r--r--app/assets/javascripts/pages/admin/jobs/components/table/admin_jobs_table_app.vue10
-rw-r--r--app/assets/javascripts/pages/projects/jobs/index/index.js4
-rw-r--r--app/assets/javascripts/pages/projects/jobs/show/index.js2
-rw-r--r--app/assets/javascripts/security_configuration/utils.js5
-rw-r--r--app/assets/javascripts/super_sidebar/constants.js2
-rw-r--r--app/graphql/types/label_type.rb3
-rw-r--r--app/graphql/types/merge_request_type.rb2
-rw-r--r--app/presenters/projects/security/configuration_presenter.rb3
-rw-r--r--app/services/service_desk_settings/update_service.rb7
-rw-r--r--app/validators/json_schemas/pinned_nav_items.json7
86 files changed, 162 insertions, 183 deletions
diff --git a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_shared.vue b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_shared.vue
index 9786f25ed87..3d5ed327dc7 100644
--- a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_shared.vue
+++ b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_shared.vue
@@ -2,7 +2,8 @@
import { createAlert } from '~/alert';
import { __ } from '~/locale';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
-import { mapEnvironmentNames, reportMessageToSentry } from '../utils';
+import { reportMessageToSentry } from '~/ci/utils';
+import { mapEnvironmentNames } from '../utils';
import {
ADD_MUTATION_ACTION,
DELETE_MUTATION_ACTION,
diff --git a/app/assets/javascripts/ci/ci_variable_list/utils.js b/app/assets/javascripts/ci/ci_variable_list/utils.js
index eeca69274ce..1faa97a5f73 100644
--- a/app/assets/javascripts/ci/ci_variable_list/utils.js
+++ b/app/assets/javascripts/ci/ci_variable_list/utils.js
@@ -1,4 +1,3 @@
-import * as Sentry from '@sentry/browser';
import { uniq } from 'lodash';
import { allEnvironments } from './constants';
@@ -49,12 +48,3 @@ export const convertEnvironmentScope = (environmentScope = '') => {
export const mapEnvironmentNames = (nodes = []) => {
return nodes.map((env) => env.name);
};
-
-export const reportMessageToSentry = (component, message, context) => {
- Sentry.withScope((scope) => {
- // eslint-disable-next-line @gitlab/require-i18n-strings
- scope.setContext('Vue data', context);
- scope.setTag('component', component);
- Sentry.captureMessage(message);
- });
-};
diff --git a/app/assets/javascripts/jobs/components/filtered_search/jobs_filtered_search.vue b/app/assets/javascripts/ci/common/private/jobs_filtered_search/app.vue
index 86ccdb2c87b..86ccdb2c87b 100644
--- a/app/assets/javascripts/jobs/components/filtered_search/jobs_filtered_search.vue
+++ b/app/assets/javascripts/ci/common/private/jobs_filtered_search/app.vue
diff --git a/app/assets/javascripts/jobs/components/filtered_search/constants.js b/app/assets/javascripts/ci/common/private/jobs_filtered_search/constants.js
index 86b8290864c..86b8290864c 100644
--- a/app/assets/javascripts/jobs/components/filtered_search/constants.js
+++ b/app/assets/javascripts/ci/common/private/jobs_filtered_search/constants.js
diff --git a/app/assets/javascripts/jobs/components/filtered_search/tokens/job_runner_type_token.vue b/app/assets/javascripts/ci/common/private/jobs_filtered_search/tokens/job_runner_type_token.vue
index 5bd3693b4d9..5bd3693b4d9 100644
--- a/app/assets/javascripts/jobs/components/filtered_search/tokens/job_runner_type_token.vue
+++ b/app/assets/javascripts/ci/common/private/jobs_filtered_search/tokens/job_runner_type_token.vue
diff --git a/app/assets/javascripts/jobs/components/filtered_search/tokens/job_status_token.vue b/app/assets/javascripts/ci/common/private/jobs_filtered_search/tokens/job_status_token.vue
index aad86ded80a..aad86ded80a 100644
--- a/app/assets/javascripts/jobs/components/filtered_search/tokens/job_status_token.vue
+++ b/app/assets/javascripts/ci/common/private/jobs_filtered_search/tokens/job_status_token.vue
diff --git a/app/assets/javascripts/jobs/components/filtered_search/utils.js b/app/assets/javascripts/ci/common/private/jobs_filtered_search/utils.js
index 43c0da72d3d..43c0da72d3d 100644
--- a/app/assets/javascripts/jobs/components/filtered_search/utils.js
+++ b/app/assets/javascripts/ci/common/private/jobs_filtered_search/utils.js
diff --git a/app/assets/javascripts/ci/constants.js b/app/assets/javascripts/ci/constants.js
new file mode 100644
index 00000000000..7cc41a8731a
--- /dev/null
+++ b/app/assets/javascripts/ci/constants.js
@@ -0,0 +1,12 @@
+import { __ } from '~/locale';
+
+export const forwardDeploymentFailureModalId = 'forward-deployment-failure';
+
+export const JOB_GRAPHQL_ERRORS = {
+ jobMutationErrorText: __('There was an error running the job. Please try again.'),
+ jobQueryErrorText: __('There was an error fetching the job.'),
+};
+
+export const SUCCESS_STATUS = 'SUCCESS';
+export const PASSED_STATUS = 'passed';
+export const MANUAL_STATUS = 'manual';
diff --git a/app/assets/javascripts/ci/inherited_ci_variables/components/inherited_ci_variables_app.vue b/app/assets/javascripts/ci/inherited_ci_variables/components/inherited_ci_variables_app.vue
index 27ee1b794f6..f02d59af1d9 100644
--- a/app/assets/javascripts/ci/inherited_ci_variables/components/inherited_ci_variables_app.vue
+++ b/app/assets/javascripts/ci/inherited_ci_variables/components/inherited_ci_variables_app.vue
@@ -3,7 +3,7 @@ import { produce } from 'immer';
import { s__ } from '~/locale';
import { createAlert } from '~/alert';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
-import { reportMessageToSentry } from '~/ci/ci_variable_list/utils';
+import { reportMessageToSentry } from '~/ci/utils';
import CiVariableTable from '~/ci/ci_variable_list/components/ci_variable_table.vue';
import getInheritedCiVariables from '../graphql/queries/inherited_ci_variables.query.graphql';
diff --git a/app/assets/javascripts/jobs/components/job/empty_state.vue b/app/assets/javascripts/ci/job_details/components/empty_state.vue
index d0a39025807..5756d4a71df 100644
--- a/app/assets/javascripts/jobs/components/job/empty_state.vue
+++ b/app/assets/javascripts/ci/job_details/components/empty_state.vue
@@ -1,6 +1,6 @@
<script>
import { GlLink } from '@gitlab/ui';
-import ManualVariablesForm from '~/jobs/components/job/manual_variables_form.vue';
+import ManualVariablesForm from '~/ci/job_details/components/manual_variables_form.vue';
export default {
components: {
diff --git a/app/assets/javascripts/jobs/components/job/environments_block.vue b/app/assets/javascripts/ci/job_details/components/environments_block.vue
index 4046e1ade82..4046e1ade82 100644
--- a/app/assets/javascripts/jobs/components/job/environments_block.vue
+++ b/app/assets/javascripts/ci/job_details/components/environments_block.vue
diff --git a/app/assets/javascripts/jobs/components/job/erased_block.vue b/app/assets/javascripts/ci/job_details/components/erased_block.vue
index a815689659e..a815689659e 100644
--- a/app/assets/javascripts/jobs/components/job/erased_block.vue
+++ b/app/assets/javascripts/ci/job_details/components/erased_block.vue
diff --git a/app/assets/javascripts/jobs/components/job/job_log_controllers.vue b/app/assets/javascripts/ci/job_details/components/job_log_controllers.vue
index 78204103feb..419efcba46d 100644
--- a/app/assets/javascripts/jobs/components/job/job_log_controllers.vue
+++ b/app/assets/javascripts/ci/job_details/components/job_log_controllers.vue
@@ -3,9 +3,9 @@ import { GlTooltipDirective, GlLink, GlButton, GlSearchBoxByClick } from '@gitla
import { scrollToElement, backOff } from '~/lib/utils/common_utils';
import { numberToHumanSize } from '~/lib/utils/number_utils';
import { __, s__, sprintf } from '~/locale';
+import { compactJobLog } from '~/ci/job_details/utils';
import HelpPopover from '~/vue_shared/components/help_popover.vue';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
-import { compactJobLog } from '../../utils';
export default {
i18n: {
diff --git a/app/assets/javascripts/jobs/components/log/collapsible_section.vue b/app/assets/javascripts/ci/job_details/components/log/collapsible_section.vue
index 39c612bc600..39c612bc600 100644
--- a/app/assets/javascripts/jobs/components/log/collapsible_section.vue
+++ b/app/assets/javascripts/ci/job_details/components/log/collapsible_section.vue
diff --git a/app/assets/javascripts/jobs/components/log/duration_badge.vue b/app/assets/javascripts/ci/job_details/components/log/duration_badge.vue
index 54b76fd9edd..54b76fd9edd 100644
--- a/app/assets/javascripts/jobs/components/log/duration_badge.vue
+++ b/app/assets/javascripts/ci/job_details/components/log/duration_badge.vue
diff --git a/app/assets/javascripts/jobs/components/log/line.vue b/app/assets/javascripts/ci/job_details/components/log/line.vue
index f254a93866f..fa4a12b3dd3 100644
--- a/app/assets/javascripts/jobs/components/log/line.vue
+++ b/app/assets/javascripts/ci/job_details/components/log/line.vue
@@ -1,7 +1,7 @@
<!-- eslint-disable vue/multi-word-component-names -->
<script>
import { getLocationHash } from '~/lib/utils/url_utility';
-import { linkRegex } from '../../utils';
+import { linkRegex } from './utils';
import LineNumber from './line_number.vue';
export default {
diff --git a/app/assets/javascripts/jobs/components/log/line_header.vue b/app/assets/javascripts/ci/job_details/components/log/line_header.vue
index e647ab4ac0b..e647ab4ac0b 100644
--- a/app/assets/javascripts/jobs/components/log/line_header.vue
+++ b/app/assets/javascripts/ci/job_details/components/log/line_header.vue
diff --git a/app/assets/javascripts/jobs/components/log/line_number.vue b/app/assets/javascripts/ci/job_details/components/log/line_number.vue
index 7ca9154d2fe..7ca9154d2fe 100644
--- a/app/assets/javascripts/jobs/components/log/line_number.vue
+++ b/app/assets/javascripts/ci/job_details/components/log/line_number.vue
diff --git a/app/assets/javascripts/jobs/components/log/log.vue b/app/assets/javascripts/ci/job_details/components/log/log.vue
index fb6a6a58074..fb6a6a58074 100644
--- a/app/assets/javascripts/jobs/components/log/log.vue
+++ b/app/assets/javascripts/ci/job_details/components/log/log.vue
diff --git a/app/assets/javascripts/ci/job_details/components/log/utils.js b/app/assets/javascripts/ci/job_details/components/log/utils.js
new file mode 100644
index 00000000000..1ccecf3eb53
--- /dev/null
+++ b/app/assets/javascripts/ci/job_details/components/log/utils.js
@@ -0,0 +1,12 @@
+/**
+ * capture anything starting with http:// or https://
+ * https?:\/\/
+ *
+ * up until a disallowed character or whitespace
+ * [^"<>()\\^`{|}\s]+
+ *
+ * and a disallowed character or whitespace, including non-ending chars .,:;!?
+ * [^"<>()\\^`{|}\s.,:;!?]
+ */
+export const linkRegex = /(https?:\/\/[^"<>()\\^`{|}\s]+[^"<>()\\^`{|}\s.,:;!?])/g;
+export default { linkRegex };
diff --git a/app/assets/javascripts/jobs/components/job/manual_variables_form.vue b/app/assets/javascripts/ci/job_details/components/manual_variables_form.vue
index 356d65e1d14..1232ffffb57 100644
--- a/app/assets/javascripts/jobs/components/job/manual_variables_form.vue
+++ b/app/assets/javascripts/ci/job_details/components/manual_variables_form.vue
@@ -14,16 +14,16 @@ import { fetchPolicies } from '~/lib/graphql';
import { createAlert } from '~/alert';
import { TYPENAME_CI_BUILD, TYPENAME_COMMIT_STATUS } from '~/graphql_shared/constants';
import { convertToGraphQLId } from '~/graphql_shared/utils';
-import { JOB_GRAPHQL_ERRORS } from '~/jobs/constants';
+import { JOB_GRAPHQL_ERRORS } from '~/ci/constants';
import { helpPagePath } from '~/helpers/help_page_helper';
import { redirectTo } from '~/lib/utils/url_utility'; // eslint-disable-line import/no-deprecated
import { s__ } from '~/locale';
-import { reportMessageToSentry } from '~/jobs/utils';
-import GetJob from './graphql/queries/get_job.query.graphql';
-import playJobWithVariablesMutation from './graphql/mutations/job_play_with_variables.mutation.graphql';
-import retryJobWithVariablesMutation from './graphql/mutations/job_retry_with_variables.mutation.graphql';
+import { reportMessageToSentry } from '~/ci/utils';
+import GetJob from '../graphql/queries/get_job.query.graphql';
+import playJobWithVariablesMutation from '../graphql/mutations/job_play_with_variables.mutation.graphql';
+import retryJobWithVariablesMutation from '../graphql/mutations/job_retry_with_variables.mutation.graphql';
-// This component is a port of ~/jobs/components/job/legacy_manual_variables_form.vue
+// This component is a port of ~/ci/job_details/components/legacy_manual_variables_form.vue
// It is meant to fetch/update the job information via GraphQL instead of REST API.
export default {
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/artifacts_block.vue b/app/assets/javascripts/ci/job_details/components/sidebar/artifacts_block.vue
index 4c81a9bd033..4c81a9bd033 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/artifacts_block.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/artifacts_block.vue
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/commit_block.vue b/app/assets/javascripts/ci/job_details/components/sidebar/commit_block.vue
index 7f25ca8a94d..7f25ca8a94d 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/commit_block.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/commit_block.vue
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/job_container_item.vue b/app/assets/javascripts/ci/job_details/components/sidebar/job_container_item.vue
index 097ab3b4cf6..572544db526 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/job_container_item.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/job_container_item.vue
@@ -1,6 +1,6 @@
<script>
import { GlLink, GlIcon, GlTooltipDirective } from '@gitlab/ui';
-import delayedJobMixin from '~/jobs/mixins/delayed_job_mixin';
+import delayedJobMixin from '~/ci/mixins/delayed_job_mixin';
import { sprintf } from '~/locale';
import CiIcon from '~/vue_shared/components/ci_icon.vue';
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/job_retry_forward_deployment_modal.vue b/app/assets/javascripts/ci/job_details/components/sidebar/job_retry_forward_deployment_modal.vue
index a3f1a2c4be8..58e49c71830 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/job_retry_forward_deployment_modal.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/job_retry_forward_deployment_modal.vue
@@ -1,6 +1,6 @@
<script>
import { GlLink, GlModal } from '@gitlab/ui';
-import { JOB_RETRY_FORWARD_DEPLOYMENT_MODAL } from '~/jobs/constants';
+import { __, s__ } from '~/locale';
export default {
name: 'JobRetryForwardDeploymentModal',
@@ -9,7 +9,15 @@ export default {
GlModal,
},
i18n: {
- ...JOB_RETRY_FORWARD_DEPLOYMENT_MODAL,
+ cancel: __('Cancel'),
+ info: s__(
+ `Jobs|You're about to retry a job that failed because it attempted to deploy code that is older than the latest deployment.
+ Retrying this job could result in overwriting the environment with the older source code.`,
+ ),
+ areYouSure: s__('Jobs|Are you sure you want to proceed?'),
+ moreInfo: __('More information'),
+ primaryText: __('Retry job'),
+ title: s__('Jobs|Are you sure you want to retry this job?'),
},
inject: {
retryOutdatedJobDocsUrl: {
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/job_sidebar_retry_button.vue b/app/assets/javascripts/ci/job_details/components/sidebar/job_sidebar_retry_button.vue
index f8486bf16f3..26676123dc3 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/job_sidebar_retry_button.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/job_sidebar_retry_button.vue
@@ -2,12 +2,14 @@
import { GlButton, GlDisclosureDropdown, GlModalDirective } from '@gitlab/ui';
// eslint-disable-next-line no-restricted-imports
import { mapGetters } from 'vuex';
-import { JOB_SIDEBAR_COPY } from '~/jobs/constants';
+import { s__ } from '~/locale';
export default {
name: 'JobSidebarRetryButton',
i18n: {
- ...JOB_SIDEBAR_COPY,
+ retryJobLabel: s__('Job|Retry'),
+ runAgainJobButtonLabel: s__('Job|Run again'),
+ updateVariables: s__('Job|Update CI/CD variables'),
},
components: {
GlButton,
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/jobs_container.vue b/app/assets/javascripts/ci/job_details/components/sidebar/jobs_container.vue
index df64b6422c7..df64b6422c7 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/jobs_container.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/jobs_container.vue
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/sidebar.vue b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue
index 530109f9dfd..4711d5b00e3 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/sidebar.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar.vue
@@ -2,7 +2,7 @@
import { isEmpty } from 'lodash';
// eslint-disable-next-line no-restricted-imports
import { mapActions, mapGetters, mapState } from 'vuex';
-import { JOB_SIDEBAR_COPY, forwardDeploymentFailureModalId } from '~/jobs/constants';
+import { forwardDeploymentFailureModalId } from '~/ci/constants';
import ArtifactsBlock from './artifacts_block.vue';
import CommitBlock from './commit_block.vue';
import JobsContainer from './jobs_container.vue';
@@ -14,9 +14,6 @@ import TriggerBlock from './trigger_block.vue';
export default {
name: 'JobSidebar',
- i18n: {
- ...JOB_SIDEBAR_COPY,
- },
borderTopClass: ['gl-border-t-solid', 'gl-border-t-1', 'gl-border-t-gray-100'],
forwardDeploymentFailureModalId,
components: {
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_detail_row.vue b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_detail_row.vue
index 0ba34eafa58..0ba34eafa58 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_detail_row.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_detail_row.vue
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_header.vue b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue
index 4ffb8ded8ba..d4de53f9807 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_header.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_header.vue
@@ -5,20 +5,23 @@ import { mapActions } from 'vuex';
import { createAlert } from '~/alert';
import { TYPENAME_COMMIT_STATUS } from '~/graphql_shared/constants';
import { convertToGraphQLId } from '~/graphql_shared/utils';
+import { __, s__ } from '~/locale';
import TooltipOnTruncate from '~/vue_shared/components/tooltip_on_truncate/tooltip_on_truncate.vue';
-import {
- JOB_GRAPHQL_ERRORS,
- JOB_SIDEBAR_COPY,
- forwardDeploymentFailureModalId,
- PASSED_STATUS,
-} from '~/jobs/constants';
-import GetJob from '../graphql/queries/get_job.query.graphql';
+import { JOB_GRAPHQL_ERRORS, forwardDeploymentFailureModalId, PASSED_STATUS } from '~/ci/constants';
+import GetJob from '../../graphql/queries/get_job.query.graphql';
import JobSidebarRetryButton from './job_sidebar_retry_button.vue';
export default {
name: 'SidebarHeader',
i18n: {
- ...JOB_SIDEBAR_COPY,
+ cancelJobButtonLabel: s__('Job|Cancel'),
+ debug: __('Debug'),
+ eraseLogButtonLabel: s__('Job|Erase job log and artifacts'),
+ eraseLogConfirmText: s__('Job|Are you sure you want to erase this job log and artifacts?'),
+ newIssue: __('New issue'),
+ retryJobLabel: s__('Job|Retry'),
+ toggleSidebar: __('Toggle Sidebar'),
+ runAgainJobButtonLabel: s__('Job|Run again'),
},
forwardDeploymentFailureModalId,
directives: {
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_job_details_container.vue
index 09335476008..09335476008 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/sidebar_job_details_container.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/sidebar_job_details_container.vue
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue b/app/assets/javascripts/ci/job_details/components/sidebar/stages_dropdown.vue
index 3fee1427256..3fee1427256 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/stages_dropdown.vue
diff --git a/app/assets/javascripts/jobs/components/job/sidebar/trigger_block.vue b/app/assets/javascripts/ci/job_details/components/sidebar/trigger_block.vue
index c9172fe0322..c9172fe0322 100644
--- a/app/assets/javascripts/jobs/components/job/sidebar/trigger_block.vue
+++ b/app/assets/javascripts/ci/job_details/components/sidebar/trigger_block.vue
diff --git a/app/assets/javascripts/jobs/components/job/stuck_block.vue b/app/assets/javascripts/ci/job_details/components/stuck_block.vue
index 8c73f09daea..8c73f09daea 100644
--- a/app/assets/javascripts/jobs/components/job/stuck_block.vue
+++ b/app/assets/javascripts/ci/job_details/components/stuck_block.vue
diff --git a/app/assets/javascripts/jobs/components/job/unmet_prerequisites_block.vue b/app/assets/javascripts/ci/job_details/components/unmet_prerequisites_block.vue
index c9747ca9f02..c9747ca9f02 100644
--- a/app/assets/javascripts/jobs/components/job/unmet_prerequisites_block.vue
+++ b/app/assets/javascripts/ci/job_details/components/unmet_prerequisites_block.vue
diff --git a/app/assets/javascripts/jobs/components/job/graphql/fragments/ci_job.fragment.graphql b/app/assets/javascripts/ci/job_details/graphql/fragments/ci_job.fragment.graphql
index f4a0b10672e..7fb887b2dd4 100644
--- a/app/assets/javascripts/jobs/components/job/graphql/fragments/ci_job.fragment.graphql
+++ b/app/assets/javascripts/ci/job_details/graphql/fragments/ci_job.fragment.graphql
@@ -1,4 +1,4 @@
-#import "~/jobs/components/job/graphql/fragments/ci_variable.fragment.graphql"
+#import "~/ci/job_details/graphql/fragments/ci_variable.fragment.graphql"
fragment BaseCiJob on CiJob {
id
diff --git a/app/assets/javascripts/jobs/components/job/graphql/fragments/ci_variable.fragment.graphql b/app/assets/javascripts/ci/job_details/graphql/fragments/ci_variable.fragment.graphql
index 0479df7bc4c..0479df7bc4c 100644
--- a/app/assets/javascripts/jobs/components/job/graphql/fragments/ci_variable.fragment.graphql
+++ b/app/assets/javascripts/ci/job_details/graphql/fragments/ci_variable.fragment.graphql
diff --git a/app/assets/javascripts/jobs/components/job/graphql/mutations/job_play_with_variables.mutation.graphql b/app/assets/javascripts/ci/job_details/graphql/mutations/job_play_with_variables.mutation.graphql
index 520deef5136..5d8a7b4c6f6 100644
--- a/app/assets/javascripts/jobs/components/job/graphql/mutations/job_play_with_variables.mutation.graphql
+++ b/app/assets/javascripts/ci/job_details/graphql/mutations/job_play_with_variables.mutation.graphql
@@ -1,4 +1,4 @@
-#import "~/jobs/components/job/graphql/fragments/ci_job.fragment.graphql"
+#import "~/ci/job_details/graphql/fragments/ci_job.fragment.graphql"
mutation playJobWithVariables($id: CiBuildID!, $variables: [CiVariableInput!]) {
jobPlay(input: { id: $id, variables: $variables }) {
diff --git a/app/assets/javascripts/jobs/components/job/graphql/mutations/job_retry_with_variables.mutation.graphql b/app/assets/javascripts/ci/job_details/graphql/mutations/job_retry_with_variables.mutation.graphql
index e35d603ea71..cd66a30ce63 100644
--- a/app/assets/javascripts/jobs/components/job/graphql/mutations/job_retry_with_variables.mutation.graphql
+++ b/app/assets/javascripts/ci/job_details/graphql/mutations/job_retry_with_variables.mutation.graphql
@@ -1,4 +1,4 @@
-#import "~/jobs/components/job/graphql/fragments/ci_job.fragment.graphql"
+#import "~/ci/job_details/graphql/fragments/ci_job.fragment.graphql"
mutation retryJobWithVariables($id: CiBuildID!, $variables: [CiVariableInput!]) {
jobRetry(input: { id: $id, variables: $variables }) {
diff --git a/app/assets/javascripts/jobs/components/job/graphql/queries/get_job.query.graphql b/app/assets/javascripts/ci/job_details/graphql/queries/get_job.query.graphql
index 95e3521091d..a521ec2bb72 100644
--- a/app/assets/javascripts/jobs/components/job/graphql/queries/get_job.query.graphql
+++ b/app/assets/javascripts/ci/job_details/graphql/queries/get_job.query.graphql
@@ -1,4 +1,4 @@
-#import "~/jobs/components/job/graphql/fragments/ci_job.fragment.graphql"
+#import "~/ci/job_details/graphql/fragments/ci_job.fragment.graphql"
query getJob($fullPath: ID!, $id: JobID!) {
project(fullPath: $fullPath) {
diff --git a/app/assets/javascripts/jobs/index.js b/app/assets/javascripts/ci/job_details/index.js
index 8cd69f25218..5a1ecf2fff3 100644
--- a/app/assets/javascripts/jobs/index.js
+++ b/app/assets/javascripts/ci/job_details/index.js
@@ -3,7 +3,7 @@ import Vue from 'vue';
import VueApollo from 'vue-apollo';
import createDefaultClient from '~/lib/graphql';
import { parseBoolean } from '~/lib/utils/common_utils';
-import JobApp from './components/job/job_app.vue';
+import JobApp from './job_app.vue';
import createStore from './store';
Vue.use(VueApollo);
diff --git a/app/assets/javascripts/jobs/components/job/job_app.vue b/app/assets/javascripts/ci/job_details/job_app.vue
index 52030a0f830..ede517b2d94 100644
--- a/app/assets/javascripts/jobs/components/job/job_app.vue
+++ b/app/assets/javascripts/ci/job_details/job_app.vue
@@ -4,20 +4,20 @@ import { GlBreakpointInstance as bp } from '@gitlab/ui/dist/utils';
import { throttle, isEmpty } from 'lodash';
// eslint-disable-next-line no-restricted-imports
import { mapGetters, mapState, mapActions } from 'vuex';
-import LogTopBar from 'ee_else_ce/jobs/components/job/job_log_controllers.vue';
+import LogTopBar from 'ee_else_ce/ci/job_details/components/job_log_controllers.vue';
import SafeHtml from '~/vue_shared/directives/safe_html';
import { isScrolledToBottom } from '~/lib/utils/scroll_utils';
import { __, sprintf } from '~/locale';
import CiHeader from '~/vue_shared/components/header_ci_component.vue';
-import delayedJobMixin from '~/jobs/mixins/delayed_job_mixin';
-import Log from '~/jobs/components/log/log.vue';
-import { MANUAL_STATUS } from '~/jobs/constants';
-import EmptyState from './empty_state.vue';
-import EnvironmentsBlock from './environments_block.vue';
-import ErasedBlock from './erased_block.vue';
-import StuckBlock from './stuck_block.vue';
-import UnmetPrerequisitesBlock from './unmet_prerequisites_block.vue';
-import Sidebar from './sidebar/sidebar.vue';
+import delayedJobMixin from '~/ci/mixins/delayed_job_mixin';
+import Log from '~/ci/job_details/components/log/log.vue';
+import { MANUAL_STATUS } from '~/ci/constants';
+import EmptyState from './components/empty_state.vue';
+import EnvironmentsBlock from './components/environments_block.vue';
+import ErasedBlock from './components/erased_block.vue';
+import StuckBlock from './components/stuck_block.vue';
+import UnmetPrerequisitesBlock from './components/unmet_prerequisites_block.vue';
+import Sidebar from './components/sidebar/sidebar.vue';
export default {
name: 'JobPageApp',
@@ -33,7 +33,7 @@ export default {
UnmetPrerequisitesBlock,
Sidebar,
GlLoadingIcon,
- SharedRunner: () => import('ee_component/jobs/components/shared_runner_limit_block.vue'),
+ SharedRunner: () => import('ee_component/ci/runner/components/shared_runner_limit_block.vue'),
GlAlert,
},
directives: {
diff --git a/app/assets/javascripts/jobs/store/actions.js b/app/assets/javascripts/ci/job_details/store/actions.js
index b348478ccda..33d83689e61 100644
--- a/app/assets/javascripts/jobs/store/actions.js
+++ b/app/assets/javascripts/ci/job_details/store/actions.js
@@ -12,7 +12,7 @@ import {
scrollUp,
} from '~/lib/utils/scroll_utils';
import { __ } from '~/locale';
-import { reportToSentry } from '../utils';
+import { reportToSentry } from '~/ci/utils';
import * as types from './mutation_types';
export const init = ({ dispatch }, { endpoint, logState, pagePath }) => {
diff --git a/app/assets/javascripts/jobs/store/getters.js b/app/assets/javascripts/ci/job_details/store/getters.js
index a0f9db7409d..a0f9db7409d 100644
--- a/app/assets/javascripts/jobs/store/getters.js
+++ b/app/assets/javascripts/ci/job_details/store/getters.js
diff --git a/app/assets/javascripts/jobs/store/index.js b/app/assets/javascripts/ci/job_details/store/index.js
index b9d76765d8d..b9d76765d8d 100644
--- a/app/assets/javascripts/jobs/store/index.js
+++ b/app/assets/javascripts/ci/job_details/store/index.js
diff --git a/app/assets/javascripts/jobs/store/mutation_types.js b/app/assets/javascripts/ci/job_details/store/mutation_types.js
index 4915a826b84..4915a826b84 100644
--- a/app/assets/javascripts/jobs/store/mutation_types.js
+++ b/app/assets/javascripts/ci/job_details/store/mutation_types.js
diff --git a/app/assets/javascripts/jobs/store/mutations.js b/app/assets/javascripts/ci/job_details/store/mutations.js
index b7d7006ee61..b7d7006ee61 100644
--- a/app/assets/javascripts/jobs/store/mutations.js
+++ b/app/assets/javascripts/ci/job_details/store/mutations.js
diff --git a/app/assets/javascripts/jobs/store/state.js b/app/assets/javascripts/ci/job_details/store/state.js
index dfff65c364d..dfff65c364d 100644
--- a/app/assets/javascripts/jobs/store/state.js
+++ b/app/assets/javascripts/ci/job_details/store/state.js
diff --git a/app/assets/javascripts/jobs/store/utils.js b/app/assets/javascripts/ci/job_details/store/utils.js
index bc76901026d..bc76901026d 100644
--- a/app/assets/javascripts/jobs/store/utils.js
+++ b/app/assets/javascripts/ci/job_details/store/utils.js
diff --git a/app/assets/javascripts/ci/job_details/utils.js b/app/assets/javascripts/ci/job_details/utils.js
new file mode 100644
index 00000000000..44182a20c4c
--- /dev/null
+++ b/app/assets/javascripts/ci/job_details/utils.js
@@ -0,0 +1,22 @@
+export const compactJobLog = (jobLog) => {
+ const compactedLog = [];
+
+ jobLog.forEach((obj) => {
+ // push header section line
+ if (obj.line && obj.isHeader) {
+ compactedLog.push(obj.line);
+ }
+
+ // push lines within section header
+ if (obj.lines?.length > 0) {
+ compactedLog.push(...obj.lines);
+ }
+
+ // push lines from plain log
+ if (!obj.lines && obj.content.length > 0) {
+ compactedLog.push(obj);
+ }
+ });
+
+ return compactedLog;
+};
diff --git a/app/assets/javascripts/jobs/components/table/cells/actions_cell.vue b/app/assets/javascripts/ci/jobs_page/components/job_cells/actions_cell.vue
index d97f6f6ff8c..609f2790869 100644
--- a/app/assets/javascripts/jobs/components/table/cells/actions_cell.vue
+++ b/app/assets/javascripts/ci/jobs_page/components/job_cells/actions_cell.vue
@@ -7,6 +7,7 @@ import {
GlSprintf,
GlTooltipDirective,
} from '@gitlab/ui';
+import { reportMessageToSentry } from '~/ci/utils';
import GlCountdown from '~/vue_shared/components/gl_countdown.vue';
import { redirectTo } from '~/lib/utils/url_utility'; // eslint-disable-line import/no-deprecated
import {
@@ -23,13 +24,12 @@ import {
PLAY_JOB_CONFIRMATION_MESSAGE,
RUN_JOB_NOW_HEADER_TITLE,
FILE_TYPE_ARCHIVE,
-} from '../constants';
-import eventHub from '../event_hub';
-import cancelJobMutation from '../graphql/mutations/job_cancel.mutation.graphql';
-import playJobMutation from '../graphql/mutations/job_play.mutation.graphql';
-import retryJobMutation from '../graphql/mutations/job_retry.mutation.graphql';
-import unscheduleJobMutation from '../graphql/mutations/job_unschedule.mutation.graphql';
-import { reportMessageToSentry } from '../../../utils';
+} from '../../constants';
+import eventHub from '../../event_hub';
+import cancelJobMutation from '../../graphql/mutations/job_cancel.mutation.graphql';
+import playJobMutation from '../../graphql/mutations/job_play.mutation.graphql';
+import retryJobMutation from '../../graphql/mutations/job_retry.mutation.graphql';
+import unscheduleJobMutation from '../../graphql/mutations/job_unschedule.mutation.graphql';
export default {
ACTIONS_DOWNLOAD_ARTIFACTS,
diff --git a/app/assets/javascripts/jobs/components/table/cells/duration_cell.vue b/app/assets/javascripts/ci/jobs_page/components/job_cells/duration_cell.vue
index dbf1dfe7a29..dbf1dfe7a29 100644
--- a/app/assets/javascripts/jobs/components/table/cells/duration_cell.vue
+++ b/app/assets/javascripts/ci/jobs_page/components/job_cells/duration_cell.vue
diff --git a/app/assets/javascripts/jobs/components/table/cells/job_cell.vue b/app/assets/javascripts/ci/jobs_page/components/job_cells/job_cell.vue
index b435eb283fd..b435eb283fd 100644
--- a/app/assets/javascripts/jobs/components/table/cells/job_cell.vue
+++ b/app/assets/javascripts/ci/jobs_page/components/job_cells/job_cell.vue
diff --git a/app/assets/javascripts/jobs/components/table/cells/pipeline_cell.vue b/app/assets/javascripts/ci/jobs_page/components/job_cells/pipeline_cell.vue
index 18d68ee8a29..18d68ee8a29 100644
--- a/app/assets/javascripts/jobs/components/table/cells/pipeline_cell.vue
+++ b/app/assets/javascripts/ci/jobs_page/components/job_cells/pipeline_cell.vue
diff --git a/app/assets/javascripts/jobs/components/table/jobs_table.vue b/app/assets/javascripts/ci/jobs_page/components/jobs_table.vue
index 474131363b8..9a66e4698df 100644
--- a/app/assets/javascripts/jobs/components/table/jobs_table.vue
+++ b/app/assets/javascripts/ci/jobs_page/components/jobs_table.vue
@@ -4,11 +4,11 @@ import { s__ } from '~/locale';
import CiBadgeLink from '~/vue_shared/components/ci_badge_link.vue';
import ProjectCell from '~/pages/admin/jobs/components/table/cell/project_cell.vue';
import RunnerCell from '~/pages/admin/jobs/components/table/cells/runner_cell.vue';
-import ActionsCell from './cells/actions_cell.vue';
-import DurationCell from './cells/duration_cell.vue';
-import JobCell from './cells/job_cell.vue';
-import PipelineCell from './cells/pipeline_cell.vue';
-import { DEFAULT_FIELDS } from './constants';
+import { DEFAULT_FIELDS } from '../constants';
+import ActionsCell from './job_cells/actions_cell.vue';
+import DurationCell from './job_cells/duration_cell.vue';
+import JobCell from './job_cells/job_cell.vue';
+import PipelineCell from './job_cells/pipeline_cell.vue';
export default {
i18n: {
diff --git a/app/assets/javascripts/jobs/components/table/jobs_table_empty_state.vue b/app/assets/javascripts/ci/jobs_page/components/jobs_table_empty_state.vue
index fcdd52b719c..fcdd52b719c 100644
--- a/app/assets/javascripts/jobs/components/table/jobs_table_empty_state.vue
+++ b/app/assets/javascripts/ci/jobs_page/components/jobs_table_empty_state.vue
diff --git a/app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue b/app/assets/javascripts/ci/jobs_page/components/jobs_table_tabs.vue
index 464b500c66e..464b500c66e 100644
--- a/app/assets/javascripts/jobs/components/table/jobs_table_tabs.vue
+++ b/app/assets/javascripts/ci/jobs_page/components/jobs_table_tabs.vue
diff --git a/app/assets/javascripts/jobs/components/table/constants.js b/app/assets/javascripts/ci/jobs_page/constants.js
index 1b572e60c58..1b572e60c58 100644
--- a/app/assets/javascripts/jobs/components/table/constants.js
+++ b/app/assets/javascripts/ci/jobs_page/constants.js
diff --git a/app/assets/javascripts/jobs/components/table/event_hub.js b/app/assets/javascripts/ci/jobs_page/event_hub.js
index e31806ad199..e31806ad199 100644
--- a/app/assets/javascripts/jobs/components/table/event_hub.js
+++ b/app/assets/javascripts/ci/jobs_page/event_hub.js
diff --git a/app/assets/javascripts/jobs/components/table/graphql/cache_config.js b/app/assets/javascripts/ci/jobs_page/graphql/cache_config.js
index 5390c023da4..5390c023da4 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/cache_config.js
+++ b/app/assets/javascripts/ci/jobs_page/graphql/cache_config.js
diff --git a/app/assets/javascripts/jobs/components/table/graphql/fragments/job.fragment.graphql b/app/assets/javascripts/ci/jobs_page/graphql/fragments/job.fragment.graphql
index 3038216fdfc..3038216fdfc 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/fragments/job.fragment.graphql
+++ b/app/assets/javascripts/ci/jobs_page/graphql/fragments/job.fragment.graphql
diff --git a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_cancel.mutation.graphql b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_cancel.mutation.graphql
index 20935514d51..20935514d51 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_cancel.mutation.graphql
+++ b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_cancel.mutation.graphql
diff --git a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_play.mutation.graphql b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_play.mutation.graphql
index c94b045ac40..c94b045ac40 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_play.mutation.graphql
+++ b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_play.mutation.graphql
diff --git a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_retry.mutation.graphql b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_retry.mutation.graphql
index 6e51f9a20fa..6e51f9a20fa 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_retry.mutation.graphql
+++ b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_retry.mutation.graphql
diff --git a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_unschedule.mutation.graphql b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_unschedule.mutation.graphql
index 8be8c42f3c3..8be8c42f3c3 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/mutations/job_unschedule.mutation.graphql
+++ b/app/assets/javascripts/ci/jobs_page/graphql/mutations/job_unschedule.mutation.graphql
diff --git a/app/assets/javascripts/jobs/components/table/graphql/queries/get_jobs.query.graphql b/app/assets/javascripts/ci/jobs_page/graphql/queries/get_jobs.query.graphql
index 69719011079..69719011079 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/queries/get_jobs.query.graphql
+++ b/app/assets/javascripts/ci/jobs_page/graphql/queries/get_jobs.query.graphql
diff --git a/app/assets/javascripts/jobs/components/table/graphql/queries/get_jobs_count.query.graphql b/app/assets/javascripts/ci/jobs_page/graphql/queries/get_jobs_count.query.graphql
index a4e02ae721a..a4e02ae721a 100644
--- a/app/assets/javascripts/jobs/components/table/graphql/queries/get_jobs_count.query.graphql
+++ b/app/assets/javascripts/ci/jobs_page/graphql/queries/get_jobs_count.query.graphql
diff --git a/app/assets/javascripts/jobs/components/table/index.js b/app/assets/javascripts/ci/jobs_page/index.js
index 88da1169e01..7e99157289b 100644
--- a/app/assets/javascripts/jobs/components/table/index.js
+++ b/app/assets/javascripts/ci/jobs_page/index.js
@@ -1,7 +1,7 @@
import { GlToast } from '@gitlab/ui';
import Vue from 'vue';
import VueApollo from 'vue-apollo';
-import JobsTableApp from '~/jobs/components/table/jobs_table_app.vue';
+import JobsTableApp from '~/ci/jobs_page/jobs_page_app.vue';
import createDefaultClient from '~/lib/graphql';
import { parseBoolean } from '~/lib/utils/common_utils';
import cacheConfig from './graphql/cache_config';
diff --git a/app/assets/javascripts/jobs/components/table/jobs_table_app.vue b/app/assets/javascripts/ci/jobs_page/jobs_page_app.vue
index 09fa006cb88..c801b35e868 100644
--- a/app/assets/javascripts/jobs/components/table/jobs_table_app.vue
+++ b/app/assets/javascripts/ci/jobs_page/jobs_page_app.vue
@@ -4,13 +4,13 @@ import { __ } from '~/locale';
import { createAlert } from '~/alert';
import { setUrlParams, updateHistory, queryToObject } from '~/lib/utils/url_utility';
import JobsSkeletonLoader from '~/pages/admin/jobs/components/jobs_skeleton_loader.vue';
-import JobsFilteredSearch from '../filtered_search/jobs_filtered_search.vue';
-import { validateQueryString } from '../filtered_search/utils';
+import JobsFilteredSearch from '~/ci/common/private/jobs_filtered_search/app.vue';
+import { validateQueryString } from '~/ci/common/private/jobs_filtered_search/utils';
import GetJobs from './graphql/queries/get_jobs.query.graphql';
import GetJobsCount from './graphql/queries/get_jobs_count.query.graphql';
-import JobsTable from './jobs_table.vue';
-import JobsTableEmptyState from './jobs_table_empty_state.vue';
-import JobsTableTabs from './jobs_table_tabs.vue';
+import JobsTable from './components/jobs_table.vue';
+import JobsTableEmptyState from './components/jobs_table_empty_state.vue';
+import JobsTableTabs from './components/jobs_table_tabs.vue';
import { RAW_TEXT_WARNING } from './constants';
export default {
diff --git a/app/assets/javascripts/jobs/mixins/delayed_job_mixin.js b/app/assets/javascripts/ci/mixins/delayed_job_mixin.js
index 7b17dc7f693..7b17dc7f693 100644
--- a/app/assets/javascripts/jobs/mixins/delayed_job_mixin.js
+++ b/app/assets/javascripts/ci/mixins/delayed_job_mixin.js
diff --git a/app/assets/javascripts/ci/pipeline_details/graph/components/job_item.vue b/app/assets/javascripts/ci/pipeline_details/graph/components/job_item.vue
index bab05d0c232..4298052d1c0 100644
--- a/app/assets/javascripts/ci/pipeline_details/graph/components/job_item.vue
+++ b/app/assets/javascripts/ci/pipeline_details/graph/components/job_item.vue
@@ -1,7 +1,7 @@
<script>
import { GlBadge, GlForm, GlFormCheckbox, GlLink, GlModal, GlTooltipDirective } from '@gitlab/ui';
import { reportToSentry } from '~/ci/utils';
-import delayedJobMixin from '~/jobs/mixins/delayed_job_mixin';
+import delayedJobMixin from '~/ci/mixins/delayed_job_mixin';
import { helpPagePath } from '~/helpers/help_page_helper';
import { BV_HIDE_TOOLTIP } from '~/lib/utils/constants';
import { __, s__, sprintf } from '~/locale';
diff --git a/app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue b/app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue
index 7a09dd27ad8..81b6152347d 100644
--- a/app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue
+++ b/app/assets/javascripts/ci/pipeline_details/jobs/jobs_app.vue
@@ -3,9 +3,9 @@ import { GlIntersectionObserver, GlLoadingIcon, GlSkeletonLoader } from '@gitlab
import produce from 'immer';
import { createAlert } from '~/alert';
import { __ } from '~/locale';
-import eventHub from '~/jobs/components/table/event_hub';
-import JobsTable from '~/jobs/components/table/jobs_table.vue';
-import { JOBS_TAB_FIELDS } from '~/jobs/components/table/constants';
+import eventHub from '~/ci/jobs_page/event_hub';
+import JobsTable from '~/ci/jobs_page/components/jobs_table.vue';
+import { JOBS_TAB_FIELDS } from '~/ci/jobs_page/constants';
import getPipelineJobs from './graphql/queries/get_pipeline_jobs.query.graphql';
export default {
diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/legacy_job_item.vue b/app/assets/javascripts/ci/pipeline_mini_graph/legacy_job_item.vue
index 27917d029b3..6da4ff2b0c2 100644
--- a/app/assets/javascripts/ci/pipeline_mini_graph/legacy_job_item.vue
+++ b/app/assets/javascripts/ci/pipeline_mini_graph/legacy_job_item.vue
@@ -3,9 +3,9 @@ import { GlTooltipDirective, GlLink } from '@gitlab/ui';
import ActionComponent from '~/ci/common/private/job_action_component.vue';
import JobNameComponent from '~/ci/common/private/job_name_component.vue';
import { ICONS } from '~/ci/pipeline_details/constants';
-import delayedJobMixin from '~/jobs/mixins/delayed_job_mixin';
+import delayedJobMixin from '~/ci/mixins/delayed_job_mixin';
import { s__, sprintf } from '~/locale';
-import { reportToSentry } from '../utils';
+import { reportToSentry } from '~/ci/utils';
/**
* Renders the badge for the pipeline graph and the job's dropdown.
diff --git a/app/assets/javascripts/jobs/constants.js b/app/assets/javascripts/jobs/constants.js
deleted file mode 100644
index 40b3de7edd9..00000000000
--- a/app/assets/javascripts/jobs/constants.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { __, s__ } from '~/locale';
-
-const cancel = __('Cancel');
-const moreInfo = __('More information');
-
-export const forwardDeploymentFailureModalId = 'forward-deployment-failure';
-
-export const JOB_SIDEBAR_COPY = {
- cancel,
- cancelJobButtonLabel: s__('Job|Cancel'),
- debug: __('Debug'),
- eraseLogButtonLabel: s__('Job|Erase job log and artifacts'),
- eraseLogConfirmText: s__('Job|Are you sure you want to erase this job log and artifacts?'),
- newIssue: __('New issue'),
- retryJobLabel: s__('Job|Retry'),
- toggleSidebar: __('Toggle Sidebar'),
- runAgainJobButtonLabel: s__('Job|Run again'),
- updateVariables: s__('Job|Update CI/CD variables'),
-};
-
-export const JOB_GRAPHQL_ERRORS = {
- jobMutationErrorText: __('There was an error running the job. Please try again.'),
- jobQueryErrorText: __('There was an error fetching the job.'),
-};
-
-export const JOB_RETRY_FORWARD_DEPLOYMENT_MODAL = {
- cancel,
- info: s__(
- `Jobs|You're about to retry a job that failed because it attempted to deploy code that is older than the latest deployment.
- Retrying this job could result in overwriting the environment with the older source code.`,
- ),
- areYouSure: s__('Jobs|Are you sure you want to proceed?'),
- moreInfo,
- primaryText: __('Retry job'),
- title: s__('Jobs|Are you sure you want to retry this job?'),
-};
-
-export const SUCCESS_STATUS = 'SUCCESS';
-export const PASSED_STATUS = 'passed';
-export const MANUAL_STATUS = 'manual';
diff --git a/app/assets/javascripts/jobs/utils.js b/app/assets/javascripts/jobs/utils.js
deleted file mode 100644
index b3b16f5a52b..00000000000
--- a/app/assets/javascripts/jobs/utils.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import * as Sentry from '@sentry/browser';
-
-/**
- * capture anything starting with http:// or https://
- * https?:\/\/
- *
- * up until a disallowed character or whitespace
- * [^"<>()\\^`{|}\s]+
- *
- * and a disallowed character or whitespace, including non-ending chars .,:;!?
- * [^"<>()\\^`{|}\s.,:;!?]
- */
-export const linkRegex = /(https?:\/\/[^"<>()\\^`{|}\s]+[^"<>()\\^`{|}\s.,:;!?])/g;
-export default { linkRegex };
-
-export const reportToSentry = (component, failureType) => {
- Sentry.withScope((scope) => {
- scope.setTag('component', component);
- Sentry.captureException(failureType);
- });
-};
-
-export const reportMessageToSentry = (component, message, context) => {
- Sentry.withScope((scope) => {
- // eslint-disable-next-line @gitlab/require-i18n-strings
- scope.setContext('Vue data', context);
- scope.setTag('component', component);
- Sentry.captureMessage(message);
- });
-};
-
-export const compactJobLog = (jobLog) => {
- const compactedLog = [];
-
- jobLog.forEach((obj) => {
- // push header section line
- if (obj.line && obj.isHeader) {
- compactedLog.push(obj.line);
- }
-
- // push lines within section header
- if (obj.lines?.length > 0) {
- compactedLog.push(...obj.lines);
- }
-
- // push lines from plain log
- if (!obj.lines && obj.content.length > 0) {
- compactedLog.push(obj);
- }
- });
-
- return compactedLog;
-};
diff --git a/app/assets/javascripts/pages/admin/jobs/components/constants.js b/app/assets/javascripts/pages/admin/jobs/components/constants.js
index 4af8cb355fc..ff0efdb1f5b 100644
--- a/app/assets/javascripts/pages/admin/jobs/components/constants.js
+++ b/app/assets/javascripts/pages/admin/jobs/components/constants.js
@@ -1,5 +1,5 @@
import { s__, __ } from '~/locale';
-import { RAW_TEXT_WARNING } from '~/jobs/components/table/constants';
+import { RAW_TEXT_WARNING } from '~/ci/jobs_page/constants';
export const JOBS_COUNT_ERROR_MESSAGE = __('There was an error fetching the number of jobs.');
export const JOBS_FETCH_ERROR_MSG = __('There was an error fetching the jobs.');
diff --git a/app/assets/javascripts/pages/admin/jobs/components/table/admin_jobs_table_app.vue b/app/assets/javascripts/pages/admin/jobs/components/table/admin_jobs_table_app.vue
index dc161d65e61..d9e1284b035 100644
--- a/app/assets/javascripts/pages/admin/jobs/components/table/admin_jobs_table_app.vue
+++ b/app/assets/javascripts/pages/admin/jobs/components/table/admin_jobs_table_app.vue
@@ -1,11 +1,11 @@
<script>
import { GlAlert, GlIntersectionObserver, GlLoadingIcon } from '@gitlab/ui';
import { setUrlParams, updateHistory, queryToObject } from '~/lib/utils/url_utility';
-import { validateQueryString } from '~/jobs/components/filtered_search/utils';
-import JobsTable from '~/jobs/components/table/jobs_table.vue';
-import JobsTableTabs from '~/jobs/components/table/jobs_table_tabs.vue';
-import JobsFilteredSearch from '~/jobs/components/filtered_search/jobs_filtered_search.vue';
-import JobsTableEmptyState from '~/jobs/components/table/jobs_table_empty_state.vue';
+import { validateQueryString } from '~/ci/common/private/jobs_filtered_search/utils';
+import JobsTable from '~/ci/jobs_page/components/jobs_table.vue';
+import JobsTableTabs from '~/ci/jobs_page/components/jobs_table_tabs.vue';
+import JobsFilteredSearch from '~/ci/common/private/jobs_filtered_search/app.vue';
+import JobsTableEmptyState from '~/ci/jobs_page/components/jobs_table_empty_state.vue';
import { createAlert } from '~/alert';
import {
TOKEN_TYPE_STATUS,
diff --git a/app/assets/javascripts/pages/projects/jobs/index/index.js b/app/assets/javascripts/pages/projects/jobs/index/index.js
index eb3a24f38a8..9b5ad804750 100644
--- a/app/assets/javascripts/pages/projects/jobs/index/index.js
+++ b/app/assets/javascripts/pages/projects/jobs/index/index.js
@@ -1,3 +1,3 @@
-import initJobsTable from '~/jobs/components/table';
+import initJobsPage from '~/ci/jobs_page';
-initJobsTable();
+initJobsPage();
diff --git a/app/assets/javascripts/pages/projects/jobs/show/index.js b/app/assets/javascripts/pages/projects/jobs/show/index.js
index 6fef057dee0..cd83f2b7b64 100644
--- a/app/assets/javascripts/pages/projects/jobs/show/index.js
+++ b/app/assets/javascripts/pages/projects/jobs/show/index.js
@@ -1,3 +1,3 @@
-import initJobDetails from '~/jobs';
+import initJobDetails from '~/ci/job_details';
initJobDetails();
diff --git a/app/assets/javascripts/security_configuration/utils.js b/app/assets/javascripts/security_configuration/utils.js
index 72e6d870e13..7f0caf1af46 100644
--- a/app/assets/javascripts/security_configuration/utils.js
+++ b/app/assets/javascripts/security_configuration/utils.js
@@ -1,5 +1,6 @@
import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';
import { SCANNER_NAMES_MAP } from '~/security_configuration/components/constants';
+import { REPORT_TYPE_DAST } from '~/vue_shared/security_reports/constants';
/**
* This function takes in 3 arrays of objects, securityFeatures and features.
@@ -29,6 +30,10 @@ export const augmentFeatures = (securityFeatures, features = []) => {
augmented.secondary = { ...augmented.secondary, ...featuresByType[feature.secondary.type] };
}
+ if (augmented.type === REPORT_TYPE_DAST && !augmented.onDemandAvailable) {
+ delete augmented.badge;
+ }
+
if (augmented.badge && augmented.metaInfoPath) {
augmented.badge.badgeHref = augmented.metaInfoPath;
}
diff --git a/app/assets/javascripts/super_sidebar/constants.js b/app/assets/javascripts/super_sidebar/constants.js
index 82ebdc90a90..0abc459bc52 100644
--- a/app/assets/javascripts/super_sidebar/constants.js
+++ b/app/assets/javascripts/super_sidebar/constants.js
@@ -33,7 +33,7 @@ export const TRACKING_UNKNOWN_PANEL = 'nav_panel_unknown';
export const CLICK_MENU_ITEM_ACTION = 'click_menu_item';
export const CLICK_PINNED_MENU_ITEM_ACTION = 'click_pinned_menu_item';
-export const PANELS_WITH_PINS = ['group', 'project'];
+export const PANELS_WITH_PINS = ['group', 'project', 'organization'];
export const USER_MENU_TRACKING_DEFAULTS = {
'data-track-property': 'nav_user_menu',
diff --git a/app/graphql/types/label_type.rb b/app/graphql/types/label_type.rb
index 4848ee30950..d4fac949c93 100644
--- a/app/graphql/types/label_type.rb
+++ b/app/graphql/types/label_type.rb
@@ -18,6 +18,9 @@ module Types
description: 'Description of the label (Markdown rendered as HTML for caching).'
field :id, GraphQL::Types::ID, null: false,
description: 'Label ID.'
+ field :lock_on_merge, GraphQL::Types::Boolean, null: false,
+ description: 'Indicates this label is locked for merge requests ' \
+ 'that have been merged.'
field :text_color, GraphQL::Types::String, null: false,
description: 'Text color of the label.'
field :title, GraphQL::Types::String, null: false,
diff --git a/app/graphql/types/merge_request_type.rb b/app/graphql/types/merge_request_type.rb
index 4ea12df940d..4fd2b245de9 100644
--- a/app/graphql/types/merge_request_type.rb
+++ b/app/graphql/types/merge_request_type.rb
@@ -185,6 +185,8 @@ module Types
description: 'Users from whom a review has been requested.'
field :subscribed, GraphQL::Types::Boolean, method: :subscribed?, null: false, complexity: 5,
description: 'Indicates if the currently logged in user is subscribed to this merge request.'
+ field :supports_lock_on_merge, GraphQL::Types::Boolean, null: false, method: :supports_lock_on_merge?,
+ description: 'Indicates if the merge request supports locked labels.'
field :task_completion_status, Types::TaskCompletionStatus, null: false,
description: Types::TaskCompletionStatus.description
field :time_estimate, GraphQL::Types::Int, null: false,
diff --git a/app/presenters/projects/security/configuration_presenter.rb b/app/presenters/projects/security/configuration_presenter.rb
index 8a6569e7bf3..e1e729d28e3 100644
--- a/app/presenters/projects/security/configuration_presenter.rb
+++ b/app/presenters/projects/security/configuration_presenter.rb
@@ -83,7 +83,8 @@ module Projects
configuration_path: scan.configuration_path,
available: scan.available?,
can_enable_by_merge_request: scan.can_enable_by_merge_request?,
- meta_info_path: scan.meta_info_path
+ meta_info_path: scan.meta_info_path,
+ on_demand_available: scan.on_demand_available?
}
end
diff --git a/app/services/service_desk_settings/update_service.rb b/app/services/service_desk_settings/update_service.rb
index 61cb6fce11f..182022beb1d 100644
--- a/app/services/service_desk_settings/update_service.rb
+++ b/app/services/service_desk_settings/update_service.rb
@@ -2,12 +2,19 @@
module ServiceDeskSettings
class UpdateService < BaseService
+ include ::ServiceDesk::CustomEmails::Logger
+
def execute
settings = ServiceDeskSetting.safe_find_or_create_by!(project_id: project.id)
params[:project_key] = nil if params[:project_key].blank?
+ # We want to know when custom email got enabled
+ write_log_message = params[:custom_email_enabled].present? && !settings.custom_email_enabled?
+
if settings.update(params)
+ log_info if write_log_message
+
ServiceResponse.success
else
ServiceResponse.error(message: settings.errors.full_messages.to_sentence)
diff --git a/app/validators/json_schemas/pinned_nav_items.json b/app/validators/json_schemas/pinned_nav_items.json
index 60dee5cc463..aaeb2fe8bda 100644
--- a/app/validators/json_schemas/pinned_nav_items.json
+++ b/app/validators/json_schemas/pinned_nav_items.json
@@ -16,6 +16,13 @@
"type": "string"
},
"uniqueItems": true
+ },
+ "organization": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "uniqueItems": true
}
},
"additionalProperties": false