From a6c51b887647aee631ed0144b3816fe696f2321d Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 11 Jan 2021 21:10:36 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/CODEOWNERS | 14 +++--- .../components/alert_mapping_builder.vue | 10 ++--- .../components/alerts_settings_form.vue | 2 +- .../javascripts/alerts_settings/index.js | 6 +-- .../blob_header_default_actions.vue | 2 +- .../components/design_destroyer.vue | 12 ++--- .../components/design_sidebar.vue | 16 +++---- .../components/design_todo_button.vue | 12 ++--- .../components/toolbar/index.vue | 16 +++---- .../design_management/pages/design/index.vue | 42 +++++++++--------- .../design_management/pages/index.vue | 8 ++-- .../configure_feature_flags_modal.vue | 14 +++--- .../components/environments_dropdown.vue | 2 +- .../components/feature_flags_tab.vue | 2 +- .../components/feature_flags_table.vue | 2 +- .../feature_flags/components/form.vue | 10 ++--- .../job_retry_forward_deployment_modal.vue | 10 ++--- .../components/text_editor.vue | 2 +- .../components/graph/action_component.vue | 3 ++ .../components/graph/graph_component.vue | 4 ++ .../graph/graph_component_legacy.vue | 4 ++ .../graph/graph_component_wrapper.vue | 3 ++ .../components/graph/job_group_dropdown.vue | 4 ++ .../pipelines/components/graph/job_item.vue | 4 ++ .../components/graph/linked_pipeline.vue | 4 ++ .../graph/linked_pipelines_column_legacy.vue | 4 ++ .../graph/stage_column_component.vue | 4 ++ .../graph/stage_column_component_legacy.vue | 4 ++ .../pipelines_list/pipeline_url.vue | 10 ++--- .../pipelines/pipeline_details_bundle.js | 7 +++ .../pipelines/pipeline_details_graph.js | 4 ++ app/views/admin/jobs/index.html.haml | 2 + app/views/shared/web_hooks/_hook.html.haml | 4 +- .../gitlab_performance_bar_stats_worker.rb | 3 +- ...jobs-admin-is-missing-CI-status-styles.yml | 5 +++ .../unreleased/yo-master-patch-63367.yml | 5 +++ .../Dangerfile | 20 ++++----- doc/api/notes.md | 2 + .../pipelines_for_merged_results/index.md | 2 +- .../img/job_artifacts_merge_request.png | Bin 0 -> 40817 bytes doc/ci/pipelines/index.md | 13 +----- doc/ci/pipelines/job_artifacts.md | 5 +++ doc/development/experiment_guide/index.md | 12 +++-- doc/user/analytics/ci_cd_analytics.md | 33 ++++++++++++++ .../img/deployment_frequency_chart_v13_8.png | Bin 0 -> 40919 bytes .../img/pipelines_duration_chart.png | Bin .../img/pipelines_success_chart.png | Bin doc/user/analytics/index.md | 2 +- doc/user/infrastructure/terraform_state.md | 2 +- .../redis_adapter_when_peek_enabled.rb | 22 +++++++-- lib/gitlab_danger.rb | 2 +- locale/gitlab.pot | 6 +++ .../redis_adapter_when_peek_enabled_spec.rb | 1 + .../debian/distribution_shared_examples.rb | 6 +-- ...itlab_performance_bar_stats_worker_spec.rb | 2 +- 55 files changed, 255 insertions(+), 135 deletions(-) create mode 100644 changelogs/unreleased/293803-fix-jobs-admin-is-missing-CI-status-styles.yml create mode 100644 changelogs/unreleased/yo-master-patch-63367.yml rename danger/{product_analytics => product_intelligence}/Dangerfile (50%) create mode 100644 doc/ci/pipelines/img/job_artifacts_merge_request.png create mode 100644 doc/user/analytics/ci_cd_analytics.md create mode 100644 doc/user/analytics/img/deployment_frequency_chart_v13_8.png rename doc/{ci/pipelines => user/analytics}/img/pipelines_duration_chart.png (100%) rename doc/{ci/pipelines => user/analytics}/img/pipelines_success_chart.png (100%) diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 70d9dbc9ad7..03f56d32df5 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -250,10 +250,10 @@ Dangerfile @gl-quality/eng-prod /ee/spec/lib/gitlab/code_owners/ @reprazent @kerrizor @garyh /doc/user/project/code_owners.md @reprazent @kerrizor @garyh -[Product Analytics] -/ee/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product_analytics/engineers -/ee/lib/ee/gitlab/usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/grafana_embed_usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/cycle_analytics/usage_data.rb @gitlab-org/growth/product_analytics/engineers -/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product_analytics/engineers +[Product Intelligence] +/ee/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product_intelligence/engineers +/ee/lib/ee/gitlab/usage_data.rb @gitlab-org/growth/product_intelligence/engineers +/lib/gitlab/grafana_embed_usage_data.rb @gitlab-org/growth/product_intelligence/engineers +/lib/gitlab/usage_data.rb @gitlab-org/growth/product_intelligence/engineers +/lib/gitlab/cycle_analytics/usage_data.rb @gitlab-org/growth/product_intelligence/engineers +/lib/gitlab/usage_data_counters/ @gitlab-org/growth/product_intelligence/engineers diff --git a/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue b/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue index 5400f6657a5..c52e9f5c264 100644 --- a/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue +++ b/app/assets/javascripts/alerts_settings/components/alert_mapping_builder.vue @@ -40,6 +40,11 @@ export default { directives: { GlTooltip, }, + inject: { + gitlabAlertFields: { + default: gitlabFieldsMock, + }, + }, props: { payloadFields: { type: Array, @@ -57,11 +62,6 @@ export default { gitlabFields: this.gitlabAlertFields, }; }, - inject: { - gitlabAlertFields: { - default: gitlabFieldsMock, - }, - }, computed: { mappingData() { return this.gitlabFields.map((gitlabField) => { diff --git a/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue b/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue index d183d95f359..1ae7f826ce6 100644 --- a/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue +++ b/app/assets/javascripts/alerts_settings/components/alerts_settings_form.vue @@ -117,6 +117,7 @@ export default { directives: { GlModal: GlModalDirective, }, + mixins: [glFeatureFlagsMixin()], inject: { generic: { default: {}, @@ -125,7 +126,6 @@ export default { default: {}, }, }, - mixins: [glFeatureFlagsMixin()], props: { loading: { type: Boolean, diff --git a/app/assets/javascripts/alerts_settings/index.js b/app/assets/javascripts/alerts_settings/index.js index cc939577717..85858956987 100644 --- a/app/assets/javascripts/alerts_settings/index.js +++ b/app/assets/javascripts/alerts_settings/index.js @@ -35,6 +35,9 @@ export default (el) => { return new Vue({ el, + components: { + AlertSettingsWrapper, + }, provide: { prometheus: { active: parseBoolean(prometheusActivated), @@ -56,9 +59,6 @@ export default (el) => { multiIntegrations: parseBoolean(multiIntegrations), }, apolloProvider, - components: { - AlertSettingsWrapper, - }, render(createElement) { return createElement('alert-settings-wrapper'); }, diff --git a/app/assets/javascripts/blob/components/blob_header_default_actions.vue b/app/assets/javascripts/blob/components/blob_header_default_actions.vue index cab37df68b4..b9f2c5b42e4 100644 --- a/app/assets/javascripts/blob/components/blob_header_default_actions.vue +++ b/app/assets/javascripts/blob/components/blob_header_default_actions.vue @@ -16,6 +16,7 @@ export default { directives: { GlTooltip: GlTooltipDirective, }, + inject: ['blobHash'], props: { rawPath: { type: String, @@ -32,7 +33,6 @@ export default { default: false, }, }, - inject: ['blobHash'], computed: { downloadUrl() { return `${this.rawPath}?inline=false`; diff --git a/app/assets/javascripts/design_management/components/design_destroyer.vue b/app/assets/javascripts/design_management/components/design_destroyer.vue index a231f6c5e3b..01f9cac456d 100644 --- a/app/assets/javascripts/design_management/components/design_destroyer.vue +++ b/app/assets/javascripts/design_management/components/design_destroyer.vue @@ -8,12 +8,6 @@ export default { components: { ApolloMutation, }, - props: { - filenames: { - type: Array, - required: true, - }, - }, inject: { projectPath: { default: '', @@ -23,6 +17,12 @@ export default { defaut: '', }, }, + props: { + filenames: { + type: Array, + required: true, + }, + }, computed: { projectQueryBody() { return { diff --git a/app/assets/javascripts/design_management/components/design_sidebar.vue b/app/assets/javascripts/design_management/components/design_sidebar.vue index 9f824179616..50b12fd739b 100644 --- a/app/assets/javascripts/design_management/components/design_sidebar.vue +++ b/app/assets/javascripts/design_management/components/design_sidebar.vue @@ -21,6 +21,14 @@ export default { DesignTodoButton, }, mixins: [glFeatureFlagsMixin()], + inject: { + projectPath: { + default: '', + }, + issueIid: { + default: '', + }, + }, props: { design: { type: Object, @@ -41,14 +49,6 @@ export default { discussionWithOpenForm: '', }; }, - inject: { - projectPath: { - default: '', - }, - issueIid: { - default: '', - }, - }, computed: { discussions() { return extractDiscussions(this.design.discussions); diff --git a/app/assets/javascripts/design_management/components/design_todo_button.vue b/app/assets/javascripts/design_management/components/design_todo_button.vue index 51c48bf26ee..db14db79989 100644 --- a/app/assets/javascripts/design_management/components/design_todo_button.vue +++ b/app/assets/javascripts/design_management/components/design_todo_button.vue @@ -13,12 +13,6 @@ export default { TodoButton, }, mixins: [allVersionsMixin], - props: { - design: { - type: Object, - required: true, - }, - }, inject: { projectPath: { default: '', @@ -27,6 +21,12 @@ export default { default: '', }, }, + props: { + design: { + type: Object, + required: true, + }, + }, data() { return { todoLoading: false, diff --git a/app/assets/javascripts/design_management/components/toolbar/index.vue b/app/assets/javascripts/design_management/components/toolbar/index.vue index dac8298d80b..3509a701984 100644 --- a/app/assets/javascripts/design_management/components/toolbar/index.vue +++ b/app/assets/javascripts/design_management/components/toolbar/index.vue @@ -18,6 +18,14 @@ export default { GlTooltip: GlTooltipDirective, }, mixins: [timeagoMixin], + inject: { + projectPath: { + default: '', + }, + issueIid: { + default: '', + }, + }, props: { id: { type: String, @@ -58,14 +66,6 @@ export default { }, }; }, - inject: { - projectPath: { - default: '', - }, - issueIid: { - default: '', - }, - }, apollo: { permissions: { query: permissionsQuery, diff --git a/app/assets/javascripts/design_management/pages/design/index.vue b/app/assets/javascripts/design_management/pages/design/index.vue index 4564e03a3e0..492ed2e8719 100644 --- a/app/assets/javascripts/design_management/pages/design/index.vue +++ b/app/assets/javascripts/design_management/pages/design/index.vue @@ -57,6 +57,27 @@ export default { DesignSidebar, }, mixins: [allVersionsMixin, glFeatureFlagsMixin()], + beforeRouteUpdate(to, from, next) { + // reset scale when the active design changes + this.scale = DEFAULT_SCALE; + next(); + }, + beforeRouteEnter(to, from, next) { + const pageEl = getPageLayoutElement(); + if (pageEl) { + pageEl.classList.add(...DESIGN_DETAIL_LAYOUT_CLASSLIST); + } + + next(); + }, + beforeRouteLeave(to, from, next) { + const pageEl = getPageLayoutElement(); + if (pageEl) { + pageEl.classList.remove(...DESIGN_DETAIL_LAYOUT_CLASSLIST); + } + + next(); + }, props: { id: { type: String, @@ -161,11 +182,6 @@ export default { beforeDestroy() { Mousetrap.unbind('esc', this.closeDesign); }, - beforeRouteUpdate(to, from, next) { - // reset scale when the active design changes - this.scale = DEFAULT_SCALE; - next(); - }, methods: { addImageDiffNoteToStore(store, { data: { createImageDiffNote } }) { updateStoreAfterAddImageDiffNote( @@ -296,22 +312,6 @@ export default { this.resolvedDiscussionsExpanded = !this.resolvedDiscussionsExpanded; }, }, - beforeRouteEnter(to, from, next) { - const pageEl = getPageLayoutElement(); - if (pageEl) { - pageEl.classList.add(...DESIGN_DETAIL_LAYOUT_CLASSLIST); - } - - next(); - }, - beforeRouteLeave(to, from, next) { - const pageEl = getPageLayoutElement(); - if (pageEl) { - pageEl.classList.remove(...DESIGN_DETAIL_LAYOUT_CLASSLIST); - } - - next(); - }, createImageDiffNoteMutation, DESIGNS_ROUTE_NAME, }; diff --git a/app/assets/javascripts/design_management/pages/index.vue b/app/assets/javascripts/design_management/pages/index.vue index fb05788a401..5c82a7331b6 100644 --- a/app/assets/javascripts/design_management/pages/index.vue +++ b/app/assets/javascripts/design_management/pages/index.vue @@ -72,6 +72,10 @@ export default { update: (data) => data.project.issue.userPermissions, }, }, + beforeRouteUpdate(to, from, next) { + this.selectedDesigns = []; + next(); + }, data() { return { permissions: { @@ -324,10 +328,6 @@ export default { this.reorderedDesigns = designs; }, }, - beforeRouteUpdate(to, from, next) { - this.selectedDesigns = []; - next(); - }, dragOptions: { animation: 200, ghostClass: 'gl-visibility-hidden', diff --git a/app/assets/javascripts/feature_flags/components/configure_feature_flags_modal.vue b/app/assets/javascripts/feature_flags/components/configure_feature_flags_modal.vue index 5953a4fbad8..5fcca11e695 100644 --- a/app/assets/javascripts/feature_flags/components/configure_feature_flags_modal.vue +++ b/app/assets/javascripts/feature_flags/components/configure_feature_flags_modal.vue @@ -31,6 +31,13 @@ export default { directives: { GlTooltip: GlTooltipDirective, }, + inject: [ + 'projectName', + 'featureFlagsHelpPagePath', + 'unleashApiUrl', + 'featureFlagsClientExampleHelpPagePath', + 'featureFlagsClientLibrariesHelpPagePath', + ], props: { instanceId: { @@ -55,13 +62,6 @@ export default { required: true, }, }, - inject: [ - 'projectName', - 'featureFlagsHelpPagePath', - 'unleashApiUrl', - 'featureFlagsClientExampleHelpPagePath', - 'featureFlagsClientLibrariesHelpPagePath', - ], translations: { cancelActionLabel: __('Close'), modalTitle: s__('FeatureFlags|Configure feature flags'), diff --git a/app/assets/javascripts/feature_flags/components/environments_dropdown.vue b/app/assets/javascripts/feature_flags/components/environments_dropdown.vue index 91dc966c876..88f1e692f5f 100644 --- a/app/assets/javascripts/feature_flags/components/environments_dropdown.vue +++ b/app/assets/javascripts/feature_flags/components/environments_dropdown.vue @@ -31,6 +31,7 @@ export default { GlButton, GlSearchBoxByType, }, + inject: ['environmentsEndpoint'], props: { value: { type: String, @@ -53,7 +54,6 @@ export default { required: false, }, }, - inject: ['environmentsEndpoint'], data() { return { environmentSearch: this.value, diff --git a/app/assets/javascripts/feature_flags/components/feature_flags_tab.vue b/app/assets/javascripts/feature_flags/components/feature_flags_tab.vue index 0539b5ff832..24b0b54d1be 100644 --- a/app/assets/javascripts/feature_flags/components/feature_flags_tab.vue +++ b/app/assets/javascripts/feature_flags/components/feature_flags_tab.vue @@ -3,6 +3,7 @@ import { GlAlert, GlBadge, GlEmptyState, GlLink, GlLoadingIcon, GlTab } from '@g export default { components: { GlAlert, GlBadge, GlEmptyState, GlLink, GlLoadingIcon, GlTab }, + inject: ['errorStateSvgPath', 'featureFlagsHelpPagePath'], props: { title: { required: true, @@ -46,7 +47,6 @@ export default { type: String, }, }, - inject: ['errorStateSvgPath', 'featureFlagsHelpPagePath'], computed: { itemCount() { return this.count ?? 0; 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 74d1610879f..f3b199b5aca 100644 --- a/app/assets/javascripts/feature_flags/components/feature_flags_table.vue +++ b/app/assets/javascripts/feature_flags/components/feature_flags_table.vue @@ -17,13 +17,13 @@ export default { GlTooltip: GlTooltipDirective, }, mixins: [glFeatureFlagMixin()], + inject: ['csrfToken'], props: { featureFlags: { type: Array, required: true, }, }, - inject: ['csrfToken'], data() { return { deleteFeatureFlagUrl: null, diff --git a/app/assets/javascripts/feature_flags/components/form.vue b/app/assets/javascripts/feature_flags/components/form.vue index 918632ce28f..253661ece1f 100644 --- a/app/assets/javascripts/feature_flags/components/form.vue +++ b/app/assets/javascripts/feature_flags/components/form.vue @@ -46,6 +46,11 @@ export default { GlTooltip: GlTooltipDirective, }, mixins: [featureFlagsMixin()], + inject: { + featureFlagIssuesEndpoint: { + default: '', + }, + }, props: { active: { type: Boolean, @@ -86,11 +91,6 @@ export default { default: LEGACY_FLAG, }, }, - inject: { - featureFlagIssuesEndpoint: { - default: '', - }, - }, translations: { allEnvironmentsText: s__('FeatureFlags|* (All Environments)'), diff --git a/app/assets/javascripts/jobs/components/job_retry_forward_deployment_modal.vue b/app/assets/javascripts/jobs/components/job_retry_forward_deployment_modal.vue index 5ce9d08035d..e83ed6c6332 100644 --- a/app/assets/javascripts/jobs/components/job_retry_forward_deployment_modal.vue +++ b/app/assets/javascripts/jobs/components/job_retry_forward_deployment_modal.vue @@ -11,6 +11,11 @@ export default { i18n: { ...JOB_RETRY_FORWARD_DEPLOYMENT_MODAL, }, + inject: { + retryOutdatedJobDocsUrl: { + default: '', + }, + }, props: { modalId: { type: String, @@ -21,11 +26,6 @@ export default { required: true, }, }, - inject: { - retryOutdatedJobDocsUrl: { - default: '', - }, - }, data() { return { primaryProps: { diff --git a/app/assets/javascripts/pipeline_editor/components/text_editor.vue b/app/assets/javascripts/pipeline_editor/components/text_editor.vue index 6ef0ef591d8..fae08ca89f4 100644 --- a/app/assets/javascripts/pipeline_editor/components/text_editor.vue +++ b/app/assets/javascripts/pipeline_editor/components/text_editor.vue @@ -6,8 +6,8 @@ export default { components: { EditorLite, }, - inheritAttrs: false, inject: ['projectPath', 'projectNamespace'], + inheritAttrs: false, props: { ciConfigPath: { type: String, diff --git a/app/assets/javascripts/pipelines/components/graph/action_component.vue b/app/assets/javascripts/pipelines/components/graph/action_component.vue index 542fc6305d4..0ce94d4f02f 100644 --- a/app/assets/javascripts/pipelines/components/graph/action_component.vue +++ b/app/assets/javascripts/pipelines/components/graph/action_component.vue @@ -51,6 +51,9 @@ export default { return `${actionIconDash} js-icon-${actionIconDash}`; }, }, + errorCaptured(err, _vm, info) { + reportToSentry('action_component', `error: ${err}, info: ${info}`); + }, methods: { /** * The request should not be handled here. diff --git a/app/assets/javascripts/pipelines/components/graph/graph_component.vue b/app/assets/javascripts/pipelines/components/graph/graph_component.vue index 67b2ed3b596..5958d198be2 100644 --- a/app/assets/javascripts/pipelines/components/graph/graph_component.vue +++ b/app/assets/javascripts/pipelines/components/graph/graph_component.vue @@ -3,6 +3,7 @@ import LinkedGraphWrapper from '../graph_shared/linked_graph_wrapper.vue'; import LinkedPipelinesColumn from './linked_pipelines_column.vue'; import StageColumnComponent from './stage_column_component.vue'; import { DOWNSTREAM, MAIN, UPSTREAM } from './constants'; +import { reportToSentry } from './utils'; export default { name: 'PipelineGraph', @@ -68,6 +69,9 @@ export default { return this.hasUpstreamPipelines ? this.pipeline.upstream : []; }, }, + errorCaptured(err, _vm, info) { + reportToSentry(this.$options.name, `error: ${err}, info: ${info}`); + }, methods: { setJob(jobName) { this.hoveredJobName = jobName; diff --git a/app/assets/javascripts/pipelines/components/graph/graph_component_legacy.vue b/app/assets/javascripts/pipelines/components/graph/graph_component_legacy.vue index 20a04728bbe..2164dbf4d55 100644 --- a/app/assets/javascripts/pipelines/components/graph/graph_component_legacy.vue +++ b/app/assets/javascripts/pipelines/components/graph/graph_component_legacy.vue @@ -5,6 +5,7 @@ import StageColumnComponentLegacy from './stage_column_component_legacy.vue'; import LinkedPipelinesColumnLegacy from './linked_pipelines_column_legacy.vue'; import GraphBundleMixin from '../../mixins/graph_pipeline_bundle_mixin'; import { UPSTREAM, DOWNSTREAM, MAIN } from './constants'; +import { reportToSentry } from './utils'; export default { name: 'PipelineGraphLegacy', @@ -94,6 +95,9 @@ export default { return this.pipeline.project.id; }, }, + errorCaptured(err, _vm, info) { + reportToSentry(this.$options.name, `error: ${err}, info: ${info}`); + }, methods: { capitalizeStageName(name) { const escapedName = escape(name); diff --git a/app/assets/javascripts/pipelines/components/graph/graph_component_wrapper.vue b/app/assets/javascripts/pipelines/components/graph/graph_component_wrapper.vue index 534f0e9691f..f440903d8f2 100644 --- a/app/assets/javascripts/pipelines/components/graph/graph_component_wrapper.vue +++ b/app/assets/javascripts/pipelines/components/graph/graph_component_wrapper.vue @@ -76,6 +76,9 @@ export default { mounted() { toggleQueryPollingByVisibility(this.$apollo.queries.pipeline); }, + errorCaptured(err, _vm, info) { + reportToSentry(this.$options.name, `error: ${err}, info: ${info}`); + }, methods: { hideAlert() { this.showAlert = false; diff --git a/app/assets/javascripts/pipelines/components/graph/job_group_dropdown.vue b/app/assets/javascripts/pipelines/components/graph/job_group_dropdown.vue index 203d6a12edd..b6e756ceaba 100644 --- a/app/assets/javascripts/pipelines/components/graph/job_group_dropdown.vue +++ b/app/assets/javascripts/pipelines/components/graph/job_group_dropdown.vue @@ -2,6 +2,7 @@ import { GlTooltipDirective } from '@gitlab/ui'; import CiIcon from '~/vue_shared/components/ci_icon.vue'; import JobItem from './job_item.vue'; +import { reportToSentry } from './utils'; /** * Renders the dropdown for the pipeline graph. @@ -29,6 +30,9 @@ export default { return `${name} - ${status.label}`; }, }, + errorCaptured(err, _vm, info) { + reportToSentry('job_group_dropdown', `error: ${err}, info: ${info}`); + }, methods: { pipelineActionRequestComplete() { this.$emit('pipelineActionRequestComplete'); diff --git a/app/assets/javascripts/pipelines/components/graph/job_item.vue b/app/assets/javascripts/pipelines/components/graph/job_item.vue index 2d3cac88eab..4f414cbb31f 100644 --- a/app/assets/javascripts/pipelines/components/graph/job_item.vue +++ b/app/assets/javascripts/pipelines/components/graph/job_item.vue @@ -6,6 +6,7 @@ import { sprintf } from '~/locale'; import delayedJobMixin from '~/jobs/mixins/delayed_job_mixin'; import { accessValue } from './accessors'; import { REST } from './constants'; +import { reportToSentry } from './utils'; /** * Renders the badge for the pipeline graph and the job's dropdown. @@ -130,6 +131,9 @@ export default { : this.cssClassJobName; }, }, + errorCaptured(err, _vm, info) { + reportToSentry('job_item', `error: ${err}, info: ${info}`); + }, methods: { hideTooltips() { this.$root.$emit('bv::hide::tooltip'); diff --git a/app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue b/app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue index 1a179de64cd..c80e1712e31 100644 --- a/app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue +++ b/app/assets/javascripts/pipelines/components/graph/linked_pipeline.vue @@ -4,6 +4,7 @@ import CiStatus from '~/vue_shared/components/ci_icon.vue'; import { __, sprintf } from '~/locale'; import { accessValue } from './accessors'; import { DOWNSTREAM, REST, UPSTREAM } from './constants'; +import { reportToSentry } from './utils'; export default { directives: { @@ -114,6 +115,9 @@ export default { return this.isUpstream ? 'gl-left-0 gl-border-r-1!' : 'gl-right-0 gl-border-l-1!'; }, }, + errorCaptured(err, _vm, info) { + reportToSentry('linked_pipeline', `error: ${err}, info: ${info}`); + }, methods: { onClickLinkedPipeline() { this.hideTooltips(); diff --git a/app/assets/javascripts/pipelines/components/graph/linked_pipelines_column_legacy.vue b/app/assets/javascripts/pipelines/components/graph/linked_pipelines_column_legacy.vue index 7d371b33220..2f1390e07d1 100644 --- a/app/assets/javascripts/pipelines/components/graph/linked_pipelines_column_legacy.vue +++ b/app/assets/javascripts/pipelines/components/graph/linked_pipelines_column_legacy.vue @@ -1,6 +1,7 @@